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 '<<<percona_status>>>' ; show global status like 'wsrep_%';" fi
Diamo i permessi di esecuzione al file
# chmod +x /usr/share/check-mk-agent/plugins/mk_percona
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à:
<<<percona_status>>> 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, }