自动化基础随心记三-zabbix
一、概述
官方文档
结构体系
Zabbix 由几个主要的软件组件组成。他们的职责概述如下。
Server
Zabbix server 是 agents 向其报告可用性和完整性信息和统计信息的中心组件。server 是存储所有配置、统计和操作数据的中央存储库。
数据存储
Zabbix 收集的所有配置信息以及数据都存储在数据库中。
Web 界面
为了从任何地方和任何平台轻松访问,Zabbix 提供了基于 Web 的界面。该接口是 Zabbix server 的一部分,通常(但不一定)与 server 运行在同一台设备上。
Proxy
Zabbix proxy 可以代替 Zabbix server 收集性能和可用性数据。proxy 是 Zabbix 部署的可选部分;但是对于分散单个 Zabbix server 的负载非常有用。
Agent
Zabbix agent 部署在被监控目标上,以主动监控本地资源和应用程序,并将收集到的数据报告给 Zabbix server。从 Zabbix 4.4 开始,有两种类型的 agent 可用:Zabbix agent (轻量级,在许多平台上支持,用 C 编写)和 Zabbix agent 2 (非常灵活,易于使用插件扩展,用 Go 编写)。
数据流
此外,回顾一下 Zabbix 中的整体数据流也是很重要的。为了创建一个收集数据的监控项,必须首先创建一个主机。另一方面 Zabbix 必须首先拥有一个监控项来创建触发器。必须有触发器才能创建动作。因此,如果你想收到 服务器 X 上的 CPU 负载过高的警报,必须首先为 服务器 X 创建一个主机条目,然后创建一个用于监控其 CPU 的监控项,然后是一个触发器,如果 CPU 过高则触发动作,然后通过通过动作操作向您发送电子邮件。这可能看起来像很多步骤,其实使用模板并不需要。而且,由于这种设计,可以自定义创建非常灵活的设置。
二、定义
host(主机) - 要通过 IP/DNS 监控的联网设备。
host group(主机组) - 主机的逻辑分组;它可能包含主机和模板。主机组中的主机和模板没有以任何方式相互链接。在为不同用户组分配主机访问权限时使用主机组。
item(监控项) - 你想要接收的主机的特定数据,一个度量/指标数据。
value preprocessing(值预处理) - 在数据存入数据库之前 转化/预处理接收到的指标数据。*
trigger(触发器) - 一个被用于定义问题阈值和 “评估” 控项接收到的数据的逻辑表达式。 当接收到的数据高于阈值时,触发器从 ‘Ok’ 变成 ‘Problem’ 状态。当接收到的数据低于阈值时,触发器保留/返回 ‘Ok’ 的状态。
event(事件) - 一次发生的需要注意的事情,例如 触发器状态改变、自动发现/agent 自动注册。
event tag(事件标签) - 预设的事件标记 可以被用于事件关联,权限细化设置等。
event correlation(事件关联) - 一种灵活而精确地将问题与其解决方法联系起来的方法 比如说,你可以定义触发器A告警的异常可以由触发器B解决,触发器B可能采用完全不同的数据采集方式。
problem(问题) - 一个处在 “问题” 状态的触发器。
problem update(问题更新) - Zabbix 提供的问题管理选项,例如添加评论、确认、更改严重性或手动关闭。
action(动作) - 对事件作出反应的预先定义的方法。 一个动作由多个操作(例如发送通知))和条件(什么情况下 执行操作)组成。
escalation(升级) - 用于在动作中执行操作的自定义场景;发送通知/执行远程命令的序列。
media(媒体) - 发送告警通知的渠道;传输媒介。
notification(通知) - 通过选定的媒体通道发送给用户的关于某个事件的消息。
remote command(远程命令) - 在某些条件下在受监控主机上自动执行的预定义命令。
template(模板) - 可以应用于一个或多个主机的一组实体集 (包含监控项、触发器、图表、低级别自动发现规则、web场景等)。 模版的应用使得主机上的监控任务部署快捷方便;也可以使监控任务的批量修改更加简单。模版是直接关联到每台单独的主机上。
web scenario(web 场景) - 检查一个网站的可用性的一个或多个HTTP请求。
frontend(前端) - Zabbix的web界面。
dashboard(仪表盘) - web界面的可定制部分,以可视化的单元(又叫小部件)显示重要信息的摘要和可视化。
widget(小部件) - 在仪表板中使用的显示某种类型和来源的信息(摘要、地图、图表、时钟等)的可视化单元。
Zabbix API - Zabbix API 允许您使用 JSON RPC 协议来创建、更新和获取 Zabbix 对象(如主机、监控项、图表等)或执行任何其他自定义任务。
Zabbix server - Zabbix 软件的中央进程,执行监控、与 Zabbix proxy 和 agent 交互、计算触发器、发送通知;数据的中央存储库。
Zabbix proxy - 一个可以代表 Zabbix server 收集数据的进程,减轻 server 的一些处理负载。
Zabbix agent - 部署在被监控目标上以主动监控本地资源和应用程序的进程。
Zabbix agent 2 - 新一代 Zabbix agent,主动监控本地资源和应用程序,允许使用自定义插件进行监控。
encryption(加密) - 使用传输层安全 (TLS) 协议 支持Zabbix组件(server,proxy,agent,zabbix_sender 和 zabbix_get 实用程序)之间的加密通信 。
network discovery(网络发现) - 网络设备的自动发现。
low-level discovery(低级别自动发现) - 自动发现特定设备上的底层实体(例如:文件系统、网络接口等)
low-level discovery rule(自动别自动发现规则) - 用于在设备上自动发现低级别实体的一组定义。
item prototype(监控项原型) - 带有某些参数作为变量的度量,为低级别自动发现做好了准备。 在低级别自动发现之后,变量被自动替换为实际发现的参数,度量标准自动开始收集数据。
trigger prototype(触发器原型) - 以某些参数作为变量的触发器,为低级别自动发现做好准备。 在低级别自动发现之后,变量被自动替换为实际发现的参数,触发器自动开始计算数据。
其他一些 Zabbix 实体的 原型 也在低级别自动发现中使用 - 图形原型、主机原型、主机组原型。
agent autoregistration(agent 自动注册) - Zabbix agent 自动注册为主机 并开始监控的自动化过程。
三、安装部署(docker)
示范了如何运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关
1. 创建专用于 Zabbix 组件容器的网络
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空的 MySQL 服务器实例
docker run --name mysql-server -t \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix" \-e MYSQL_ROOT_PASSWORD="root" \-v /data/zabbix/db:/var/lib/mysql\-p 3306:3306 \--network=zabbix-net \--restart unless-stopped \-d mysql:8.0 \--character-set-server=utf8 --collation-server=utf8_bin \--default-authentication-plugin=mysql_native_password
3. 启动 Zabbix Java 网关实例
docker run --name zabbix-java-gateway -t \--network=zabbix-net \--restart unless-stopped \-d zabbix/zabbix-java-gateway:alpine-5.4-latest
4. 启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例
如果有配置文件zabbix_server.conf和目录alertscripts,可以上传到宿主机后挂载,如果没有就删除-v /data/zabbix/zabbix-server:/etc/zabbix和-v /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
docker run --name zabbix-server-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix" \-e MYSQL_ROOT_PASSWORD="root" \-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \-v /data/zabbix/zabbix-server:/etc/zabbix \-v /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \--network=zabbix-net \-p 10051:10051 \--restart unless-stopped \-d zabbix/zabbix-server-mysql:alpine-5.4-latest
5. 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例
添加中文简体文件
从主机(C:\Windows\Fonts)上传一个.ttf的字体文件到/data/zabbix/fonts目录,并将文件名称改成DejaVuSans.ttf
docker run --name zabbix-web-nginx-mysql -t \-e ZBX_SERVER_HOST="zabbix-server-mysql" \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix" \-e MYSQL_ROOT_PASSWORD="root" \-v /data/zabbix/fonts/DejaVuSans.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf \--network=zabbix-net \-p 80:8080 \--restart unless-stopped \-d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest
主机IP:80成功访问页面,初始用户名密码:Admin,zabbix
6. 监控zabbix服务端主机
docker run --name zabbix-agent2 -t \-e ZBX_SERVER_HOST="zabbix-server-mysql" \-e ZBX_SERVER_PORT=10051 \-e ZBX_HOSTNAME="Zabbix server" \--network=zabbix-net \-p 10050:10050 \--restart unless-stopped \-d zabbix/zabbix-agent2:alpine-5.4-latest
8. 完整docker-compose文件
services:zabbix-web-nginx-mysql:image: zabbix/zabbix-web-nginx-mysql:alpine-5.4-latestrestart: unless-stoppedenvironment:- DB_SERVER_HOST=mysql-server- MYSQL_DATABASE=zabbix- MYSQL_USER=zabbix- MYSQL_PASSWORD=zabbix- MYSQL_ROOT_PASSWORD=root- ZBX_SERVER_HOST=zabbix-server-mysqlports:- 80:8080volumes:- /data/zabbix/fonts/DejaVuSans.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttfnetworks:- zabbix-netdepends_on:- zabbix-server-mysql- mysql-servermysql-server:image: mysql:8.0restart: unless-stoppedports:- 3306:3306environment:- MYSQL_DATABASE=zabbix- MYSQL_USER=zabbix- MYSQL_PASSWORD=zabbix- MYSQL_ROOT_PASSWORD=rootcommand:- --default-authentication-plugin=mysql_native_password- --character-set-server=utf8- --collation-server=utf8_binvolumes:- /data/zabbix/db:/var/lib/mysqlnetworks:- zabbix-netzabbix-java-gateway:image: zabbix/zabbix-java-gateway:alpine-5.4-latestrestart: unless-stoppednetworks:- zabbix-netzabbix-server-mysql:image: zabbix/zabbix-server-mysql:alpine-5.4-latestrestart: unless-stoppedvolumes:- /data/zabbix/zabbix-server:/etc/zabbix- /data/zabbix/alertscripts:/usr/lib/zabbix/alertscriptsports:- 10051:10051environment:- DB_SERVER_HOST=mysql-server- MYSQL_DATABASE=zabbix- MYSQL_USER=zabbix- MYSQL_PASSWORD=zabbix- MYSQL_ROOT_PASSWORD=root- ZBX_JAVAGATEWAY=zabbix-java-gatewaydepends_on:- mysql-servernetworks:- zabbix-netzabbix-agent:image: zabbix/zabbix-agent2:alpine-5.4-latestrestart: unless-stoppedports:- 10050:10050environment:- ZBX_HOSTNAME=Zabbix server- ZBX_SERVER_HOST=zabbix-server-mysql- ZBX_SERVER_PORT=10051networks:- zabbix-netnetworks:zabbix-net:ipam:driver: defaultconfig:- subnet: 172.20.0.0/16ip_range: 172.20.240.0/20
7. 以源码包方式安装agent客户端并监控任意主机
一、下载源码包
地址:https://cdn.zabbix.com/zabbix/binaries/stable
二、将压缩包解压到/usr/local/zabbix_agent
tar -zxf zabbix_agent-5.4.9-linux-3.0-amd64-static.tar.gz -C /usr/local/zabbix_agent
三、编辑配置文件
vim /usr/local/zabbix_agent/conf/zabbix_agentd.conf
修改
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=服务端的ip
ServerActive=服务端的ip
Hostname=客户端名字(与zabbix主机创建上的名字一致)
Include=指定conf文件的路径,一般在安装目录下的:/usr/local/zabbix_agent/conf/zabbix_agentd/*conf
四、创建zabbix用户并授权
useradd -r -s /usr/sbin/nologin zabbix
chown -R zabbix:zabbix /usr/local/zabbix_agent
五、书写systemctl配置文件
/etc/systemd/system/zabbix-agent.service
[Unit]
Description=Custom Zabbix Agent Command
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/zabbix_agent/sbin/zabbix_agentd -c /usr/local/zabbix_agent/conf/zabbix_agentd.conf
User=zabbix
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
加载配置文件
systemctl daemon-reload
启动和检查
systemctl enable zabbix-agent
systemctl start zabbix-agent
systemctl status zabbix-agent
web页面创建主机
四、自定义监控
例如监控bbs的8080端口
配置一下环境
vi ~/.bashrc
export PATH=$PATH:/usr/local/zabbix_agent/sbin/
source ~/.bashrcmkdir -p /usr/local/etc
ln -s /usr/local/zabbix_agent/conf/zabbix_agentd.conf /usr/local/etc/zabbix_agentd.conf
客户端
内置监控项和触发器可以看一下官方文档
1、在被监控的主机目录/usr/local/etc/zabbix_agentd.conf下创建bbsgo.conf文件
格式:UserParameter=key,cmd
UserParameter=固定写法,表示要自定义键值
key表示键值名字,cmd表示命令或脚本
UserParameter=bbs_port,ss -lntup|grep -w 8080|wc -l
2、重启客户端并测试
systemctl restart zabbix-agentzabbix_agentd -t bbs_port
#输出 bbs_port [t|2]
服务端
测试
# -s 客户端IP -p 端口号 默认是10050 -k 指定键值
docker exec f4690d49e0cc /usr/bin/zabbix_get -s 172.26.4.123 -p 10050 -k bbs_port
web页面
1、配置监控项
2、触发器
3、图形
五、自定义模板
创建或者把主机上的监控项、触发器、图形等复制到模板上
给主机使用需要先有键值
六、发送邮件
1、创建媒体类型
2、配置发件人
用户名是邮件地址,密码是授权码,授权码在邮件官网获取
3、配置收件人
4、添加动作
七、Zabbix客户端概述
zabbix-agent/zabbix-agent2 | 适用于几乎所有情况,支持自定义监控,linux,windows,android/ios |
SNMP客户端 | 用于监控网络设备 Simple Network Management Protocal 简单网络管理协议 |
JMX | Java-gateway 监控java app(tomcat) 自定义监控 zabbix_agent2 + jmap/jstack |
IPMI | 监控硬件(物理服务器,联想,华为,浪潮,DELL,IBM…) 直接使用自定义监控(ipmitool+megacli) |
八、网站需要监控什么
- 按照访问顺序监控:dns/cdn、安全组、负载均衡、web、数据库、存储、备份。
DNS | 是否可以解析 | 自定义监控:ping/dig 域名:whois 域名 过滤过期时间 证书:curl -Lsv 域名 -o /dev/null 过滤过期时间 |
CDN | 是否可用,命中率 | 阿里云接口 |
负载 | ngx服务情况,证书过期时间,网站访问量,并发… | ngx/haproxy/keeplived状态:模板 证书:模板、自定义监控 网站访问量:ip,pv,uv 并发:统计80,443端口连接数 负载均衡健康检查模式upstream_check 自定义监控 访问日志(状态码),错误日志(error,failed数量) |
web | 服务情况 | ngx,php,tomcat/jar包… |
数据库 | redis,mysql | 模板 |
存储 | nfs… | 自定义监控,空间,能否使用… |
备份 | 备份的数据量 | 是否有备份,空间… |
- 任何一台机器:
硬件监控
系统监控
服务监控
业务/app监控
API接口监控
硬件监控 | 物理服务器温度,湿度,风扇转数,raid状态… | ipmi/自定义监控 |
系统监控 | cpu,负载,内存,硬盘,网络,带宽,io,进程,是否有非堡垒机登录 | 模板,自定义监控 |
服务监控 | 进程,端口;服务的状态;日志 | 模板,自定义监控 |
业务/app监控 | 检查应用是否可用 | curl命令 |
API接口监控 | API | curl命令 |
八、自动发现与自动注册
自动发现(服务端主动) | zbx服务端主动去找是否有新的主机,如果有则添加进来 | 配置简单,不适合大量添加主机,临时性可用 |
自动注册(客户端主动) | zbx客户端主动去找服务端提交自己的信息,请求向服务端注册 | 配置繁琐,经常性,适用大量主机 |
1、自动发现
添加规则
添加动作
2、自动注册
1、修改zabbix客户端配置
Server=xxx
ServerActive=xxx
HostnameItem=system.hostname
HostMetadataItem=system.uname
2、web页面创建自动注册动作