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