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监控项更新间隔为什么不生效 zabbix监控优化_运维

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 地址。

实验环境架构图

zabbix监控项更新间隔为什么不生效 zabbix监控优化_java_02

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代理程序----->创建代理

zabbix监控项更新间隔为什么不生效 zabbix监控优化_memcached_03

zabbix监控项更新间隔为什么不生效 zabbix监控优化_zabbix监控项更新间隔为什么不生效_04

zabbix监控项更新间隔为什么不生效 zabbix监控优化_zabbix监控项更新间隔为什么不生效_05

10.0.0.41

zabbix监控项更新间隔为什么不生效 zabbix监控优化_运维_06


zabbix监控项更新间隔为什么不生效 zabbix监控优化_数据库_07


zabbix监控项更新间隔为什么不生效 zabbix监控优化_memcached_08

zabbix监控项更新间隔为什么不生效 zabbix监控优化_数据库_09


zabbix监控项更新间隔为什么不生效 zabbix监控优化_运维_10

2.zabbix监控jvm-Tomcat

zabbix监控项更新间隔为什么不生效 zabbix监控优化_memcached_11

#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的主机

zabbix监控项更新间隔为什么不生效 zabbix监控优化_memcached_12


zabbix监控项更新间隔为什么不生效 zabbix监控优化_数据库_13

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) 关注管理->队列, 是否有被延迟执行的监控项