サーバーリソースのメトリクスやログの収集・保存・可視化・アラートを行うためにTIG Stack (Telegraf, InfluxDB, Grafana) を使って一通り設定してみました。
一応、以前にも記事は書いていますが、
ちょっと情報が古くなっていたので、アップデートし、さらに出来る限り設定を自動化しました。
予備知識
時系列とは何ぞや? TICK スタックとは何ぞや?みたいな話が以下に載ってました。
- https://www.influxdata.com/blog/influxdb-the-platform-for-time-series-data/
- https://www.influxdata.com/blog/introduction-to-influxdatas-influxdb-and-tick-stack/
- https://medium.com/yavar/influxdb-tick-stack-part1-28bd04d10a18
- https://www.influxdata.com/integration/syslog/
環境
TIG Stack は全て Docker で動かします。
- Ubuntu 20.04
- Docker 20.10.12
- Telegraf 1.23.0
- InfluxDB 1.8.10
- Grafana 9.1.0
各ツールの役割
| ツール | 役割 | Docker イメージ |
|---|---|---|
| Telegraf | データの収集 | https://hub.docker.com/_/telegraf |
| InfluxDB | データの保存(時系列データベース) | https://hub.docker.com/_/influxdb |
| Grafana | データの可視化(UI) | https://hub.docker.com/r/grafana/grafana/ |
上記の Docker hub のページに各ツールの起動方法や設定方法などが一通り載っているので、それを参考に設定していきます。
Telegraf の設定
まずは設定ファイルの雛型(デフォルトの設定ファイル)を取得します。
Telegraf の Docker コンテナを起動し、コンテナ内から設定ファイルをホストにコピーしてきます。
$ docker run --rm telegraf telegraf config > telegraf.conf
この telegraf.conf を取得したいデータに応じて編集します。
これについてはいろいろあるので、別記事にまとめました。
docker-compose.yml
設定ファイルが必要なのは Telegraf だけなので、ここで TIG Stack を起動する docker-compose.yml のサンプルを載せます。
前提として、tigstack というネットワークを共通に使用しているので、以下のコマンドであらかじめ作成しておく必要があります。
$ docker network create tigstack
以下、docker-compose.yml のサンプルです。解説などは後述します。
Telegraf について
GPU の情報取得について
NVIDIA の GPU の情報を取得するために以下を指定しています。
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
volumes:
- /usr/bin/nvidia-smi:/usr/bin/nvidia-smi:ro
これについては以下の記事を参照してください。
/usr/bin/nvidia-smi のパスは環境によっては異なるかもしれません。
Docker の情報取得について
Docker の情報を取得するためには /var/run/docker.sock をマウントする必要があります。
さらに Telegraf の実行ユーザーが docker.sock にアクセスできるように、user を設定する必要があります。
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
user: ${TELEGRAF_UID_GID:?}
これについては以下の記事を参照してください。
ホスト名の指定
Telegraf がメトリクスを InfluxDB に記録する際、ホスト名も記録されますが、Docker コンテナのホスト名はデフォルトだとランダムな値となり、このままでよくわからないので、設定します。
ここではホストマシンと同じホスト名を指定しました。
hostname: ${HOSTNAME:?}
これについては以下の記事を参照してください。
InfluxDB について
初回起動時にデフォルトのリテンションポリシーを設定するために以下を指定しています。
environment:
DOCKER_INFLUXDB_INIT_MODE: setup
DOCKER_INFLUXDB_INIT_RETENTION: 10d