Embulkを活用した
ログ管理システム
2015-12-15
Embulk Meetup Tokyo #2
自己紹介
• 池添 明宏 / @zoetro
• グループウェアの開発
• フロントエンドチーム

兼 パフォーマンス障害対策チーム
• 最近の興味: Embulk, Elasticsearch, Kibana, Vert.x, Rx
fluentdが使えない!
• セキュリティ上、顧客環境のログデータを外
部に送信することはできない。
• ログデータは手動で取得するしかない。
ログ管理システムをつくろう
• 持ち帰ってきた大量のログファイルを高速に処理
したい。
• 専門的な知識を持たなくても、OS・ミドルウェ
アや製品のバージョンの違いを気にせずに気軽に
ログを分析できるようにしたい。
• 顧客ごとに取得したログファイルの管理をしたい。
開発中のある日…
作ろうとしているものが

そこにはあった
プラグインシステム、並列・分散処理、guess機構、

リトライ・リジューム などなど
Embulkを使って作り直し
• Embulkを利用するメリットが大きいと判断。
• プラグインにより対応ログを簡単に増やせるようになる。
• 並列処理やリトライ処理を自前で作らなくていい。
• UIやログ管理機能はそのままに、ログの登録箇所をEmbulk
に置き換え。Javaのライブラリとして呼び出すようにした。
• 既存のログ登録処理はプラグイン化。
ログ管理システムアーキテクチャ
ログ管理システムの機能
• ログファイルをアップロードするためのUI
• ログタイプを推測してElasticsearchに登録
• 登録したログファイルの管理機能
• Kibanaのインデックスパターンを自動登録
し、グラフのリンクを自動生成
利用プラグイン
• output: elasticsearch
• input: sar (自作), filesplit
• parser: grok (自作), csv, ltsv
• filter: column
自作プラグインの紹介
embulk-parser-grok
• grokという正規表現ライクな記法でファイル
をパースできる汎用パーサプラグイン。
• https://github.com/arielnetworks/embulk-
parser-grok
embulk-parser-grok
• 複数行のログにも対応。
• パースエラー発生時に無視して処理を続けるかどうかを選択可能。
• Java製guessプラグイン。
• タイムスタンプのパーサとしてSimpleDateFormatか標準のJRubyの
パーサを切り替えられる。
• 標準のタイムスタンプパーサが遅い。
• https://github.com/embulk/embulk/issues/145
grokとは
• 正規表現を拡張して使いやすくしたライブラリ。
• パターンに名前をつけて再利用することができる
• C言語実装、Java実装、Ruby実装などがある。
• Grok Constructor
• http://grokconstructor.appspot.com/
grokの利用例
URIPATH (?:/[A-Za-z0-9$.+!*’(){},~:;=@#%_-]*)+
WORD bw+b
NUMBER (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:.[0-9]+)?)|(?:.[0-9]+)))
ACCESS_LOG %{URIPATH:request} %{WORD:method} %{NUMBER:duration}
/index.html GET 1234
{
request: /index.html,
method: GET,
duration: 1234
}
パターンファイル
パース対象 パース結果
既存のパターンが利用できる
embulk-input-sar
• sar(sysstat)というLinuxのシステム情報(CPU,
メモリ, IO, ネットワーク)を収集するツールの
出力を取り込むためのプラグイン。
• sysstat ver.7 ~ 11に対応。
Kibanaプラグイン
• JavaのスレッドダンプをEmbulkでElasticsearchに投
入。
• Kibanaのプラグインで

スレッドダンプを可視化。
• 長時間ブロックしている

処理や呼び出し回数の多い

処理がわかる。
開発で困っていること
• Java APIでEmbulkを実行したときに、戻り値としてい
ろいろな情報を返したい。パースに成功 or 失敗した数
とか、エラーの理由とか。進 状況も取れるとなお嬉し
い。
• Java APIとして実行したときに、Rubyのプラグインを利
用したい。
• Javaでguessプラグインが作りにくい。
まとめ
• EmbulkにWebのUIを用意してあげることで、ログ
分析のハードルがとても低くなった。(エンジニア
じゃなくてもログに触れるようになった)
• Embulkのおかげで、いろいろなパターンのログに
簡単に対応できるようになった。
• grokプラグイン便利なので使ってみてください。

Embulkを活用したログ管理システム