11

Click here to load reader

LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

Embed Size (px)

DESCRIPTION

LLD(ローレベルディスカバリ)を弄り倒せ zabbix_senderを併用してらくらく可視化 第6回 ZABBIX-JP 勉強会 (2014/04/12) にて、LT発表させていただいたスライドです

Citation preview

Page 1: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

LLD(ローレベルディスカバリ)を弄り倒せ zabbix_senderを併用してらくらく可視化

山根 健志/ Takeshi YAMANE/ふりっぱぁ @fripper1214

[email protected] 第6回 ZABBIX-JP勉強会

2014/04/12 Tokyo

Page 2: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

zabbix_sender の動作って‥

監視対象側からサーバに向けて、任意の値を投げ込める!

zabbix_agentd 入れなくてもいけるし便利~♪

しかも‥

• 任意のホストのアイテムに対して情報を叩き込める! 対象のホスト自身からでなくてもOK!

• アイテムの型 (整数・小数・文字列) どれでもOK! sender に渡せば、結構なんでも登録できちゃいます

• zabbix_proxy 経由でも使える! sender の送信先を zabbix_server 宛じゃなくて zabbix_proxy 宛にすればOK!

• 複数の値をまとめて登録できる! 引数にファイルを渡す or 標準入力からリダイレクトで読ませる

• 時刻情報まで捏造できる! 日次集計とか、その日の0時指定にできてグラフもキレイ!

Page 3: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

LLD によるアイテム登録

普通なら‥

ZabbixエージェントとかZabbixエージェント(アクティブ)で、ディスカバリルールの項目を登録。

そんでもって、アイテムやトリガーのプロトタイプとかを指定して、任意の項目を作る‥といった感じですよね?

あれ?Zabbixエージェント(アクティブ)って‥

agentd が定期的にチェックして、server へ値を

push で送信するんじゃなかったっけ?

値を送信って‥ sender でも同じなんじゃないの?

Page 4: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

LLD でやりとりされる値

標準の‘vfs.fs.discovery’で見てみると、単なるJSON形式

[data] という項目の値として、ディスカバリ結果が配列っぽく書かれているだけ‥

スクリプト等で適当な項目リストを作って、

送ってあげればイケそうな感じ‥‥?

Page 5: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

LLDに値を叩き込む!-今回の目的-

目的:日次処理での http アクセスログ内容の集計 特定 cgi でファイルのアップ・ダウン要求してるログ行を

アクセス元ユーザ、get/put の種別で集計した結果が欲しい

最終的に、アイテムを以下のカタチで作りたい‥

• 「アクセス元ユーザ」別

• 「getの回数」「putの回数」 - 整数値

でも‥いつユーザ増やすかわかんないし‥

→やっぱりLLDでアイテム作るべきだよね!

Page 6: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

集計してから、どうやってZabbixに登録する?

• どうやって回数を集計しよう‥? ログファイルをgrepして、awkに掛ければ、

ユーザ別・get/put目的別の集計は簡単だよね‥ →シェル芸!

• 日次処理だしなぁ‥ Zabbixのアイテムだと間隔は指定できるけど、

実行タイミングは制御できない‥ → cron

• ログが大きいと時間掛かるなぁ‥ agentdだとタイムアウトが怖い‥ → zabbix_sender

• ディスカバリにするとなると‥ ディスカバリルールのためにログを舐めて項目作らせて、

結果値を登録するために、また舐めるの? →2回も舐めたくない!

LLDルールの結果を sender で送って、sleep で少し待ってから、

同じ cron 処理の中で結果値も sender で送れば1度で済むんじゃ?

Page 7: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

cron での処理内容 -ディスカバリ部分-

• 前日のログを舐めて、ユーザ別・項目別に集計 AAA 20 0

BBB 120 337

CCC 0 78

• ruby で、ユーザIDのリストに相当する JSON を生成 senderでうまく扱うために、必ず1行の JSON データにする!改行含まないこと!

{“data”:[{“{#USRID}”:”AAA”}, {“{#USRID}”:”BBB”}, {“{#USRID}”:”CCC”}]}

• sender で、ディスカバリルールの項目値として投げ込む 投げ込む際には、標準入力に値を渡す。

ついでに –t オプションで昨日の0時のデータにしておく‥(捏造じゃないよ!)

ファイル or 標準入力だと、1行あたり1データと認識されるから、複雑なJSON値でもOK!

HOSTNAME user.log.count.discovery 1397051539 {“data”:[{“{#USRID‥ }

• ディスカバリルールの設定は [Zabbixトラッパー]に! 普通にアイテム値を投げ込む時と同じく、trapperタイプにしておけばOK!

Page 8: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

cron での処理内容 -項目値の登録部分-

• sleepで少し待つ!(2分間) 待たなくても大丈夫かもしれない?

でも zabbix_server が重くても大丈夫かどうか心配 →とりあえず待っちゃえ

• 集計結果のリストから、sender へ渡す文字列を作る やっぱり標準入力を使う。複数項目の値を複数行でまとめて送信!

もちろん、値のタイムスタンプは昨日の0時!

HOSTNAME user.log.count.get[AAA] 1397051539 20

HOSTNAME user.log.count.put[AAA] 1397051539 0

HOSTNAME user.log.count.get[BBB] 1397051539 120 ・・・(略)・・・

• ど~んと値を送信‥ 100ユーザなら200項目分‥ sender を1回実行すれば複数項目一括登録OKなんてチョー便利!

• アイテムのプロトタイプも、やっぱり[Zabbixトラッパー] sender を使う場合のお約束ですね!

Page 9: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

サーバでの設定は‥?

ディスカバリルールと、アイテムのプロトタイプはこんな感じ‥

• ディスカバリルール

• アイテムのプロトタイプ

Page 10: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

登録された値は‥?

• 最新の値を見てみると‥? タイムスタンプ付きで送っているから、

その日の0時のデータになってる!

• グラフも作ってみた~ 毎日の変化・傾向が、放っといても可視化できて便利!

Page 11: LLD(ローレベルディスカバリ)を弄り倒せ、zabbix_senderを併用してらくらく可視化

結論!

• LLD(ローレベルディスカバリ)は神!

• zabbix_sender は神!

Zabbix って、監視・警告だけじゃないよ!

こういった「可視化」だってできるんだから!

ちょ‥ワシが神様‥ >