ELK Stackでシステム監視 MeticbeatでRaspberry Pi Zero WのVolumioを監視

$ ssh volumio@192.168.2.117
volumio@192.168.2.117's password: 
                       ___                                      
                      /\_ \                        __           
         __  __    ___\//\ \    __  __    ___ ___ /\_\    ___   
        /\ \/\ \  / __`\\ \ \  /\ \/\ \ /' __` __`\/\ \  / __`\ 
        \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \
         \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/
          \/__/   \/___/ \/____/ \/___/  \/_/\/_/\/_/\/_/\/___/ 


        
             Free Audiophile Linux Music Player - Version 2.0

          C 2015 Michelangelo Guarise - Volumio Team - Volumio.org
                               

以前にNanoPi NEO2用にFilebeatをビルドする記事を書いたが、同じやり方でMetricbeatをビルドできるかと思ったらNaniPi NEO2 (armbian)ではエラーが出てビルドできなかった。
Goに詳しくなくてエラーメッセージからは何が悪いのか推測できなかったのでNaniPi NEOではなくデスクトップPCとして常用している Gekko Linux (openSUSE亜種)でビルドすることにした。ビルドにあたりGo (golang)とgitをインストールした。

なお、記事の題名にはVolumioと書いているが実はMetricbeatがVolumioと関係する部分は全く無い。armまたはarm64のLinuxなら殆ど動くかと。(次のFilebeatの記事でVolumioが関係する予定)

$ printenv | grep GOPATH        #環境変数を表示
$ export GOPATH=$HOME/go        #GOPATHが未設定の場合に実行
                                #またはGOPATHが2つ以上のPathならホームディレクトリ下のgoを再指定

# arm用(RPi0Wなど)の作業ディレクトリの準備例 (ビルド環境が64bitのLinuxでgo1.9の場合)
$ sudo mkdir /usr/lib64/go/1.9/pkg/linux_arm
$ sudo chmod 777 /usr/lib64/go/1.9/pkg/linux_arm

# arm64用 (NanoPi NEO2など)の作業ディレクトリの準備例 (ビルド環境が64bitのLinuxでgo1.9の場合)
$ sudo mkdir /usr/lib64/go/1.9/pkg/linux_arm64
$ sudo chmod 777 /usr/lib64/go/1.9/pkg/linux_arm64

$ mkdir -p ${GOPATH}/src/github.com/elastic
$ cd ${GOPATH}/src/github.com/elastic
$ git clone https://github.com/elastic/beats.git
$ cd ./beats/metricbeat

#ビルド
$ GOOS=linux GOARCH=arm make            #arm用 (RPi0Wなど)
# or
$ GOOS=linux GOARCH=arm64 make          #arm64用 (NanoPi NEO2)など

#完成したmetricbeatをとりあえずホームディレクトリにコピー
$ cp -p metricbeat ~/
$ cp metricbeat.yml ~/

ホームディレクトリに置いた2つのファイル(metricbeat.ymlは正直どうでもいい)をRPi0WやNanoPi NEO2などに何らかの方法でコピーする。
もしもvolumioからftpを使うなら先に apt-get install ftp しておく。

Volumioのホスト側の設定

ここからはMetricbeatをインストールするホスト、Volumio(Raspbian?)が動くRPi0Wやarmbianの動くNanoPi NEO2の側の設定。

metricbeatを /usr/local/bin/ に置く。この記事では /usr/local/bin/としたが、任意の場所で可。ただし、下のサービス設定ファイル内のpathもそれに合わせること。

# mv metricbeat /usr/local/bin/
# chmod +x /usr/local/bin/metricbeat        #実行権限を付けるのを忘れずに
# mv metricbeat.yml /etc/                   #これはどうでもいい
# mkdir /etc/beats
# mkdir /var/lib/metricbeat
# metricbeat version                        #バージョン確認
metricbeat version 7.0.0-alpha1 (arm), libbeat 7.0.0-alpha1 [5426852a0971bb148b6ca60590ee47f68e6eaf24 built 2018-03-16 02:37:25 +0000 UTC]

Metricbeatのサービス設定

/lib/systemd/system/metricbeat.service (新規作成)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=metricbeat
Documentation=https://www.elastic.co/guide/en/beats/metricbeat/6.2/index.html
Wants=userwork-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/metricbeat -path.home /var/db/beats/metricbeat -path.config /etc
Restart=always

[Install]
WantedBy=multi-user.target
/etc/metricbeat.yml (変更または新規作成)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
metricbeat.config.modules:
  path: ${path.config}/beats/metric_*.yml   #標準的な構成と違うので注意        
  reload.enabled: false

processors:
  - drop_fields:
      fields: ["metricset.rtt", "beat.name", "beat.version"]
                                     #全般の出力不要なフィールド名を指定
output.logstash:
  hosts: ["192.168.2.24:5043"]       #テスト用Logstash 192.168.2.24  ポート5043
#  hosts: ["192.168.2.24:5044"]      #本番用Logstash 192.168.2.24  ポート5044

logging.level: debug
logging.selectors: ["*"]
logging.to_syslog: false
logging.to_files: false              #動作確認段階ではtrueにしておく
logging.files:
  path: /var/log
  name: #↑trueにすると/var/log/metricbeat.logにログ出力

ログの出力は動作確認時だけ。ファイルが肥大化するので通常稼働時には出力させない。

/etc/beats/metric_system.yml (新規作成)
 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- module: system
  metricsets: ["cpu"]
  cpu.metrics: [percentages, normalized_percentages, ticks]
  enabled: true
  period: 60s

- module: system
  metricsets: ["filesystem"]
  enabled: true
  period: 60s

- module: system
  metricsets: ["fsstat"]
  enabled: false            #←無効にした
  period: 60s

- module: system
  metricsets: ["load"]
  enabled: true
  period: 60s

- module: system
  metricsets: ["memory"]
  enabled: true
  period: 60s

- module: system
  metricsets: ["network"]
  enabled: true
  period: 60s

- module: system
  metricsets: ["process"]
  enabled: true
  period: 60s
  processors:
  - drop_fields:            #↓(MetricSet別) processで出力しないフィールド名を指定
      fields: ["system.process.cmdline", "system.process.cwd","system.process.cpu", "system.process.pid", "system.process.ppid", "system.process.pgid", "system.process.username", "system.process.fd"]

- module: system
  metricsets: ["uptime"]
  enabled: true
  period: 60s
# systemctl enable metricbeat   #サービス有効化
# service metricbeat start      #サービス開始

Kibanaでグラフ化

Vilumioに仕掛けたMetricbeatから送信される情報をLogstashで受け取るが、Metricbeatのデータは加工無しでいける筈。
で、Kibanaの側だが、すでに作成済みの推移データを見るためのVisualizeはTimeLionあたりが使われているかと思われるので、既存の他のホストのVisualizeを開いてクエリーのホスト名だけあるいは単位周りを少し修正して新しいVisualizeとして保存すれば1つのVisualizeあたり1分もかからずに作成できる筈。まさか何でもかんでもSearchオブジェクトを保存してそれを使ってArea Chart等のVisualizeを作成してないよね?

Kibanaの画面でVolumioを監視
ダッシュボードに貼り付けるとこんな感じ。

ということで、Volumioが動いているRaspberry Pi Zero WをELK Stackで監視できるようになった。
Metricbeatで1分に1度の頻度で情報を取得するように設定したが、Volumioで音楽再生中に1分ごとに音が途切れるとかそういうのは如何にRaspberry Pi Zero Wが非力とはいえどさすがに無いみたい。もしかしたら世の中にたくさんいらっしゃるらしい人の能力を遥かに超えた耳を持つオーディオマニアさんなら ゆらいでない音のゆらぎ、途切れてない音の途切れ、ありもしない音の違いをはっきり聞き分けられるのかもしれないけど。

関連記事: