はじめに
勤めている会社でサーバーの情報を Grafana で可視化していたので真似してみました。
というわけで以前立てた NUC の自宅サーバーの CPU とかメモリの使用量を Grafana で見れるようにするところまでやっていきたいと思います。
Grafana のインストール
公式サイトにあるのでそれの通りにインストールします。安定板を選びました。
$ sudo sh -c "echo 'deb https://packagecloud.io/grafana/stable/debian/ stretch main' >> /etc/apt/sources.list"
$ curl https://packagecloud.io/gpd.key | sudo apt-key add -
$ sudo apt update
$ sudo apt install grafana
MySQL を準備
あらかじめ MySQL をインストールしておいてください。
ない場合は
$ sudo apt install mysql-server
でインストールしてください。
ログインしてユーザーを作成します。ここではユーザー名は grafana にしました。
$ sudo mysql -uroot -p
パスワード入力
MariaDB [(none)]> CREATE USER grafana IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON grafana.* TO grafana;
テーブルを作成します。最低限 time_sec(Unix)と metric の要素が必要です。
一つのテーブルにまとめて、grafana で使う際に列名を time_sec, metric, value にすれば大丈夫みたいです。
MariaDB [(none)]> USE grafana;
MariaDB [(none)]> CREATE TABLE cpu (time_sec INT PRIMARY KEY,metric VARCHAR(256),value FLOAT);
MariaDB [(none)]> CREATE TABLE memory (time_sec INT PRIMARY KEY,metric VARCHAR(256),value FLOAT);
cron とシェルスクリプトで MySQL にデータを挿入
シェルスクリプトを用意して、それを cron に登録します。
mpstat と bc コマンドをあらかじめインストールしておいてください。
$ su -
password
# vim hardware_update.sh
hardware_update.sh
を作成して vim
で編集します。
#!/bin/sh
cpu_idle=`mpstat | tail -n 1 | sed 's/[\t ]\+/\t/g' | cut -f13`
cpu_per=`echo "scale=2;(100.00-${cpu_idle})/100" | bc`
mem_total=`free | grep Mem | sed 's/[\t ]\+/\t/g' | cut -f2`
mem_used=`free | grep Mem | sed 's/[\t ]\+/\t/g' | cut -f3`
mem_per=`echo "scale=2;${mem_used}/${mem_total}" | bc`
eval `mysql -ugrafana -pgrafana -e "use grafana;insert into memory values(UNIX_TIMESTAMP(), 'memory', ${mem_per});"`
eval `mysql -ugrafana -pgrafana -e "use grafana;insert into cpu values(UNIX_TIMESTAMP(), 'cpu', ${cpu_per});"`
crontab に登録します
# crontab -e
下記を cron に追加して 毎分実行するようにします。
* * * * * /root/hardware_update.sh > /dev/null 2>&1
grafana で見れるようにする
ブラウザでサーバーにアクセスします。
http://[ServerIP]:3000
サーバーにアクセスし、ログイン、その後 Data Source に MySQL を追加します。
ポートは変更していない場合デフォルトでお k。
ダッシュボードからグラフを追加します。
グラフが出てきたら、文字の部分をクリックし、Edit を押すことで編集できます。
Metrics, Axes をこんな感じに編集
そうするとこんな感じで観れると思います!
web サーバーを動かした状態で CPU とかメモリとかみて見ると非常に楽しいと思います!
シェルスクリプトをいじれば HDD の使用量やネットワークなども見れるようになると思います。
ぜひ試してみてください!