TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編)

Telegraf
以前、Elastic Stack 5,6系を使っていた頃、ホストに入れるエージェントとしてはcollectdやBeats (MetricbeatやFilebeat)を使っていた。Prometheusを使っていたときはNode Exporterだった。今回、Elastic Stack 8系を使うにあたり、再びcollectdを使うのもどうかと思ったしMetricbeatはFreeBSDでは多くの値が取れなくて困る。新しいElastic Agentには興味があるもののFreeBSD向けのports/pkgはなくダウンロードできるバイナリも提供されていない。そもそもMetricbeatがFreeBSDに完全に対応していない時点でElastic Agentに期待できる訳もない。 FreeBSDやLinux、なんならWindowsにもインストール/各種メトリック値を取得できる軽量シッパーがないものかと調べたところ、Telegrafが良さそうだった。TelegrafはInfluxDBと組み合わせて使うことが多いようだがInfluxDB専用というわけではなく多くの出力先に対応する。そして軽いしFreeBSDで使うときにprocfsやLinux互換パッケージを必要としない。もちろんLinuxやWindowsでも利用可能なのでOS毎にシッパーを使い分ける必要がない。Kibanaで可視化する際もビジュアライズやダッシュボードを共有できる部分が多い筈。(WindowsとMacOSは未確認)

Telegrafのインストール

FreeBSDのportsでインストールの場合

# cd /usr/ports/net-mgmt/telegraf
# make install
ビルドオプションの選択は無し。

FreeBSDのパッケージでインストールの場合

# pkg install net-mgmt/telegraf

FreeBSD以外Linux, macOS, Windows, シングルボードコンピュータのLinux向けは https://github.com/influxdata/telegraf/releases にあります。下にスクロールすると最新版から過去のバージョンが並んでいます。最新版には全てのプラットフォーム向けが揃っていないことがあるので更に古いバージョンも確認してください。

armhfなシングルボードコンピューターのLinuxにインストールする場合

$ cd ~
$ wget https://dl.influxdata.com/telegraf/releases/telegraf-1.25.1_linux_armhf.tar.gz   (ダウンロード)
$ tar zxvf telegraf-1.25.1_linux_armhf.tar.gz   (解凍)
$ cd telegraf-1.25.1
$ sudo mv ./usr/bin/telegraf /usr/bin/
$ sudo mv ./usr/lib/telegraf/scripts/telegraf.service /lib/systemd/system/
$ sudo mv ./var/log/telegraf /var/log/
$ sudo mv ./etc/telegraf /etc/
$ sudo mv ./etc/logrotate.d/telegraf /etc/logrotate.d/

$ sudo groupadd -g 996 telegraf    (グループ作成)
$ sudo useradd -u 996 -g telegraf -M -d /etc/telegraf -s /bin/false telegraf    (ユーザー作成)

ダウンロードするファイルや回答したディレクトリ名は実際にダウンロードしたファイル名に応じて読み替えてください。
グループID 996でtelegrafグループを作成した。システムに既にグループID 996が居るなら適当に違う番号で。
ユーザーID 996でtelegrafユーザーを作成した。システムに既にユーザーID 996が居るなら適当に違う番号で。
このtelegrafユーザーはTelegrafサービスの起動スクリプトで指定しているユーザー名なので違うユーザー名にしたいなら /lib/systemd/system/telegraf.serviceの編集が必要です。

Telegrafの設定

/usr/local/etc/telegraf.conf (編集) FreeBSD
/etc/telegraf/telegraf.conf (編集) Linux
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[global_tags]
#未指定
[agent]
  interval = "30s"
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = "0s"
  hostname = "hoge.example.com"   #変更 Telegrafのあるホストのホスト名等
  omit_hostname = false
#[[outputs.influxdb]]    #行頭に#を付けて必ずコメント化

[[outputs.elasticsearch]]
  urls = [ "https://192.168.2.16:9200" ]   #ElasticsearchのURL
  health_check_interval = "30s"
  username = "shipperuser"                    #Elasticsearchのシッパー用ユーザー名
  password = "01234abcde56789fghij"           #シッパー用ユーザーのパスワード                  
  index_name = "telegraf-%Y.%m.%d"
  tls_ca = "/usr/local/etc/telegraf_cert/http_ca.crt"    #ElasticsearchのホストからコピーしたCA証明書のPath
  insecure_skip_verify = false
# manage_template = true
# template_name = "telegraf"
# force_document_id = false

設定サンプルではプロセス関係/ネットワーク関係等のメトリクス取得が無効になっています。上の設定例でもinput関係には触れていないのでそれらの値は取得されません。必要に応じて有効化してください。
21行目のtls_caはLinuxでは /etc/telegraf/http_ca.crt の辺りが良さそうです。(そこにElasticsearchから取ってきたCA証明書ファイルを置いてください)
CA証明書ファイルhttp_ca.crtはFreeBSDにインストールしたElasticsearchなら (接続先となるElasticsearchが動いているホストの) /usr/local/etc/elasticsearch/certs/http_ca.crt で、これをコピーしてきて設定のtls_caの行に書いたPathに置きます。

FreeBSDでTelegrafサービスの利用可能設定

/etc/rc.conf (1行追記)
telegraf_enable="YES"

LinuxでTelegrafサービスの有効化(開始ではない)

$ sudo systemctl enable telegraf

Telegrafの起動

# service telegraf start    (FreeBSD)

$ sudo service telegraf start    (Linux)
または
$ sudo systemctl start telegraf.service    (Linux)

KibanaでTelegrafからのメトリクスデータを扱う

Metricbeatのメトリクスデータを扱う場合と被る部分が多いです。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 1

Kibana操作用に作成したユーザーでKibanaにログインする。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 2
画面左上の (ハンバーガーメニューアイコン)をクリック①し、
メニュー左列の「Discover」をクリック②する。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 3
おそらく初めてKibanaでDiscoverを見る場合は取得したデータは何も表示されない筈。過去にデータを見ていた場合は直近に閲覧したデータの最新状態等が表示される。
左上の水色のドロップダウンメニューをクリック①する。
「データビュー」の (検索)欄に「telegraf-*」と入力してみる。②
過去にTelegrafから収集したデータを見たことがない(Telegrafのデータビューを作成していない)のであれば、おそらく「telegraf-* doesn't match any options」と表示されてデータは表示されない筈。③
データビューを作成」をクリックする。④ (次の次へ)
または、メニューから順に進むなら次へ。左列のメニューから「スタック管理」に進み、「データビュー」。(次へ)

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 4
左列のメニューから「スタック管理」に進む。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 5
「スタック管理」メニューから「データビュー」に進む。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 6
データビューのリストにtelegraf用のデータビューが存在しないことを確認して、「データビューを作成」ボタンをクリックする。
既にTelegraf用のデータビューがあるならデータビューの作成はスキップする。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 7
右列に「telegraf-〜」のインデックスが1つ以上存在することを確認する。無ければTelegrafからのデータを取得できていない可能性が高い。
中央列の「名前」と「インデックスパターン」欄に「telegraf-*」と入力する。(次へ)

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 8
(続き) 「インデックスパターン」欄に「telegraf-*」と入力するとTelegrafで取得したデータから「タイムスタンプフィールド」が見つけられて「@timestamp」という文字列が自動で入る。これでOK。
画面下部の「データビューをKibanaに保存」ボタンをクリック。
Discover画面で「データビューを作成」をクリックした場合は次の次の次へ。
「スタック管理」の「データビュー」でデータビューを作成した場合は次へ。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 9
telegraf-*のデータに含まれるフィールドが表示される。
この画面では何か操作する必要はないので左列メニューの「データビュー」をクリック。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 10
データビューのリストに「telegraf-*」の項目が追加されたことを確認する。
データビューの作成は終わり。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 11
Discoverに戻る。
左上の水色のドロップダウンメニューをクリックする。
ドロップダウンリストの「telegraf-*」をクリックする。

TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編) 12
左列にtelegrafのフィールド名のリスト、右列にtelegrafが取得したデータが表示される。また、右上には取得したデータ数が時系列のグラフで表示される。
表示されないなら何か問題がある筈。

Kibanaのビジュアライズとダッシュボードでデータを可視化する部分は次回。

関連記事: