zoukankan      html  css  js  c++  java
  • zabbix low-level discovery 监控mysql

    当一台服务器上MySQL有多个实例的时候,MySQL占用多个不同端口。利用zabbix的low-level discovery可以轻松监控。

        思路参考:http://dl528888.blog.51cto.com/2382721/1357713

        下面我写了一个简单的脚本,用于一键部署mysql监控。

        一、客户端

        在被监控端运行此脚本,前提条件已经安装好了zabbix agent(推荐yum安装)。脚本已在CentOS6.2 x86_64环境下测试通过。脚本在附件提供下载。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #!/bin/sh
    #
    # Filename:    autoMonitorMysql.sh
    # Revision:    1.0
    # Date:        2014/08/12
    # Author:      Qicheng
    # Email:
    # Website:     http://qicheng0211.blog.51cto.com/
    # Description: zabbix low level discovery监控MySQL
    # Notes: 在被监控客户端运行此脚本,前提条件已经安装好zabbix agent
    #
     
    ROOT_UID=0
    if "$UID" -ne "$ROOT_UID" ];then
        echo "Error: 必须以root用户运行此程序!"
        exit 1
    fi
     
    # 自行修改为你的zabbix agent配置文件路径
    AGENT_CONF="/etc/zabbix/zabbix_agentd.conf"
     
    mkdir -p /etc/zabbix/monitor_scripts
    # 创建 mysql low-level discovery 脚本
    cat /etc/zabbix/monitor_scripts/mysql_port_discovery.sh << 'EOF'
    #!/bin/bash
    #Function: mysql low-level discovery
    #Script_name: mysql_port_discovery.sh
    mysql() {
        port=(`sudo /bin/netstat -tpln | awk -F "[ :]+" '/mysql/ && /0.0.0.0/ {print $5}'`)
        max_index=$[${#port[@]}-1]
        printf '{ '
        printf ' "data":['
        for key in ${!port[@]}
        do
            printf ' {'
            printf ""{#MYSQLPORT}":"${port[${key}]}"}"
        if [ $key -ne $max_index ];then
                printf ","
            fi
        done
        printf ' ] '
        printf '} '
    }
     
    case "$1" in
        mysql)
            "$1"
            ;;
        *)
            echo "Bad Parameter."
            echo "Usage: $0 mysql"
            exit 1
            ;;
    esac
     
    EOF
    chown -R zabbix:zabbix /etc/zabbix/monitor_scripts
    chmod +x /etc/zabbix/monitor_scripts/mysql_port_discovery.sh
     
    # 判断配置文件是否存在
    [ -f "${AGENT_CONF}" ] || { echo "ERROR: File ${AGENT_CONF} does not exist.";exit 1;}
     
    include=`grep '^Include' ${AGENT_CONF} | cut -d'=' -f2`
    # 在配置文件中添加自定义参数
    if [ -d "$include" ];then
        cat > $include/mysql_lld.conf << 'EOF'
    UserParameter=mysql_port_discovery[*],/bin/bash /etc/zabbix/monitor_scripts/mysql_port_discovery.sh $1
    UserParameter=mysql_status[*],mysql -h 127.0.0.1 -P $1 -uzabbix -pzabbix -N -e "show global status  where Variable_name='$2'" 2>/dev/null cut -f2
    UserParameter=mysql_ping[*],mysqladmin -h 127.0.0.1 -P $1 -uzabbix -pzabbix ping 2>/dev/null grep -c alive
    EOF
    else
        grep -q '^UserParameter=mysql_port_discovery' ${AGENT_CONF} || cat >> ${AGENT_CONF} << 'EOF'
    UserParameter=mysql_port_discovery[*],/bin/bash /etc/zabbix/monitor_scripts/mysql_port_discovery.sh $1
    UserParameter=mysql_status[*],mysql -h 127.0.0.1 -P $1 -uzabbix -pzabbix -N -e "show global status  where Variable_name='$2'" 2>/dev/null cut -f2
    UserParameter=mysql_ping[*],mysqladmin -h 127.0.0.1 -P $1 -uzabbix -pzabbix ping 2>/dev/null grep -c alive
    EOF
    fi
    # 手动MySQL授权,添加zabbix账户
    echo "请在所有MySQL实例中添加zabbix账户,执行> GRANT PROCESS ON *.* TO 'zabbix'@'127.0.0.1' identified BY 'zabbix';flush privileges;"
    # 重启agent服务
    [ -f '/etc/init.d/zabbix-agent' ] && /etc/init.d/zabbix-agent restart || echo "需手动重启zabbix agent服务."
    # 授权zabbix用户无密码运行netstat命令
    chmod +w /etc/sudoers 
    sed -i 's/^(Defaultss+requiretty)/#1/' /etc/sudoers
    grep -q '^zabbix ALL=(ALL).*netstat' /etc/sudoers || echo 'zabbix ALL=(ALL)       NOPASSWD: /bin/netstat' >> /etc/sudoers
    chmod 440 /etc/sudoers
    # 关闭SELinux
    setenforce 0
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

        脚本执行完毕后,还需要手动MySQL授权,在所有实例中添加zabbix账户:

    1
    2
    mysql> GRANT PROCESS ON *.* TO 'zabbix'@'127.0.0.1' identified BY 'zabbix';
    mysql> flush privileges;

        在zabbix server端执行zabbix_get命令测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    shell# zabbix_get -s 115.238.xxx.xxx -k 'mysql_port_discovery[mysql]'
    {
        "data":[
            {"{#MYSQLPORT}":"3306"}
        ]
    }
    shell# zabbix_get -s 115.238.xxx.xxx -k 'mysql_status[3306,Uptime]'
    1295092
    shell# zabbix_get -s 115.238.xxx.xxx -k 'mysql_ping[3306]'
    1

        都能返回数据,说明客户端的MySQL监控部署好了。

        二、WEB端

        1、导入模板

    下载附件模板文件(Template App MySQL used LLD.xml)后,导入到zabbix里。

    wKioL1Pp4kSyoHKjAAGXWh7Zy8s473.jpg

        2、创建主机并链接模板

    wKiom1Pp4cShB-e7AAGzKCOtQms583.jpg

        3、数据展示

    wKioL1Pp42OwPPWPAAbiWNEsyIs158.jpg

    wKiom1Pp5c3TKkJoAAQ8Pf6e16I805.jpg

    wKioL1Pp5yzSM7j0AAUMjs2XGA0952.jpg

    本文出自 “启程的Linux博客” 博客,请务必保留此出处http://qicheng0211.blog.51cto.com/3958621/1539101

  • 相关阅读:
    js类型自动转换以及==对比规则
    js改变作用域链
    cookie简单实例
    js操作cookie
    body设置margin为0
    inline-block和block元素水平居中显示
    执行git clone遇到警告解决办法
    git中各大写字母表示含义
    git命令报错
    linux.txt
  • 原文地址:https://www.cnblogs.com/pigdragon/p/6647177.html
Copyright © 2011-2022 走看看