From 7c3fe0ba400b7cb24d18fd586dffaf446ec56eda Mon Sep 17 00:00:00 2001 From: James Campbell Date: Sat, 18 May 2024 23:04:22 -0400 Subject: [PATCH] Add more retrics --- pgmon-metrics.cfg | 13 +++++++++++++ pgmon.cfg | 8 ++------ pgmon.py | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 pgmon-metrics.cfg diff --git a/pgmon-metrics.cfg b/pgmon-metrics.cfg new file mode 100644 index 0000000..7433b27 --- /dev/null +++ b/pgmon-metrics.cfg @@ -0,0 +1,13 @@ +# Discovery metrics +metric=discover_dbs:set::SELECT datname FROM pg_database +metric=discover_rep:set::SELECT client_addr || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') AS repid, client_addr, state FROM pg_stat_replication + +# Cluster-wide metrics +metric=version:value::SHOW server_version_num +metric=max_frozen_age:value::SELECT max(age(datfrozenxid)) FROM pg_database + +# Per-database metrics +metric=db_stats:row::SELECT * FROM pg_stat_database WHERE datname = '{datname}' + +# Per-replication metrics +metric=rep_stats:row::SELECT * FROM pg_stat_database WHERE client_addr || '_' || regexp_replace(application_name, '[ ,]', '_', 'g') = '{repid}' diff --git a/pgmon.cfg b/pgmon.cfg index ab7131c..fe2f268 100644 --- a/pgmon.cfg +++ b/pgmon.cfg @@ -52,6 +52,7 @@ host=/var/run/postgresql #port=5432 #user=postgres +user=zbx_monitor #password=None # Default database to connect to when none is specified for a metric @@ -64,9 +65,4 @@ host=/var/run/postgresql # Metrics #metrics={} - - -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:set::SELECT datname FROM pg_database - +include=/etc/zabbix/pgmon-metrics.cfg diff --git a/pgmon.py b/pgmon.py index e7f80e7..fa89418 100755 --- a/pgmon.py +++ b/pgmon.py @@ -181,7 +181,7 @@ class Config: raise InvalidConfigError("{}: {}", config_file, line) if key == 'include': - self.read_file(value, read_metric) + self.read_file(value, read_metrics) elif key == 'pid_file': self.pid_file = value elif key == 'ipc_socket': @@ -676,7 +676,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])) - elif metric_type == 'set': + elif metric.type == 'set': req.set_result(json.dumps(res)) try: