zabbix 监控MySQL数据库数量

作者:じ☆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`'"]