作者:じ☆ve宝贝
发布时间:2019-01-16T17:26:31
检测SQL统计的数量
利用zabbix创建自定义监控项需要执行以下操作: 1.在配置文件zabbix_agentd.conf中设置允许添加自定义监控项 2.在zabbix_server.conf中设置监控脚本文件存放路径 3.在指定的路径下创建监控脚本 4.在userparameter_script.conf文件中添加Item key 5.在web端创建监控项
编辑zabbix_agentd.conf配置文件 cd /etc/zabbix/ vi zabbix_agentd.conf
设置允许添加自定义脚本将
Include=/etc/zabbix/zabbix_agentd.d
#并去掉前面的注释符
UnsafeUserParameters=1
编辑zabbix_server.conf 设置创建监控脚本的存放路径,打开zabbix_server.conf配置文件,找到AlertScriptsPath,设置路径为
AlertScriptsPath=/usr/lib/zabbix/alertscripts
创建shell脚本 vi mysql_count.sh
#!/bin/bash
HOSTNAME="$1"
PORT=$2
USERNAME="$3"
PASSWORD="$4"
DBNAME="$5"
# day=`date -d "-1 day" +%Y-%m-%d`
#SQL查询结果列数
columnNum=1
#通过参数行数和行索引位置
function getValue(){
#调用方法传入的第一个参数,$0 表示方法名
colIndex=$1
#调用方法传入的第二个参数
rowIndex=$2
#定位到指定行,数组索引0为第一个元素
#数学算术运算使用 $((a+b))
idx=$(($columnNum*$colIndex+$rowIndex-1))
#判读索引值是否大于结果行数
#${#arrays_name[@]}获取数组长度
if [ $idx -le ${#result_attrs[@]} ]; then
echo ${result_attrs[$idx]}
# return ${result_attrs[$idx]}
fi
}
SQL="$6"
#echo "mysql -h${HOSTNAME} -P${PORT} -D${DBNAME} -u${USERNAME} -p${PASSWORD} -e \"${SQL}\""
result_attrs=(`/usr/bin/mysql -h${HOSTNAME} -P${PORT} -D${DBNAME} -u${USERNAME} -p${PASSWORD} -e "${SQL}"`)
result=`getValue 1 1`
#echo "返回结果为:${result}"
echo ${result}
$1 MySQL 地址 $2 MySQL 端口 $3 MySQL 用户名 $4 MySQL 密码 $5 数据库名称 $6 自定义的SQL 仅支持返回一个参数
**在userparameter_script.conf文件中添加Item key **
标准格式: UserParameter=<key[*]>,<command>
当中 [*] 不强制 代表传参。 如果使用的传参 <command>需要使用 $1 $2 ... 想shell中传入参数
案例:
UserParameter=script.getMysqlSQLCount[*],/usr/lib/zabbix/alertscripts/base_shell.sh $1 $2 $3 $4 $5 "$6"
测试命令
zabbix_get -s 127.0.0.1 -k script.getMysqlSQLCount["HOST","PORT","USERNAME","PASSWORD",DBNAME,"SQL"]
127.0.0.1如果绑定了ip需替换
在web页面创建监控
按照步骤 执行 1 2 3步
点击监控项后执行右上角的创建监控项
键值在这里需要手动输入
script.getMysqlSQLCount["HOST","PORT","USERNAME","PASSWORD",DBNAME,"SQL"]
(图片来源于网络,大家注意)
执行第4步 创建触发器
在动作中添加接收警告信息的用户信息
点击监测中-》最新数据找到自己上面设定的名称这个监控项,点击右侧的图形,可以看到检测到的数据数量了
注意事项
我写的SQL中包含了zabbix的特殊字符我们需要编辑在zabbix_agentd.conf,修改如下参数
UnsafeUserParameters=0 => UnsafeUserParameters=1并去掉前面的注释符
自己测试需要"转译,而在web端配置时不用
zabbix_get -s 127.0.0.1 -k script.getMysqlSQLCount["127.0.0.1","3306","root","root","test","\"SELECT count(1) FROM user where DATE_FORMAT(create_time,'%Y-%m-%d') = '`date -d \"-1 day\" +%Y-%m-%d`'\""]
web端配置
配置->主机->监控项->创建监控项->键值的位置直接填写如下内容:
script.getMysqlSQLCount["127.0.0.1","3306","root","root","test","SELECT count(1) FROM user where DATE_FORMAT(create_time,'%Y-%m-%d') = '`date -d \"-1 day\" +%Y-%m-%d`'"]