pg_monzで特定のデータベース、テーブルを監視対象にする方法

ZabbixでPostgreSQLの監視を行うときはpg_monzを使うと便利です。

PostgreSQL monitoring template for Zabbix (pg_monz)

pg_monzにはデータベース情報と、テーブル情報をアイテムに追加してくれるLLDがあるのですが、1テーブルあたりのアイテム数が多いので、全データベース、全テーブルを対象にするとアイテム数がすごい増えてしまいます。
LLDなのでフィルターを使うことでデータベースとテーブル名を制限することができます。

今回は、zabbixデータベースのitemsテーブルとhistoryがつくテーブルをアイテムに追加するように設定してみます。

pg_monzのテンプレートを割り当てているホストのDiscoveryを選択する

f:id:beeete2:20170128145152p:plain ディスカバリーの一覧が表示されますので、その中からDB and Table Name Listを選択します。

ディスカバリーのフィルターを追加する

ディスカバリーを選択すると、ディスカバリーの設定画面が表示されますので上部タブのFiltersを選択します。 f:id:beeete2:20170128145516p:plain

今回は、zabbixデータベースのitemsテーブルとhistoryがつくテーブルをアイテムに追加します。
データベース名はマクロに{#DBNAME}を指定します。
テーブル名はマクロに{#TABLENAME}を指定します。
比較は正規表現が使えるのでhistoryがつくテーブルは^history.*を指定します。
この条件式をaddボタンを押して追加してきます。

実際設定した画面は以下のようになります。 f:id:beeete2:20170128150347p:plain And と Orが混ざる場合はType of caluculationCustom expressionにして指定します。

アイテムに追加される

DB and Table Name Listルールの実行間隔は60分になっているので60分待つか一時的に実行間隔を短くして実行されるとアイテムが追加されます。
f:id:beeete2:20170128151555p:plain itemsテーブルとhistory_uintテーブルとhistory_textテーブルのアイテムが追加されています。

実際の監視対象にする

デフォルトの動きだと、アイテムは追加されますが監視は行われません。
自動で監視対象にしてしまうとテーブルが多い場合データベースに負荷がかかることが考えられるので安全な設定だと思います。
必要に応じて監視対象にします。
アイテムのアプリケーションをpg.getにして対象のテーブルのpgsql.get.pg.stat_tablestatusEnabledに設定します。 f:id:beeete2:20170128152212p:plain

設定してある監視間隔になると値が取得できます。 f:id:beeete2:20170128152546p:plain

まとめ

LLDとフィルターを使って監視対象のアイテムを絞ることにより柔軟な監視ができます。
pg_monzのLLDにはDB Name ListというDiscoveryもありますので、こちらも同じようにフィルターを設定することで柔軟な監視ができます。
Zabbixとpg_monzを使ってPostgreSQLの監視が行えました。