はじめに
- 社内で10年前から稼働している、とあるシステム(Etudeと呼ぶ)の負荷状況について、これまで可視化されていなかったため、負荷の傾向を「なんとなく」でしか把握できない問題があった
- この度、非力なマシンでもわりとサクサク動かせることを目指し、軽量であると思われた表記スタックを使って可視化してみたので、そのノウハウを記録する
構築環境
動かすマシンのスペック
- CPU : Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
- Memory : 4GB
- OS : CentOS 7.4
※安い仮想サーバなので、メモリがショボい。
各バージョン
- grafana : 6.7.0
- influxdb : 1.7.10
- telegraf : 1.13.4
構成図
構成の簡単な説明
- Etudeからのメトリクスデータ取得は、CentOSから定期的(Cron)にexpectのシェルスクリプトで行い、HDDにテキストで吐き出し続ける
- telegrafは、HDDの所定の場所に吐き出されたテキストをtailし続け、influxdbに送る
- grafanaはinfluxdbを参照する
解説
telegraf
- インストールは非常に楽。公式HPの通り、yumによるインストール手順を実行するのみ。
- configファイルは、自動的に
/etc/telegraf/telegraf.conf
に格納される - デーモンスタートも楽。
sudo systemctl start telegraf
のみ。
ポイント
- 初期Configは、稼働しているマシンのメトリクスを取得する設定が既に有効になっているため、必要最小限で1から作り直す必要がある。以下のコマンドで、必要最小限の設定項目に絞った初期Configが出力される
- 今回は、Inputはtail, Outputはinfluxdbとするので、以下となる。
$ telegraf -sample-config -input-filter tail -output-filter influxdb
Outputフィルタ
- influxdbとのセット利用が前提で作られてるからか、ほぼデフォルトのままで利用できる。
- 設定したのは、サーバのアドレスとデータベース名のみ
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "etude"
Inputフィルタ
- tailのInputフィルタでは、読み取るファイルの場所と、データのフォーマットを記載するのみ。
[[inputs.tail]]
files = ["/var/log/etude/*.log"]
data_format = "influx"
- 対応しているフォーマットは、csvなどいくつかあるが、influxdb形式が一番簡単そうだったので、それに合わせることにした。
- https://docs.influxdata.com/influxdb/v1.7/write_protocols/line_protocol_tutorial/
- 実際のテキストファイルの出力を参考に掲載する
asa_osaka01 session=67
asa_osaka01 session=68
asa_osaka01 session=67
- この結果がどのように influxdb に格納されるか、というと以下のようになる。
- asa_tama01というmeasurement(RDBでいうテーブル)の、sessionというカラムに、influxdbに飛ばされた時刻のタイムスタンプとその値が格納されていることがわかる。
$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.10
InfluxDB shell version: 1.7.10
> use etude
Using database etude
> select session from asa_osaka01
2020-04-05T15:10:02.57942373Z 67
2020-04-05T15:15:02.738080818Z 68
2020-04-05T15:20:02.87961773Z 67
influxdb
- influxdbはインストールしてデーモンを起動したのみ。DBへのログインに認証をつけるのもメンドくさかったので、ホントに初期状態のConfigを利用。
sudo systemctl start influxdb
grafana
- grafanaもインストールしてデーモンを起動したのみ。
- influxdbの参照設定からダッシュボード作成まで、ブラウザ上で設定するのみ。
こんな感じで可視化できた
- ノードごとに自動でいい具合で色付けをしてくれるから、ダッシュボード作る側は楽なのに、とても見栄えがいいものができた
終わりに
- 可視化をし、負荷の傾向が見られるようになったことで、これまで気づかなかったシステムの品質の悪さなども明らかになった。(突然プロセスが再起動してセッションが切れてたり、だとか)
- 改めて可視化の大切さに気付かされた。
- influxdbでは、CQ(Continuous Query)といったDB内部で定期実行して値をサマッたりする機能があり、例えば直近10個の平均のみを記録するmeasurement(テーブル)も作れたりと、色々奥が深いので、機会があったらまたやってみようと思った。
以上