Click here to load reader
Upload
takeshi-yamane
View
2.505
Download
5
Embed Size (px)
DESCRIPTION
LLD(ローレベルディスカバリ)を弄り倒せ zabbix_senderを併用してらくらく可視化 第6回 ZABBIX-JP 勉強会 (2014/04/12) にて、LT発表させていただいたスライドです
Citation preview
LLD(ローレベルディスカバリ)を弄り倒せ zabbix_senderを併用してらくらく可視化
山根 健志/ Takeshi YAMANE/ふりっぱぁ @fripper1214
[email protected] 第6回 ZABBIX-JP勉強会
2014/04/12 Tokyo
zabbix_sender の動作って‥
監視対象側からサーバに向けて、任意の値を投げ込める!
zabbix_agentd 入れなくてもいけるし便利~♪
しかも‥
• 任意のホストのアイテムに対して情報を叩き込める! 対象のホスト自身からでなくてもOK!
• アイテムの型 (整数・小数・文字列) どれでもOK! sender に渡せば、結構なんでも登録できちゃいます
• zabbix_proxy 経由でも使える! sender の送信先を zabbix_server 宛じゃなくて zabbix_proxy 宛にすればOK!
• 複数の値をまとめて登録できる! 引数にファイルを渡す or 標準入力からリダイレクトで読ませる
• 時刻情報まで捏造できる! 日次集計とか、その日の0時指定にできてグラフもキレイ!
LLD によるアイテム登録
普通なら‥
ZabbixエージェントとかZabbixエージェント(アクティブ)で、ディスカバリルールの項目を登録。
そんでもって、アイテムやトリガーのプロトタイプとかを指定して、任意の項目を作る‥といった感じですよね?
あれ?Zabbixエージェント(アクティブ)って‥
agentd が定期的にチェックして、server へ値を
push で送信するんじゃなかったっけ?
値を送信って‥ sender でも同じなんじゃないの?
LLD でやりとりされる値
標準の‘vfs.fs.discovery’で見てみると、単なるJSON形式
[data] という項目の値として、ディスカバリ結果が配列っぽく書かれているだけ‥
スクリプト等で適当な項目リストを作って、
送ってあげればイケそうな感じ‥‥?
LLDに値を叩き込む!-今回の目的-
目的:日次処理での http アクセスログ内容の集計 特定 cgi でファイルのアップ・ダウン要求してるログ行を
アクセス元ユーザ、get/put の種別で集計した結果が欲しい
最終的に、アイテムを以下のカタチで作りたい‥
• 「アクセス元ユーザ」別
• 「getの回数」「putの回数」 - 整数値
でも‥いつユーザ増やすかわかんないし‥
→やっぱりLLDでアイテム作るべきだよね!
集計してから、どうやってZabbixに登録する?
• どうやって回数を集計しよう‥? ログファイルをgrepして、awkに掛ければ、
ユーザ別・get/put目的別の集計は簡単だよね‥ →シェル芸!
• 日次処理だしなぁ‥ Zabbixのアイテムだと間隔は指定できるけど、
実行タイミングは制御できない‥ → cron
• ログが大きいと時間掛かるなぁ‥ agentdだとタイムアウトが怖い‥ → zabbix_sender
• ディスカバリにするとなると‥ ディスカバリルールのためにログを舐めて項目作らせて、
結果値を登録するために、また舐めるの? →2回も舐めたくない!
LLDルールの結果を sender で送って、sleep で少し待ってから、
同じ cron 処理の中で結果値も sender で送れば1度で済むんじゃ?
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!
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 を使う場合のお約束ですね!
サーバでの設定は‥?
ディスカバリルールと、アイテムのプロトタイプはこんな感じ‥
• ディスカバリルール
• アイテムのプロトタイプ
登録された値は‥?
• 最新の値を見てみると‥? タイムスタンプ付きで送っているから、
その日の0時のデータになってる!
• グラフも作ってみた~ 毎日の変化・傾向が、放っといても可視化できて便利!
結論!
• LLD(ローレベルディスカバリ)は神!
• zabbix_sender は神!
Zabbix って、監視・警告だけじゃないよ!
こういった「可視化」だってできるんだから!
ちょ‥ワシが神様‥ >