bash
#!/bin/bash


主被动模式介绍
Zabbix支持多种模式,zabbix支持普通的zabbix server到zabbix agent端模式,也支持zabbix-sever到zabbix-proxy模式,zabbix-server同时关联多个zabbix-agent,将zabbix-agent的历史数据存储到zabbix-server管理的数据库中,然后经过zabbix的web(也就是nginx)展示出来;
zabbix支持proxy代理模式,只需要授权proxy监听在特定的端口上10052,而对应的proxy会独立的管理他下面的zabbix-agent,并将zabbix-agent的数据存储到proxy管理的数据库中,zabbix-server没有存储zabbix-proxy数据的功能,是将proxy的数据放到zabbix web展示区进行展示;
Zabbix是基于php开发的,默认使用fastcgi,而Java不支持fastcgi模式,为了采集展示进行可视化java对应的指标数据,要让Java支持fastcgi,需要安装一个JMX的java类,zabbix关联java gateway,java中的应用体系支持gateway进行绑定起来,基于JMX就可以收集到Java gateway的数据并将其在zabbix web上进行图表展示。
1、web监控配置
web监控需求
以zabbix-UI页面的登录监控,模拟登录,输入账号密码,实现首页的健康监控。
模拟登录输入zabbix账号密码,登录后台,如果登录失败就报警
基于响应状态码判断 非200即报警




2.zabbix主动模式




2.1 修改zabbix-agent为主动模式(web-7)
bash
[root@web-7 ~]#cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.71
ServerActive=10.0.0.71
Hostname=web-7
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@web-7 ~]#
重启agent服务
systemctl restart zabbix-agent
2.2 修改监控项的采集模式
bash
1. 修改了配置文件,支持主动上传数据的模式
2. 修改该机器的监控项,为主动模式(批量修改)
3. 基于应用集选择某一系列的监控项,进行改为主动模式,也可以全选所有监控项,改为主动模式



os linux
php
nginx
2.2 确保基于agnet,主动式,采集了web7的,nginx,php的数据



3.zabbix自动发现
对于网络发现最需要理解的就是工作流程,不然觉得这个发现功能很奇怪,理解之后,就觉得这个设计很合理了。而且使用起来也很正常,而大部分文章只是讲解了如何使用,官方文件简单的提到了工作流程,不小心很容易忽略。
参考文档: 1 Network discovery
自动发现主要是希望通过发现网络中的主机,并自动把主机添加到监控中,并关联特定的模板,实现自动监控。例如在办公网络中,希望通过Zabbix Agent监控所有工作电脑,只需要把新安装的电脑开放防火墙10050端口,那么电脑就可以自动通过发现新机器,并开始监控。如果网络中可能存在Windows和Linux系统,就需要通过Zabbix Agent判断自动添加的主机是Windows还是Linux。
以上这个过程需要分为两个步骤:
- 通过网络扫描制定的服务,本例为Zabbix Agent是否可以访问system.uname指标
- 发现主机之后需要执行添加的动作,这个过程由动作(Action)完成


给自动发现,设置动作

准备好一些机器
bash
cicd-99
jenkins-100
web-8
统一安装zabbix客户端 zabbix-agent
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
ntpdate -u ntp.aliyun.com
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.71
ServerActive=10.0.0.71
Hostname=cicd-99
Include=/etc/zabbix/zabbix_agentd.d/*.conf
systemctl restart zabbix-agent
netstat -tunlp|grep zabbix
[root@zabbix-server-71 ~]#for i in 99 100 8;do zabbix_get -s 10.0.0.$i -k system.uname ;done
自动发现的条件,貌似都好了

4.zabbix自动注册
为什么要学自动注册?
一样的
自动发现,是zabbix-server去扫描网段,然后添加机器,机器多了,一样要累死他
就是配置好一个网络环境后,zabbix-server主动去网络环境中扫描,然后发现目标机器然后监控,此时的agent是被动等待的。
那如果需要扫描多种网段,且机器数量很大的话,你的zabbix-server服务器可就很难受了。。。
因此自动注册,就是由zabbix-agent主动发起注册请求,你来监控我把!!!
极大的降低了zabbix-server的服务器压力。
需求
web7
web8
cicd99
jenkins100
全部自动注册到zabbix-server,且关联模板,且发送钉钉给运维管理员,告知是哪些机器,都被注册上了。


4.1 修改需要自动注册的agent配置文件

bash
web7
web8
cicd99
jenkins100
[root@zabbix-server-71 ~]#cat zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.71
ServerActive=10.0.0.71
HostMetadata=Linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix-server-71 ~]#for i in 7 8 99 100;do scp zabbix_agentd.conf root@10.0.0.$i:/etc/zabbix/;done
zabbix_agentd.conf 100% 201 320.3KB/s 00:00
zabbix_agentd.conf 100% 201 417.4KB/s 00:00
zabbix_agentd.conf 100% 201 328.3KB/s 00:00
zabbix_agentd.conf 100% 201 431.5KB/s 00:00
[root@zabbix-server-71 ~]#
[root@zabbix-server-71 ~]#for i in 7 8 99 100;do ssh root@10.0.0.$i "systemctl restart zabbix-agent";done
[root@zabbix-server-71 ~]#
[root@zabbix-server-71 ~]#
[root@zabbix-server-71 ~]## 循环再 7 ,8,99,100四台机器,远程的ssh去重启zabbix-agent
[root@zabbix-server-71 ~]#



5.zabbix-proxy配置
zabbix分布式proxy配置

bash
1. 部署一个zabbix-proxy机器
2. 设置zabbix元修改为清华的
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
yum install zabbix-proxy-mysql mariadb-server -y
3. zabbix-proxy 和 zabbix-server配置几乎一样,模拟了一个server角色,去存储agent的数据
systemctl start mariadb.service
mysqladmin password linux0224
mysql -uroot -plinux0224
4.数据库创建,zabbix库,以及mysql账号
# 非交互式的,执行mysql的 SQL语句
mysql -uroot -plinux0224 -e "create database zabbix_proxy character set utf8 collate utf8_bin;"
mysql -uroot -plinux0224 -e "grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost identified by 'linux0224';"
mysql -uroot -plinux0224 -e "flush privileges;"
5. 导入zabbix------poroxy的数据库数据
zcat /usr/share/doc/zabbix-proxy-mysql-4.0.42/schema.sql.gz| mysql -uzabbix_proxy -plinux0224 zabbix_proxy
6.创建proxy配置文件
cat > /etc/zabbix/zabbix_proxy.conf <<'EOF'
ProxyMode=0 # 代理模式,0 主动, 1 被动
Server=10.0.0.71 # 填入zabbix-server地址
ServerPort=10051 # 填入zabbix-server端口
Hostname=zabbix-proxy-72 # 填入主机名
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=linux0224
ConfigFrequency=60 # proxy多久和server同步配置信息
DataSenderFrequency=5 # proxy多久发送一次自己的数据给server
EOF
7.启动,检查
systemctl restart zabbix-proxy.service
[root@zabbix-proxy-72 ~]#netstat -tunlp|grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1954/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 1954/zabbix_proxy

5.1 设置agent指向zabbix_proxy
前置动作
关闭自动注册,自动发现等
删除现有的主机,查看基于zabbix-proxy模式的agent机器添加,数据采集

待会来看,基于zabbix-proxy模式的主机添加图解
bash
# agent是什么 添加模式?
# 自动注册模式
# ServerActive=10.0.0.72
# HostMetadata=Linux
自己for循环批量给 web7 web8 cicd99 jenkins100
[root@zabbix-server-71 ~]#cat zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.72
ServerActive=10.0.0.72
HostMetadata=Linux
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix-server-71 ~]#for server in 7 8 99 100;do scp zabbix_agentd.conf root@10.0.0.${server}:/etc/zabbix/ ; done
zabbix_agentd.conf 100% 200 494.5KB/s 00:00
zabbix_agentd.conf 100% 200 444.5KB/s 00:00
zabbix_agentd.conf 100% 200 371.4KB/s 00:00
zabbix_agentd.conf 100% 200 353.2KB/s 00:00
批量重启
for server in 7 8 99 100;do ssh root@10.0.0.${server} "systemctl restart zabbix-agent" ; done
5.2 去zabbix-UI中添加proxy的配置

5.3 打开自动注册功能,让agent机器,注册到proxy后,再注册到server中
自动注册,匹配条件就是,主机元数据,里有 Linux
要求结果是
zabbix-UI中可以看到 基于proxy添加的主机
钉钉发个消息


看最新数据

bash
#!/bin/bash