Skip to content

Commit 1f03837

Browse files
committed
fix: fixed Replication Lag evaluation
- added not null check; - fixed agent type metrics;
1 parent e2cc7ff commit 1f03837

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

mamonsu/plugins/pgsql/driver/pool.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ class Pool(object):
1212
'select mamonsu.timestamp_master_update()'
1313
),
1414
'replication_lag_slave_query': (
15-
"SELECT"
16-
" CASE WHEN pg_last_{1}() = pg_last_{2}() THEN 0"
17-
" ELSE extract (epoch FROM now() - coalesce(pg_last_xact_replay_timestamp(), now() - INTERVAL '{0} seconds'))"
18-
" END",
15+
"SELECT "
16+
"CASE WHEN coalesce(pg_last_{1}(), '0/00000000') = coalesce(pg_last_{2}(), '0/00000000') THEN 0 "
17+
"ELSE extract (epoch FROM now() - coalesce(pg_last_xact_replay_timestamp(), now() - INTERVAL '{0} seconds')) "
18+
"END",
1919
'select mamonsu.timestamp_get()'
2020
),
2121
'count_wal_files': (

mamonsu/plugins/pgsql/xlog.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ class Xlog(Plugin):
1919
"(pg_catalog.pg_current_xlog_location(), '0/00000000');"
2020

2121
# get time of replication lag
22-
query_agent_replication_lag = "SELECT CASE WHEN extract(epoch from now()-pg_last_xact_replay_timestamp()) " \
23-
"IS NULL THEN 0 ELSE extract(epoch from now()-pg_last_xact_replay_timestamp()) END"
22+
query_agent_replication_lag = "SELECT " \
23+
"CASE WHEN coalesce(pg_last_{1}(), '0/00000000') = coalesce(pg_last_{2}(), '0/00000000') THEN 0 " \
24+
"ELSE extract (epoch FROM now() - coalesce(pg_last_xact_replay_timestamp(), now() - INTERVAL '{0} seconds')) " \
25+
"END;"
2426

2527
# PG 14 pg_stat_wal
2628
query_wal_records = "SELECT wal_records FROM pg_stat_wal;"
@@ -53,18 +55,18 @@ class Xlog(Plugin):
5355

5456
def run(self, zbx):
5557

56-
if Pooler.in_recovery():
57-
if Pooler.server_version_greater('10.0'):
58-
lag = Pooler.run_sql_type('replication_lag_slave_query', args=[self.plugin_config('interval'),
59-
'wal_receive_lsn',
60-
'wal_replay_lsn'])
61-
else:
62-
lag = Pooler.run_sql_type('replication_lag_slave_query', args=[self.plugin_config('interval'),
63-
'xlog_receive_location',
64-
'xlog_replay_location'])
65-
if lag[0][0] is not None:
66-
zbx.send('pgsql.replication_lag[sec]', float(lag[0][0]))
58+
if Pooler.server_version_greater('10.0'):
59+
lag = Pooler.run_sql_type('replication_lag_slave_query', args=[self.plugin_config('interval'),
60+
'wal_receive_lsn',
61+
'wal_replay_lsn'])
6762
else:
63+
lag = Pooler.run_sql_type('replication_lag_slave_query', args=[self.plugin_config('interval'),
64+
'xlog_receive_location',
65+
'xlog_replay_location'])
66+
if lag[0][0] is not None:
67+
zbx.send('pgsql.replication_lag[sec]', float(lag[0][0]))
68+
69+
if not Pooler.in_recovery():
6870
Pooler.run_sql_type('replication_lag_master_query')
6971
if Pooler.server_version_greater('10.0'):
7072
result = Pooler.query(self.query_wal_lsn_diff)
@@ -263,12 +265,18 @@ def keys_and_queries(self, template_zabbix):
263265
result.append(
264266
'{0},$2 $1 -c "{1}"'.format(self.key_count_wall.format('[*]'), Pooler.SQL['count_xlog_files'][0]))
265267
result.append('{0},$2 $1 -c "{1}"'.format(self.key_wall.format('[*]'), self.query_xlog_lsn_diff))
268+
result.append(
269+
'{0},$2 $1 -c "{1}"'.format("pgsql.replication_lag.sec[*]", self.query_agent_replication_lag.format(self.plugin_config('interval'),
270+
'xlog_receive_location',
271+
'xlog_replay_location')))
266272
else:
267273
result.append(
268274
'{0},$2 $1 -c "{1}"'.format(self.key_count_wall.format('[*]'), Pooler.SQL['count_wal_files'][0]))
269275
result.append('{0},$2 $1 -c "{1}"'.format(self.key_wall.format('[*]'), self.query_wal_lsn_diff))
270-
result.append(
271-
'{0},$2 $1 -c "{1}"'.format("pgsql.replication_lag.sec[*]", self.query_agent_replication_lag))
276+
result.append(
277+
'{0},$2 $1 -c "{1}"'.format("pgsql.replication_lag.sec[*]", self.query_agent_replication_lag.format(self.plugin_config('interval'),
278+
'wal_receive_lsn',
279+
'wal_replay_lsn')))
272280
if LooseVersion(self.VersionPG) >= LooseVersion('14'):
273281
result.append('{0},$2 $1 -c "{1}"'.format(self.key_wal_records.format('[*]'), self.query_wal_records))
274282
result.append('{0},$2 $1 -c "{1}"'.format(self.key_wal_fpi.format('[*]'), self.query_wal_fpi))

0 commit comments

Comments
 (0)