ども、Ansible 一年生のかっぱです。
はじめに
Ansible の実行結果を後から見たいなと思ったので Callback Plugin と fluentd を使ってザクッと Elasticsearch に放り込んでみたメモ。
module の話
今回は Ansible の log_plays.py をちょっと改変して fluent-logger-python と組み合わせて Elasticsearch に放り込んでみた。
ここで Ansible モジュールのお話を少し…と言うほど Ansible のモジュールについての知識は無いので Ansible モジュールの特徴を以下に整理。
- 言語は問わない(Python 以外でも作れるらしい)
- 幾つか種類に別れている(Callback / Notification / etc…)
- 今回扱う Callback プラグインは Chef の Handler みたいなもの(という解釈)
プラグインとモジュールを混同してしまっている…
実装(という程ではないけど)
参考
- ansibleのログをfluentdに流す — そこはかとなく書くよん。
- Developing Plugins — Ansible Documentation
- Ansible の module の作成 | cloudpack.media
図
以下のような構成を Docker でザクッと作る。

Callback module(俺の Ansible Callback module)
長くなったので gist に添付。
fluentd に飛ばすのはとても簡単で以下に記載している fluent-logger-python をインストールしてモジュールを import する。
import os import time import json from fluent import sender #追加 from fluent import event #追加 TIME_FORMAT="%b %d %Y %H:%M:%S" MSG_FORMAT="%(now)s - %(category)s - %(data)s\n\n" def log(host, category, data): (snip)
以下のように setup メソッドで localhost の fluentd に対して接続。
sender.setup('ansible', host='localhost', port=24224)
そして、以下のように Event メソッドで fluentd にデータを送る。
event.Event(host, {
'host': host,
'category': category,
'messages': data
})
簡単。
Ansible を実行する環境でのちょっとした準備と fluentd の実行。
fluent-logger-python を入れておく。
pip install fluent-logger-python
ついでに fluent-plugin-elasticsearch も入れておく。
fluent-gem install fluent-plugin-elasticsearch --no-ri --no-rdoc -V
fluent.conf は以下のように設定。
<source>
type forward
bind 0.0.0.0
port 24224
</source>
<match ansible.**>
type copy
<store>
type stdout
</store>
<store>
type elasticsearch
include_tag_key true
tag_key @log_name
host ${elasticserach_host}
port ${elasticserach_port}
logstash_format true
logstash_prefix ansible
flush_interval 10s
</store>
</match>
fluentd を起動。
fluentd -c fluentd.conf -l test.log &
Callback モジュールの指定
幾つか指定方法があるようだが以下のように .ansible.cfg に指定。
[defaults] callback_plugins = ~/path/to/inventories/callback_plugins/
収束
適当に作った Playbook を実行してみる。

わざと失敗させてみたり。
確認
Elasticsearch でカクニン

おお。
Kibana でカクニン

初 Kibana4 で使い方が解らないけど…おお。
ということで
Ansible の task の結果をザクっと Elasticsearch に放り込んでみた。たまたま OpenSSL のバージョンアップ作業に利用してみたりしたが残念ながら改行は一行で表示されたりして視認性が高いとは言い切れないが証跡を残せるというのは良い。今回はあくまでもザクッと放り込んだだけだが、ちゃんとキー指定を細かく Elasticsearch に放り込んで上げると良いのかなと思った。