SNMPのLLDで検出した値の合算方法
お世話になります。
以前にも似た趣旨の投稿(http://www.zabbix.jp/node/4338)をしたのですが、
Zabbixを様々なシチュエーションで使っていく中、毎度この部分が解決できず足踏みしてしまいます。
Zabbixのバージョンも進んできていますので、改めて何か手がないかを相談させてください。
テンプレートを利用したSNMPのLLDにおいて、#SNMPINDEXを使って検出されたOID毎の値を全て合計したいです。
Zabbixの標準的機能だけでは難しいと思いますが、何か方法はないでしょうか。
SNMPINDEXを使う典型例としては、スイッチのインターフェース毎のトラフィックだったり、
アプライアンス機器のコア毎のCPU使用率だったり、といったものが考えられます。
今回困ったのはとあるロードバランサで、SNMPで取得できるリアルサーバー毎のセッション数が、とても細分化されていました。
具体的には、リアルサーバー数×ロードバランサのCPUコア数分のセッション数がそれぞれ分かれて取得されます。
これをLLDで引っかけてアイテム化するところまでは良いんですが、
人間が見るにはここまで細かいと却って使いづらいため、適宜合計したいところです。
しかしZabbix側でこれを合計する機能が何もない(と思っている)ので困ってしまいました。
せめてグラフ機能で積算できればまだ良いんですが、これもテンプレートでは難しく、せいぜいスクリーンで大量のグラフを並べるのみ。
アイテムのプロトタイプで計算アイテムを作ることで実現できないかな、とも思ったんですが、
この計算式では「#SNMPINDEXで検出されたすべての値の合計」が表現できそうにありません。
他に考えられるのは、ExternalScriptsでうまいことやるとか、4.2で追加された保存前処理のJavaScriptでうまいことやるとかかな…とは思うんですが、
スクリプト周りに詳しくなく、頑張ればうまいことできるものかどうかがわからずにおります。
たぶんこうすればできるはずだとか、自分ならこうする、といったアドバイスでもいただけると助かります。
TNK - 投稿数: 4719
計算アイテムを使用すれば、アイテムの値の合計を取得することが
できますが、ご認識されている通り、対象のアイテムを固定的にし
か指定できないので、LLDと連携して動的にインターフェース数や
CPUコア数の違う機器に対して同じテンプレートで実現するという
ことはできません。
Zabbix 4.0以降であれば、ダッシュボードの新しいグラフウィジェ
ットを使用すると、同じ1つのグラフ上にLLDで取得したアイテムを
並べて表示させることができるのですが、こちらの場合は旧式のグ
ラフのように積算グラフは描けないという課題があります。
つまり、動的なアイテム数の増減に自動的に対応できても「合計」
を表示することができません。
特定のインターフェースの通信が多いとか、特定のコアに処理が集
中しているといった、他のアイテムの値との比較には使用すること
ができます。
新しいグラフウィジェットにも積算表示ができるよう改善要望は上
がっているのですが、現時点では実装予定にはなっていないようで
す。
ZBXNEXT-4911 : Add support for stacking in svg graph
https://support.zabbix.com/browse/ZBXNEXT-4911
また、4.4とかで保存前処理を使うとしたら、例えば、外部スクリ
プトなどでsnmpwalkを実行し、その実行結果からリストを取得して、
それを加工して合計値を計算するというようなスクリプトを作成し
なければらならないと思います。
別途取得されている複数のアイテムの値の合計値を取得する目的に
は使用できません。
結局、3.0や4.0での場合と同様に、外部スクリプトで全部計算まで
やらせるのと大差ないでしょう。
# 使用できるプログラミング言語が違う程度
機器に全体の負荷状況を取得できるようなMIBが定義されていない
かも再度確認されてみてはいかがでしょうか?
-- 追記
Grafana使えばStackedグラフの表示ができるかもしれません。
https://grafana.com/
https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app
# 詳細未確認
nakaring - 投稿数: 27
ご返信ありがとうございます。
おかげさまで、現状でできること、できないことが明白になりすっきりしました。
現状の中で解決するなら「外部スクリプトでsnmpwalk結果を合算する等で、ほしい値を直接出力させる」ということですね。
ご指摘の通り、最初から合計されたMIBがあっても良さそうなもんですが、見つけられていません。
もう一度よくよく探してみて、それでもないようならスクリプトで解決してみようと思います。
以下半ば余談です。
個人的にはダッシュボードでしか実現できないグラフ、
逆に言うとスクリーンとかに出せないグラフはちょっと使い勝手に劣る気がするので、
もし機能強化で解決されるのであればやはり
「#SNMPINDEXで出てくるOID全ての値を合計したい」
といった機能要望を出してみたいと思いました。
機能要望が英語なので尻込みしていますが、検索して該当するものがなさそうなら出してみたいと思います。