サーバの使用状況を確認したい
先日からいろんな方法を調べていて色々わかってきた。色々なリソース監視ツールがある中、先日投稿した原始的モノから最近のやつまで試してみて、最終的に表題の構成に落ち着きました。インストール方法はインターネット上に溢れていますが、InfluxDB2.0/Grafana/Telegrafをdockerコンテナで構築するという情報はなかったと思うのでレポートします。CPU使用率のグラフが見れるところまで書きます。
確認環境
- docker 19.03.8
- docker-compose 1.26.0
- os ubuntu20
サービスの起動
Dockerとdocker-composeコマンドが入っていることを前提に説明をはじめます。以下のファイル2つ(docker-compose.yml, telegraf.conf)を作成し、docker-compose up -d
で起動してください。この時点でInfluxDBは、初期ユーザとパスワードでセットアップが完了した状態でhttp://<サーバのIPアドレス>:8086
に起動しています。InfluxDBとGrafanaは設定やデータが永続化されるようにdataディレクトリをマウントしています。Telegrafはホスト側のデータを収集するために必要なデータを読み込み権限の見つけてマウントしています。
[global_tags]
[agent]
interval = "60s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
hostname = ""
omit_hostname = false
[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "my-super-secret-auth-token"
organization = "my-org"
bucket = "my-bucket"
timeout = "5s"
[[inputs.ping]]
interval = "5s"
urls = ["google.com", "amazon.com", "github.com"]
count = 4
ping_interval = 1.0
timeout = 2.0
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
version: "3"
services:
influxdb:
image: influxdb:2.0
ports:
- 8086:8086
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=my-user
- DOCKER_INFLUXDB_INIT_PASSWORD=my-password
- DOCKER_INFLUXDB_INIT_ORG=my-org
- DOCKER_INFLUXDB_INIT_BUCKET=my-bucket
- DOCKER_INFLUXDB_INIT_RETENTION=1w
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-auth-token
volumes:
- ./data/influxdb2:/var/lib/influxdb2
- ./data/influxdb2-config:/etc/influxdb2
container_name: influxdb
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
volumes:
- ./data/grafana:/var/lib/grafana
depends_on:
- influxdb
telegraf:
image: telegraf
container_name: telegraf
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /sys:/rootfs/sys:ro
- /proc:/rootfs/proc:ro
- /etc:/rootfs/etc:ro
environment:
HOST_PROC: /rootfs/proc
HOST_SYS: /rootfs/sys
HOST_ETC: /rootfs/etc
depends_on:
- influxdb
設定の変更
上記のdocker-compose upのままでは動かないので設定を変えていきます。
Grafanaの永続ボリュームの権限変更
Grafana内の実行権限と合わせた後にコンテナを再起動します。docker-compose.ymlファイルと同じディレクトリ内で以下を実行します。
docker run -v $(pwd)/data/grafana:/dir alpine chown 472:472 /dir -R #権限変更
docker-compose restart #再起動
InfluxDBバケットにDRBPを設定
最新のGrafanaではFluxクエリによる接続に対応しています(Beta)。Fluxを選択する場合はこの章の設定は不要です。
InfluxDB1.xはデータをDRBP(Database + Retention policy)に保持します。InfluxDB2.0ではデータはバケットに保持されます。したがって、1.xデータモデルを使用してクエリするGrafanaのために、バケットをDRBPにマッピングしてあげる必要があります。以下のコマンドを実行するとv1のDRBPマッピングが作成されます。
$ docker exec -it influxdb /bin/bash -c \
'influx v1 dbrp create \
--db my-bucket \
--rp example-rp \
--default \
--bucket-id `influx bucket list -n my-bucket --hide-headers|cut -f 1`'
# 以下のような表示がでればOKです
ID Database Bucket ID Retention Policy Default Organization ID
07746af5969b7000 my-bucket 579252e1e6cf0908 example-rp true 1afbfa127ca1e6a7
もし表示されなければ、docker exec -it influxdb influx bucket list -n my-bucket --hide-headers
コマンドで一列目のIDを控えておき、--bucket-id の引数に指定してください。
Grafanaの設定
http://<サーバのIPアドレス>:8086
にアクセスし、usernameとpasswordにadminとadminを入力してください。ログイン後にパスワードの変更を求められますが、適当に変更するかSkipを押下します。
左のパネルから設定>DataSourcesを押下します。ADD Data Sroucesボタンを押下し、InfluxDBを検索し設定を開始します。
HTTPのURLにhttp://influxdb:8086
を入力します。
Fluxクエリを利用する場合、QueryLanguageでFluxを選択し、Databaseにmy-bucket
、Userにmy-user
、Passwordにmy-pawssword
を設定すればOKのはずです。
Custom HTTP HeadersのHeaderにAuthorization
、ValueにToken my-super-secret-auth-token
を設定し、Databaseにmy-bucket
を設定、Userにmy-user
を設定、Passwordにmy-pawssword
、HTTPMethodにGET
を設定し、「Save & Test」を押下します。「Data source is working」が表示されればOKです。
左のパネルの+からDashboardを追加します。Queryで、select measurementを押すとプルダウンでCPUなどが出てくるので、それに沿って設定していきます。
(おまけ)保持期間の設定
influxDB 1.xではretention policyというデータ保持ルールを定義しデータモデルに適用することでストレージ容量増加やクエリ検索速度低下に対処することができます。具体的には以下のような柔軟なルールを作成することができます。
- 10秒単位のデータを30分単位のデータに自動集計する
- 2時間以上前の生の10秒単位のデータを自動削除する
- 52週間以上前の30分単位のデータを自動削除する
InfluxDB 2.0でもバケットをDRBPにマッピングすることで同様のデータ保持ポリシーを適用することができますが、バケットに対しては削除タイミングの設定とTasksを組み合わせて対処することを推奨しているようです。削除タイミングの設定は、バケットに対しての設定で、InfluxDB2.0のWEBアプリのバケット設定から削除期間を変更することができます。デフォルトは7日です。
Tasksは定期的にFluxクエリを実行するための機能で、ダウンサンプリングのクエリを登録できます。気が向いたら追記しますが気になる方は以下のリンクを参考に設定に挑戦してみてください。
(おまけ)Kapacitorの設定
以下のコマンドを実行し、V1用のクレデンシャルを発行します。
docker exec -it influxdb /bin/bash -c \
'influx v1 auth create \
--org my-org \
--username my-user \
--read-bucket `influx bucket list -n my-bucket --hide-headers|cut -f 1` \
--write-bucket `influx bucket list -n my-bucket --hide-headers|cut -f 1` \
--password my-password'
気が向いたら追記します。
参考にしたもの