Skip to content

Commit 7ca5979

Browse files
committed
Merge branch 'dev'
2 parents e6feb4c + 6ca556a commit 7ca5979

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

documentation/metrics.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2553,30 +2553,35 @@ Default config:
25532553
<td>Count of bloating tables in database: {#DATABASE}</td>
25542554
<td>Database {#DATABASE}: size</td>
25552555
<td>Max age (datfrozenxid) in: {#DATABASE}</td>
2556+
<td>Count of invalid indexes in database: {#DATABASE}</td>
25562557
</tr>
25572558
<tr>
25582559
<th>Key</th>
25592560
<td>pgsql.database.bloating_tables[{#DATABASE}]</td>
25602561
<td>pgsql.database.size[{#DATABASE}]</td>
25612562
<td>pgsql.database.max_age[{#DATABASE}]</td>
2563+
<td>pgsql.database.invalid_indexes[{#DATABASE}]</td>
25622564
</tr>
25632565
<tr>
25642566
<th>Type</th>
25652567
<td>Numeric (float)</td>
25662568
<td>Numeric (float)</td>
25672569
<td>Numeric (float)</td>
2570+
<td>Numeric (float)</td>
25682571
</tr>
25692572
<tr>
25702573
<th>Units</th>
25712574
<td></td>
25722575
<td>Bytes</td>
25732576
<td></td>
2577+
<td></td>
25742578
</tr>
25752579
<tr>
25762580
<th>Delta</th>
25772581
<td>As Is</td>
25782582
<td>As Is</td>
25792583
<td>As Is</td>
2584+
<td>As Is</td>
25802585
</tr>
25812586
</table>
25822587

@@ -2596,6 +2601,11 @@ Default config:
25962601
</tr>
25972602
</table>
25982603

2604+
#### Triggers
2605+
2606+
1. **PostgreSQL invalid indexes in database {#DATABASE} (hostname={HOSTNAME} value={ITEM.LASTVALUE})**
2607+
Triggers if *PostgreSQL: Count of invalid indexes in database: {#DATABASE}* > 0.
2608+
25992609
### Events
26002610

26012611
### Items

mamonsu/lib/runner.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import codecs
77
import os
88

9+
from mamonsu import __version__
910
import mamonsu.lib.platform as platform
1011
from mamonsu.lib.parser import parse_args, print_total_help
1112
from mamonsu.lib.config import Config
@@ -208,7 +209,7 @@ def quit_handler(_signo=None, _stack_frame=None):
208209
supervisor = Supervisor(cfg)
209210

210211
try:
211-
logging.info("Start mamonsu")
212+
logging.info("Start mamonsu " + __version__)
212213
supervisor.start()
213214
except KeyboardInterrupt:
214215
quit_handler()

mamonsu/plugins/pgsql/databases.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22

3+
from distutils.version import LooseVersion
34
from mamonsu.plugins.pgsql.plugin import PgsqlPlugin as Plugin
45
from .pool import Pooler
56
from mamonsu.lib.zbx_template import ZbxTemplate
@@ -16,6 +17,10 @@ class Databases(Plugin):
1617
" datistemplate = false and datname = :'p1';"
1718
query_age = "select age(datfrozenxid) from pg_catalog.pg_database where datistemplate = false " \
1819
"and datname = :'p1';"
20+
query_invalid_indexes = "SELECT count (*) " \
21+
"FROM pg_catalog.pg_index i LEFT JOIN pg_catalog.pg_locks l " \
22+
"ON (i.indexrelid = l.relation) " \
23+
"WHERE NOT (i.indisvalid AND i.indisready) AND l.relation IS NULL;"
1924

2025
# queries for zabbix agent
2126
query_agent_discovery = "SELECT json_build_object ('data',json_agg(json_build_object('{#DATABASE}',d.datname)))" \
@@ -26,6 +31,7 @@ class Databases(Plugin):
2631
key_db_age = "pgsql.database.max_age{0}"
2732
key_db_bloating_tables = "pgsql.database.bloating_tables{0}"
2833
key_autovacumm = "pgsql.autovacumm.count{0}"
34+
key_invalid_indexes = "pgsql.database.invalid_indexes{0}"
2935

3036
DEFAULT_CONFIG = {'min_rows': str(50), 'bloat_scale': str(0.2)}
3137

@@ -49,8 +55,14 @@ def run(self, zbx):
4955
zbx.send(
5056
'pgsql.database.bloating_tables[{0}]'.format(info[0]),
5157
int(bloat_count))
58+
invalid_indexes_count = Pooler.query(
59+
self.query_invalid_indexes,
60+
info[0])[0][0]
61+
zbx.send(
62+
'pgsql.database.invalid_indexes[{0}]'.format(info[0]),
63+
int(invalid_indexes_count))
5264
zbx.send('pgsql.database.discovery[]', zbx.json({'data': dbs}))
53-
del dbs, bloat_count
65+
del dbs, bloat_count, invalid_indexes_count
5466

5567
result = Pooler.run_sql_type('count_autovacuum')
5668
zbx.send('pgsql.autovacumm.count[]', int(result[0][0]))
@@ -100,6 +112,9 @@ def discovery_rules(self, template, dashboard=False):
100112
'delay': self.plugin_config('interval')},
101113
{'key': self.right_type(self.key_db_bloating_tables, var_discovery="{#DATABASE},"),
102114
'name': 'Count of bloating tables in database: {#DATABASE}',
115+
'delay': self.plugin_config('interval')},
116+
{'key': self.right_type(self.key_invalid_indexes, var_discovery="{#DATABASE},"),
117+
'name': 'Count of invalid indexes in database: {#DATABASE}',
103118
'delay': self.plugin_config('interval')}
104119
]
105120
graphs = [
@@ -129,7 +144,12 @@ def discovery_rules(self, template, dashboard=False):
129144
'yaxisside': 1}]
130145
}
131146
]
132-
return template.discovery_rule(rule=rule, conditions=conditions, items=items, graphs=graphs)
147+
triggers = [{
148+
'name': 'PostgreSQL invalid indexes in database '
149+
'{#DATABASE} (hostname={HOSTNAME} value={ITEM.LASTVALUE})',
150+
'expression': '{#TEMPLATE:pgsql.database.invalid_indexes[{#DATABASE}].last()}&gt;0'}
151+
]
152+
return template.discovery_rule(rule=rule, conditions=conditions, items=items, graphs=graphs, triggers=triggers)
133153

134154
def keys_and_queries(self, template_zabbix):
135155
result = ['{0},$2 $1 -c "{1}"'.format(self.key_autovacumm.format("[*]"), Pooler.SQL['count_autovacuum'][0]),
@@ -139,5 +159,7 @@ def keys_and_queries(self, template_zabbix):
139159
'{0},$3 $2 -d "$1" -c "{1}"'.format(self.key_db_bloating_tables.format("[*]"),
140160
self.query_bloating_tables.format(
141161
self.plugin_config('bloat_scale'),
142-
self.plugin_config('min_rows')))]
162+
self.plugin_config('min_rows'))),
163+
'{0},$3 $2 -d "$1" -c "{1}"'.format(self.key_invalid_indexes.format("[*]"),
164+
self.query_invalid_indexes)]
143165
return template_zabbix.key_and_query(result)

0 commit comments

Comments
 (0)