依存アイテムの親アイテムデータが巨大な場合の対処

お世話になります。
Zabbix ServerおよびProxy いずれも4.2.8を使用しています。

Dockerのコンテナパフォーマンス監視を目的に、テンプレートを作成しました。
cAdvisorのPrometheus exporterから取得したmetricsを親アイテムとし、
その依存アイテムでCPU負荷やその他諸々を(保存前処理のPrometheusパターンで)取得する、といったものです。

手元の試験環境で正常動作を確認したので、本番環境に投入したところ即座にProxyが落ちました。
確認すると、zabbix_proxyプロセスがoom_killerで落とされていました。

親アイテム(metricsの結果)はテキストデータで6MBあり、
テンプレートにはコンテナあたり12個の依存アイテム(プロトタイプ)があります。
6MB*12*(コンテナ数)の処理が同時に走るため、実メモリが512MBであるProxyでは
大量のコンテナの依存アイテム処理が持たなかったようです。

もちろんProxyのメモリ増強が最もストレートな解決策だと思います。

また次善の策として、親アイテムをexternalscriptで予めgrepするという方法も考えられます。
しかしgrepすべき語句をexternalscripts側に書く必要があるため、テンプレート改変の度に
スクリプト側も変更する必要が生じ、スマートさというか運用容易性に欠けるなと思っています。

他に、こういった状況での解決策をご存じの方おられましたら、ご教示いただけませんでしょうか。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー yk_taiko の写真

例えば、親アイテムのほうで grep する文字を アイテムのパラメータ で渡すようにするのはどうでしょうか。

https://www.zabbix.com/documentation/4.2/manual/config/items/itemtypes/e...

ユーザー nakaring の写真

ありがとうございます。
確かに!と思って早速試そうとしたところで遅まきながら気付いてしまったんですが、
そもそもHTTPエージェントなど、既にあるアイテムに対して、
(依存アイテムなどとして)externalscriptsを適用させることができませんでした。

もしやるならHTTPエージェントを使わず「外部チェック」アイテムで、
スクリプト内でGETから行い、それを親アイテムとする必要がありそうです。
(本当にそれで実現できるのかは未検証ですが)

だとしても少なくとも、教えていただいた方法なら
いちいちスクリプトを改変する手間からは解放されそうです。