如何自己编写Nagios监控MySQL插件

来源:草根站长作者:乙爱丽丝头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何自己编写Nagios监控MySQL插件》,敬请观看详情。在使用Nagios做服务器监控时,默认的监控项往往无法满足对MySQL数据库的精细化监控需求,很多运维人员会选择自己编写适配的监控插件。编写Nagios监控MySQL插件只需要掌握基础的脚本编写能力和Nagios插件返回规则即可,不需要复杂的开发知识。本文会详细介绍编写插件的完整流程,包括插件返回状态码的定义、MySQL连接检测的实现、监控指标的逻辑编写,还会给出可直接使用的示例代码,帮助运维人员快速完成自定义插件的开发,实现对MySQL连接数、慢查询、主从状态等核心指标的监控,提升数据库运维的可靠性。

在Nagios监控体系中,自定义插件是实现个性化监控需求的核心方式,针对MySQL数据库的监控,我们可以编写Shell脚本插件来检测各类运行状态,适配不同的业务场景。

如何自己编写Nagios监控MySQL插件

Nagios插件基础规则

Nagios监控插件通过返回不同的退出状态码来告知Nagios服务的运行状态,同时输出对应的监控信息,核心状态码定义如下:

  • 0:OK,监控项状态正常
  • 1:WARNING,监控项处于警告状态
  • 2:CRITICAL,监控项处于严重异常状态
  • 3:UNKNOWN,监控项状态未知,通常是参数错误或者检测失败

插件输出的内容会直接展示在Nagios的监控页面中,方便运维人员快速定位问题。

编写MySQL连接检测插件

最基础的MySQL监控插件是检测数据库是否能正常连接,我们可以通过mysqladmin命令来实现,以下是完整的Shell脚本示例:

#!/bin/bash

# 插件使用说明
if [ $# -ne 4 ]; then
    echo "Usage: $0 -H 主机地址 -P 端口号"
    exit 3
fi

# 解析输入参数
while getopts "H:P:" opt; do
    case $opt in
        H) HOST=$OPTARG ;;
        P) PORT=$OPTARG ;;
        *) echo "未知参数"; exit 3 ;;
    esac
done

# 设置MySQL连接超时时间
TIMEOUT=5

# 执行连接检测
mysqladmin -h $HOST -P $PORT ping --connect-timeout=$TIMEOUT >/dev/null 2>&1

# 根据检测结果返回对应状态码
if [ $? -eq 0 ]; then
    echo "MySQL连接正常 | 连接状态=1"
    exit 0
else
    echo "MySQL连接失败 | 连接状态=0"
    exit 2
fi

将上述脚本保存为check_mysql_connect.sh,赋予执行权限后即可使用。脚本中通过mysqladmin ping命令检测MySQL服务是否存活,根据命令执行结果返回对应的Nagios状态码。

扩展监控MySQL连接数

除了基础连接检测,我们还可以扩展插件监控MySQL的当前连接数,当连接数超过阈值时触发警告或严重告警,示例代码如下:

#!/bin/bash

# 参数说明:-H 主机 -P 端口 -u 用户名 -p 密码 -w 警告阈值 -c 严重阈值
if [ $# -ne 8 ]; then
    echo "Usage: $0 -H 主机 -P 端口 -u 用户 -p 密码 -w 警告阈值 -c 严重阈值"
    exit 3
fi

# 解析参数
while getopts "H:P:u:p:w:c:" opt; do
    case $opt in
        H) HOST=$OPTARG ;;
        P) PORT=$OPTARG ;;
        u) USER=$OPTARG ;;
        p) PASS=$OPTARG ;;
        w) WARN=$OPTARG ;;
        c) CRIT=$OPTARG ;;
        *) echo "未知参数"; exit 3 ;;
    esac
done

# 查询当前MySQL连接数
CONNECT_NUM=$(mysql -h $HOST -P $PORT -u $USER -p$PASS -e "show status like 'Threads_connected';" 2>/dev/null | awk 'NR==2{print $2}')

# 检测查询是否成功
if [ -z "$CONNECT_NUM" ]; then
    echo "获取MySQL连接数失败 | 连接数=未知"
    exit 3
fi

# 判断连接数是否超过阈值
if [ $CONNECT_NUM -ge $CRIT ]; then
    echo "MySQL连接数严重过高: 当前${CONNECT_NUM} | 连接数=${CONNECT_NUM}"
    exit 2
elif [ $CONNECT_NUM -ge $WARN ]; then
    echo "MySQL连接数警告: 当前${CONNECT_NUM} | 连接数=${CONNECT_NUM}"
    exit 1
else
    echo "MySQL连接数正常: 当前${CONNECT_NUM} | 连接数=${CONNECT_NUM}"
    exit 0
fi

Nagios中配置使用插件

编写完成插件后,需要将插件放到Nagios的插件目录(通常是/usr/lib64/nagios/plugins/或者/usr/local/nagios/libexec/),然后修改Nagios的配置文件添加监控命令和服务:

首先在commands.cfg中添加命令定义:

define command {
    command_name    check_mysql_connect
    command_line    $USER1$/check_mysql_connect.sh -H $HOSTADDRESS$ -P $ARG1$
}

然后在services.cfg中为对应的MySQL主机添加监控服务:

define service {
    host_name               mysql-server
    service_description     MySQL连接状态
    check_command           check_mysql_connect!3306
    max_check_attempts      3
    normal_check_interval   5
    retry_check_interval    1
    notification_interval   60
    notification_period     24x7
    contact_groups          admins
}

配置完成后重启Nagios服务,即可在监控页面看到对应的MySQL监控项状态。按照同样的思路,我们还可以扩展编写监控MySQL主从同步状态、慢查询数量、QPS等更多指标的插件,满足不同的监控需求。

NagiosMySQL监控插件Shell脚本修改时间:2026-06-06 22:58:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。