Day04-zabbix补充项目案例
13.2 自动注册
-
应用场景,经常性添加主机。
-
准备:
- 关闭 自动发现 规则
- 关闭 自动发现 动作
- 自动发现的主机 删除
-
zbx客户端配置: 修改zabbix客户端配置文件: ServerActive=服务端ip 和Hostname=… …
-
web页面,动作–>自动注册 autoreg…
1)zbx客户端配置文件
- 客户端主动把自己的信息,提供给服务端。
- 服务端收到数据后通过 自动注册动作,判断与添加。
客户端的配置 | 说明 |
---|---|
Server=172.16.1.63 | 服务端地址。 |
ServerActive=172.16.1.63 | 主动模式下的服务端ip地址。 |
#Hostname=web01 | 当前主机名,这个可以注释掉或使用ansible配置。建议注释使用下面的内容,自动获取主机名 |
HostnameItem=system.hostname | 通过后面指定的键值获取主机名。 ⚠ Hostname和HostnameItem2选1.Item监控项、键值 |
HostMetadataItem=system.uname | 主机的 元数据 键值,类似于自动发现中的system.uname判断存活和获取主机信息 |
- HostMetadataItem=system.uname
- zbx客户端配置(通用)
[root@web01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.62
ServerActive=172.16.1.62
HostnameItem=system.hostname
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@web01 ~]# systemctl restart zabbix-agent2.service
2)web页面,动作–>自动注册
-
与自动发现类似,客户端找到服务端后提交自己信息。
-
服务端通过自动注册动作进行判断与添加即可。
-
进入自动注册动作配置页面
- 创建自动注册动作
- 配置自动注册动作
- 配置自动注册操作
- 完成与等待
- 可以选择重启客户端或者服务端的zabbix服务来加快显示
3)小结
- 整体流程与自动发现类似,但是自动注册无法再web页面直接查看是否发现了主机,只能看是否添加主机。
- 自动注册,web页面没有地方配置规则,自动注册把规则写入到了客户端配置文件中的。
- web页面只需要配置,自动注册动作即可。
14. 来点大的-分布式监控
14.1 分布式监控概述及应用场景
- zabbix分布式监控应用场景: 监控多个地区/多个机房的服务器,服务器之间内网不通
多个节点(区域、机房)zbx监控问题 | 方案01:客户端直接写服务端公网ip | 方案02:使用分布式监控 |
---|---|---|
带宽 | ||
网络稳定性问题 | ||
可能存在误报 |
- 应用场景
14.2 分布式监控实战
- 目标:
- 应对公司网站服务器较多场景.
- 公司网站服务器分散在不同的机房或地区(跨机房)
1) 分布式监控搭建
2) zbx-代理
- 安装zbx-proxy-mysql 代理
- 安装数据库
- 配置
1. 安装代理
yum install -y https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-proxy-mysql-6.0.29-release1.el7.x86_64.rpm
rpm -qa |grep zabbix
zabbix-proxy-mysql-6.0.5-1.el7.x86_64
zabbix-agent2-6.0.5-1.el7.x86_64
2. 安装与启动数据库
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
yum install -y mariadb-server
检查版本
rpm -qa |grep -i mariadb
systemctl enable --now mariadb
mysql_secure_installation 执行后根据提示yes或no
Switch to unix_socket authentication [Y/n] N
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
3. 进入数据库创建库,创建用户。
zibbix_proxy
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'zabbix_proxy';
4. 导入数据库(初始化zbx_proxy)
mysql -uroot zabbix_proxy <schema.sql
mysql -uroot -e 'show tables from zabbix_proxy;'
zabbix_proxy 初始化脚本说明
zbx 5.x 初始化脚本在软件包中有。
zcat /usr/share/doc/zabbix-proxy-mysqlՎʺschema.sql.gz | mysql -uzabbix -p123456 zabbix_proxy
zbx 6.x 需要使用源码包中database/mysql/schema.sql,使用这1个就行。
- 修改代理配置文件
5. 修改zbx_proxy配置文件
[root@web01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=172.16.1.63
Hostname=shanghai_proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix_proxy
DBPassword=zabbix_proxy
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
systemctl enable --now zabbix-proxy.service
6. 查看代理日志 报错
cannot send proxy data to server at "172.16.1.63": proxy "shanghai_proxy" not found
- web页面添加代理
- 配置代理
- 注意名字与代理配置中一致。
- web页面可以看到最近出现时间(只要有时间即可)
- 如果长时间没有出现,可以查看代理日志,如果持续出现not found 情况。可以重启下代理和服务端。
3) zbx-客户端修改
- 修改配置文件
[root@nfs01 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.66
ServerActive=172.16.1.66
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
[root@nfs01 ~]# systemctl restart zabbix-agent2.service
[root@m03-zbx-server mysql]# systemctl restart zabbix-proxy.service
- web页面修改,修改这些服务器通过代理获取数据的。修改为
14.3 小结
-
zbx分布式监控应用场景
-
使用流程.
15. 低级自动发现
- 自动发现、自动注册用于发现主机。
- LLD 低级自动发现,用于发现 监控项 (触发器,图形),一般用于发现网卡,发现磁盘分区。。。。
16. zbx api
1)api概述
-
api Application Programming Interface 应用程序编程接口 (相当于是shell函数作用)
-
api接口应用场景: 发送企业微信消息,人脸识别,短信验证,身份验证 使用第3方,功能即可.
-
使用与调用:
- 自己写程序调用:直接通过程序代码进行调用(shell,python,golang,),需要参考对方的api接口文档(请求参数,要求的格式)
- api接口调试工具:apipost,postman
- 官方写好的你来使用(SDK 一般指软件开发工具包): 通过sdk样例快速调用和使用即可.
2)zabbix api
- 开源软件/商业软件的的api接口: 进行二次开发.
- cmdb (存储与管理企业IT架构中设备的各种配置信息):自动化运维平台,web页面管理(Golang,Python)
3)zbx api使用流程
-
api接口使用流程:
- 根据zabbix用户名和密码,获取token(令牌)
- 使用token,访问或调取zabbix资源
- zabbix-api-各种方法
-
方法01 curl命令
-
方法02 api测试工具
-
curl
-
zbx 6.x
token令牌
21ac48b7ef3d033b16cf202812fd0cbeaf9f6d9104202cbe299fdd0232de97d7
- 准备获取令牌
- 获取令牌
- 显示令牌( 注意仅显示1次 )
- 通过api获取主机列表
#案例01 通过zabbix api 获取主机列表
curl -X POST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "21ac48b7ef3d033b16cf202812fd0cbeaf9f6d9104202cbe299fdd0232de97d7"
}' http://zbx.oldboylinux.cn/api_jsonrpc.php | jq
-X 指定请求方法
-H 修改请求头
-d 发出POST请求,要上传的内容。
4)小结
- 会创建zbx api的token
- 一般对zabbix二次开发.
- grafana会使用zabbix api获取数据.
17. zabbix性能优化
1)优化概述
- performance tunning 性能调优
- 网站架构调整: 尽量让用户的请求往前推(用户请求不要到达你的网站走cdn,各种缓存,消息队列)
- 读? 写? 拆分思想.
- 穷则战术穿插,富则火力覆盖
2)硬件优化
- 硬件优化 : cpu,内存,磁盘,网卡(10G万兆网卡,光纤 ),raid
3)zabbix服务端配置优化
-
zabbix参数的配置: 缓存和进程数量
- xxxxcache 用于zabbix服务端缓存获取的各类数据 (历史数据,趋势数据…)
- poller zabbix用于数据采集进程 (接收agent的数据的进程 接收snmp 接收jmx 接收ipmi…)
-
缓存配置
vim /etc/zabbix/zabbix_server.conf
# 用于存储主机、监控项、触发器数据的共享内存大小
CacheSize=8M #512M 边调节边看监控 Zabbix server: Zabbix cache usage, % free
# 历史数据缓存
HistoryCacheSize=16M
#历史数据索引的缓存
HistoryIndexCacheSize=4M
#趋势数据缓存
TrendCacheSize=4M
#值的缓存
ValueCacheSize=8M
- 根据图形调整缓存,进行数量。调整缓存大小之前
- 调整缓存大小之后
- 进程数量调整
vim /etc/zabbix/zabbix_server.conf
# 收集数据进程的数量
StartPollers=5
# 客户端/主机 不可达 可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量
StartPollersUnreachable=1
#用于接收http客户端的数据
StartHTTPPollers=1
#用于收集客户端jmx的数据 (默认是0) java-gateway的时候使用
StartJavaPollers=5
#用于收集zabbix proxy代理的数据的进程数 默认是1
StartProxyPollers=1
#收集ipmi客户端数据
StartIPMIPollers=0
- 修改 poller进程数 对 zabbix服务端收集数据的进程 使用率的 影响
4)Zabbix客户端配置优化
- 调整zbx客户端的模式。默认是被动模式,改为主动模式。 zbx被动模式简单,zbx服务端压力大。zbx主动模式,适用于大量主机监控。
- 主动模式注意事项:
- 改完配置后,主机客户端类型也要改(zbx客户端主动模式),web模板也要修改
- 不绿了。如果监控中只有主动模式,不绿了。
主动模式配置
grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.62
ServerActive=172.16.1.62 # 修改为服务端ip
#Hostname 这个注释掉
HostnameItem=system.hostname # 修改为键值
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
# 重启客户端
systemctl restart zabbix_agent2.service
- 关联主动模式zbx模板
- zabbix客户端
- 不在使用客户端的默认的被动模式
- 使用主动模式 Server 和 ServerActive web页面选择 zabbix客户端(主动模式)
5)Zabbix键值与监控项优化
-
zabbix 键值与监控项处理:
- 增加更新间隔时间5m 10m
- 推荐使用自定义模板,控制功能全面监控,监控项少,精简监控项 (精简)
- 历史数据保留时长减少 设置为30d或7d, 增加趋势存储时间保留时间 365d
-
zabbix网站架构容量评估
#zabbix占用磁盘空间的计算
######关于历史数据的管家设置
Zabbix 将接收到的值保存一段固定的时间,通常为几周或几个月。每个新值都需要一定量的磁盘空间用于数据和索引。
所以,如果我们每秒收到 50 个值,且希望保留 30 天的历史数据,值的总数将大约在 (30*24*3600)* 50 = 129,60 0,000,即大约130M 个值。
根据所使用的数据库引擎,接收值的类型(浮点数、整数、字符串、日志文件等),单个值的磁盘空间可能在 40 字节到数百字节之间变化。 通常,数值类型的每个值大约为 90 个字节。
在上面的例子中,这意味着 130M 个值需要占用 1 3000 0000 * 90 bytes = 10.9GB 磁盘空间。
文本和日志类型的监控项值的大小是无法确定的,但可以以每个值大约 500 字节来计算。
#####趋势数据的管家设置
Zabbix 为表 trends 中的每个项目保留1小时的最大值 / 最小值 / 平均值 / 统计值。 该数据用于趋势图形和历史数据图形。 这一个小时的时间段是无法自定义。
Zabbix数据库,根据数据库类型,每个值总共需要大约90个字节。
假设我们希望将趋势数据保持5年。 3000 个监控项的值每年需要占用3000*24*365* 90 = 2.2GB 空间,或者5年需要占用 11GB 空间。
- zabbix 触发器
- 尽量使用 .last() (最新数据) .nodata() (是否有数据)
- 避免使用需要计算函数 .max() .min() .avg()
- 整体目标:不要让zabbix服务端进行计算/数据库进行计数,需要计算的内容放在客户端(自定义监控项)
zbx 5.x
{Template OS Linux by Zabbix agent:vfs.file.cksum[/etc/passwd].diff()}>0
zbx 6.x
diff(/Template OS Linux by Zabbix agent/vfs.file.cksum[/etc/passwd]/) = 1
6)zabbix数据库优化
- 根据业务类型调整:读少写多
- 1:zabbix是一个写多读少的业务,优化数据库的写入性能,建议使用InnoDB存储引擎或tokudb存储引擎
- 2:数据库分离或数据库拆分
7)小结
- zabbix服务端架构与硬件优化
- zabbix服务端配置 : 缓存,进程数
- zabbix客户端配置 : 主动模式、被动模式
- zabbix监控项与键值 更新间隔,历史数据,趋势数据保留时长
- zabbix触发器 :避免使用计算的函数max(),min(),avg()
- zabbix使用数据库优化
18. Zabbix高可用与升级
18.1 高可用
-
zbx 6.x 之前-zbx_server 多个+keepalived实现高可用即可。
-
zbx 6.x 开始 自带ha功能
[root@m03-zabbix-server-lidao996 ~]# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name
Address Status Last Access
1. cl43tm4p400010zult1zb275p <standalone server>
localhost:10051 active 3s
环境准备 | 说明 |
---|---|
m02 | zbx主 |
m03 | zbx 服务端的备 或者使用新的主机64 |
- 添加远程连接zbx数据库的用户
grant all on zabbix.* to 'zabbix'@'172.16.1.%' identified by 'zabbix';
- 准备web04的 zbx服务端的环境
1. 分发zbx -server命令
2. 分发zbx server的配置文件
3. 分发zbx server 启动配置文件 systemctl daemon-reload 添加用户zabbix
4. 安装依赖。
scp /usr/local/sbin/zabbix_server 10.0.0.10:/usr/local/sbin/
scp zabbix-6.0-all-rpms-lidao996.tar.gz 10.0.0.10:~
scp -r zabbix/ 10.0.0.10:/etc/
scp /usr/lib/systemd/system/zabbix-server.service 10.0.0.10:/usr/lib/systemd/system/
- 开始配置
第1台 zbx服务端
[root@m03-zabbix-server-lidao996 /etc]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=m02-zabbix-server
NodeAddress=172.16.1.62:10051
第2台zbx 服务端
[root@m03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=172.16.1.63
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
HANodeName=m03-zabbix_server_backup
NodeAddress=172.16.1.63:10051
- 检查当前高可用情况(主节点检查) 和检查高可用情况(备节点)
zabbix_server -R ha_status
- web页面查看
- 客户端配置
[root@web03 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.63,172.16.1.62 #多个服务端ip、主机名要用逗号分隔。
ServerActive=172.16.1.63;172.16.1.62 #多个ha集群节点名字或ip,要用分号分隔。
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
- 配置仪表盘显示高可用状态信息
- 补充
- 核心:
- zbx高可用架构:
- 前端(可以配置多个做负载均衡(相当于是高可用))
- 数据库(数据库专用的高可用服务MHA)
- zabbix 6.0开始HA功能.之前的版本通过keepalived+监控脚本实现高可用.
- 使用的时候注意数据库连接,数据库用户授权.
- HA状态检查 zabbix_server -R ha_status
18.2 升级
-
服务端升级zbx 2.x 3.x 4.x 5.x --> zbx 6.x
-
升级流程
- 1.准备好新的数据库,备份好旧的数据库内容。
- 2.按照数据库升级 要求变更数据库内容
- 3.准备新的zabbix_server(rpm包)、命令和配置文件。
- 4.备份,替换旧的zbx_server命令.检查。
- 5.前端页面,根据要求准备好php对应版本即可。
- 6.备份,放入新的前端代码即可。
- 7.调试。
链接: https://www.zabbix.com/documentation/current/zh/manual/appendix/install/db_primary_keys