CPUやメモリなどのリソースを収集して閲覧したいなと思い、ググってみるとこの組み合わせが良さそうでした。
Telegraf でデータを取得して InfluxDB に書き込み、Grafana で InfluxDB のデータを読み込んで可視化します。
個人的に InfluxDB と Grafana は使ったことありますが、Telegraf は今回初めて使いました。
尚、この3つの頭文字を取って TIG Stack と呼んでいるページもいくつか見かけました。
環境
- Ubuntu 20.04
- Docker 20.10.7
- Telegraf 1.20.4
- InfluxDB 1.8.6
- Grafana 7.5.7
Telegraf と Grafana は現時点の最新のバージョンですが、InfluxDB は 2.0 系ではなく 1.8.6 を使いました。
InfluxDB 2.0 を使ったことがないのと、参考にした Telegraf の設定ファイルのサンプルが InfluxDB 2.0 ではないものばかりだったからです。
また、Telegraf, InfluxDB, Grafana は全て Docker (docker-compose) を使って動かします。
docker-compose.yaml のサンプル
以下のような docker-compose.yaml
を作成しました。
version: '3.1'
services:
telegraf:
container_name: telegraf
image: telegraf
restart: always
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb
links:
- influxdb
networks:
- common
influxdb:
container_name: influxdb
image: influxdb:1.8.6
restart: always
ports:
- 8086:8086
volumes:
- influxdb:/var/lib/influxdb
networks:
- common
grafana:
container_name: grafana
image: grafana/grafana
restart: always
links:
- influxdb
ports:
- 3000:3000
volumes:
- grafana:/var/lib/grafana
networks:
- common
networks:
common:
external: true
volumes:
influxdb:
grafana:
common
というネットワークを共通で使っているので、あらかじめ docker network create
で作成しておく必要があります。
Telegraf の設定
telegraf.conf
を作成します。
以下のページにちょうど良いのがあるのでこれをそのまま使いました。
後述しますが、Grafana のダッシュボードのテンプレートもこれを使いました。
上記の設定をコピーしたら最低限以下の設定だけ変更します。
[agent]
>hostname
にマシン名を設定- 設定しないと自動で設定されますが、起動の度に変わるので設定しておいたほうがよいと思います。
- 環境変数が使えるので、
hostname = "$HOSTNAME"
のようにも書けます。
[[outputs.influxdb]]
>urls
を InfluxDB の URL に変更- 上記の
docker-compose.yaml
の場合、URL はhttp://influxdb.common:8086
のようにコンテナ名とネットワーク名を使っても指定できます。
- 上記の
他は必要に応じて設定します。
起動
$ docker-compose up
デーモン化したい場合は -d
を指定します。
起動すると InfluxDB に Telegraf 用のデータベースを自動で作成してくれます。
(データベース名は telegraf.conf
で設定できます。)
Grafana の設定
Grafana にアクセスし、ログインします。
初期 ID とパスワードはどちらも admin
です。
DB の登録
Configuration > Data Sources > Add data source > InfluxDB を選択します。
URL
と Database
の2つを設定します。
今回の例では以下のように設定します。
URL
にhttp://influxdb.common:8086
を設定Database
にtelegraf_metrics
を設定
ダッシュボードの作成
Telegraf 用のテンプレートがあるので、それをインポートするのが楽です。
テンプレートは以下のページで探せます。
今回は以下のテンプレートを使いました。
上記から JSON ファイルをダウンロードし、Grafana の左メニューの + ボタンからインポートします。
インポートの際、データベースは telegraf_metrics
を選択します。
ダッシュボードにアクセスすると以下のような画面が表示されます。
かっこいい画面が簡単に作成できました。
リテンションポリシーの設定
telegraf.conf
の [[outputs.influxdb]] > retention_policy でリテンションポリシーを指定できますが、ここが未指定だとデフォルトの autogen
が使用され、データが無期限に保存されることになるので指定します。
例えば、リテンションポリシー名に hoge
と指定します。
この状態で動作させると、hoge
というリテンションポリシーが存在しないというエラーが出るので、InfluxDB のコンテナに入ってリテンションポリシーを作成します。
$ docker exec -it influxdb bash
コンテナに入ったら以下のコマンドでリテンションポリシーを作成します。
# influx
> CREATE RETENTION POLICY "リテンションポリシー名" ON "データベース名" DURATION "期間" REPLICATION 1 DEFAULT
例えば、今回は以下のように指定します。
CREATE RETENTION POLICY "hoge" ON "telegraf_metrics" DURATION 1h REPLICATION 1 DEFAULT
上記のコマンドではデータの保存期間を1時間に設定しています。