Skip to content
Htkyama Blog

Telegraf + InfluxDB + Grafanaでシステムリソースを可視化する

Raspberry Pi1 min read

Metrics

当初Cluster HATでクラスター化したRaspberry Pi Zeroのシステムリソース情報をFluent Bitで収集し、InfluxDBに蓄積したデータをGrafanaで可視化しようと目論んでいたが、InfluxDBと開発元が同じTelegrafの方が相性が良さそうなので、Telegraf + InfluxDB + Grafanaの構成に変更。

InfluxDBの起動

InfluxDBを起動。設定は特に変更せずにそのまま利用可能。

$ sudo service influxdb start

InfluxDBはポート8086で受信可能。

Telegrafのインストール

Raspberry Pi ZeroにTelegrafをインストール。

インストールする環境は以下の通り。

$ cat /proc/device-tree/model
Raspberry Pi Zero Rev 1.3
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster

PGPキーを取得しリポジトリを追加。

$ wget -qO - https://repos.influxdata.com/influxdb.key | sudo apt-key add -
OK
$ echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
deb https://repos.influxdata.com/debian buster stable

リポジトリを更新してからtelegrafをインストール。

$ sudo apt update
$ sudo apt install telegraf
$ telegraf --version
Telegraf 1.15.2 (git: HEAD cd037b49)

Telegrafの設定

/etc/telegraf/telegraf.confを編集。

OutputにInfluxDBを設定。接続にhttp、InfluxDBのデータベース名はtelegrafを指定。

1# Configuration for sending metrics to InfluxDB
2[[outputs.influxdb]]
3 ## The full HTTP or UDP URL for your InfluxDB instance.
4 ##
5 ## Multiple URLs can be specified for a single cluster, only ONE of the
6 ## urls will be written to each interval.
7 # urls = ["unix:///var/run/influxdb.sock"]
8 # urls = ["udp://127.0.0.1:8089"]
9 urls = ["http://(InfluxDBが動作しているホストのIP):8086"]
10
11 ## The target database for metrics; will be created as needed.
12 ## For UDP url endpoint database needs to be configured on server side.
13 database = "telegraf"

InputではデフォルトでCPUやディスクの使用量が取れるようになっている。

1# Read metrics about cpu usage
2[[inputs.cpu]]
3 ## Whether to report per-cpu stats or not
4 percpu = true
5 ## Whether to report total system cpu stats or not
6 totalcpu = true
7 ## If true, collect raw CPU time metrics.
8 collect_cpu_time = false
9 ## If true, compute and report the sum of all non-idle CPU states.
10 report_active = false
11
12
13# Read metrics about disk usage by mount point
14[[inputs.disk]]
15 ## By default stats will be gathered for all mount points.
16 ## Set mount_points will restrict the stats to only the specified mount points.
17 # mount_points = ["/"]
18
19 ## Ignore mount points by filesystem type.
20 ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

必要な項目をコメントアウトになっている部分を修正、追記していく。
有効にしたInputは以下。

1[[inputs.diskio]]
2 device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
3 name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
4[[inputs.kernel]]
5[[inputs.mem]]
6[[inputs.processes]]
7[[inputs.swap]]
8[[inputs.system]]
9[[inputs.internal]]
10[[inputs.interrupts]]
11[[inputs.linux_sysctl_fs]]
12[[inputs.net]]
13[[inputs.netstat]]
14[[inputs.nstat]]

その他、Raspberry Pi特化でCPU温度とGPU温度を取得する設定をする。

1[[inputs.file]]
2 files = ["/sys/class/thermal/thermal_zone0/temp"]
3 name_override = "cpu_temperature"
4 data_format = "value"
5 data_type = "integer"
6
7[[inputs.exec]]
8 commands = ["/usr/bin/vcgencmd measure_temp"]
9 name_override = "gpu_temperature"
10 data_format = "grok"
11 grok_patterns = ["%{NUMBER:value:float}"]

デフォルトのままではGPU温度を取得できないので、Raspberry Pi側でユーザtelegrafをグループvideoに加える設定をする。

$ sudo usermod -G video telegraf

最後に、telegrafをサービスとして起動。

$ sudo service telegraf start

InfluxDB側にデータベース"telegraf"がなくても、Telegrafから接続することで新たに作られる。(設定で変更可能。)

Grafanaへのログインとダッシュボードの設定

grafana-serverを起動。

$ sudo service grafana-server start

Grafanaをインストールしたホストのポート3000にWebブラウザからアクセスすると、 Grafanaの設定画面が表示される。

Grafana Login

初期ユーザ名と初期パスワードはそれぞれadmin

ダッシュボードは、左横のメニューから+でImportを選ぶことで、 公式HPに登録されているテンプレートからインポートすることが可能。

Raspberry Pi Monitoring のテンプレートを使用してみる。

Grafana Dashboard

だいぶ、イイ感じになりました。

© 2023 All rights reserved.
RSS