概要
MongoDB のスロークエリログを td-agent に食わせて、ElasticSearch にスロークエリログを溜め込んでみました
環境
- CentOS release 6.3 (Final)
- td-agent 0.12.12
- fluent-plugin-mongo-slow-query (0.1.1)
- fluent-plugin-secure-forward (0.3.2)
- ElasticSearch 1.5.2-1
Mongo のスロークエリを td-agent に食わす
fluent-plugin-mongo-slow-query のインストール
- td-agent-gem install fluent-plugin-mongo-slow-query fluent-plugin-secure-forward
今回は fluent-plugin-secure-forward も使うのでインストールしておきます
もちろんなくても OK です
送信側の td-agent.conf の編集
- vim /etc/td-agent/td-agent.conf
<source>
type mongo_slow_query
path /var/log/mongodb/mongod.log
tag mongod.log
</source>
<match mongod.log>
secure no
type secure_forward
shared_key xxxxxxxxxx
self_hostname mongo001
<server>
host elastic001
port 24284
</server>
</match>
source に解析対象の mongod.log の指定します
mongod.log にはあらかじめ「–slowms」オプションを使ってスロークエリが出力されるようにしておきます
tag も設定しておきましょう
match で設定した tag の情報を受け取ります
受け取ったあとは secure_forward を使って ElasticSearch サーバに送信します
secure_forward の port はデフォルトの 24284 を使っています
受け取り側 (ElasticSearch側) の td-agent.conf の設定
受け取り側でも td-agent を起動して送信側から secure_forward で送信されたデータを受け取ります
- vim /etc/td-agent/td-agent.conf
<source>
type secure_forward
shared_key xxxxxxxxxx
self_hostname elastic001
cert_auto_generate yes
</source>
<match mongod.log>
type elasticsearch
logstash_format true
logstash_prefix mongod_log
</match>
secure_forward で飛んできた情報を source で受け取り、受け取った情報に含まれている tag を元に match で処理させます
type elasticsearch
を指定することで ElasticSearch にデータを送信することができます
port や host パラメータを指定しないとデフォルトの localhost:9200 に接続しにいきます
なので、あらかじめ ElasticSearch のインストールおよび設定、起動は実施しておきましょう
td-agent がいい感じに ElasticSearch にデータを入れてくれるので ElasticSearch 側は特に何も設定しないで起動しておけば OK だと思います
動作確認
各種 td-agent, ElasticSearch を起動しましょう
起動したら mongod.log にスロークエリが出るようなクエリを投げます
mongod.log にスロークエリログが出たら ElasticSearch 側にデータ入っているか確認してみます
データが ElasticSearch に入っているか確認する
localhost に API をコールして確認してみます
- curl -X GET ‘localhost:9200/mongod_log-2015.09.24’
みたいなインデックスにアクセスすれば Json データが取得できると思います
もしインデックス名がわからない場合は
- curl -XGET ‘localhost:9200/_cat/indices?v’ | grep mongo
あたりでインデックスの一覧が確認できます
それでもインデックスがない場合はうまく ElasticSearch にデータが送られていないことになります
今回の場合、secure_forward でデータを連携しているため、サーバ間の ACL を確認したり、secure_forward の文字列が正しいか確認してみてください
それでもダメな場合は一旦、type file
を使うなどしてデータが取得 - 連携されているか確認してください
0 件のコメント:
コメントを投稿