SlideShare a Scribd company logo
メルカリでのNorikraの活用、
Mackerelを添えて
Norikra Meetup#2
Masahiro Nagano @kazeburo
Me
• 長野雅広(Masahiro Nagano)
• @kazeburo
• Mercari, Inc.
• Operations Engineer, Site Reliability
メルカリでのNorikraの活用、 Mackerelを添えて
メルカリでのNorikraの活用、 Mackerelを添えて
主要KPI
ダウンロード数
購入金額
出品数
1500万DL
月間数十億円
1日数十万品以上
急成長を支える運用
Plan
Do
SeeCheck
如何に速く、スムーズにサイクルを回すか
ソリューション...?
柔軟なメトリクス収集
カスタマイズ可能なグラフ
表現力高い通知
煩雑な手順
設定項目の多さ
専門的知識、慣れが必要
DevOps 時代
Dev と Ops の情報共有が大事
Metrics を Dev と共有する
App
BatchJob
Web
Ops Dev
Treasure Data
kibana
bigquery
ssh接続
できない
Graph と Alert も共有
Dev が欲しいデータを自ら設定可能に(したい)
メルカリでのNorikraの活用、 Mackerelを添えて
メルカリでのNorikraの活用、 Mackerelを添えて
mackerel
• はてな提供の「サーバ管理ツール as a
Service」
• 様々な時系列データを可視化・監視
• 各種ツールとの連携
メルカリでのNorikraの活用、 Mackerelを添えて
Mackerel仕組み
Server
Agent
Server
Agent
Client
Server
Host Metrics Service Metrics
Store Metrics, Graphing, Monitoring
App
BatchJob
Web
SQL投入
自動でグラフ
作成
Alert設定
Norikra + Mackerel
まじ、楽
NorikraとMackerelで
監視しておくよ
SQLをぽちっと.
新しい機能リリース
するんでログ
みておいて欲しい
グラフ出たので
ここに閾値を設定して
おきましょうか
そうですね∼
slackへ通知きた
確認します∼
OpsDev 1 2
3 4
* フィクションです
メルカリでの
Norikraの構成
App
BatchJob
Web
中��サーバ
cepサーバ
Norikraの構成
• access_logとerror_logが対象
• サンプリング等は行わず全件いれてる
• メモリマシマシ
• jolokiaを有効にしてKuradoでJVMの
monitoring
-javaagent:/path/to/jolokia-jvm-1.2.3-
agent.jar=port=8778,host=0.0.0.0,discoveryEnabled=false
Norikraが落ちる問題
• GCの途中?で落ちているっぽい
• 正直わからない
Current thread (0x00007fb88c030800): GCTaskThread
[stack: 0x00007fb891419000,0x00007fb89151a000]
[id=29597]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1
(SEGV_MAPERR), si_addr=0x0000000000000018
設定とクエリ
fluent-plugin-norikra
fluent-plugin-mackerel
Basic count()
<source>
type norikra
norikra localhost:8571
<fetch>
method sweep
target metrics
tag query_name
tag_prefix norikra.query
interval 3s
</fetch>
</source>
<match norikra.query.*>
type mackerel
api_key xxxxxxxxxxxxxxxxxxxxxxxx=
service xxxxxxx
metrics_name ${[2]}.${out_key}
out_key_pattern .+
retry_limit 1
</match>
Group指定
query_name: api_http_status
SELECT
COUNT(1, status like "5%") AS count_5xx,
COUNT(1, status like "4%") AS count_4xx,
COUNT(1, status like "3%") AS count_3xx,
COUNT(1, status like "2%") AS count_2xx
FROM mercari_access_log.win:time_batch(1 min)
query_name: api_req_from_xxxx
SELECT
COUNT(1) AS hit
FROM mercari_access_log.win:time_batch(1 min)
WHERE ua LIKE '%monitoring_user_agent%'
このUAからの
アクセスがない場合、
アラート発砲
norikra-udf-percentile
fluent-plugin-flatten-hash
Percentile
query_name: api_response_time
SELECT
avg(ptime) AS ptime_avg,
percentiles(ptime, {90,95,98,99}) AS percentile
FROM
mercari_access_log.win:time_length_batch(1 min,50000)
{
"ptime_avg":34147.96952,
"percentile":{
"90":xxxxx,
"95":xxxxx,
"98":xxxxx,
"99":xxxxx
}
}
このままだと
mackerelに送れない
<source>
type norikra
norikra localhost:8571
<fetch>
tag query_name
tag_prefix norikra.query
....
</fetch>
</source>
<filter norikra.query.*>
type flatten_hash
separator _
</filter>
<match norikra.query.*>
type mackerel
....
metrics_name ${[2]}.${out_key}
out_key_pattern .+
</match>
{
"ptime_avg":34147.96952,
"percentile":{
"90": xxxxxx,
"95": xxxxxx,
"98": xxxxxx,
"99": xxxxxx
}
}
{
"ptime_avg":34147.96952,
"percentile_90": xxxxxx,
"percentile_95": xxxxxx,
"percentile_98": xxxxxx,
"percentile_99": xxxxxx
}
query_name: api_response_time
SELECT
avg(ptime) AS ptime_avg,
percentiles(ptime, {90,95,98,99}) AS percentile
FROM
mercari_access_log.win:time_length_batch(1 min,50000)
95%でAlert設定
まとめ
Norikra + Mackerel 便利!
tagomoris ++
はてな ++
以上でス
人材募集中です。よろしくお願いします

More Related Content

メルカリでのNorikraの活用、 Mackerelを添えて