zoukankan      html  css  js  c++  java
  • zabbix低级自动发现之mysql多实例

    1、低级自动发现概述

    zabbix的低级自动发现(LLD)适用于监控多实例,监控变化的数据(分区、网卡)。

    自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法。例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项。此外,可以配置Zabbix根据定期执行发现后的得到实际结果,来移除不需要的监控项。

    在zabbix中,支持六种类型的发现项目:

    系统文件的发现

    网络接口的发现

    CPU和CPU内核的发现

    SNMP OID的发现

    使用ODBC SQL查询的发现

    Windows服务的发现

    用户可以自己定义发现类型,只要它们遵循特定的JSON协议。

    发现过程的一般架构如下。

    首先,用户在"配置"→"模板"→"发现"列中创建一个发现规则。发现规则包括(1)发现必要实体(例如,文件系统或网络接口)的项目和(2)应该根据该项目的值创建的监控项,触发器和图形的原型

    发现必要实体的项目就像其他地方所看到的常规项目:服务器向该项目的值询问Zabbix agent(或者该项目的任何类型的设置),agent以文本值进行响应。区别在于agent响应的值应该包含特定JSON格式的发现实体的列表。这种格式的自定义检查者发现的细节才是最重要的,因为返回值必须包含宏→值对。例如,项目"net.if.discovery"可能会返回两对键值:"{#IFNAME}"→"lo"和"{#IFNAME}"→"eth0"。

    这些宏用于名称,键值和其他原型字段中,然后用接收到的值为每个发现的实体创建实际的监控项,触发器,图形甚至主机。

    当服务器接收到发现项目的值时,它会查看宏→值对,每对都根据原型生成实际监控项,触发器和图形。在上面的"net.if.discovery"示例中,服务器将生成环路接口"lo"的一组监控项,触发器和图表,另一组用于界面"eth0"。

     

    2、mysql多实例

    2.1 什么是MySQL多实例

    MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务

    2.2 MySQL多实例的特点

    有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务

    节约服务器资源

    资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降

    2.3 部署mysql多实例的两种方式

    第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便

    第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理

     

    3、mysql单实例监控

    即为主机链接mysql模板,进行监控,查看最新数据

     

    4、开启mysql多实例

    4.1 准备配置文件

    [root@db01 ~]# cp /etc/my.cnf /etc/my3307.cnf

    [root@db01 ~]# vim /etc/my3307.cnf

    [mysqld]

    datadir=/data/3307/

    socket=/data/3307/mysql.sock

    port=3307

    user=mysql

    symbolic-links=0

    [mysqld_safe]

    log-error=/data/3307/mysqld.log

    pid-file=/data/3307/mysqld.pid

    [root@db01 ~]# cp /etc/my3307.cnf /etc/my3308.cnf

    [root@db01 ~]# sed -i 's#3307#3308#g' /etc/my3308.cnf

    4.2 初始化数据库

    初始化数据库3307

    [root@db01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf

    [root@db01 ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &

    初始化数据库3308

    [root@db01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf

    [root@db01 ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &

    4.3 检查多实例是否正常

    [root@db01 ~]# netstat -lntup|grep mysqld

    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1648/mysqld

    tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 5434/mysqld

    tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 6021/mysqld

    [root@db01 ~]# mkdir /data/3306

    [root@db01 ~]# ln -s /var/lib/mysql/mysql.sock /data/3306/

    检查

    [root@db01 ~]# find /data -name "*.sock"

    /data/3307/mysql.sock

    /data/3308/mysql.sock

    /data/3306/mysql.sock

    [root@db01 ~]# chmod 755 /data/*

    [root@db01 ~]# ll -d /data/*

    drwxr-xr-x 2 root root 23 6 21 09:58 /data/3306

    drwxr-xr-x 5 mysql root 4096 6 21 09:48 /data/3307

    drwxr-xr-x 5 mysql root 4096 6 21 09:53 /data/3308

    [root@db01 ~]# netstat -lntp|awk -F "[ :]+" '/mysqld/{print$5}'

    3306

    3307

    3308

     

    5、编写脚本并测试

    编写脚本获取多实例并输出为json格式

    [root@db01 ~]# mkdir /etc/zabbix/scripts

    [root@db01 ~]# cd /etc/zabbix/scripts

    [root@db01 scripts]# vim discover.sh

    #!/bin/bash

    #mysql low-level discovery

    res=`sudo netstat -lntp|awk -F "[ : ]+" '/mysqld/{print$5}'`

    port=($res)

    printf '{'

    printf '"data":['

    for key in ${!port[@]}

    do

    if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then

    printf '{'

    printf ""{#MYSQLPORT}":"${port[${key}]}"},"

    else [[ "${key}" -eq "((${#port[@]}-1))" ]]

    printf '{'

    printf ""{#MYSQLPORT}":"${port[${key}]}"}"

    fi

    done

    printf ']'

    printf '} '

    脚本中需要为zabbix用户授权netstat的命令

    方法一:

    sed -i '98a zabbix ALL=(ALL) NOPASSWD: /bin/netstat' /etc/sudoers

    sed -i 's@^Defaults requiretty@#Defaults requiretty@g' /etc/sudoers

    方法二:

    去掉脚本的sudo,添加suid

    usermod -s /bin/bash zabbix

    chmod u+s /usr/bin/netstat

    测试脚本

    [root@db01 scripts]# sh discover.sh     

    {"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

     

    6、自定义key

    [root@db01 ~]# cd /etc/zabbix/zabbix_agentd.d/

    [root@db01 zabbix_agentd.d]# vim mysql.conf

    UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh

    [root@db01 zabbix_agentd.d]# systemctl restart zabbix-agent.service

    在server端命令行测试

    [root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql.discovery

    {"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

    增加自定义key

    [root@db01 zabbix_agentd.d]# vim mysql.conf

    UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh

    UserParameter=mysql-status[*],echo "show global status where Variable_name='$2';" |mysql -S /data/$1/mysql.sock -N | awk '{print $$2}'

    UserParameter=mysql-ping[*],mysqladmin -S /data/$1/mysql.sock ping | grep -c alive

    UserParameter=mysql-version,mysql -V

    [root@db01 zabbix_agentd.d]# systemctl restart zabbix-agent.service

    server端命令行进行测试

    [root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3306]

    1

    [root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3307]

    1

    [root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3308]

    1

     

    7、server端web界面操作

    创建自动发现规则,添加监控项原型,触发器类型,图形原型,可以参照系统已有的规则进行创建

    为了简化操作,直接导入做好的模板并为主机链接模板

    成功链接模板后查看最新数据

     

     

    部分参考来源:https://www.qstack.com.cn/archives/108.html

  • 相关阅读:
    HTTP 无法注册URL 进程不具有命名空间的访问权限
    逆变与协变详解
    正式学习React(五) react-redux源码分析
    正式学习React(四) ----Redux源码分析
    正式学习react(二)
    工作总结
    如何自定义echarts 线性图的选择事件
    viewport大白话
    关于div可编辑的复制粘贴问题
    nginx学习
  • 原文地址:https://www.cnblogs.com/ssgeek/p/9277092.html
Copyright © 2011-2022 走看看