エージェントは、MySQLインスタンス以上に、に、唯一の初期状態では別のポート、エージェントをとり果たしたスクリプトやキー設定した後、再起動します。メンテナンス時間(mysqlのポートの変更)した後、エージェントを移動し、終了するためにのみ、Webサーバー側で自動的に対応するモニタポートに変更を加えることができます努力はありませんします。 |
マクロ形式のホスト:$マクロは(直接値を埋めることができます) マクロを自動的に検出します:#macro命令は、(キー値を作成するために協力する必要があります)
1.agentホスト-マクロ変数$ MYSQLPORTを作成するために、エージェントホスト、マクロ変数は、自動検出の検出ルールでスクリプトパラメータ
2.テンプレート-自動検出スクリプトに頼って、自動検出ルールを作成するためのテンプレートを、マクロ変数は、自動検出を取得。
項目3.監視-ディスカバリーのルールで作成モニタリング項目、キー名とマクロ変数でキー値の監視が自動的に検出され、モニターは自動的にエントリの関連ポートが生成されます
。4.インフラストラクチャ全体の実行をサポートするために、クライアントスクリプトとキーを作成します。
このテンプレートは、デフォルトのテンプレートのMySQLモニタのクローンであるので、あなたは、アイテム、トリガーを無視することができます。ディスカバリー規則は、内部の項目を監視しています。
mysql.discoveryの図は、スクリプトは、エージェント側にある、自動検出のマクロスクリプトを取得することです。
時間のパラメータを持つスクリプトの$のMYSQLPORTの実行の背後にあるこのような理由から、$ MYSQLPORTは、ホストマクロです。
discovery rule 右边的 filters 是过滤规则的意思,比方你 只想取脚本里的 某某 自动发现宏,就可以在里面设置。 这里就只有一个自动发现宏,所有不做 配置。
点开主机,添加主机宏,宏名称是 自动发现脚本里的 参数, 宏的值就是 此 主机上需要监控的端口。
这样就实现了 只要改动主机宏的 值,就可以改变主机宏的监控项。
res=`echo $1| sed "s/_/\n/g"`;
port=($res)
printf '{\n' printf '\t"data":[\n' for key in ${!port[@]} do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]]; then printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n" else [[ "${key}" -eq "((${#port[@]}-1))" ]] printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n" fi done printf '\t ]\n' printf '}\n'
执行实例: 以_ 为分隔符,格式化输出 自动发现宏
./discovery_mysql.sh 3306_3307_3308
{
"data":[
{
"{#MYSQLPORT}":"3306"},
{
"{#MYSQLPORT}":"3307"},
{
"{#MYSQLPORT}":"3308"} ] }
var=$1
MYSQL_PORT=$2
MYSQL_NAME=`ps -ef |grep '/mysql/app/bin/mysqld'| grep "$MYSQL_PORT" |grep -v grep | awk -F" " '{print $11}' |awk -F"/" '{print $2}'` ; MYSQL_SOCk_DIR="/$MYSQL_NAME/" ; df -h "${MYSQL_SOCk_DIR}${var}" |grep -v Filesystem |awk -F" " '{print $5}' | awk -F"%" '{print $1}' ;
MYSQL_PORT=$1;
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxx mysqladmin=/mysql/app/bin/mysqladmin ; MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ; ${mysqladmin} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} ping 2> /dev/null |grep 'alive'|wc -l ;
注意: 这边连接实例 都是 mysql -u -p -S /xxx/mysql.sock
但是后来发现部分客户端总是无法正确显示值,而且就是这条 语句报错, 感觉是环境变量的问题
所以拿 --socket=/xxx/mysql.sock 来代替 -S/xxx/mysql.sock 。 这里的变量${MYSQL_SOCk_DIR} 就是--socket=/xxx/mysql.sock 。
var=$1
MYSQL_PORT=$2
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ; mysql=/mysql/app/bin/mysql [ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx [ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show slave status\G;" 2> /dev/null |grep "\b${var}\b"|awk -F" " '{print $2}' ;
主从状态 有几个端口的值是 空的, 这个得 具体问题具体设置
mysql=/mysql/app/bin/mysql
var=$1
MYSQL_PORT=$2
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxx MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ; ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "\b${var}\b"|awk '{print $2}' ;
发现有些监控项 或因为数字过长而无法显示,待解决
MYSQL_PORT=$1;
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ; mysql=/mysql/app/bin/mysql ; [ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx [ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx ${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "select version();" 2> /dev/null |awk 'END {print}'
UserParameter = mysql.discovery [*]、/パトロール/ ZABBIX /bin/duoshili_discovery/discovery_mysql.sh $ 1
UserParameter = mysql.status_many [*]、/パトロール/ ZABBIX / binに/ duoshili_discovery / mysql_status2 $ 1 $ 2 UserParameter = mysql.ping_many [* ]、/パトロール/ ZABBIX /bin/duoshili_discovery/mysql_ping.sh $ 1 UserParameter = mysql.version_many [*]、/パトロール/ ZABBIX /bin/duoshili_discovery/mysql_version.sh $ 1 UserParameter = mysqlcheck_repl [*]、/パトロール/ ZABBIX / binに/duoshili_discovery/mysql_repl.sh $ 1 $ 2 UserParameter = mysql.filestyle_many [*]、/パトロール/ ZABBIX / binに/ duoshili_discovery / mysql_filestype