share facebook facebook twitter menu hatena pocket slack

2015.07.15 WED

Ansible の実行結果を後から見たいなと思ったので fluentd を使ってザクッと Elasticsearch に放り込んでみたメモ

川原 洋平

WRITTEN BY 川原 洋平

ども、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 みたいなもの(という解釈)

実装(という程ではないけど)

参考

以下のような構成を Docker でザクッと作る。

20150326103151

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)snn"

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 は以下のように設定。


  type forward
  bind 0.0.0.0
  port 24224



  type copy
  
     type stdout
  
  
     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
  

fluentd を起動。

fluentd -c fluentd.conf -l test.log &

Callback モジュールの指定

幾つか指定方法があるようだが以下のように .ansible.cfg に指定。

[defaults]

callback_plugins = ~/path/to/inventories/callback_plugins/

収束

適当に作った Playbook を実行してみる。

20150326095034

わざと失敗させてみたり。

確認

Elasticsearch でカクニン

20150326095236

おお。

Kibana でカクニン

20150326095358

初 Kibana4 で使い方が解らないけど…おお。

ということで

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

元記事はこちら

Ansible の実行結果を後から見たいなと思ったので fluentd を使ってザクッと Elasticsearch に放り込んでみたメモ