FreeBSDのportsのbeatsは暫く壊れたまま放置されていたが、2018年3月に入ってようやく直してくれたみたい。このbeatsというports/pkgは以前は個別のbeat (Filebeat, Metricbeat, Packetbeat) だったports/pkgを統合したもの。統合後にHeartbeatを追加して現在は4つのbeat(s)になっている。
Beatsはシリーズ名(ファミリー名)みたいなもので4種以外にもたくさんあるのでこのports名はどうなんだろうというのが正直な気持ち。
そんなことはどうでもいいので、とりあえずインストールしてみた。
# cd /usr/ports/lang/go # make install clean # cd /usr/ports/sysutils/beats # make install clean
ビルドするBeatを選ぶ画面が出るので基本的にはFilebeat, Heartbeat, Metricbeat, Packetbeatの4つにチェック(初期値のまま)。ただし、この記事ではその内のMetricbeatしか扱わない。
/etc/rc.conf (1行追記)metricbeat_enable="YES"
# metricbeat modules list -path.config /usr/local/etc
Enabled:
metric_system
Disabled:
Systemモジュールしか使えないのかしら?
なんかこのコマンド全然意味をなさないっぽいんだけど使い方が違うのかしら。
Debugログを表示したところ以下が使えるみたい。
- docker
- mongodb
- mysql
- postgresql
- system
- uwsgi
MetricSet
- aerospike/namespace
- apache/status
- ceph/cluster_disk
- ceph/cluster_health
- ceph/cluster_status
- ceph/monitor_health
- ceph/osd_df
- ceph/osd_tree
- ceph/pool_disk
- couchbase/bucket
- couchbase/cluster
- couchbase/node
- docker/container
- docker/cpu
- docker/diskio
- docker/healthcheck
- docker/image
- docker/info
- docker/memory
- docker/network
- dropwizard/collector
- elasticsearch/node
- elasticsearch/node_stats
- etcd/leader
- etcd/self
- etcd/store
- golang/expvar
- golang/heap
- graphite/server
- haproxy/info
- haproxy/stat
- http/json
- http/server
- jolokia/jmx
- kafka/consumergroup
- kafka/partition
- kibana/status
- kubernetes/container
- kubernetes/event
- kubernetes/node
- kubernetes/pod
- kubernetes/state_container
- kubernetes/state_deployment
- kubernetes/state_node
- kubernetes/state_pod
- kubernetes/state_replicaset
- kubernetes/system
- kubernetes/volume
- logstash/node
- logstash/node_stats
- memcached/stats
- mongodb/collstats
- mongodb/dbstats
- mongodb/status
- mysql/status
- nginx/stubstatus
- php_fpm/pool
- postgresql/activity
- postgresql/bgwriter
- postgresql/database
- prometheus/collector
- prometheus/stats
- rabbitmq/node
- rabbitmq/queue
- redis/info
- redis/keyspace
- system/core
- system/cpu
- system/diskio
- system/filesystem
- system/fsstat
- system/load
- system/memory
- system/network
- system/process
- system/process_summary
- system/raid
- uwsgi/status
- vsphere/datastore
- vsphere/host
- vsphere/virtualmachine
- zookeeper/mntr
意外と使えるのね。意外なところでドキュメントに書かれてるsystem/uptimeが存在しないの。いやそれは使えるようにしようよ。
とりあえず、この記事ではSystemモジュールで出力できる設定を作成する。
なお、動作確認のためだけの単純な設定とする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | metricbeat.config.modules:
path: ${path.config}/beats/metric_*.yml #ここが初期値と変わってるので注意
reload.enabled: false
#output.elasticsearch: #動作確認ではelasticsearchには出力しない
# hosts: ["localhost:9200"]
output.logstash:
hosts: ["localhost:5044"]
#output.console: #コンソールに出力
# pretty: true
#logging.level: debug
logging.to_syslog: true
logging.to_files: false
|
# mkdir /usr/local/etc/beats
/usr/local/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 | - module: system
metricsets: ["cpu"]
cpu.metrics: [percentages, normalized_percentages, ticks]
enabled: true
period: 10s
- module: system
metricsets: ["load"]
enabled: true
period: 10s
- module: system
metricsets: ["filesystem"]
filesystem.ignore_types: [nfs, smbfs, autofs]
enabled: true
period: 60s
- module: system
metricsets: ["fsstat"]
enabled: true
period: 60s
- module: system
metricsets: ["memory"]
enabled: true
period: 10s
- module: system
metricsets: ["network"]
interfaces: [em0] #ネットワークIFとしてem0(だけ)を指定
enabled: true
period: 10s
- module: system
metricsets: ["process"]
processes: ['.*'] #全プロセス
enabled: true
period: 10s
processors:
- drop_fields: #processで出力しないフィールドの設定例↓
fields: ["system.process.cmdline"] #system.process.cmdlineフィールドを除外
#↑ここは字下げ必要(drop_fields:と並べない)
|
上の様に設定ファイルを分けずに全部/usr/local/etc/metricbeat.ymlに書くのでも良い。(上の/usr/local/etc/metricbeat.ymlファイルのpath: ${path.config}/beats/metric_*.yml行と置き換える)
また監視項目別の個別設定が不要なら下のような書き方でも。(elastic社のドキュメントより)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | metricbeat.modules:
- module: system
metricsets:
- cpu
- load
#- core
#- diskio
- filesystem
- fsstat
- memory
- network
- process
# Sockets (linux only)
#- socket
enabled: true
period: 10s
|
# service metricbeat start
データ受信側にLogstashを使うが、テスト用のLogstash設定ファイル(本番稼働用のLogstash設定ファイルとは別)を作成する。
/usr/local/etc/logstash/test.conf1 2 3 4 5 6 7 8 9 10 | input {
beats {
port => 5044
}
}
output {
stdout {
codec => rubydebug
}
}
|
Beat(s)からデータを受けて標準出力に出すという内容。
既に本番稼働しているBeatsがあってそれがポート5044を使っているなら別のポート番号を指定する。テスト用のMetricbeatの設定ファイルのポート番号もそれに合わせる。とにかく本番稼働で使用しているのとは別のポートを使うこと。
# /usr/local/logstash/bin/logstash --path.data /tmp -f /usr/local/etc/logstash/test.conf
Logstash起動コマンド実行からMetricbeatのデータが流れるまで暫く待たされる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | "@timestamp" => 2018-03-05T04:22:37.536Z,
"beat" => {
"name" => "hoge.example.com",
"hostname" => "hoge.example.com",
"version" => "6.2.2"
},
"@version" => "1",
"host" => "hoge.example.com",
"metricset" => {
"name" => "memory",
"rtt" => 40,
"module" => "system"
},
"error" => {
"message" => "memory: open /compat/linux/proc/meminfo: no such file or directory"
},
"tags" => [
[0] "beats_input_raw_event"
]
}
|
上の出力例の15行目にエラーメッセージがある。
/compat/linux/proc/hogeが無いということはLinux互換モードが必要。う〜ん、Linuxに寄りすぎだわね。
仕方がないのでFreeBSDをLinux互換モードにして/compat/linux/proc/hogeを使えるようにしてやる。
linux_enable="YES"
これでOSを再起動するとカーネルにlinux.ko, linux_common.ko, linux64.ko おそらくこの3つあたりが読み込まれている筈。
惜しいことにこれだけではlinprocfs.koを読んでくれてない。
linprocfs_load="YES"
これで次回OS起動から自動でlinprocfs.koを読んでくれる。
OS起動後に手動でカーネルモジュールを読み込ませたいならkldload hoge、読み込んでいるカーネルモジュールをリスト表示したいならkldstat
# kldload linprocfs #モジュール読み込みが正常なら何も返事してこない # kldstat Id Refs Address Size Name 1 31 0xffffffff80200000 1f67a88 kernel 2 1 0xffffffff82169000 1620 accf_data.ko 3 1 0xffffffff8216b000 2678 accf_http.ko 4 1 0xffffffff8216e000 4d18 coretemp.ko 5 1 0xffffffff82173000 39d8 cc_htcp.ko 6 1 0xffffffff82511000 5936 fdescfs.ko 7 1 0xffffffff82517000 34d3c pf.ko 8 1 0xffffffff8254c000 42864 linux.ko 9 3 0xffffffff8258f000 7b0f linux_common.ko 10 1 0xffffffff82597000 3c93f linux64.ko 11 1 0xffffffff825d4000 a877 linprocfs.koディレクトリ作成
# mkdir -p /compat/linux/proc
linprocfsを手動マウントする。# mount -t procfs proc /proc # mount -t linprocfs /dev/null /compat/linux/procLogstashで結果を確認
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 | {
"@timestamp" => 2018-03-05T05:07:39.461Z,
"system" => {
"memory" => {
"actual" => {
"free" => 8512475136,
"used" => {
"pct" => 2182392106.3244,
"bytes" => 18446744073649610752
}
},
"total" => 8452534272,
"used" => {
"pct" => 0.0762,
"bytes" => 644132864
},
"free" => 7808401408,
"swap" => {
"total" => 0,
"used" => {
"pct" => 0,
"bytes" => 0
},
"free" => 0
}
}
},
"beat" => {
"name" => "hoge.example.com",
"hostname" => "hoge.example.com",
"version" => "6.2.2"
},
"@version" => "1",
"host" => "hoge.example.com",
"metricset" => {
"name" => "memory",
"rtt" => 216,
"module" => "system"
},
"tags" => [
[0] "beats_input_raw_event"
]
}
|
正常に値を取れていることが確認できたのでlinprocfsの自動マウント指定を/etc/fstabに書き込む。
linprocfsが正常に使えないのに/etc/fstabに書き込んだら次回にOSが正常に起動できなくてシングルユーザーモードで停まってしまう。
シングルユーザーモードの操作が解らないと途方に暮れることになるので注意。 mount -u / を実行して/etc/fstabを修正してumount -aをしてrebootだけのことだけど。
1 2 | proc /proc procfs rw 0 0
linproc /compat/linux/proc linprocfs rw 0 0
|
初稿ではlinprocfsだけ追加にしていたが、FreeBSD標準設定でprocfsが入っていないので追加した。
Metricbeatの出力データはおそらく加工無しにelasticsearchに読み込ませて良いかと思われるのでLogstashを介する必要は無いはず。テストが終わったらMetricbeatの出力先をLogstashからelasticsearchに変更する。
1 2 3 4 5 | output.elasticsearch:
hosts: ["localhost:9200"]
#output.logstash:
# hosts: ["localhost:5044"]
|
# service metricbeat restart
そのうちportsに手が入ってLinux互換モード無しでMetricbeatが使えるようになるのかしら?
関連記事:- ウェブ管理者の気まぐれ自作アクセス解析 ElasticsearchとKibanaを添えて
- TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (後編)
- TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (中編)
- TelegrafでElasticsearchにメトリクス送信+Kibanaで可視化 (前編)
- Metricbeatで収集したメトリクスデータをKibanaで可視化する
- Kibanaを操作する前にユーザーを作成する
- Metricbeat 8.6.0のインストールと設定
- Elastic Stack 8系をFreeBSDにインストール
- Elastic Stack 6.4.2への更新 FreeBSD ports用メモ
- WinlogbeatでWindowsイベントログを可視化 後編
- WinlogbeatでWindowsイベントログを可視化 中編
- WinlogbeatでWindowsイベントログを可視化 前編
- Elastic Stackを6.3.2に更新する
- Elastic Stackでシステム監視 Heartbeatで収集した死活情報をKibanaで可視化
- Elastic Stackでシステム監視 Heartbeatを使う準備
- Elastic Stackでシステム監視 FreeBSDのportsで6.2.3に更新
- ELK Stackでシステム監視 Filebeatで収集したVolumioのログから時系列の再生曲名リストを表示
- ELK Stackでシステム監視 Rspamd 1.7系のElasticsearchモジュールを試す
- ELK Stackでシステム監視 FilebeatでNTP統計ログ取得 Logstashで加工
- ELK Stackでシステム監視 FilebeatでRaspberry Pi Zero WのVolumio楽曲再生ランキング
- ELK Stackでシステム監視 MeticbeatでRaspberry Pi Zero WのVolumioを監視
- ELK Stackでシステム監視 FilebeatでFreeBSDのCPU温度取得+Kibanaグラフ化
- ELK Stackでシステム監視 FilebeatでFail2banのBan情報+地図表示
- ELK Stackでシステム監視 MetricbeatでNginxのステータス情報を取得+グラフ化
- ELK Stackでシステム監視 FreeBSDのportsでELK Stack6系をインストール
- ELK Stackでシステム監視 FreeBSDにMetricbeatをインストールしてみる
- ELK Stackでシステム監視 elasticsearchインデックスのスキーマが勝手に変わる対処 テンプレート作成
- NanoPi NEO2(arm64)用にFilebeatをビルド
- ELK Stackでシステム監視 kibanaでDNSサーバの情報表示
- ELK Stackでシステム監視 kibanaのTimelion,Timeseriesでグラフ作成