Norikra meetup #2 に参加してきた
Norikraをつかいたいなーという気持ちを主張するためにとりあえずmeetupに参加してきた。
AWS Summitからのはしごだったのでさすがに疲れた。。。
メルカリでのNorikraの活用、Mackerelを添えて
- kazeburoさん
Mercari
いかに早くスムーズにサイクルを回すか
Zabb....?
- いいことはいっぱい
- 煩雑だしめんどくさい
DevとOpsで情報を共有
- MetricsをDevと共有
これを何とかするのに、fluentd経由でkibana / bigquery / tdなどでやっている
何かあった時にすぐ知りたい
Norikra + mackerel
mackerel
Norikra にSQLを投入するとmackerelにグラフを作られるようにしてみた
- そこにalert用の閾値設定
メルカリでのNorikra構成
Norikraが落ちる問題
- GCの途中で落ちてるっぽい
- 正直分からない
設定とクエリ
Basic count()
percentile
- アクセスのレスポンスタイムのパーセンタイルを取りたい
- 全件やるとクエリが重そうだったので、1分間の最初の五万件だけを対象に絞った
- percentilesのプラグインが返してくるのがオブジェクトの形になってしまうので、これをフラットにするためにもう一つplugin
- レスポンスタイムの監視は、ほとんどの速いレスポンスに引きづられるので平均は意味が無い
- なので、パーセンタイルや中央値などを使って監視するのが正しい
Q: kibanaと比べてどう?
- データを一杯入れると重いし、グラフを多人数で見るのが重たい
- リアルタイムにエラーログを見たい、とかはkibana使ってる
Q: メモリとかGCオプション
- memory 64Gのマシンで、max 40Gで使ってる
- メモリが少ないと圧縮、とかのオプションは外してる
- フルGCで泊まる時間はNorikraでは問題ないので、そんなに気にしてない
Q: クエリのタイムウィンドウはどれくらいで運用してる?
- 1分ぐらい
- 特別重くかかるものの時だけは5分ぐらい
Q: 冗長化はしてる?
- してない
Norikra to realtime log analytics
harukasan
昔はsshでログ取ってくるとかhogehoge
- 今はfluentd
- そのままTDやHDFSやElasticsearchとか
さらにそれをCloudforecastとか、kibanaとかtableauとか
fluentdがあるおかげで、ここを通せばだいたいどうとでもなる
- でも、そこから先の解析はまだよしなにやってくれるわけじゃない
解析の方式
- Batch processing
- daily / monthly...
- PVとか
- Ad-hoc analysis
- Kibata & Elasticsearch
- BI Tool: Tablau
Offline Analysis
- Excel....!
Batch processは重すぎる
- 5分毎の・・・1分ごとの。。。というのを知りたいときには困る
- エラー時の情報をすぐに通知して欲しい
こういうのに向いてる方式
Stream Processing
- データはずっと流れていて、そこにtime windowを切る
- そのデータに対して処理をする
- Norikra
Norikra
- schema less
- SQL like query
fluentdから送る
- fluent-plugin-norikra
target_map_tag
にしておくと便利
- fluent-plugin-norikra
じゃあその結果を他に流すか?
- fluentd -> Norikra -> fluentd
- sweep でタグを使って投げる
Norikra Deployment
Norikra / GrowthforecastあたりはSPOFで困ってる
Hardware
- Norikraにはメモリいっぱい(8GB以上
JVM 1.7
- jruby でbuild
daemonize はsupervisord
Q: Norikra自身の監視は?
- 特にしてない
Q: どのくらいの数のクエリ入れてますか?
- 5~6こ
- そんなに多くはならない
Q: time windowどのくらいにしてる?
- 1分にしてる
- でかくするとすごいメモリを食う
NorikraでWebサービスを守る
- fujiwaraさん
- HTTP status code / response timeを書いたり
fluentd-plugin-(datacounter|numeric-monitor)を置き換えた
r3.xlarge ( 4core 30GBのメモリ )
- メモリは10Gから多い時で20Gいくかどうか
クエリ数はちょっと多い
- VirtualHost毎にカウントしてる
- なんだかんだ40クエリぐらいかけている
スパマーが来た
- Web版を出したら、APIとかが見えるので、POSTをしてきたりされた
- APIにPOSTメソッドにモリモリ送ってきものをクエリで抽出
- twitter経由でのログインも抽出
- さらに10分に何回、1時間に何回、という閾値も設定
これで引っかかったものをfluentdの自作プラグインでフックして、memcachedに投げ込んでspam-reportが発行される
まとめ
- 簡単にクエリをカスタマイズできて、自作plugin書くと色々できる
Gunosy AdのNorikra事例
-
- Adでターゲティング広告みたいなことしてる
- ユーザーの好みと外れてるものはできるだけ早く外したい
- イケてる広告画像をできるだけ早く洗い出したい
環境
c4.large 1台あたり
- 1000req/sec
- 2000~2500log/sec
元々はRedshift+独自の集計
- だるい
ログ量多くてkibana4に生ログ突っ込むと死ぬ
- Speak streaming 使ってもしょうがない
そこでNorikra
最終段のところでKibana4につっこむ
OpsWorksでポチポチサーバ構築して多段構成を何とかしてる
- クエリ情報は全部custom jsonにくくりだしてる
監視
datadogはdashbordにiframe埋め込めて便利
Norikra Recent update
(スライド見つからなかった)
tagomorisさん
1年間で約17リリース
Suspend Queries
- なんかの理由でちょっと止めたい
- 登録はするけど一時的に止める、ということが可能に
- suspendしたクエリはstats fileに吐き出されないので注意
Nullable fields
- 同じようなデータなんだけど複数の場所から送られてくる
- 新しいパラメータには存在するけど、古い方にはない。。。けど集計にはどっちも含めたい!という場合
- NULLABLE()で囲むと、 項目がnullのイベントも抽出される
Listener
- クエリのグループを指定するできる
- LOOPBACK(target)
- STDOUT() -> 結果が出たら、メモリプールに行かずにNorikraのログに吐かれる
- クエリのグループを指定するできる
Listener plugin
- Listernerを自分で作れる
- これでfluentd-pluginがなくても色々できる!
- sync listener vs async listener
Dynamic plugin reloading
- SIGHUPで読み込まれるようになった
- restartなしでよくなった
その他にも色々