グラフを表示してくれるツールMRTGやmuninはもう古い?ということでFluentd・Elasticsearch・Kibana InfluxDB+Grafanaを使ってログ収集ツールを構築していきます。
まずはFluentdをインストールしてみる。Fluentdは集めたログなどをInfluxDBにわたすパイプ役のログ収集ミドルウェア。ESP32などで温度・湿度などを取得してFluentdでラズパイに送ってInfluxDBに保存する。
- ログ収集 Fluentdインストール メモ (今このページを見ています)
- Raspi 3+ Elasticsearch インストール 失敗メモ
- fluentd使わない ESP8266からInfluxDB APIに投げる 失敗メモ
- 定期的に温湿度をFLUENTDに送信してグラフを作る 失敗メモ
Fluentdインストール前の下準備
取説どおりに下準備していきます。
時計合わせ
ここ↓でNTPで合わせた。

ファイル数の上限変更
ラズパイだと1024だったので/etc/security/limits.confで65535に変更しないといけないみたい。
$ ulimit -n 1024
rootだけ?上限を変更すればいいみたい。追加して再起動。
$ sudo vim /etc/security/limits.conf #以下を追加 root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536
Fluentdインストール
$ sudo apt-get install ruby-dev libssl-dev $ sudo gem install fluentd --no-ri --no-rdoc -V
確認
$ cd /home/pi $ fluentd --setup ./fluent $ fluentd -c ./fluent/fluent.conf -vv &
ここでなにやらトレースやエラーがたくさん出てきた。fluent.confはrootでしか取得できないログ設定や他の動いてないコマンドのログがたくさん書いてあるのでエラーになったもよう。
別シェルを出してテストしてみる。
$ echo '{"json":"message"}' | fluent-cat debug.test
以下のように表示されればちゃんと動いてる。
2019-01-20 05:50:42.083180503 +0900 debug.test: {"json":"message"}
停止
$ ps aux | grep fluent $ sudo kill 795 など#停止
設定ファイルを最低限にして起動してみる
fluentdを起動するとエラーになるので設定ファイル見直してテスト。
# cd /etc/fluent $ sudo mv fluent.conf fluent_back.conf $ sudo vim fluent.conf <source> type forward port 24224 bind 0.0.0.0 </source> <match debug.**> @type stdout </match> $ fluentd -c /etc/fluent/fluent.conf -vv & 2019-02-01 13:35:33 +0900 [info]: fluent/log.rb:322:info: parsing config file is succeeded path="/etc/fluent/fluent.conf" 2019-02-01 13:35:33 +0900 [trace]: fluent/log.rb:281:trace: registered output plugin 'stdout' 2019-02-01 13:35:34 +0900 [trace]: fluent/log.rb:281:trace: registered buffer plugin 'memory' 2019-02-01 13:35:34 +0900 [trace]: fluent/log.rb:281:trace: registered formatter plugin 'stdout' 2019-02-01 13:35:34 +0900 [trace]: fluent/log.rb:281:trace: registered formatter plugin 'json' 2019-02-01 13:35:34 +0900 [warn]: fluent/log.rb:342:warn: 'type' is deprecated parameter name. use '@type' instead. 2019-02-01 13:35:34 +0900 [trace]: fluent/log.rb:281:trace: registered input plugin 'forward' 2019-02-01 13:35:34 +0900 [info]: fluent/log.rb:322:info: using configuration file: <ROOT> <source> type forward port 24224 bind "0.0.0.0" </source> <match debug.**> @type stdout </match> </ROOT> 2019-02-01 13:35:34 +0900 [info]: fluent/log.rb:322:info: starting fluentd-1.3.3 pid=8618 ruby="2.3.3" 2019-02-01 13:35:34 +0900 [info]: fluent/log.rb:322:info: spawn command to main: cmdline=["/usr/bin/ruby2.3", "-Eascii-8bit:ascii-8bit", "/usr/local/bin/fluentd", "-c", "/etc/fluent/fluent.conf", "-vv", "--under-supervisor"] 2019-02-01 13:35:37 +0900 [info]: fluent/log.rb:322:info: gem 'fluentd' version '1.3.3' 2019-02-01 13:35:37 +0900 [info]: fluent/log.rb:322:info: adding match pattern="debug.**" type="stdout" 2019-02-01 13:35:37 +0900 [trace]: #0 fluent/log.rb:281:trace: registered output plugin 'stdout' 2019-02-01 13:35:37 +0900 [trace]: #0 fluent/log.rb:281:trace: registered buffer plugin 'memory' 2019-02-01 13:35:37 +0900 [trace]: #0 fluent/log.rb:281:trace: registered formatter plugin 'stdout' 2019-02-01 13:35:37 +0900 [trace]: #0 fluent/log.rb:281:trace: registered formatter plugin 'json' 2019-02-01 13:35:37 +0900 [warn]: #0 fluent/log.rb:342:warn: 'type' is deprecated parameter name. use '@type' instead. 2019-02-01 13:35:37 +0900 [info]: fluent/log.rb:322:info: adding source type="forward" 2019-02-01 13:35:37 +0900 [trace]: #0 fluent/log.rb:281:trace: registered input plugin 'forward' 2019-02-01 13:35:37 +0900 [info]: #0 fluent/log.rb:322:info: starting fluentd worker pid=8623 ppid=8618 worker=0 2019-02-01 13:35:37 +0900 [info]: #0 fluent/log.rb:322:info: listening port port=24224 bind="0.0.0.0" 2019-02-01 13:35:37 +0900 [info]: #0 fluent/log.rb:322:info: fluentd worker is now running worker=0 2019-02-01 13:35:42 +0900 [trace]: #0 fluent/log.rb:281:trace: connected fluent socket addr="127.0.0.1" port=50332 2019-02-01 13:35:42 +0900 [trace]: #0 fluent/log.rb:281:trace: accepted fluent socket addr="127.0.0.1" port=50332
ログ保存用DBと表示
次にElasticsearchやKibanaをインストールしていきます。
これはうまくいかなかった。
InfluxDB+Grafanaを使うことにする。

自動起動
rootユーザーでラズパイ起動時に起動しておく。
$ sudo su # echo '@reboot /var/lib/gems/2.3.0/gems/fluentd-1.3.3/bin/fluentd -c /etc/fluent/fluent.conf -vv &' | crontab
td-agent インストール 失敗
なんだかtd-agentをインストールするのが最近のやりかたらしいのでやってみる。結果ラズパイはarmhf に対応してないようなのでインストール失敗
ラズパイのバージョンを「lsb_release -a」で確認したらCodename「stretch」だったのでFor Debian Stretch,をダウンロードすると・・・td-agent が見つかりません・・・なんで?
$ sudo curl -L https://toolbelt.treasuredata.com/sh/install-debian-stretch-td-agent3.sh | sh ・・・省略 ヒット:4 https://repos.influxdata.com/debian stretch InRelease パッケージリストを読み込んでいます... 完了 N: リポジトリ 'http://packages.treasuredata.com/3/debian/stretch stretch InRelease' がアーキテクチャ 'armhf' をサポートしないため設定ファイル 'contrib/binary-armhf/Packages' の取得をスキップ パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 E: パッケージ td-agent が見つかりません Installation incompleted. Check above messages.
よく調べてみるとarmhf は、 “arm hard float”の略でRaspbianでは対応して無いっぽい。treasure-data.listが作られるのでいったん削除。
$ sudo rm /etc/apt/sources.list.d/treasure-data.list
td-agentはうまくインストールできないので、やはり上のapt-getでインストールしたfluentを使う。
参考


コメント