TIG Stack を動かしてみる

サーバーリソースのメトリクスやログの収集・保存・可視化・アラートを行うためにTIG Stack (Telegraf, InfluxDB, Grafana) を使って一通り設定してみました。

一応、以前にも記事は書いていますが、

ちょっと情報が古くなっていたので、アップデートし、さらに出来る限り設定を自動化しました。

予備知識

時系列とは何ぞや? TICK スタックとは何ぞや?みたいな話が以下に載ってました。

環境

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
Hugo で構築されています。
テーマ StackJimmy によって設計されています。