From 7665ce08d624e00aa47a9abcd4040fc24f83cf4a Mon Sep 17 00:00:00 2001 From: James Campbell Date: Fri, 17 May 2024 00:58:37 -0400 Subject: [PATCH] Pass args from Zabbix explicitly * Using $0 psases the entire command, so just pass all 9 possible positioinal values. * Allow empty arguments. * Update sample config: ** Use a socket by default. ** Return a set with database discovery to be able to assign a macro. --- pgmon.cfg | 7 ++++--- pgmon.py | 7 ++++--- pgmon_userparameter.conf | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pgmon.cfg b/pgmon.cfg index 67da094..955e4a8 100644 --- a/pgmon.cfg +++ b/pgmon.cfg @@ -1,5 +1,6 @@ -host=localhost -port=54315 +host=/var/run/postgresql +port=5432 +user=postgres metric=max_frozen_age:value::SELECT max(age(datfrozenxid)) FROM pg_database metric=db_stats:row::SELECT * FROM pg_stat_database WHERE datname = '{datname}' -metric=discover_dbs:column::SELECT datname FROM pg_database +metric=discover_dbs:set::SELECT datname FROM pg_database diff --git a/pgmon.py b/pgmon.py index 6275e88..3eef00e 100755 --- a/pgmon.py +++ b/pgmon.py @@ -389,8 +389,9 @@ class Server: if len(parts) > 1: for arg in parts[1].split(','): - (k, v) = arg.split('=', 1) - args_dict[k] = v + if arg != '': + (k, v) = arg.split('=', 1) + args_dict[k] = v except socket.timeout: print("IPC communication timeout receiving request") conn.close() @@ -500,7 +501,7 @@ class Worker(threading.Thread): req.set_result(json.dumps(res[0])) elif metric.type == 'column': req.set_result(json.dumps([list(r.values())[0] for r in res])) - else: + elif metric_type == 'set': req.set_result(json.dumps(res)) try: diff --git a/pgmon_userparameter.conf b/pgmon_userparameter.conf index f582b49..fbfb572 100644 --- a/pgmon_userparameter.conf +++ b/pgmon_userparameter.conf @@ -1 +1 @@ -UserParameter=pgmon[*],/usr/local/bin/pgmon.py -c /etc/zabbix/pgmon.cfg "$0" +UserParameter=pgmon[*],/usr/local/bin/pgmon.py -c /etc/zabbix/pgmon.cfg "$1,$2,$3,$4,$5,$6,$7,$8,$9"