Mysql

斷言來自 Nagios 的 check_mysql 的擴展資訊

  • January 14, 2020

我在check_mysql遠端數據庫伺服器上使用 NRPE 執行外掛,雖然我可以獲得關於伺服器程序是否按需要工作的令人滿意的數據,但我看到外掛輸出了更多資訊:

user@server:/etc/nagios# /usr/lib/nagios/plugins/check_mysql -H localhost -P 3306 -u nagios -psnip
Uptime: 112398  Threads: 5  Questions: 10921804  Slow queries: 0  Opens: 4408  Flush tables: 1  Open tables: 416  Queries per second avg: 97.170|Connections=137481c;;; Open_files=0;;; Open_tables=416;;; Qcache_free_memory=1031832;;; Qcache_hits=0c;;; Qcache_inserts=0c;;; Qcache_lowmem_prunes=0c;;; Qcache_not_cached=9427651c;;; Qcache_queries_in_cache=0;;; Queries=10921805c;;; Questions=10917613c;;; Table_locks_waited=0c;;; Threads_connected=5;;; Threads_running=1;;; Uptime=112398c;;;

這讓我覺得我可以斷言諸如執行緒數或慢查詢之類的東西來生成警報狀態。

問題是,我該怎麼做?外掛的-w-c參數只處理主從時鐘漂移,其他參數不處理。

我是否需要編寫一些自定義 shell 腳本來解析輸出然後返回它自己的輸出?或者 Nagios Core 中是否有內置設施來進行這種處理?

最後,我決定最好的做法是按照外掛規範編寫一些自定義腳本,並使用awk. 供將來參考(警告實施者):

#! /bin/bash

parse_mysql_output(){
   METRIC=`/usr/lib/nagios/plugins/check_mysql -H localhost -P 3306 -u nagios -p[REDACTED] | grep -shoP "${METRIC_NAME}: ([\d.]+)" | awk -F ': ' '{print $2}'`
   if (($(echo "$METRIC <= $WARNING_THRESHOLD" | bc -l))); then
       echo "OK - $METRIC_NAME: $METRIC"
       exit 0
   fi

   if (($(echo "$METRIC > $WARNING_THRESHOLD" | bc -l))); then
       if (($(echo "$METRIC <= $CRITICAL_THRESHOLD" | bc -l))); then
           echo "WARNING - $METRIC_NAME: $METRIC"
           exit 1
       fi
   fi

   if (($(echo "$METRIC >= $CRITICAL_THRESHOLD" | bc -l))); then
       echo "CRITICAL - $METRIC_NAME: $METRIC"
       exit 2
   fi

   echo "INDETERMINATE STATE - $METRIC_NAME: $METRIC"
   exit 3
}

if [[ -z "$1" || -z "$2" || -z "$3" ]]
then
   echo "Missing parameters! Syntax: ./`basename $0` metric warning_threshold critical_threshold"
   exit 3
else
   METRIC_NAME=$1
   WARNING_THRESHOLD=$2
   CRITICAL_THRESHOLD=$3
fi

parse_mysql_output

在預期的案例中,您可以通過 NRPE 配置中的自定義命令呼叫它,並傳遞指標和門檻值。在致電之前,您需要根據安裝要求更改連接。

歡迎回饋和評論。

引用自:https://serverfault.com/questions/998755