===== check_mk custom agent check =====
==== script sul nodo da monitorare ====
Sul nodo da monitorare, dopo aver installato e configurato check_mk_agent, creiamo un script bash in ''/usr/share/check-mk-agent/plugins/''.
Es. script che restituisce in output informazioni sullo stato del cluster percona.
vi /usr/share/check-mk-agent/plugins/mk_percona
#!/bin/bash
# Check percona cluster status
if which mysqladmin >/dev/null
then
mysql --defaults-extra-file=$MK_CONFDIR/mysql.cfg -sN \
-e "select '<<>>' ;
show global status like 'wsrep_%';"
fi
Diamo i permessi di esecuzione al file
# chmod +x /usr/share/check-mk-agent/plugins/mk_percona
==== script sul nodo check_mk server ====
Sul nodo check_mk server verifichiamo che l'agent risponda e restituisca i valori attesi generati dallo script ''mk_percona'' appena creato:
# su - lnf
# check_mk -d [PERCONA_HOST] | fgrep -A 5 percona_status
Se l'agent è configurato correttamente l'output sarà:
<<>>
wsrep_local_state_uuid de5a461b-7059-11e7-9135-b6f59edaa63d
wsrep_protocol_version 7
wsrep_last_committed 28327916
wsrep_replicated 4751904
wsrep_replicated_bytes 19439632755
Creiamo adesso uno script Python per analizzare l'output ricevuto dell'agent. Lo script dovrà essere salvato in ''/omd/sites/lnf/share/check_mk/checks/''.
Il file DEVE avere lo stesso nome definito nello script sull'agent (nell'esempio ''percona_status'').
# vi /omd/sites/lnf/share/check_mk/checks/percona_status
#!/usr/bin/env python
def parse_mysql(info):
values = {}
for line in info:
if len(line) == 2:
varname, value = line
try:
value = int(value)
except:
pass
else:
varname = line[0]
value = None
values[varname] = value
return values
def inventory_percona_status(info):
values = parse_mysql(info)
if 'wsrep_local_state_comment' in values and 'wsrep_cluster_size' in values:
return [(None, {})]
def check_percona_status(item, params, info):
values = parse_mysql(info)
if 'wsrep_local_state_comment' not in values:
return (3, 'Percona sync information are missing')
if 'wsrep_cluster_size' not in values:
return (3, 'Percona cluster size information are missing')
# Clustr sync status
cluster_sync_status = values['wsrep_local_state_comment']
if cluster_sync_status == "Synced":
syncStatus = 0
syncStatus_txt = "Cluster is synced. "
else:
syncStatus = 2
syncStatus_txt = "Cluster isn't synced. "
# Clustr size
cluster_size = float(values['wsrep_cluster_size'])
if cluster_size > 1:
sizeStatus = 0
elif cluster_size == 1:
sizeStatus = 2
sizeStatus_txt = "Number of instances"
if syncStatus == 0 and sizeStatus == 0:
status = 0
else:
status = 2
status_txt = syncStatus_txt + sizeStatus_txt
return (status, status_txt + ': %d' % (cluster_size))
check_info['percona_status'] = {
"check_function" : check_percona_status,
"inventory_function" : inventory_percona_status,
"service_description" : "Percona Cluster status",
"has_perfdata" : False,
}