监控与自动运维平台
Zabbix简介
Zabbix是一个开源的监控平台,基于C/S方式采集数据,并使用B/S的Web方式展示数据。具有主机性能、数据库性能、Web应用、CPU、IO状态、硬盘、存储空间、连接数、应用服务状态、接口等百余项监控功能,并提供详细的报表、图表展示,以及按照配置的触发器生成指定的健康报告等。基于Zabbix提供的API接口,也可以进行一定程度的开发对接到我们的产品中。同时也支持分布式监控服务部署,在监控机性能良好情况下,可以同时支持多达万余台服务器同时监控和跟踪。
- 全文基于最新zabbix4.0讲解。
- 示例使用CentOS7.4,模拟正式环境服务器操作系统。
引入的意义
为什么监控
主动对系统不间断的实时监控,实时反馈系统当前状态,保证系统业务持续稳定的运行,而不是被动的告警。发现问题能及时定位,及时快速解决,减少故障率,避免影响扩大。所以监控也是整个产品交付和运维及其重要的一个环节,其次对监控的历史数据进行评估和推测,也是对业务稳定性的一种评估。
怎么监控
在没有使用监控平台前,我们通常使用一些零散工具进行监控,例如:
# top 查看CPU利用率、内存利用率、进程利用率
# free -m 查看物理机内存具体情况
# df -h 查看当前分区硬盘利用率(根分区以及其他分区使用情况)
# iftop 查看网络流量
但这些命令/工具都是临时性的,不具有存储功能,随看随走,无法追溯历史数据和全面分析,同时也只能在服务宕机、服务异常时我们才会主动去查看,只能事后分析,无法做到事前预警!
想下一下,如果我们将来承接一个巨大的财务共享中心/企业中台项目,按照微服务架构设计,假设需要几十台应用+数据库服务器,那么我们直接使用这些命令/工具调试,将难以对所有服务器进行统一监控和分析,工作量和工作难度将会是一个噩梦。
引入监控工具/平台,帮助我们更好的实现对服务的监控和跟踪,使用图表方式也更加直观方便我们分析数据。根据分析去升级或改造相应的故障节点,从而达到快速定位、分析线上服务问题。
要监控什么
硬件监控 |
温度、硬件故障…… |
系统监控 |
CPU、内存、硬盘、网卡流量、进程数量…… |
应用监控 |
WebLogic、JBoss、Tomcat、Nginx、Oracle、MySql、Redis…… |
日志监控 |
系统日志、服务日志、错误日志…… |
API 监控 |
接口可用性、响应时间…… |
业务监控 |
填单数量、凭证数量、活跃用户…… |
平台架构与组件
Zabbix Server
Zabbi Server负责处理监控数据,并将处理过的数据固化到ZabbixDB。Zabbix Server默认使用10051端口作为数据接收端口。
Zabbix Web
ZabbixWeb是一套PHP语言编写的Web应用程序,向用户提供一个可视化、可配置的操作台。所展示的数据来源为ZabbixDB中的数据。同时也支持使用Grafana进行大屏展示功能。
Zabbix Agent
ZabbixAgent是一个客户端,负责收集服务器的监控数据并传送给Zabbix Server,每台需要被监控的服务器都必须安装。Zabbix Agent默认使用10050端口。
Zabbix Proxy
ZabbixProxy是一个代理服务,当我们监控的主机较多时,直连Zabbix Server会产生过多进程,极大影响Zabbix Server处理监控数据的性能。此时可以配置让每台被监控的服务器的客户端:Zabbix Agent将收集到数据传送给Zabbix Proxy,由代理服务再传送到数据到Zabbix Server。
Zabbix Java GetWay
作用同Zabbix Proxy,适用于监控Java语言所开发的应用的各项性能。
组件功能示意图
![](/i/l/?n=23&i=blog/445238/202212/445238-20221205202338072-889605806.png)
架构示意图
![](/i/l/?n=23&i=blog/445238/202212/445238-20221205202342877-1316355788.png)
组件选取与安装
- 安装方式有两种
1:部署包方式,yum install,本例使用此方式。
2:源码包方式,下载源码包,手动编译,make install方式。
- 安装要求:
规模 |
平台 |
CPU/内存 |
数据库 |
受监控的主机数量 |
小型 |
CentOS |
1 CPU cores/2GB |
MySQL InnoDB |
100 |
中型 |
CentOS |
2 CPU cores/2GB |
MySQL InnoDB |
500 |
大型 |
RedHat |
4 CPU cores/8GB |
PostgreSQL |
>1000 |
极大型 |
RedHat |
16 CPU cores/16GB |
PostgreSQL |
>10000 |
安装Zabbix Server
- 修改镜像地址
将操作系统的源地址更改为阿里云镜像,避免部分软件因政策原因无法访问导致安装失败。
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- 修改部分设置
# systemctl stop firewalld.service 关闭防火墙firewall
# systemctl disable firewalld.service 禁止firewall开机启动
# vi /etc/selinux/config 修改selinux
SELINUX=disabled
- 配置zabbix的yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
# yum clean all
- 修改 zabbix仓库的地址,使用阿里云镜像
# vim /etc/yum.repos.d/zabbix.repo
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/debuginfo/
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
- 安装libiksemel.so.3()(64bit)依赖包
# yum install -y http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/iksemel-1.4-6.sdl7.x86_64.rpm
- 安装zabbix-server、mysql、zabbix-agent
- 安装时若没有安装PHP环境,会自动安装PHP相关的包和httpd。因为zabbix的Web管理端是基于PHP开发的。安装过程中,会遇到2次选择y/N选项,一律选择y即可
# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
- 安装、配置、初始化、创建和导入数据库MariaDB(MySql的一个开源分支)
# yum install mariadb* -y
# systemctl start mariadb.service 启动mariadb
# systemctl enable mariadb.service 设置开机启动mariadb
# mysql_secure_installation 初始化mariadb
创建zabbix所使用的数据库,并赋权与刷新。
mysql -uroot -p密码
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to 'zabbix'@'%' identified by 'zabbixpwd';
flush privileges;
导入数据库
mysql -uroot -p密码 -Dzabbix < /usr/share/doc/zabbix-server-mysql-4.0.18/create.sql
- 修改zabbix 与php的配置
# vi /etc/zabbix/zabbix_server.conf 修改zabbix数据库配置文件
DBHost=192.168.3.92
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpwd
# vi /etc/httpd/conf.d/zabbix.conf 修改zabbix时区
php_value date.timezone Asia/Shanghai
# vim /etc/php.ini 修改PHP时区
修改乱码,Windows下找一个字体,覆盖此目录字体即可:graphfont.ttf
# cd /usr/share/zabbix/assets/fonts/
修改zabbix-agentd的server地址为zabbix server的地址
# vim /etc/zabbix/zabbix_agentd.conf
重启zabbix-agent
# systemctl enable zabbix-agent.service
# systemctl restart zabbix-agent.service
- 安装Zabbix Get工具
zabbix_get是一个调试工具,用于从Zabbix Server直接使用命令行的方式获取被监控的主机的信息,通常用来检测被监控的主机是否已经正常配置了。
# yum install zabbix-get.x86_64
- 启动和初始化zabbix
启动zabbix,并重启ApacheHttp,因为刚才修改了Apache的时区配置。如遇启动异常,检查下selinux是否未关闭。
# systemctl enable zabbix-server
# systemctl start zabbix-server
# systemctl restart httpd.service
进入zabbix的Web端程序初始化,在浏览器中输入:ip地址/zabbix
检查状态全部是OK证明环境信息配置无误
配置数据库连接信息
默认用户名:Admin 注意A大写
默认密码:zabbix
安装Zabbix Agent
- 注意:在被需要纳入监控的服务器上只需要安装Zabbix Agent即可。
- 修改镜像地址
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- 配置zabbix的yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
- 修改 zabbix仓库地址,使用国内阿里云
# vim /etc/yum.repos.d/zabbix.repo
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/debuginfo/
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/
- 安装 zabbix Agent
# yum install zabbix-agent -y
- 修改 zabbix Agent配置
# vi /etc/zabbix/zabbix_agentd.conf
DebugLevel=3 日志等级
Server=192.168.3.92 ZabbixServer地址
ListenPort=10050 ZabbixAgent监听的端口
ListenIP=192.168.3.91 本机的IP
ServerActive=192.168.3.92 主动检查地址,填写ZabbixServer地址
Hostname=192.168.3.91 一般用本机IP作为名称即可,Web端配置需要使用此名称。
配置文件中的其他配置勿动!
- 启动 zabbix Agent
重启zabbix-agent
# systemctl enable zabbix-agent.service
# systemctl restart zabbix-agent.service
- 检测 zabbix Agent配置(需要切换到Zabbix Server中操作)
检测已经安装zabbix Agent的主机,是否正常连接到Zabbix Server监控主机。
# zabbix_get -s 192.168.3.91 -p 10050 -k "system.uname"
# zabbix_get -s 192.168.3.91 -p 10050 -k "system.cpu.load[all,avg1]"
- 安装 zabbix Java GateWay网关
此步骤为安装 zabbix Java gateWay网关,用于监控JVM信息,如应用服务器Jboss的JVM各项指标信息。
yum install zabbix-java-gateway.x86_64 -y
配置与使用
配置监控的顺序
模板介绍
模板是集多个应用、监控项、触发器、图形、聚合图形、自动发现、web监测的一组实体,一个模板可以应用到多个主机。Zabbix自带多个模板,足以满足日常监控和运维使用。同时也支持自定义创建模板、宏、模板之间的宏继承。
菜单:配置>模板
类别 |
模板 |
服务监控 |
Template App HTTP Service Template App HTTPS Service Template App Telnet Service …… |
硬件资源监控 |
Template OS AIX Template OS HP-UX Template OS Linux Template VM VMware Template OS Windows…… |
应用监控 |
Template App Apache Tomcat JMX Template App Generic Java JMX…… |
数据库监控 |
Template DB MySQL |
网络设备监控 |
Template Module Interfaces SNMPv2 Template Net Network Generic Device SNMPv2…… |
使用模板创建主机
主机(Host)是指要监控的网络实体,支持物理服务器、网络交换机、虚拟机、应用等。
菜单:配置>主机>创建主机
主机页签
- 主机名称:此名称必须是被监控主机上安装的Zabbix Agent中配置的名称,查看6.4.2章节配置
- 可见名称:zabbix界面显示的名称
- 群组:多台主机组成一个群组,如费控应用组,支持自定义组
- IP地址:被监控主机的IP
- 端口:被监控主机上安装的Zabbix Agent中配置的端口,默认10050
模板页签
- 1:选择模板,支持多选
- 2:点击”添加”,加入到链接的模板中
- 3:点击”更新”,主机创建完毕
主机状态为:已启用
监控项
一个监控项是一个独立的指标,模板中自带了多个监控项。监控项可以独立挂在主机,也可以附属到模板中,由主机与模板关联。当模板中的监控项不完全满足时,可以修改,也可以自定义新的监控项来满足要求。
菜单:配置>主机>监控项>创建监控项/修改原有监控项
触发器
触发器是评估采集到的数据的一种表达式。使用监控项收集数据后,评估数据的工作交给触发器,通过构造触发器的表达式和给预警的定阀值,当超过阀值后触发器将被触发,并变更状态为PROBLEM/OK,同时触发”动作”。同监控项一样,模板中也自带了很多触发器规则,当无法满足要求时可以修改原有触发器规则,也可以自定义新的触发器表达式。
菜单:配置>主机>触发器>创建触发器/修改原有触发器
图形创建于展示
Zabbix中的图形是一个方便展示数据流向、关联问题、分析历史数据的一组报表数据,支持自定义图形和图形聚合的样式。
图形展示菜单:监测>图形
自定义图形菜单:配置>主机>图形>创建图形/修改原有图形
媒介、动作、用户与Email告警配置
告警媒介指的是告警方式,支持Email、Jabber、SMS短信、脚本(企信、钉钉)等。
自定义或修改报警媒介类型:管理>报警媒介类型>Email\Jabber\SMS
告警信息发送Email配置
动作指得是当主机监控项收集的数据满足触发器阀值时(OK、PROBLEM),通过告警媒介触发的一系列告警动作。
自定义或修改动作:配置>动作>创建动作
动作页签
操作页签
恢复页签
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
用户在Zabbix中一般指的是用于管理、维护、接收告警信息的管理员,Zabbix支持自定义用户组,并且权限只能分配给用户组
新建\设置用户(用户组)菜单:管理>用户>新建\修改
用户信息页签
报警媒介页签
告警示例
企信告警配置
![](/i/l/?n=23&i=blog/445238/202212/445238-20221205203544973-527057940.png)
在”我的企业”中找到企业ID(corpid),这个参数接口需要使用。
应用管理>应用>自建>创建应用,填写必须信息。
记录AgentId、Secret,这两个参数接口需要使用。
1:获取TOKEN,请求方式GET(HTTPS)
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=企业ID&corpsecret=SECRET
2:发送消息,请求方式POST(HTTPS)
https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
{
"touser" : "接收消息人账号",
"msgtype" : "text",
"agentid" : 应用ID(AgentId),
"text" : {"content" : "消息内容"},
"safe":0
}
编写Python脚本,work.weixin.py
1 #!/usr/bin/python 2 3 # -*- coding: utf-8 -*- 4 5 #zabbix企业微信消息推送脚本 6 7 import requests 8 9 import json 10 11 import sys 12 13 import os 14 15 import logging 16 17 #日志设置 18 19 logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',datefmt = '%a, %d %b %Y %H:%M:%S',filename = os.path.join('/usr/zabbix/log/','work.weixin.log'),filemode = 'a') 20 21 #企业ID 22 23 p_corpid='ww231337716ffd7dc6' 24 25 #应用secret 26 27 p_secret='rzpDmpxzjw2fIaA_-zZZOUZnyIxfyhcNXUH2z2fG5Vs' 28 29 #应用AgentID 30 31 p_agentid=1000002 32 33 #告警消息接收用户 34 35 p_touser='zhengboning' 36 37 #告警消息内容 38 39 message=sys.argv[1] 40 41 #获取accesstoken 42 43 token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + p_corpid + '&corpsecret=' + p_secret 44 45 req=requests.get(token_url) 46 47 accesstoken=req.json()['access_token'] 48 49 #发送消息 50 51 msg_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken 52 53 params={ 54 55 "touser": p_touser, 56 57 "msgtype": "text", 58 59 "agentid": p_agentid, 60 61 "text": {"content": message}, 62 63 "safe":0 64 65 } 66 67 req=requests.post(msg_url, data=json.dumps(params)) 68 69 #print req 70 71 logging.info('告警消息-->' + message) 72 73 logging.info('---------------------------------------------------------------')
找到zabbix的默认脚本目录alertscripts,将work.weixin.py上传到此目录
# find / -name alertscripts
# chmod +x work.weixin.py
添加报警媒介类型:管理>报警媒介类型>创建媒体类型
注意,这一步脚本参数需要填写宏变量表达式{ALERT.MESSAGE}
管理>用户>修改用户报警媒介为企业微信
配置>动作>修改操作、恢复操作的”送到类型”
测试验证推送企业微信消息结果:
更多
- 篇幅有限,zabbix章节未详尽介绍功能与配置,zabbix不仅包含文中所提及的内容,还包括:自动部署、网络发现、自动注册、监控DB、监控Web应用服务器(堆内存、线程、GC等等),以及大屏展示插件。
官方文档:https://www.zabbix.com/documentation/4.0/zh/manual
标签:运维,主机,Zabbix,zabbix,yum,线上,监控,第六章,com From: https://www.cnblogs.com/zhengbn/p/16953440.html