Grafana を使ってサーバメモリ使用率、CPU使用率を可視化する
top コマンドや free コマンドなどで確認していたサーバ負荷状況をグラフィカルに見やすできないのかと思い調べたところ、Grafana という可視化ツールがあったので試してみました。
Grafana とは
- インフラや、アプリケーションの分析データなど時系列データを可視化するためのダッシュボードツール
- デフォルトで複数のデータストアをサポートしている
- Graphite
- Elasticsearch
- Cloudwatch
- Prometheus
- InfluxDB
今回は InfluxDB を利用しました。
構成
- 負荷状況を送信するサーバ(CentOS 6.7)
- Grafana, InfluxDB サーバ(CentOS 6.7)
- 本来は Grafana と InfluxDB は別サーバにすべきだと思いますが、お試しのため同居させています。
- 負荷情報を確認したいサーバの CPU, メモリ情報を InfluxDB に送信
- InfluxDB は CPU, メモリ情報を DB に格納
- ブラウザから Grafana ダッシュボードにアクセス
- Grafana はダッシュボードを表示するために必要な情報を InfluxDB から取得し、ダッシュボードを表示する
インストール手順
Grafana のインストール
http://docs.grafana.org/installation/rpm/ を参考に Grafana をインストール
# Grafana のインストール $ sudo yum install https://grafanarel.s3.amazonaws.com/builds/grafana-4.0.2-1481203731.x86_64.rpm # Grafana を起動 $ sudo service grafana-server start
http://192.168.33.10:3000/login にブラウザからアクセスし、Grafana のログイン画面が開くことを確認
InfluxDB のインストール
https://www.influxdata.com/downloads/ に記載されている「RedHat & CentOS」のとおり実施
# influxDB をダウンロード $ wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.1.x86_64.rpm # インストール $ sudo yum localinstall -y influxdb-1.1.1.x86_64.rpm # InfluxDB 起動 $ sudo service influxdb start
InfluxDB データベースの作成
https://docs.influxdata.com/influxdb/v1.1/introduction/getting_started/ を参考にデータベースを作成します。
$ influx Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring. Connected to http://localhost:8086 version 1.1.1 InfluxDB shell version: 1.1.1 > CREATE DATABASE grafana # DB が作成されているか確認 > SHOW DATABASES name: databases name ---- _internal grafana
Grafana のセットアップ
Grafana の管理画面から利用するデータストアや、ダッシュボードの設定します。
- http://192.168.33.10:3000/login にブラウザからアクセス(admin/admin でログイン)
左上 Grafana アイコンクリック → 「Data Sources」 をクリック
「Add Data Source」をクリック
InfluxDB の情報を入力、「Add」をクリック
負荷情報の取得方法
InfluxDB へのデータアクセス方法は、複数サポートしています。
今回は負荷情報を確認したいサーバから InfluxDB の HTTP API を利用して負荷情報を送信します。
CLI
https://docs.influxdata.com/influxdb/v1.1/tools/shell/
$ influx -execute 'SELECT * FROM "h2o_feet" LIMIT 3' -database="NOAA_water_database" -precision=rfc3339 name: h2o_feet -------------- time level description location water_level 2015-08-18T00:00:00Z below 3 feet santa_monica 2.064 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12 2015-08-18T00:06:00Z between 6 and 9 feet coyote_creek 8.005
HTTP API
https://docs.influxdata.com/influxdb/v1.1/tools/api/
$ curl -i -XPOST "http://localhost:8086/write?db=mydb&precision=s" --data-binary 'mymeas,mytag=1 myfield=90 1463683075'
クライアントライブラリ
https://docs.influxdata.com/influxdb/v1.1/tools/api_client_libraries/
実際に利用したコマンドは以下のとおり
メモリの使用率を取得するスクリプト
while true; do curl -i -s -XPOST 'http://192.168.33.10:8086/write?db=grafana' --data-binary "memory,host=serverA,region=jp_east value=`free -t | grep Total | sed 's/[\t ]\+/\t/g' | cut -f3`" sleep 5 done
CPU の使用率を取得するスクリプト
while true; do idle=`mpstat | tail -n 1 | sed 's/[\t ]\+/\t/g' | cut -f11` rate_of_cpu=`echo "100-${idle}" | bc` curl -i -s -XPOST 'http://192.168.33.10:8086/write?db=grafana' --data-binary "cup,host=serverA,region=jp_east value=${rate_of_cpu}" sleep 5 done
まとめ
ダッシュボードを作成し、以下のような値が取得できるようになりました。
過去のデータも確認することができますし、毎回サーバにログインする手間もなくなるので楽になりそうですね。
本番で運用するためには Grafana の admin ユーザのパスワード変更や、InfluxDB の パスワード設定などセキュリティの設定をする必要があります。(今回は Vagrant 上にお試しで作ったのでセキュリティ部分に関しては設定していません)