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 准备配置文件

[[email protected] ~]# cp /etc/my.cnf /etc/my3307.cnf

[[email protected] ~]# 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

[[email protected] ~]# cp /etc/my3307.cnf /etc/my3308.cnf

[[email protected] ~]# sed -i ‘s#3307#3308#g‘ /etc/my3308.cnf

4.2 初始化数据库

初始化数据库3307

[[email protected] ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf

[[email protected] ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &

初始化数据库3308

[[email protected] ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf

[[email protected] ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &

4.3 检查多实例是否正常

[[email protected] ~]# 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

[[email protected] ~]# mkdir /data/3306

[[email protected] ~]# ln -s /var/lib/mysql/mysql.sock /data/3306/

检查

[[email protected] ~]# find /data -name "*.sock"

/data/3307/mysql.sock

/data/3308/mysql.sock

/data/3306/mysql.sock

[[email protected] ~]# chmod 755 /data/*

[[email protected] ~]# 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

[[email protected] ~]# netstat -lntp|awk -F "[ :]+" ‘/mysqld/{print$5}‘

3306

3307

3308

5、编写脚本并测试

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

[[email protected] ~]# mkdir /etc/zabbix/scripts

[[email protected] ~]# cd /etc/zabbix/scripts

[[email protected] scripts]# vim discover.sh

#!/bin/bash

#mysql low-level discovery

res=`sudo netstat -lntp|awk -F "[ :\t]+" ‘/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 ‘}\n‘

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

方法一:

sed -i ‘98a zabbix\tALL=(ALL)\tNOPASSWD: /bin/netstat‘ /etc/sudoers

sed -i ‘[email protected]^Defaults [email protected]#Defaults [email protected]‘ /etc/sudoers

方法二:

去掉脚本的sudo,添加suid

usermod -s /bin/bash zabbix

chmod u+s /usr/bin/netstat

测试脚本

[[email protected] scripts]# sh discover.sh

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

6、自定义key

[[email protected] ~]# cd /etc/zabbix/zabbix_agentd.d/

[[email protected] zabbix_agentd.d]# vim mysql.conf

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

[[email protected] zabbix_agentd.d]# systemctl restart zabbix-agent.service

在server端命令行测试

[[email protected] ~]# zabbix_get -s 192.168.1.51 -k mysql.discovery

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

增加自定义key

[[email protected] 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

[[email protected] zabbix_agentd.d]# systemctl restart zabbix-agent.service

在server端命令行进行测试

[[email protected] ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3306]

1

[[email protected] ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3307]

1

[[email protected] ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3308]

1

7、server端web界面操作

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

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

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

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

原文地址:https://www.cnblogs.com/ssgeek/p/9277092.html

时间: 2024-10-08 20:37:06

zabbix低级自动发现之mysql多实例的相关文章

Zabbix监控之低级自动发现以及MySQL多实例

概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix agent主动联系zabbix server,server自动添加host,group,template 以上两种方式都是发现host,添加host,而low-level discovery(低级自动发现)更加底层,用于发现item,trigger,graph等等. 2.MySQL多实例的低级自动发现

Zabbix自动发现监控Mysql数据库

结果图展现 先让大家看下结果图,Zabbix通过自动发现监控Mysql每秒的增.删.改.查,通过自动发现监控Mysql的流入流出流量,结果图如下: Mysql给Zabbix监控的权限 首先创建一个监控用户,usage on为比较小的权限,较安全.sql如下 grant usage on *.* to 'monitor'@'127.0.0.1' identified by 'shijiangepwd'; flush privileges; 测试监控用户是否生效,测试结果如下 mysql -umon

zabbix根据主机和端口列表自动发现监控远程MongoDB实例

在有些情况下,只能使用远程的MongoDB实例而不能登录到MongoDB实例所在的服务器上,这时可以在一台服务器上维护一个远程MongoDB实例的主机和端口列表,然后通过zabbix的自动发现功能去根据主机和端口自动添加相应的监控.

zabbix通过自动发现功能实现自动识别网络设备接口

由于之前网络设备不是很多,监控网络设备接口就直接使用模版中的item来实现了,可是现在公司上线了一大批网络设备,如果要每个网络设备都做模板,添加item......那就该废了,于是迫于压力今天来测试使用zabbix的自动发现功能实现自动发现网络设备接口,并且自动获取接口的流量值,生成流量图等功能. 这样的话就能节省大量时间,时间就是生命啊,把时间浪费在枯燥的添加网络接口的工作上就是在浪费生命!好了,废话不多说,进入正题: 首先,在交换机上面配置好snmp协议,为了简单,这里目前使用的是snmp

Zabbix之自动发现

1. 打开configure--Discovery--create discovery rule: 需要添加名称,ip地址段(这个地址段以覆盖你所有IP的最小地址段为好),checks.其中checks最为重要,总共三项,只填写key,这里用 system.uname这个key.然后点击添加并保存.这里的意思是zabbix服务器端扫描这个网段中的zabbix客户端(客户端端口默认为 10050),扫描到之后取客户端的system.uname值,这个值返回的类似于linux系统中的uname –a

zabbix的自动发现、自定义添加监控项目

1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需要修改那么,就只有到模板里面进行相关设置.   2.自定义添加监控项目,监控项目都是针对于客户机而言的,一般都是对客户机进行配制 先在客户机创建一个脚本加入以下内容:mkdir /etc/zabbix/sh; vim /etc/zabbix/sh/estab.sh #!/bin/bash##获取80

使用 zabbix 自动发现监控 MySQL

介绍 使用 zabbix 的 low-level 自动发现功能完成单主机多端口的监控, 详见low_level_discovery, 整体上监控类似 percona 的 zabbix 监控插件, 不过使用 mymonitor.pl 替换了脚本 ss_get_mysql_stats.php, 而且配置有点不同. 具体代码及配置详见: zabbix_mysql 1. 结构说明: zabbix_mysql/ |-- README.md |-- bin | |-- get_mysql_stats_wra

zabbix自定义自动发现服务(low-level-discovery)监控系统服务

一.概述 由于工作关系很久没有更新博客了,本文基于生产配置,是zabbix系列的另一补充:本次要讲的是zabbix Low-level discovery简称(LLD),我们在配置items(监控项)时,有时需要对类似的Items进行添加,换句话说,多台机器上的某一监控具有类似的items,如系统开放的服务,再如磁盘分区,网卡名称等,后两种zabbix已经自带,今天我们以自定义监控每个系统开放的服务来说明 LLD的使用逻辑;和普通items获取不同的是,LLD 脚本在获取返回时,格式必须是jso

zabbix 自定义自动发现的key! low level discovery

1 意义和目的,在这里不讨论,只讨论是实现方法 2 学习的前提,你会编写常规的key! 和理解模板,item知识 系统环境 master端: [[email protected] zabbix_agentd.conf.d]# ifconfig  eth0| sed -n 's#.*inet addr:\(.*\) B.*#\1#gp' 192.168.100.10 client端 [[email protected] zabbix]# ifconfig  eth0| sed -n 's#.*in