raspberry piでfluentd + elasticsearch + kibana
raspberry pi上でdockerを動かして、fluentdとelasticsearchとkibanaを動かす方法
raspberry pi上でdockerをうごかす
hyperiotを使ってpi上でdockerコンテナを動かせるようにする。コンテナイメージはdocker hubでいっぱい公開されてるけど、pi上で動くものはそんなに多くない。rpiとかhypriotとかで探すといい具合。
hypriotイメージの書き込み
下記からイメージをダウンロードして、SDカードに書き込み。windowsならDDwinかなにかで書き込みを。
Downloads · Docker Pirates ARMed with explosive stuff
初期設定
SDカードに書き込んだら、そのままSDカードのルートディレクトリにあるdevice-init.yamlファイルを編集する。
ホスト名と、wifiを使う場合はSSID/パスワードを書き込み。家庭内でDDNSなDHCPが動いていれば、ここで設定したホスト名が登録されるはず。
# hostname for your HypriotOS device
hostname: ホスト名
# optional wireless network settings
wifi:
interfaces:
wlan0:
ssid: "SSID"
password: "パスワード"
起動
作ったSDカードをraspberry piにセットして起動。hypriotのデフォルトのユーザー名とパスワードはpirate/hypriot。ホスト名でSSHするかHDMIをつなげて起動してIPアドレスを調べてもいい。
これでdockerが動く環境ができたので適当にdocker runしてみて動けばOK。
Elasticsearchを動かす
pi2上で動かす場合はメモリサイズをちょっと制限しておいたほうがいい感じ。
## 事前準備
dataディレクトリを作成する。
sudo mkdir /elasticsearch
sudo chown pirate /elasticsearch
esのコンテナを一度実行。これで/elasticsearch内に必要なファイルができる。
docker run -d -e ES_HEAP_SIZE=128m -p 9200:9200 -p 9300:9300 -v /elasticsearch:/data docker pull rpidockers/elasticsearch:1.7.1
docker ps
docker stop <<上記で確認したコンテナのID>>
設定ファイルの修正
/elasticsearch/config/elasticsearch.ymlをよしなに設定。
例えば
#bootstrap.mlockall: true
を有効化
bootstrap.mlockall: true
esの起動
ES_HEAP_SIZEを小さめにするために環境変数として指定。
docker run -d -e ES_HEAP_SIZE=128m -p 9200:9200 -p 9300:9300 -v /elasticsearch:/data rpidockers/elasticsearch:1.7.1
esの起動
dockerのお作法に基づき、環境変数を渡す形で
docker run -d -e ES_NETWORK_PUBLISH_HOST=192.168.11.202 -e ES_CLUSTER_NAME=tamurake -e ES_HEAP_SIZE=128m -p 9200:9200 -p 9300:9300 -v /elasticsearch:/data rpidockers/elasticsearch:1.7.1
ちなみに2台目以降はunicastでクラスタに入るために、ES_UNICAST_HOSTSを追加してあげる
docker run -d -e ES_NETWORK_PUBLISH_HOST=192.168.11.214 -e ES_CLUSTER_NAME=tamurake -e ES_UNICAST_HOSTS=[\"192.168.11.202\"] -e ES_HEAP_SIZE=128m -p 9200:9200 -p 9300:9300 -v /elasticsearch:/data rpidockers/elasticsearch:1.7.1
kibanaを動かす
上で起動したESを指定してkibanaを起動する
docker run -d -p 5601:5601 -e ELASTICSEARCH=<<接続するESのIPアドレス>>:9200 rpidockers/kibana
fluentdを起動する
elasticsearchとmqtt、SNMPとdriveを入れたfluentdのコンテナを作ったので、それを使う。
事前準備
configファイルを作成する。/fluentd/fluent.conf こんな感じ?
<source>
type mqtt
host <<mqttサーバ>>
port <<mqttサーバのポート>>
topic '/sensor/+'
username <<mqttサーバのユーザー名>>
password <<mqttサーバのパスワード>>
format json
</source>
<match .sensor.sensor>
type elasticsearch
host <<esサーバ>>
port 9200
logstash_format true
logstash_prefix sensor
</match>
<source>
type snmp
tag snmp.apart.nas.eth0.in
nodes name, value
host <<エージェント>>
community <<community名>>
mib ifHCInOctets.2
method_type get
polling_time 10
polling_type async_run
</source>
<filter snmp.**>
type record_transformer
<record>
obj ${tag}
</record>
</filter>
<match snmp.**>
type derive
add_tag_prefix derive
key1 value *8
min 0
</match>
<match derive.snmp.**>
type elasticsearch
host <<esサーバ>>
port 9200
logstash_format true
logstash_prefix snmp
</match>
fluentdの起動
docker run -d -v /fluentd:/fluentd/etc gorakuru/rpi-fluentd-mqtt-elasticsearch
kibanaで可視化
あとはesにたまったデータをkibanaで自由に表示してください!