06.Zabbix分布式监控

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。

老男孩Linux云计算运维QQ交流群: 384467551 226199307
老男孩教育官网 http://www.oldboyedu.com

ZabbixProxy分布式概述

zabbix proxy可以代替zabbix server收集性能和可用性数据, 然后把数据汇报给zabbix server并且在一定程度上分担了zabbix server的压力

2.Zabbix分布式监控使用场景

  • 监控不同区域设备
  • 监控本地网络不稳定区域
  • zabbix监控上千设备时,使用它来减轻server的压力
  • 简化分布式监控的维护

zabbix proxy仅仅需要一条tcp连接到zabbix server所以防火墙上仅仅需要加上一条规则即可。

proxy收集到数据之后,首先将数据缓存在本地, 然后在一定得时间之后传递给zabbix server这样就不会因为服务器的任何临时通信问题而丢失数据。
这个时间由proxy配置文件中参数ProxyLocalBufferProxyOfflineBuffer决定。

zabbix proxy是一个数据收集器,它不计算触发器、不生成图形、不处理事件、不发送报警。有关proxy功能的概述,如下表:

ZabbixPorxy分布式实践

1.ZabbixProxy分布式实践场景

2.ZabbixProxy分布式场景实践环境规划

服务器功能 服务器外网 服务器内网
Zabbix-Server 10.0.0.71
Zabbix-Proxy 10.0.0.8 172.16.1.8
Zabbix-Agent 10.0.0.9 172.16.1.9

3.安装Zabbix-Proxy

[root@proxy_node1 ~]# yum localinstall -y https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-proxy-mysql-3.4.14-1.el7.x86_64.rpm

4.配置Zabbix-Proxy数据库

# 安装Mariadb数据库
[root@proxy_node1 ~]# yum install mariadb-server –y
[root@proxy_node1 ~]# systemctl start mariadb
[root@proxy_node1 ~]# systemctl enable mariadb
# 登陆Mariadb数据库
[root@proxy_node1 ~]# mysql

# 创建数据库
MariaDB [(none)]> create database zabbix_proxy default charset utf8;
# 授权数据库
MariaDB [(none)]> grant all on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'zabbix_proxy';
MariaDB [(none)]> exit

# 导入zabbix数据
[root@proxy_node1 ~]# cd /usr/share/doc/zabbix-proxy-mysql-3.4.14/
[root@web02 zabbix-proxy-mysql-3.4.14]# zcat schema.sql.gz |mysql -uzabbix_proxy -pzabbix_proxy zabbix_proxy

5.配置Zabbix-Proxy服务, 将Zabbix Proxy的指向Zabbix-Server地址

[root@proxy_node1 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.71
Hostname=Zabbix Proxy
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
Timeout=30

6.启动zabbix-proxy并加入开机自启

[root@proxy_node1 ~]# systemctl enable zabbix-proxy
[root@proxy_node1 ~]# systemctl start zabbix-proxy
[root@proxy_node1 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      5561/zabbix_proxy

7.配置Zabbix-Agent

[root@web03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf 
Server=172.16.1.8
ServerActive=172.16.1.8
Hostname=Web03      #必须填写主机名
2.重启zabbix-agent
[root@web03 ~]# systemctl restart zabbix-agent

8.配置Zabbix-ServerWeb页面, 单击创建代理

9.配置proxy名称, 它必须与proxy配置文件中的Hostname参数中的名称相同

10.在ZabbixServer上创建主机, 主机名称是必须Agent之前定义的Hostname否则Agent无法使用主动模式的监控项, 最后借助Proxy代理去取值, 单击->配置->主机->创建主机->模板->

11.最终监控效果如下

12.检查最新数据,查看最终监控效果

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.71/zabbix/api_jsonrpc.php

#返回的token
4f51830c86bdffebfbc4b5a92734260c

2.使用token验证身份, 并禁用某一台主机

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.update",
    "params": {
        "hostid": "10289",
        "status": 1
    },
    "auth": "4f51830c86bdffebfbc4b5a92734260c",
    "id": 1
}' http://10.0.0.71/zabbix/api_jsonrpc.php

3.使用API方式删除一台主机

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "10289"
    ],
    "auth": "4f51830c86bdffebfbc4b5a92734260c",
    "id": 1
}' http://10.0.0.71/zabbix/api_jsonrpc.php

4.使用API创建主机

curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "192.168.3.3",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "192.168.3.1",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "5"
            }
        ],
        "templates": [
            {
                "templateid": "10095"
            }
        ]
    },
    "auth": "e42a8c26b5a66826f7c3b988d53d4a9f",
    "id": 1
}' http://10.0.0.71/zabbix/api_jsonrpc.php

5.如何批量创建主机

[root@proxy_node1 ~]# cat  zabbix_create.sh 
#login
GetToken=$(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.71/zabbix/api_jsonrpc.php)

# result token
Token=$(echo $GetToken|awk -F ',' '{print $2}'|awk -F '"' '{print $4}')

while read line;do
curl -s -X POST -H 'Content-Type:application/json' -d '{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": '\"$line\"',
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": '\"$line\"',
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "2"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": '\"$Token\"',
    "id": 1
}' http://10.0.0.71/zabbix/api_jsonrpc.php|python -m json.tool
done < /tmp/ip.txt

Zabbix监控性能优化

1) Zabbix属于写多读少的业务, 所以需要针对zabbixMySQL进行拆分.
2) 将Zabbix-Agent被动监控模式, 调整为主动监控模式.
3) 使用zabbix-proxy分布式监控, 在大规模监控时用于缓解Zabbix-Server压力.
4) 去掉无用监控项, 增加监控项的取值间隔, 减少历史数据保存周期(由housekeeper进程定时清理)
5)针对于Zabbix-server进程调优, 谁忙就加大谁的进程数量, 具体取决实际情况, 不是越大越好
6)针对于Zabbix-server缓存调优, 谁的剩余内存少, 就加大它的缓存值zabbix cache usage
7) 关注管理->队列, 是否有被延迟执行的监控项