首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Zabbix低级自动发现及MySQL多实例监控

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

作者头像
王先森sec
发布2023-04-24 17:03:05
发布2023-04-24 17:03:05
4950
举报
文章被收录于专栏:王先森王先森

概述

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

查看系统自带的网卡自动发现

查看网络自动发现规则

过滤规则

命令行过滤

代码语言:javascript
复制
[root@db01 ~]# zabbix_agentd -p |grep net.if.discovery
net.if.discovery                              [s|{"data":[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]}]

查看自动发现监控项

查看key的值

代码语言:javascript
复制
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k net.if.in[eth0]
1552020663
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k net.if.in[eth1]
7983894
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k net.if.out[eth0]
269091531
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k net.if.out[eth1]
52448

监控mysql多实例

准备MySQL多实例

代码语言:javascript
复制
## 创建目录
mkdir -p /data/330{7,8}/{data,logs}
  • 3307配置文件
  • 3308配置文件
代码语言:javascript
复制
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/data/mysql/
datadir=/data/3307/data
user=mysql
secure-file-priv=/tmp
socket=/data/3307/mysql.sock
log_error=/data/3307/logs/mysql.log
port=3307
server_id=7
log_bin=/data/3307/logs/mysql-bin
EOF
代码语言:javascript
复制
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/data/mysql/
datadir=/data/3308/data
user=mysql
secure-file-priv=/tmp
socket=/data/3308/mysql.sock
log_error=/data/3308/logs/mysql.log
port=3308
server_id=8
log_bin=/data/3308/logs/mysql-bin
EOF

初始化

代码语言:javascript
复制
mysqld --initialize-insecure  --user=mysql --basedir=/data/mysql --datadir=/data/3307/data
mysqld --initialize-insecure  --user=mysql --basedir=/data/mysql --datadir=/data/3308/data

启动MySQL多实例

  • 3307启动文件
  • 3308启动文件
代码语言:javascript
复制
[root@db01 ~]# cat  /etc/systemd/system/mysqld7.service
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
代码语言:javascript
复制
[root@db01 ~]# cat /etc/systemd/system/mysqld8.service 
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000

!— endtab —>

代码语言:javascript
复制
[root@db01 ~]# systemctl start mysqld7
[root@db01 ~]# systemctl start mysqld8
[root@db01 ~]# netstat -lntup|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      44641/mysqld        
tcp6       0      0 :::3307                 :::*                    LISTEN      27551/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      27593/mysqld   

创建自动发现多实例脚本

代码语言:javascript
复制
cat /server/scripts/mysql_discovery.sh                                                
#!/bin/bash
# from www.boysec.cn
#mysql low-level discovery 
res=$(netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$4}')
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'

测试自动发现脚本

代码语言:javascript
复制
[root@db01 scripts]# bash /server/scripts/mysql_discovery.sh            
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

创建自动发现配置文件

代码语言:javascript
复制
[root@db01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh

重启agent测试取值

代码语言:javascript
复制
## zabbix-agent段
[root@db01 scripts]# systemctl restart zabbix-agent.service 

## zabbix-server
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k mysql.discovery
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}

这时我们发现取不出来并提示了个错误 原因是zabbix用户不能使用netstat的-p参数 解决方法为给netstat命令添加s权限

代码语言:javascript
复制
[root@db01 scripts]# chmod u+s /usr/bin/netstat 
再一次取值
代码语言:javascript
复制
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

web页面创建自动发现规则模版

监控MySQL是否存活,创建监控项原型

代码语言:javascript
复制
[root@db01 scripts]# mysqladmin ping -uroot  -h 127.0.0.1 -P3308 2>/dev/null|grep -c alive  
1
[root@db01 scripts]# mysqladmin ping -uroot  -h 127.0.0.1 -P3306 2>/dev/null|grep -c alive         
1
[root@db01 scripts]# mysqladmin ping -uroot  -h 127.0.0.1 -P3307 2>/dev/null|grep -c alive 
编写agent配置文件
代码语言:javascript
复制
[root@db01 scripts]# cat /etc/zabbix/zabbix_agentd.d/mysql_alive.conf 
UserParameter=mysql_alive[*],mysqladmin ping -uroot  -h 127.0.0.1 -P$1 2>/dev/null|grep -c

systemctl restart zabbix-agent.service 
server端验证
代码语言:javascript
复制
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k mysql_alive[3306]
1
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k mysql_alive[3307]
1
[root@zabbix ~]# zabbix_get -s 10.1.1.60 -k mysql_alive[3308]
1
web添加
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 查看系统自带的网卡自动发现
    • 查看网络自动发现规则
    • 过滤规则
    • 命令行过滤
    • 查看自动发现监控项
    • 查看key的值
  • 监控mysql多实例
    • 准备MySQL多实例
    • 初始化
    • 启动MySQL多实例
    • 创建自动发现多实例脚本
    • 测试自动发现脚本
    • 创建自动发现配置文件
    • 重启agent测试取值
      • 再一次取值
    • web页面创建自动发现规则模版
    • 监控MySQL是否存活,创建监控项原型
      • 编写agent配置文件
      • server端验证
      • web添加
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档