2013年11月23日土曜日

elasticsearch+kibana3で /var/log/messages を簡単に解析してみた

■事前準備

■/var/log/messagesを解析
1. 解析スクリプトを使ってelasticsearchにデータを投入
以下のスクリプトを適当な場所に配置し実行します
事前に「elasticsearch -f」でelasticsearchを起動しておいてください
#!/bin/sh

count=1
cat /var/log/messages | while read line
do
  date=`echo ${line} | awk '{print $1,$2,$3}'`;
  hostname=`echo ${line} | awk '{print $4}'`;
  message=`echo ${line} | awk '{for(j=5;j<NF;j++){printf("%s ",$j)}print $NF}'`;
  timestamp=`date "+%Y-%m-%d %H:%M:%S"`
  #echo ${date} ${hostname} ${message}
  curl -X POST http://localhost:9200/system/message/${count} -d "{\"date\":\"${date}\",\"hostname\":\"${hostname}\",\"message\":\"${message}\",\"@timestamp\":\"${timestamp}\"}"
  echo ${count};
  count=`expr ${count} + 1`;
done
内容としては/var/log/messagesをdateとhostnameとmessageに分割してelasticsearchにPOSTしています
/var/log/messages全行を処理してデータを投入します

2. @timestampの_mappingを変更する
@timestampフィールドは「type」が「date」でなければいけません
上記スクリプトで投入したデータは「type」が「string」になってしまっているので「date」に変換してあげます
現状のmappingは以下のコマンドで取得できます
curl -X GET http://localhost:9200/system/message/_mapping

elasticsearchにはmappingというメタ情報を持っており、これをPUTで更新してあげることで type を変更します
また、mapping は一回データを投入したあとではすでにmappingが確定してしまっているため一度削除してから更新する必要があります

curl -X DELETE http://localhost:9200/system/message/_mapping
curl -X PUT http://localhost:9200/system/message/_mapping -d '{"message": {"dynamic":"true","properties": {"@timestamp" :{"type":"date", "format":"YYYY-MM-dd HH:mm:ss"},"date":{"type":"string"},"hostname":{"type":"string"},"message":{"type":"string"}}}}'
※タイムスタンプ形式で「T」や「Z」が入ってしまうパターンがありますが入れないほうがいいです、うまくelasticsearchがパースできずグラフがうまく表示されないことがあります

これでelasticsearch側のデータ登録は完了です
あとはkibana3で可視化してみます

3. kibana3でグラフ作成
http://localhost:9200/kibana
にアクセスし画面下部の「Blank Dashboard」をクリックします


ダッシュボードの設定画面が表示されるので画面右上のダッシュボード設定ボタンをクリックします


Generalからダッシュボードの名前を設定します


Indexから登録したデータのindexのみを表示するようにします(デフォルト「_all」なのでそれでも問題ないです)


次にダッシュボードに戻り右下にある「ADD A ROW」をクリックします
グラフを表示するための行を追加していきます


行を追加できるダイアログが表示されますので title に「pie」「histogram」「table」の3つを入力して Create Row をクリックします


各行にパネルを追加していきます
画面の構成は「ダッシュボード」->「ロウ」->「パネル」の順で構成されています
先ほど3つのロウを追加したので1つ目の「pie」からパネルを追加していきます
ダッシュボードの左にある「Add panel to empty row」をクリックします


パネルを追加するダイアログが表示されますのでプルダウンから「pie」を選択し Add Panel をクリックしてパネルを追加します


同様に「histogram」「table」をプルダウンから選択して追加していきます
先ほどと違うのはspanの欄に 12 を入力して横いっぱいのパネルを作成します




追加後に以下のようになればOKです
事情により_idと_indexのみ表示しています
カラムの絞り込みはtableパネルで左の項目から表示したい項目にチェックをすると絞り込みが可能です


これで最低限のグラフの作成は完了です
肝はヒストグラムで@timestampがうまくparseできないとグラフが描画されません
また、ヒストグラムで表示しているのは「指定した期間内でヒットするデータの数」になるので細かく時系列ごとに見たい場合(秒間リクエスト数など)は範囲を1mや5m等の短い時間で指定することで見たいグラフが表示されるかと思います
今回使用したデータテストデータなのです、timestampも適当ですが、実際にはログのtimestampをうまくparseしてそれをelasticsearchに登録する感じになると思います

※今回elasticsearchに投入したデータだと以下のようなヒストグラムを見ることができるようになります
Interval:1s Line, Points, Stack:ON



■Tips
作成したグラフを保存する場合は右上のフロッピーのようなアイコンから「Save」->「Advanced」->「Set as my home」をクリックすると次回ダッシュボードアクセス時に今回作成したダッシュボードが表示されます
違いダッシュボードを作成したい場合は「Clear my home」をクリックすると次回アクセス時に初回画面が表示されるようになります

0 件のコメント:

コメントを投稿