Grafana + MySQL を使ってCPUとメモリを可視化

  はじめに

勤めている会社でサーバーの情報を 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 を押すことで編集できます。

image

Metrics, Axes をこんな感じに編集

image

image

そうするとこんな感じで観れると思います!

image

web サーバーを動かした状態で CPU とかメモリとかみて見ると非常に楽しいと思います!

シェルスクリプトをいじれば HDD の使用量やネットワークなども見れるようになると思います。

ぜひ試してみてください!