More Related Content Similar to Norikra + Fluentd+ Elasticsearch + Kibana リアルタイムストリーミング処理ログ集計による異常検知 (20) Norikra + Fluentd+ Elasticsearch + Kibana リアルタイムストリーミング処理ログ集計による異常検知37. ターゲット
本気度 長所 短所 狙い
単純なログ監視 ・導入楽
・カスタマイズ性弱
・検知網羅性弱
詳細なログ監視
・細かい設定可能
・自動禁止可能
・可視化可能
・アプリ開発コスト高
・通常のアクセスを
見抜けない
リスクベース認証
・複雑なケースに
対応可能
・データマイニング
導入開発コスト高
このあたりを
低コストで
43. Norikraとは
• 田籠氏が開発(元LINE 、現TD)
• 2014年5月に v1.0.0
• リアルタイムストリーミングエンジン
• jRuby(JVM)
• バックエンド Esper(Javaライブラリ)
• Google、CyberAngent、ドワンゴ各社が採用
• Hadoop規模以下のケースでログ集計、
Hadoopの前段でのログ集計事例など事例多数
46. ターゲット
本気度 長所 短所 狙い
単純なログ監視 ・導入楽
・カスタマイズ性弱
・検知網羅性弱
詳細なログ監視
・細かい設定可能
・自動禁止可能
・可視化可能
・アプリ開発コスト高
・通常のアクセスを
見抜けない
Norikraが
つかえそう
リスクベース認証
・複雑なケースに
対応可能
・データマイニング
導入開発コスト高
50. {"remote_addr":"10.132.3.16","count":101}
{"remote_addr":"10.132.3.21","count“:220}
select
remote_addr ,
COUNT(*) as count
from access.win:time_batch(1 min)
group by remote_addr
having count(*) > 1000
{ "time":"2015-03-29T22:17:37+09:00" , "remote_addr":"10.132.3.21" ,
"request_method":"GET" , "request_length":"176" , "request_uri":"/" , "https":"" ,
"uri":"/index.html" , "query_string":"-" , "status":"200" , "bytes_sent":"255" ,
"body_bytes_sent":"7" , "referer":"-" , "useragent":"curl/7.19.7 (x86_64-redhat-linux-gnu)
libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" , "forwardedfor":"-" ,
"request_time":"0.000" , "upstream_response_time":"-" , "request_body":"-" }
Nginx
Norikra
Fluentd
Fluentd
動的なイベント登録+スキーマ解釈
Fluentd経由でイベント発火
67. Elasticsearchの生クエリは
かなりわかりずらい。。
{
"size": 500,
"sort": {
"@timestamp": "desc"
},
"query": {
"filtered": {
"query": {
"query_string": {
"analyze_wildcard": true,
"query": "*"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"gte": 1427696454189,
"lte": 1427697354189
}
}
}
],
"must_not": []
}
}
}
},
"highlight": {
"pre_tags": [
"@kibana-highlighted-field@"
],
"post_tags": [
"@/kibana-highlighted-field@"
],
"fields": {
"*": {}
}
},
"aggs": {
"2": {
"date_histogram": {
"field": "@timestamp",
"interval": "30s",
"pre_zone": "+09:00",
"pre_zone_adjust_large_interval": true,
"min_doc_count": 0,
"extended_bounds": {
"min": 1427696454189,
"max": 1427697354189
}
}
}
},
"fields": [
"*",
"_source"
],
"script_fields": {},
"fielddata_fields": [
"@timestamp"
]
71. SQLライクな集計を支える
Esper
a highly scalable, memory-efficient, in-
memory computing, SQL-standard,
minimal latency, real-time streaming-
capable Big Data processing engine for
historical data, or medium to high-
velocity data and high-variety data.
75. ターゲット
本気度 長所 短所 狙い
単純なログ監視 ・導入楽
・カスタマイズ性弱
・検知網羅性弱
詳細なログ監視
・細かい設定可能
・自動禁止可能
・可視化可能
・アプリ開発コスト高
・通常のアクセスを
見抜けない
ほぼほぼ
実現
リスクベース認証
・複雑なケースに
対応可能
・データマイニング
導入開発コスト高
77. $ sudo yum install -y git gcc-c++
$ git clone
https://github.com/sstephenson/rbenv.git
~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"'
>> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ rbenv --version
rbenv 0.4.0-95-gf71e227
rbenv
78. $ git clone https://github.com/sstephenson/ruby-build.git
~/.rbenv/plugins/ruby-build
$ rbenv install -l|grep jruby
jruby-1.5.6
(snip)
jruby-1.7.9
jruby-9000-dev
jruby-9000+graal-dev
$ rbenv install jruby-1.7.9
$ rbenv shell jruby-1.7.9
$ ruby -v
jruby 1.7.9 (1.9.3p392) 2013-12-06 87b108a on
OpenJDK 64-Bit Server VM 1.7.0_51-
mockbuild_2014_03_13_04_35-b00 [linux-amd64]
jruby
79. $ gem install norikra --no-ri --no-rdoc
$ rbenv rehash
$ which norikra
~/.rbenv/shims/norikra
$ gem list --local | grep norikra
norikra (0.1.5 java)
norikra-client-jruby (0.1.5 java)
$ norikra start
norikra
93. SELECT
// 集計日時
current_timestamp() AS collected_timestamp,
channelId AS channel_id,
reason,
detail,
// エラー発生件数
count(*) AS error_count,
// 単位時間内で検出された最初のエラー発生日時
min(timestamp) AS first_timestamp,
// 単位時間内で検出された最後のエラー発生日時
max(timestamp) AS last_timestamp
FROM
// ウィンドウを1分ごとに定義
event_endpoint_error_log.win:time_batch(60 sec)
GROUP BY
channelId, reason, detail
HAVING
// エラー件数が1件以上あった場合に限定
count(*) > 0
99. BigQuery + fluentd + Norikra で
ラムダアーキテクチャ
http://blog.yoslab.com/entry/2014/07/09/202304
https://speakerdeck.com/kazunori279/building-a-lambda-architecture-in-10-minutes-with-bigquery-cep-and-docker
[用途] バッチ処理時の事前集計
114. <source>
type tail
format json
tag nginx.access.admin
path /var/log/nginx/web.its-lab.net/access.log
pos_file /var/log/td-agent/web.its-
lab.net_access.log.pos
</source>
Webサーバ側のFluentd
115. <match nginx.access.*>
type copy
<store>
type elasticsearch
host 10.132.3.31
port 9200
type_name access_log
logstash_format true
logstash_prefix gmo_access
logstash_dateformat %Y%m
</store>
<store>
type norikra
norikra 10.132.3.31:26571
buffer_queue_limit 1
retry_limit 0
remove_tag_prefix nginx
target_map_tag true
</store>
</match>
Webサーバ側のFluentd
赤枠以外
は
コピペで
OK!
120. <match norikra.query**>
type copy
<store>
type exec_filter
command /bin/bash /etc/td-agent/blocker.sh
time_key time
in_format json
out_format json
</store>
<store>
type elasticsearch
host localhost
port 9200
type_name access_log
logstash_format true
logstash_prefix norikra-count
logstash_dateformat %Y%m
</store>
Logサーバ側のFluentd
Fluentdから
構成
管理ツール
を叩く
実はただの
シェルスクリプト!