読者です 読者をやめる 読者になる 読者になる

Elasticsearchを使ってみた

twitterを見ていたら、こんなTLが流れてきました

見ててなんとなくこれまでzabbixとかでやりたいと思ってたことの代わりにできそうな気がしてきたので、触ってみることにしました。 ※zabbixはすでに挫折している

ただ、そもそもデータとして何を集めるかってことですので、とりあえず手元にあったRPi3とBME280で温度とってみることにしました。

目次

  1. RPiのセットアップ
  2. ELK(Elasticsearch+Logstash+Kibana)のインストール
  3. Logstashの設定
  4. その他

環境

  • 温度湿度気圧の取得
    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にアクセスすればデータが入ってるのがわかるのでムフフできます。あとはそのデータでグラフ書いたりして遊びましょう。 ちなみに、部屋の温度を測ってみたらこんな感じになりました。 f:id:kam1nchu:20161217182602j:plain

ハマったところとか

  • logstashコマンドが起動しない
    bitnamiでインストールするとinstalldir内にJavaが配置されるので、JAVA_HOMEとかのパスをそこに指定した
  • logstashがバックグラウンドで動かない
    まだやり方がわかってないので、screenコマンド(仮想端末)内で実行してます
  • http_pollerプラグインでscheduleが使えない
    bitnamiでインストールした時のhttp_pollerのバージョンが古いみたい。intervalで対応できた。
  • RPi3の無線LANが死ぬ
    最初は無線LANでやってましたが、半日くらいで切れてしまうので、結局有線LANでやっています。。
  • 情報が少ない
    特にlogstashの情報が少なかったです。ていうか英語ばっかでした。読めるようになろう英語!!

おわりに

ほとんどネット記事とか公式のドキュメントに沿ってやっただけで大したことしてないのに、それっぽいものができてなかなか楽しかったです。 Zabbixと違い、あくまでデータの分析がメインになるのでそのシンプルさが逆にとっつきやすくなってとてもいいなと感じました。 見た目もイケイケですしね。 温度の取得をできるようになった後に、RTXのsyslog分析とかもやりましたが詳細についてはまた次回にしたいと思います。