【一目惚れ】Prometheus + Grafanaを用いたサーバ監視 part.1

IT

こんにちは

梶松でっす。

 

皆様、PCのステータスを確認したい時ってありませんか?

例えば、メモリ使用量だったりCPUの使用履歴だったりだとか。。。

一応windowsだとタスクマネージャー、Linuxだとシステムモニター(Ubuntu)で確認できます。

でも、やっぱり普通に確認するのもアレですよね。

どうせ確認するならオシャレに確認したいですよね。

 

そうです。

そんな時に登場するのが

「grafana」

なんです。

このgrafanaとは、ブラウザ上でデータを時系列に綺麗に表示してくれるものです。

僕も実際に使って確認してみたのですが、UIのオシャレさに感動しました。

 

というわけで、本日はgrafanaを導入したところから、はまったところ、またその対処法を描いていきたいとおモイます。

ちなみに今回はちょうど手元にあった、raspberrypi3 model Bに導入してみました。

このgrafanaなのですが、動きの仕組みとして3つの動作があります。

  • データをかき集める
  • データを蓄える
  • データを綺麗に表示する ← grafana

今回データをかき集めるのには「node-exporter」を、データを蓄えるのには「prometheus」を使いました。

 

なので、実際にセットアップが必要なものとしては以下の3つがあります。

  • grafana
  • prometheus
  • node-exporter

 

とりあえず上から順番にインストールをしていこうと思います。

 

が、、、、ここで問題が。

僕は一通り全てをapt-getでポンポン、インストールしてました。

ただapt-getでインストールをしてしまうと、結構古いバージョンのものがインストールされてしまいます。

僕がapt-getを使ってインストールした時はgrafanaが2.6.xが入ってました。(ちなみに最新は6.1.x)

 

で、このまま作業をすすめてしまうとgrafanaがうまく動きませんでした!!!

→grafanaを動かしてアクセスしてもページが真っ白になってしまうという事態に陥りました。

 

な・の・で、

おとなしくapt-getを使用するのは諦めて、それぞれ.debを落としてきてインストールしていきます。(node-exporterはprometheusと同じページからDLできます)

grafanaはこちら

prometheusはこちら

node-exporterはこちら

 

 

では、grafanaは.debを用いてインストールしていくのですが、

ここで梶松おすすめのコマンドをご紹介していきます。

私がおすすめするのはこちら!

「gdebi」

こちらはdebian系じゃないと使えないのですが、意外と便利なコマンドで

たまに.debをインストールする時とか「依存関係が〜・・・」って表示される事ないですか???

このgdebi君は、インストール刷る時に依存関係も全部まとめてやっちゃってくれるコマンドなのです。 私はインストールスル時はこれを使ってます。

 

 

さて、話は元に戻ります。

とりあえずgrafanaはインストールできたと思います。

次はprometheusとnode-exporterですね。

こちらは、/opt に置いときましょう。で、解凍までしておきます。

梶松は”tar zxvf hogehoge”で解凍してます。

解凍した後は

/opt で以下のようにシンボリックリンクを貼っておきましょう。これをするとのちのちの設定を書く時に楽になります。

ln -s prometheus_hogehoge prometheus

ln -s node_exporter-hogehoge node-exporter

 

ここまで来たら、次はserviceの設定です。

/etc/systemd/system/にprometheus.serviceを作っていきます!

中身はこんな感じです。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[Unit]
Description=Prometheus Monitoring framework
Wants=basic.target
After=basic.target network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus \
–config.file=/opt/prometheus/prometheus.yml \
–storage.tsdb.path=/var/spool/prometheus/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
RestartSec=42s

[Install]
WantedBy=multi-user.target

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

中身で注意したい点は2点ですね。

この中の書き方は調べればいろいろ出てくると思うのですが、

” –config.file”の箇所はハイフン一つで書いてあるサイトさんとかもあると思うのですが、ハイフンは2つじゃないと実際にサービス動かした時にエラーが出まくります(笑) このエラーに関してはもしかしたらバージョンとかにも左右されるのかも??(未確認) これは、たぶん書く手側がハイフンを2つ入れていても表示する際にハイフン一つになっているパターンかもしれませんね。。。 この記事を書いている時もプレビューで確認した際に、ハイフンを2つ入れてるのに、ハイフンが一つしか表示されない現象が。まぁ、これは一旦置いときます。

 

もう一つは–storage.tsdb.pathの部分ですね。これでデータの保存場所を指定しているのですが、–storage.local.pathって書かれてるところがあるのですが、これだとエラーが出て、これまたサービスを動かした時にめんどくさい事になるので気をつけましょう。 私、梶松はこれに少し手を焼きました Orz

 

※ “–config.file”と”–storage.tsdb.path”は表示上はハイフン1つになってますが、実際はハイフン2つです。

 

ではでは、設定が終わったら反映させましょう。

1.systemctl daemon-reload

2.systemctl start prometheus.service

3.systemctl enable prometheus.service

1のコマンドで/etc/systemd/system/に置いたprometheus.serviceを読み込んでるみたいですね。ちなみにヘルプを見たら以下のように書いてました。

Manager Lifecycle Commands:
daemon-reload    Reload systemd manager configuration

次に2のコマンドでサービススタートさせて、3のコマンドで、、、

そうです。コマンドそのまんまの意味ですね。有効化してるだけです。

これでprometheusに関しては準備万端ですね!(たぶん)

 

もう一つ気をつけたいところがあります。それは

/etc/default/prometheus-node-exporterの設定です。

今回僕はraspberrypiに入れて動かしたりしたのですが、他のdistributionと違って若干ディレクトリのtreeが違うみたいで存在しないディレクトリを読み込もうとして、これまたエラーを吐かれてしまう事になります。

なので /etc/defaut/prometheus-node-exporterの設定を以下のようにしました。

ARGS=”-collector.diskstats.ignored-devices=^(ram|loop|fd)\d+$ \
-collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/) \
-collector.textfile.directory=/var/lib/prometheus/node-exporter \
-collectors.enabled conntrack,diskstats,entropy,filefd,filesystem, \
interrupts,loadavg,logind,mdadm,meminfo,meminfo_numa, \
netdev,netstat,sockstat,sockstat,stat,systemd,tcpstat, \
textfile,time,uname,vmstat”

 

どうやら、”-collector.enabled”で、値を取得するもの(メモリやらCPUの使用率やら)を選択しているようです。

標準では”hwmon”が入っているのですが、raspberrypiでは、これを読み込みに行っている場所には、読み込むはずのディレクトリが無いために、エラーを履いてたので、除外しています。

この辺の設定を変えた後はサービスを再起動します。

service prometheus-node-exporter restart

これで、データをうまくとってこれるはず・・・です。。。

 

で、サービス起動した後は早速アクセスして確認したいところなのですが、ちょっと記事が長くなりすぎているので、今回はこの辺で。すぐに続編を更新しますので、続きはそちらに書きます。

最後まで読んで頂きありがとうございました!

IT
全部めんどいけんAnsibleで自動化しよ?❤️

みなさま、こんばんわ。梶松です。 タスクに追われ、更新が不定期ですが、梶松は元気です。 最近は7pa …

IT
[楽しようぜ!] pythonでsambaへアクセス!

こんにちは。 梶松です。 今回はpysmbについて書きます。 最近思ってしまったわけです。 samb …