Zabbix配置记录
安装服务
这里演示的是物理机环境监控场景,容器场景还是更推荐k8s+prom来搞。
版本是zabbix6.0 LTS,官方已经不提供CentOS7的安装包了,所以这里推荐使用docker安装,后面升级也比较方便。
推荐直接在裸机上安装MySQL8,因为数据库用docker装的话,需要配置的东西有点多,而且不方便与其他服务共用。
特别注意:不要使用alpine镜像,会遇到稀奇古怪的问题。
这里直接贴出来docker-compose.yaml
的最小化安装内容,不含java-gateway
和snmptraps
,因为我这里没有需要监控的java服务。
|
|
一点准备工作,首先是安装docker服务,这个就不提了,然后:
|
|
找个中文字体上传到/opt/zabbix/font
下面,将/opt/zabbix/font/simfang.otf
这句改成上传的字体名字。
这里假设MySQL的用户名密码是root:123456
,根据自己需要修改。地址记得使用内网地址,肯定不是localhost.
准备完成之后,在docker-compose.yaml
所在目录使用docker-compose up -d
启动服务即可。
使用docker-compose logs -f
查看日志,如果更新了配置文件,重新运行docker-compose up -d
进行更新即可。
然后访问8080端口,默认用户名密码是Admin:zabbix
,没问题的话可以登进去了。
安装agent
推荐安装zabbix-agent2,去阿里云的zabbix镜像那里下载zabbix-agent2的安装包,然后直接安装即可。
安装完之后先vim /usr/lib/systemd/system/zabbix-agent2.service
,将User=zabbix
和Group=zabbix
这两行都改成root。官方推荐的使用override.conf
的方案我试了没用,不知道啥原因。
然后修改/etc/zabbix/zabbix_agent2.conf
,把Server
和ServerActive
改成实际服务所在的网段/地址。此外,可以根据需要修改Hostname字段。
然后systemctl enable zabbix_agent2 && systemctl start zabbix_agent2
启动agent并激活自启动。
由于agent在物理网络,zabbix-server在容器内运行,所以默认的Zabbix Server
主机无法探测到agent,需要手动修改Host地址。
可以通过在Zabbix Server
所在的主机上安装zabbix-get
工具,来调试与agent所在机器的连接情况。
配置自动注册
在配置-动作-Autoregistration actions
这里,添加一个动作,自动将符合条件的主机添加到主机群组和链接到模板(Linux by Zabbix agent
)上。
创建模板
对自己的应用创建监控模板,主要是日志监控和Prometheus的Metrics监控。
日志监控参考官方文档即可,注意logrt
只支持文件名正则,前面的文件路径必须是固定的。
Prometheus的监控也是直接看文档就行,注意需要先创建一个HTTP代理
,这个是由服务端主动拉取的,和agent没啥关系。
然后再对HTTP代理获取的metric做预处理,需要新建若干个相关项目
,在PreProcessing
里面选择Prometheus pattern
进行过滤即可。
配置告警
首先要在管理-报警媒介类型
里面添加钉钉或者微信告警。写一个告警的脚本,然后将其放在/opt/zabbix/alertscripts
下面。注意:如果是Python的脚本,必须在zabbix-server的容器里有Python环境才能运行,这个就要修改对应的docker file了。推荐使用PyInstaller
打包成二进制文件,或者直接使用go来写脚本。
在消息模板里面填入消息的模板,例如钉钉可以使用markdown通知,所以配置问题发生和恢复的消息模板分别如下:
|
|
|
|
然后去管理-用户
里面,找到需要配置的用户,在报警媒介里增加一个告警条件,点击更新
就完成了告警的配置。
自动发现服务实例
如果服务在一台机器上只部署一个实例,则直接创建模板,然后将模板关联到主机上即可。
但是经常有一台机器上跑多个服务实例的需求,比如Redis或者各种web服务,此时目录或者端口都是不固定的,想要监控就需要使用自动发现(LLD)了。
这里以多个服务需要监控日志为例,首先写一个脚本获取这些动态的参数,对于日志而言主要就是日志的文件夹,下面是一个通过进程名获取文件夹和进程PID的脚本:
|
|
其中parse_env
主要是用户填充监控项的名字,因为WORK_DIR
一般比较长,不太适合直接放在标题里。
将get_workdir.py
放在/etc/zabbix/zabbix_agent2.d
下面,然后修改zabbix_agent2.conf
,添加一个用户变量:
UserParameter=workdir.proc[*],/etc/zabbix/zabbix_agent2.d/get_workdir.py $1
然后使用zabbix_agent2 -R userparameter_reload
重载一下配置。
去zabbix server上使用类似zabbix_get -s '127.0.0.1' -k 'workdir.proc[sip-server]'
的命令,查看返回的结果,一切正常说明自定义监控项已经扩展完毕。下面去zabbix上添加自动发现规则。
去配置-模板
,选择或者新建一个模板,然后切到自动发现规则
选项卡,点击创建发现规则。
标题随便写,类型选择Zabbix客户端(主动式)
,然后关键是这里的键值,这里填入workdir.proc[sip-server]
,即可获取sip-server
这个服务相关的上下文。
后面的预处理、LLD宏,过滤器等选项卡,都是为了对脚本返回的数据做一些预处理。如果在脚本里面已经处理好,这里什么都不用做。
下面建立一个监控器原型,比如要监控日志里面的ERROR
,就建立如下监控项:
- 名称:Sip Server {#ENV} Error Log
- 类型:Zabbix Agent(Active)
- 键值:
log[{#WORK_DIR}/logs/error.log,ERROR,,1000,skip,,120,,]
- 信息类型:日志
- 更新间隔:10s
- 日志时间格式: yyyy-MM-ddThh:mm:ss
然后建立对应的触发器原型,这里我们设定只要出现ERROR
就应该告警:
- 名称:SIP Service {#ENV} Error Log
- 等级:Average
- 问题:
find(/Video SIP Service/log[{#WORK_DIR}/logs/video-gb28181-sipserver-error.log,ERROR,,1000,skip,,120,,],10s,,"ERROR")=1
- 恢复:
nodata(/Video SIP Service/log[{#WORK_DIR}/logs/video-gb28181-sipserver-error.log,ERROR,,1000,skip,,120,,],60s)=1
即60s没有ERROR则自动恢复.
也可以在图形原型
里面添加需要的图,这里就不写过程了。