Zabbix分布式监控及优化
文章目录
- Zabbix分布式监控及优化
- 1.模拟多机房实现监控?
- 2.zabbix监控jvm-Tomcat
- 3.zabbix API批量添加主机(开发)
- 4.zabbix优化
1.模拟多机房实现监控?
zabbix-proxy可以替代zabbix server收集性能和可用性数据,然后把数据回报给zabbix server,并在一定程度上分但了zabbix server的压力
1.有多机房时,需要用到proxy
1.网络不通
2.网络延迟
2.当监控的主机较多时,也可以用proxy来缓解压力
3.zabbix分布式监控的使用场景
监控不同区域设备
监控本地网络不稳定区域
当zabbix监控上千设备时,使用它来减轻server的压力
简化分布式监控的维护
zabbix-proxy仅仅需要一条tcp连接到zabbix-server,所以防火墙上只需要添加一条规则即可。
zabbix proxy数据库必须和server分开,否则数据会被破坏
proxy收集到数据之后,首先将数据缓存在本地,然后在一定的时间之后传递给zabbix server这样就不会因为服务器的任何临时通信问题丢失数据。
这个时间由proxy配置文件中proxyLocalBuffer和proxyoffineBuffer决定。
Zabbix通过Zabbix proxies为IT基础设施提供有效和可用的分布式监控代理(proxies)可用于代替Zabbix server本地收集数据,然后将数据报告给服务器。
zabbix proxy 是一个数据收集器,它不计算触发器、不处理事件、不发送报警。有关proxy功能的概述,如下表
功能 | proxy支持(yes/no) | |
项目(Items) | ||
Zabbix agent checks | Yes | |
Zabbix agent checks (active) | Yes 1 | |
Simple checks | Yes | |
Trapper items | Yes | |
SNMP checks | Yes | |
SNMP traps | Yes | |
IPMI checks | Yes | |
JMX checks | Yes | |
日志文件监控(Log file monitoring) | Yes | |
内部检查(Internal checks) | Yes | |
SSH checks | Yes | |
Telnet checks | Yes | |
外部检查(External checks) | Yes | |
内置web监控(Built-in web monitoring) | Yes | |
网络发现(Network discovery) | Yes | |
自动发现(Low-level discovery) | Yes | |
触发器计算(Calculating triggers) | No | |
处理事件(Processing events) | No | |
发送报警(Sending alerts) | No | |
远程命令(Remote commands) | No |
[1]使用 agent active 模式,一定要记住在 agent 的配置文件参数 ServerActive 加上 proxy 的 IP 地址。
实验环境架构图
1.安装zabbix-server 端口10051
2.安装zabbix-proxy 端口10051
2.1配置proxy指向server
3.安装zabbix-agent 端口10050
3.1配置agent指向proxy
#主机规划(我自己的,因为之前做实验,没有改主机名)
zabbix-server 10.0.0.61 主机名:manage
sz-proxy-1 10.0.0.7 主机名:web001
sh-proxy-2 10.0.0.8 主机名:web002
zabbix-agent-1 10.0.0.51 主机名:db01
zabbix-agent-2 10.0.0.41 主机名:backup
#10.0.0.7和10.0.0.8执行
#1.安装zabbix-proxy
#配置zabbix-proxy源
[root@web001 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
#安装zabbix-proxy以及数据库
[root@web001 ~]# yum install zabbix-proxy-mysql mariadb-server -y
[root@web001 ~]# systemctl start mariadb
#配置数据库
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost identified by 'zabbix_proxy';
Query OK, 0 rows affected (0.00 sec)
#将数据导入zabbix_proxy库
[root@web001 ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.0.33/schema.sql.gz | mysql -uzabbix_proxy -pzabbix_proxy zabbix_proxy
#2.配置zabbix-proxy
#修改下面这些内容
[root@web001 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.61
Hostname=sz_proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
#3启动zabbix-proxy
[root@web001 ~]# systemctl enable zabbix-proxy
[root@web001 ~]# systemctl start zabbix-proxy
[root@web001 ~]# netstat -lntp | grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 8321/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 8321/zabbix_proxy
#zabbix-agent 不通区域的agent指向不同的proxy
10.0.0.61 <--- 10.0.0.7 <---10.0.0.51
10.0.0.61 <--- 10.0.0.8 <---10.0.0.41
[root@db01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.7
ServerActive=10.0.0.7
[root@db01 ~]# systemctl restart zabbix-agent
[root@backup ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.8
ServerActive=10.0.0.8
[root@backup ~]# systemctl restart zabbix-agent
#5.登录zabbix-server
注意: zabbix-server 与 zabbix-proxy 需要版本一致
#如果版本不一致,将zabbix-proxy卸载,直接yum安装和zabbix-server相对于的版本
#我的zabbix-server是4.0.32版本
yum remove -y zabbix-proxy-mysql-4.0.33-1.el7.x86_64
yum install -y zabbix-proxy-mysql-4.0.32-1.el7.x86_64
ProxyLocalBuffer Proxy将在本地保留数据N小时,即使数据已与server同步。(默认不保留立即发送)
ProxyOfflineBuffer 如果无法连接Zabbix server,proxy将默认保留数据1小时.
1.点击管理----->agent代理程序----->创建代理
10.0.0.41
2.zabbix监控jvm-Tomcat
#proxy不可以和zabbix-server安装在同一台机器中,因为端口都是10051
1.Zabbix-Server找Zabbix-Java-Gateway获取Java数据
2.Zabbix-Java-Gateway找Java程序获取数据
3.Java程序返回数据给Zabbix-Java-Gateway
4.Zabbix-Java-Gateway返回数据给Zabbix-Server
5.Zabbix-Server进行数据展示
#环境
zabbix-server 10.0.0.61
zabbix-java-getway 10.0.0.7
tomcat 10.0.0.8
#1.安装zabbix-java-getway
[root@web001 ~]# yum install zabbix-java-gateway -y
#2.不需要配置,直接启动java-getway
[root@web001 ~]# systemctl restart zabbix-java-gateway
[root@web001 ~]# systemctl enable zabbix-java-gateway
#3.配置zabbix-server指向zabbix-java-gateway
[root@manage ~]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
JavaGateway=10.0.0.7
JavaGatewayPort=10052
StartJavaPollers=5
[root@manage ~]# systemctl restart zabbix-server
#4.启动tomcat程序,开启jmx协议
[root@web002 tomcat]# vim bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=10.0.0.8"
#启动tomcat
[root@web002 tomcat]# netstat -lntp | grep 12345
tcp6 0 0 :::12345 :::* LISTEN 10375/java
[root@web002 tomcat]# ps -ef | grep java
root 10375 1 45 15:58 pts/0 00:00:14 /usr/bin/java -Djava.util.logging.config.file=/soft/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.8 -Dignore.endorsed.dirs= -classpath /soft/tomcat/bin/bootstrap.jar:/soft/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/soft/tomcat -Dcatalina.home=/soft/tomcat -Djava.io.tmpdir=/soft/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 10405 10305 5 15:58 pts/0 00:00:00 grep --color=auto java
#登录zabbix-web添加一台jmx的主机
3.zabbix API批量添加主机(开发)
1.在使用zabbix-api之前,先获取一个token
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1
}' http://10.0.0.61/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"4c831e081ff77510f9662bb9de0f9144","id":1}
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "4c831e081ff77510f9662bb9de0f9144"
}' http://10.0.0.61/zabbix/api_jsonrpc.php
2.使用token验证身份, 并禁用某一台主机
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.update",
"params": {
"hostid": "10283",
"status": 1
},
"auth": "4c831e081ff77510f9662bb9de0f9144",
"id": 1
}' http://zabbix.oldxu.com/zabbix/api_jsonrpc.php
4.使用API创建主机
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "10.0.0.1",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "10.0.0.1",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "20"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "4c831e081ff77510f9662bb9de0f9144",
"id": 1
}' http://10.0.0.61/zabbix/api_jsonrpc.php
4.zabbix优化
1) Zabbix属于写多读少的业务, 所以需要针对zabbix的MySQL进行拆分.
1.LAMP -->拆分成LAP + MySQL
2.MySQL尽量使用SSD固态盘
2) 将Zabbix-Agent被动监控模式, 调整为主动监控模式.
3) 使用zabbix-proxy分布式监控, 在大规模监控时用于缓解Zabbix-Server压力
4) 去掉无用监控项, 增加监控项的取值间隔, 减少历史数据保存周期(由housekeeper进程定时清理)
5)针对于Zabbix-server进程调优, 谁忙就加大谁的进程数量, 具体取决实际情况, 不是越大越好
6)针对于Zabbix-server缓存调优, 谁使用的缓存多,就加大它的缓存值(zabbix cache usage图表)
7) 关注管理->队列, 是否有被延迟执行的监控项