こんにちは。SI部の坂口です。
複数台のサーバやクラウド環境を合わせた運用を行っている際、ログデータの集計方法については
工夫が必要になることもあります。
今回はその際に有効なツールの紹介と、基本的な利用方法をご紹介させていただきます。
ログデータ集計ツールの紹介
fluentd (フルエントディー)
fluentdは、複数の場所に分散したデータや、常に増え続けるデータの安全な
転送・収集・集約・保存であったり、リアルタイム処理についての精査、
さらに、安定性において高水準で成功を収めているソフトウェアになります。
また、機能拡張と言う観点においてもプラグインで拡張を行うことができ、
公開されているプラグインも多数存在してます。
特徴としては、集計に必要なデータの入力、変換、転送、合成、出力といった
一連の処理を「ストリーム(連続的な流れ)」としてモデル化していることがあげられます。
growthforecast(グロスフォーキャスト)
growthforecastは、Webサーバとして起動し、POSTで数値(データ)を与えると
手軽にグラフとして表現してくれるツールです。
上記のツールのインストールにつきましては、パッケージインストールとなる為、割愛させていただきます。
プラグインの紹介と設定例
プラグインとは、さまざまな機能をもった、fluentdの拡張コンポーネントを指します。
今回は、代表的なプラグインをご紹介させていただきます。
クエリ(mysqlなど)で定期的にログデータの取得ができるプラグイン
ログデータ収集の設定として、sourceディレクティブを利用して取得します。
設定例
source { type : "mysql_query" host : "127.0.0.1" username : "mysql" database : "mydb" password : "" interval : "60m" tag : "query.mydb.mytbl" query : "select COUNT(*) from mytbl where name = 'value'" }
アプリケーションログから定期的に特定のログデータを集計するプラグイン
fluentdには標準で搭載されているいくつかのプラグインがあり、
その中でもアプリケーションログを情報元として集計するプラグインがあります。
以下のようなアプリケーションログを出力していた場合の、ログデータを集計する設定を示します。
アプリケーションログ出力例
[INFO] 2014-01-01 12:34:56 - value = 100
設定例
source { type : "tail" path : "/tmp/application.log" pos_file : "/var/log/td-agent/application.pos" tag : "tail.myappli" format : "/^.+ - (?.+) = (?.+)$/" }
以上が、ログデータの集計についての説明になります。
非常に簡単な設定で、ログデータの集計が行えることがわかると思います。
また、今回の設定内容は下記のとおりです。
・type : ログの入力方法
・host : 格納先情報
・user : ログイン情報
・database : データベーススキーマ
・password : パスワード
・interval : インターバル時間
・tag : イベントタグ
・query : SQL文
・path : 読み込むパスです。複数パスは’,‘区切りで指定
・pos_file : 最後に読み込んだ位置を記録
・format : ログのフォーマット、正規表現
集積したログデータを可視化
それでは、集計したログデータを元に、growthforecastを
利用して可視化をしてみましょう。
growthforecastを、fluentdのプラグインとして利用します。
設定例
match ("mydb.**") { type :copy store { type : "growthforecast" gfapi_url : "http://localhost:5125/api/" service : "mydb" tag_for : "section" remove_prefix : "mydb." name_key_pattern : ".*" keepalive : "no" } } }
グラフ化した場合、下記のように表示されます。
まとめ
いかがでしたでしょうか。
上記で紹介したもの以外にも様々なプラグインが存在しており、比較的簡単に、
かつ柔軟にログデータの集計ができます。
さらにリアルタイムでグラフとして表現でき、データ解析としても利用できるのが魅力です。
グラフ化すればログデータを追跡する必要がなく、視覚的に表現されいるので瞬時に分析することができますよね。
今回集計したデータ以外にも、cpuやmemory等のログデータを集計すればシステムモニターにもなります。
システム運用にも活用することができる設定も、スクリプトを利用して独自で書くことができるので、
動的なログデータ集計も可能となります。是非活用していきたいですね。