Elasticserchとkibanaでログの可視化
2016年 12月 14日
このエントリーは、エキサイト Advent Calendar 2016 の 12/14 の記事です。
エキサイトとしては初のAdvent Calendar参戦です。
スノーボードに行きたくてうずうずしている
エキサイトのブログチーム エンジニアの山野です。
エキサイトブログ では 11月よりアクセスレポートのリニューアルを行いました。
今回はアクセスレポートに関連してログの可視化について記載していきたいと思います。
はじめに
なんのためにfluentdからelasticserchに流し込むの??
elasticsearch社が提供しているkibanaを使ってログの可視化(グラフ化)が
ニアリアルタイムで確認することができます。
すると日々溜まっていたログから何かしらの情報(不正アクセス等)を確認したい時。
今まで、わざわざサーバーに入ってログを開いて確認していためんどくさい作業が
fluentd -> elasticsearch <-> kibana 構成でログをelasticsearchのqueryで検索できたりグラフ化することができます。
グラフ化することで負荷の高い時間帯や不正なアクセス等が一目瞭然でわかります。
結果めんどくさい作業や時間を短縮できたりもするのではないでしょうか。
リアルタイムなランキング等も簡単に出せたりもします。
他にもこんなメリットがあります!ということがありましたらSNSでシェアしていただけますと助かります。
それでは簡単に手順について書いていきます。
環境
- Ubuntu 14.04
- openjdk-8-jdk
- fluentd 0.12.26
- elasticserch 2.3.5
- Kibana 4.5.4
// elasticsearch plugin install$ sudo /opt/td-agent/embedded/bin/gem install fluent-plugin-elasticsearch // アクセスログをelasticsearchに流す <source> type tail format /^(\tD=(?<accesstime>[\d]+))(\tI=(?<ip>[0-9.]+))?(\tU=(?<uid>[^\t]+))?(\tM=(?<method>[^\t]+))?(\tG=(?<ua>[^\t]+))?(\tR=(?<request_path>[^\t]+))?(\tF=(?<referer>[^\t]+))?(\tQ=(?<query>[^\t]+))?(\tSN=(?<SN>[^\t]+))?(\tSLC=(?<SLC>[^\t]+))?(\tSO=(?<SO>[^\t]+))?(\tx_domain=(?<x_doman>[^\t]+))?(\tRESPONSE_T=(?<RESPONSE_T>[^\t]+))?(\tSTS=(?<STS>[^\t]+))?.*$/ format apache2// アクセスログをelasticsearchに流す time_format %y%m%d%H%M%S path /var/log/apache2/fewslog.%Y%m%d read_from_head true pos_file /tmp/td_agent_fewslog_elasticsearch.pos tag excite.fewslog.elasticsearch.log</source>
// matchしたログ転送設定<match **> type forward <server> host 192.168.*.* </server></match>
parameters | |
---|---|
format | tailするログのフォーマットを指定します。正規表現での指定も可能です。今回は社内で利用しているログが独自フォーマットの為、正規表現で指定しています。apacheのaccesslogの場合はformat apache2と指定するだけで大丈夫です。 |
time_format | 時刻書式を指定します。 |
path | tailするログのpathを指定します。","で複数のpathを指定することもできます。 |
read_from_head | tail pluginはデフォルトでは末尾に追加された際に動作するがファイルを頭から読みたい場合trueにする。今回は日付が変わって新しいファイルに切り替わった瞬間のログを欠損させないためにtrueにしています。 |
pos_file | tailをどこまでしたか記録するファイルの指定をします。 |
tag | イベントのタグです。 |
<match excite.fewslog.elasticsearch.**> type elasticsearch host 192.168.*.* port 9200 type_name fews_log logstash_format true buffer_type file buffer_path /tmp/logs/fews/fluentd*.buffer buffer_chunk_limit 256m buffer_queue_limit 128 flush_interval 60s retry_wait 5s</match>
parameters | |
---|---|
host | elasticsearchのhostを指定します。 |
port | elasticsearchのportを指定します。 |
type_name | type_nameを指定します。テーブル名みたいなもの。 |
logstash_format | logstashformatで出力します。 |
buffer_type | bufferを出力するタイプ |
buffer_path | bufferのpathを指定します。 |
buffer_chunk_limit | 設定した容量がたまったらファイルに出力します。elasticserch側の設定 http.max_content_lengthより大きいとエラーになるので注意。 |
buffer_queue_limit | 未送信のbuffer_chunkの保持数を指定します。 |
flush_interval | buffer_chunk_limitに設定した容量に達しなくても指定した時間を経過したらファイル出力されます。 |
retry_wait | 再送するまでの時間を指定します。 |
- kuromoji
- kopf
- kibana
- analysis-icu
// plugin install$ cd /usr/share/elasticsearch/$ sudo wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/plugin/analysis-kuromoji/2.3.5/analysis-kuromoji-2.3.5.zip$ sudo bin/plugin install file:///usr/share/elasticsearch/analysis-kuromoji-2.3.5.zip$ sudo wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/plugin/analysis-icu/2.3.5/analysis-icu-2.3.5.zip$ sudo bin/plugin install file:///usr/share/elasticsearch/analysis-icu-2.3.5.zip$ sudo wget https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip$ sudo bin/plugin install file:///usr/share/elasticsearch/master.zip$ sudo wget http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip$ sudo bin/plugin install file:///usr/share/elasticsearch/kibana-latest.zip
// 再起動して設定反映$ sudo service elasticsearch restart
// kopfをブラウザで確認// http://192.168.*.*:9200/_plugin/kopf/
// elasticsearch.ymlに設定を追加$ sudo vi /etc/elasticsearch/elasticsearch.ymlhttp.max_content_length: 1024mbhttp.max_initial_line_length: 100kthreadpool.index.queue_size: -1threadpool.bulk.queue_size: -1bootstrap.mlockall: true
parameters | |
---|---|
http.max_content_length | postする際のcontentlengthがここで設定した容量を超えるとエラーになります。デフォルトは100mb |
http.max_initial_line_length | urlのmaxlengthの設定。デフォルトは4kb |
threadpool.index.queue_size | index/deleteでペンディングされたリクエストのキューの数の設定。デフォルトは200 無制限の場合は -1 |
threadpool.bulk.queue_size | bulkでペンディングされたリクエストのキューの数の設定。デフォルトは50 無制限の場合は -1 |
bootstrap.mlockall | スワップしないようにtrueを設定します。 |
[WARN ][monitor.jvm ] [Revanche] [gc][old][6025][64] duration [29.4s], collections [1]/[29.8s], total [29.4s]/[19.2m], memory [24.5gb]->[11gb]/[24.9gb], all_pools {[young] [47.4mb]->[2kb]/[266.2mb]}{[survivor] [28.3mb]->[0b]/[33.2mb]}{[old] [24.5gb]->[11gb]/[24.6gb]}
$ sudo vi /etc/init.d/elasticsearchES_HEAP_SIZE=7g
kopf
$ wget https://download.elastic.co/kibana/kibana/kibana-4.5.4-linux-x64.tar.gz$ cd /usr/local/$ /usr/local$ sudo mv ~/kibana-4.5.4-linux-x64.tar.gz ./$ sudo tar zxvf kibana-4.5.4-linux-x64.tar.gz$ sudo ln -s kibana-4.5.4-linux-x64 kibana$ cd kibana/$ sudo cp -p config/kibana.yml config/kibana.yml.org$ sudo vi config/kibana.ymlelasticsearch.url: "http://192.168.*.*:9200"
// kibanaをdaemonで起動するためのスクリプト$ cd ~$ git clone https://github.com/pbamba/kibana-beta-daemon.git$ sudo cp kibana-beta-daemon/kibana /etc/init.d/$ sudo chmod 755 /etc/init.d/kibana$ sudo vi etc/init.d/kibana//17行目空になっているので起動スクリプトの場所を指定DAEMON=/usr/local/kibana/bin/kibana
// kibana起動$ sudo service kibana start
// ブラウザで確認// http://192.168.*.*:5601
感想
クリスマスまで続くエキサイト Advent Calendar 2016
ぜひ今後も投稿をウォッチしてください!