Elasticsearchを使ってみた
twitterを見ていたら、こんなTLが流れてきました
軸が決まってないからこそ、elasticsearch が向くんやで?
— CERO-METAL (@cero_t) 2016年12月3日
雑にログを投げ込んでおいて、いろいろ試行錯誤できるのが、elasticsearch と kibana のいいところ。 https://t.co/sTYCJCxb64
見ててなんとなくこれまでzabbixとかでやりたいと思ってたことの代わりにできそうな気がしてきたので、触ってみることにしました。 ※zabbixはすでに挫折している
ただ、そもそもデータとして何を集めるかってことですので、とりあえず手元にあったRPi3とBME280で温度とってみることにしました。
目次
- RPiのセットアップ
- ELK(Elasticsearch+Logstash+Kibana)のインストール
- Logstashの設定
- その他
環境
- 温度湿度気圧の取得
RaspberryPi3(Raspbian)+BME280 - ELKサーバー
ProxmoxのContainer(Ubuntu16.04)
1. RPiのセットアップ
方針としては、httpでリクエスト投げるとjsonで情報取得できるといいなと思います。
とりあえず、温度とか取るためにこの記事を参考にして標準出力にcsvで情報を出せるようにしました。
karaage.hatenadiary.jp
ただ、自身の技術力の問題で「python書けない」&「node.js使ってもセンサー情報を取得できない」ことがよくわかったので、node.jsからpythonを呼び出す感じでソースを書きました。
github.com
これで、温度の取得はOK
2. ELKのインストール
困った時のbitnami bitnami.com ドキュメント丁寧に書いてあったので、さくさくっとインストールできました。
3. Logstashの設定
logstashの設定はここにインストールされる
installdir/logstash/conf/
のでいい感じに書いて配置しました。
input { http_poller { type =>"http_poller" urls => { service => { method => "GET" url => "http://hostname" # 温度取得してるサーバのurl } } request_timeout => 60 interval => 60 codec => "json" } } output { if [type] == "http_poller" { elasticsearch { hosts => ["XXX.XXX.XXX.XXX:9200"] # elasticsearchのIP document_id => "%{logstash_checksum}" index => "get_sensor_data-%{+YYYY.MM.dd}" } } # stdout { codec => rubydebug } }
んで、実行
logstash -f kibana.conf
4. その他
ここまでくれば、kibanaにアクセスすればデータが入ってるのがわかるのでムフフできます。あとはそのデータでグラフ書いたりして遊びましょう。 ちなみに、部屋の温度を測ってみたらこんな感じになりました。
ハマったところとか
- logstashコマンドが起動しない
bitnamiでインストールするとinstalldir内にJavaが配置されるので、JAVA_HOMEとかのパスをそこに指定した - logstashがバックグラウンドで動かない
まだやり方がわかってないので、screenコマンド(仮想端末)内で実行してます - http_pollerプラグインでscheduleが使えない
bitnamiでインストールした時のhttp_pollerのバージョンが古いみたい。intervalで対応できた。 - RPi3の無線LANが死ぬ
最初は無線LANでやってましたが、半日くらいで切れてしまうので、結局有線LANでやっています。。 - 情報が少ない
特にlogstashの情報が少なかったです。ていうか英語ばっかでした。読めるようになろう英語!!
おわりに
ほとんどネット記事とか公式のドキュメントに沿ってやっただけで大したことしてないのに、それっぽいものができてなかなか楽しかったです。 Zabbixと違い、あくまでデータの分析がメインになるのでそのシンプルさが逆にとっつきやすくなってとてもいいなと感じました。 見た目もイケイケですしね。 温度の取得をできるようになった後に、RTXのsyslog分析とかもやりましたが詳細についてはまた次回にしたいと思います。