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のビジュアライズとダッシュボードでデータを可視化する部分は次回。

関連記事:

Metricbeatで収集したメトリクスデータをKibanaで可視化する

Kibanaダッシュボード

今回は、metricbeatで収集したメトリクスデータをKibanaで可視化する。一応、metricbeatに付属のKibana用ダッシュボード(前々回登録済み)を使うがmetricbeat 8系とKibana8系の組み合わせではサクッとはいかない様子。自身でビジュアライズ作成を頑張ることになりそう。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 1
前回作成したKibana用のユーザー(非スーパーユーザー)でログインする。このユーザーはKibanaの一部のメニューが表示されなかったりElasticsearchに対する一部の高度な操作ができないが通常はこのユーザーで困ることはない。(今回はこのKibana用ユーザーだけでいける)
どうしてもスーパーユーザー権限が必要な操作を行う場合はelasticユーザーでログインし直す。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 2
画面左上の (ハンバーガーメニューアイコン)をクリック①し、
メニュー左列の「Discover」をクリック②する。

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

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 4
「スタック管理」の「データビュー」画面で、右列のデータビューリストに「metricbeat-*」のような項目が無いことを確認し、右上の「データビューを作成」ボタンをクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 5
右列に「metricbeat-〜」のデータストリームかインデックスがあることを確認し、中央列の「名前」と「インデックスパターン」に「metricbeat-*」と入力する。(名前の方は任意の文字列でも可)
入力したら次。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 6
metricbeatで取得したデータから「タイムスタンプフィールド」が見つけられて「@timestamp」という文字列が自動で入る。これでOK。
画面下部の「データビューをKibanaに保存」ボタンをクリック。
Discover画面で「データビューを作成」をクリックした場合は次の次の次へ。
「スタック管理」の「データビュー」でデータビューを作成した場合は次へ。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 7
metricbeat-*のデータに含まれるフィールドが表示される。
左列の「データビュー」をクリック。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 8
データビューのリストに「metricbeat-*」の項目が追加されたことを確認する。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 9
Discoverに戻る。
左上の水色のドロップダウンメニューをクリックする。
ドロップダウンリストの「metricbeat-*」をクリックする。
左列にmetricbeatのフィールド名のリスト、右列にmetricbeatが取得したデータが表示される。また、右上には取得したデータ数が時系列のグラフで表示される。
表示されないなら何か問題がある筈。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 10
左列のメニューから「Dashboard」をクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 11
ダッシュボードのリストの (検索)欄に「Metricbeat System」と入力してみる。
ダッシュボードリストが絞り込まれるので、「[Metricbeat System] Host overview ECS」をクリックする。リストの表示順は変動するので一番下をクリックしたら良いというものではありません。
なお、MetricbeatのKibana用ダッシュボードの取り込み(前々回)が出来ていなければMetricbeat用のダッシュボードは表示されない。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 12
ダッシュボードが表示されるが、そこに表示されるはずのビジュアライズは正常に表示されず「結果が見つかりませんでした」が表示される。
右上の「編集」ボタンをクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 13
「結果が見つかりませんでした」のビジュアライズ右上隅の (オプション)をクリックし、表示されるメニューの「ビジュアライゼーションを編集」をクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 14
「パネルオプション」タブをクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 15
「データビュー」には「metricbeat-*」が入っている筈です。そうでなければ「metricbeat-*」を選択してください。こればデータビューを作成し直した場合などに変更の必要が発生すると思われます。
また、「データビュー」の右端の をクリックする。
データビューモードに表示される「Kibanaデータビューを使用」スイッチをオンにする。(次へ)

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 16
上部にビジュアライズが表示されたら右上隅の「保存して戻る」(上書き保存)をクリックする。
雛形を使いまわして新しいビジュアライズとして保存するならその左横の「名前を付けて保存」をクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 17
ダッシュボードに戻ると修正したビジュアライズが表示されるようになった。
これはビジュアライズが変更されたということであってダッシュボード自体には変更が加えられたわけではありません。(勘違いしやすいので注意) ダッシュボードに変更を加えなければ右上の「 保存」はクリックできないので左隣の「表示モードに切り替える」をクリックする。

Metricbeatで取得したメトリック情報をKibanaダッシュボードで表示 18
同様にビジュアライズの「パネルオプション」からデータビューの「Kibanaデータビューを使用」スイッチを変更することで幾つかのビジュアライズを表示することができるようになった。ビジュアライズによってはこの方法では変更できないものもある。

今回は、FreeBSDにインストールしたMetricbeatからメトリクスを収集したのでLinuxとは異なりそもそも正常に取得できないメトリクスが多数。データが取得できないのだから可視化するのは無理。結果、ダッシュボードは上の画面のようになった。これでは殆ど役に立たない。
LinuxはMetricbeat,FreeBSDは別のメトリックシッパーを使うという方法もあるかもしれないが、どうせならある程度統一したいのでMetricbeat以外の軽量なメトリックシッパーを導入したい。それは次回以降。なお、暫く使っていたNode Exporterは取得した値が反対になる問題(0%が100%になったり100%が0%になったり)で信用できない部分があるので候補から外します。

関連記事:
Up