基于 zabbix 系统监控 系列1——zabbix 简介 与 windows 系统监控
基于 zabbix 系统监控 系列2——windows 系统硬件信息获取、 linux 系统监控、 linux 系统硬件信息获取
官方监控虚拟机相关文档 URL :
https://www.zabbix.com/documentation/3.4/zh/manual/vm_monitoring
https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes/simple_checks/vmware_keys
阅读 zabbix 官方文档,官方提供了 Vmware 虚拟机监控模板,并对模板进行了解释说明,但未对相应名词做解释,如果不了解 Vmware 组件,可能对出现的名词不容易理解。
重要信息说明:
VMware vCenter : VMware 平台用于管理的服务端,管理群集、主机、虚拟机、存储等。
VMware hypervisors :主机,安装了 ESXI 软件的服务器。
Template VM VMware“ 模板应用于 VMware vCenter 和 VMware hypervisors 监控。
Template VM VMware Hypervisor 和 Template VM VMware Guest 模板由自动发现使用,通常设置为自动链接到主机。
low-level discovery 规则自动发现 VMware hypervisors 和虚拟机, LDD 就是自动发现。
采用官方提供的监控模板流程是这样实现的,首先建立监控主机,可以监控的对象是 VMware vCenter 虚拟化平台或者是 ESXI 主机,链接 Template VM VMware 模板,等待 zabbix server 服务自动发现,而后对群集、主机、虚拟机等进行监控。
有一节单讲组配置,制定 Vmware 下群集、主机、虚拟机、存储等命名规范。
主要通过创建主机 VMware vCenter 和 ESXI ,连接 Template VM VMware 模板,进行自发现获取群集、主机、虚拟机、存储等信息。
此处创建主机为 Vmware Vcenter 平台,配置如下:
主机名称: IP 地址
端口 默认使用: 80
主机组 命名为: Vmware 平台 Center 数据中心组
{$PASSWORD} 密码
{$URL} https://IP 地址 /sdk
模板: Template VM VMware ( zabbix 自带模板)
在配置 -- 主机中查看是否已有虚拟机自生成,在最新数据 -- 查看是否有最新数据,这样就实现了 Vmware 平台上的数据监控,但平台分组不易读,还要制定分组命名规范。
为了使 zabbix 平台 Vmware 分组分类整洁明了,方便管理审阅,规范 zabbix 下虚拟化平台分组名称。
Zabbix 创建主机组的命名规范:用于添加 Vmware Vcenter 的组
项目 | 类别 | 规范 |
Vmware Vcenter | 平台组 | Vmware平台 Center 数据中心组 |
Vmware ESXI | 平台组 | Vmware平台 Center 数据中心组 |
注:
如果确实存在 Vmware ESXI 未加入到 Vmware Vcenter 中,视 ESXI 为一个平台。如果 Vmware ESXI 已经加入到 Vmware Vcenter 中,就不要单独监控了,只监控 Vmware Vcenter 即可。
Zabbix 创建主机组的命名规范:用于自动发现 ESXI 主机时,添加所有 ESXI 主机
项目 | 类别 | 规范 |
Vmware ESXI | 主机组 | Vmware 平台ESXI主机组 |
Zabbix 创建主机组的命名规范:用于自动发现 WM 虚拟机时,添加所有 WM 虚拟机
项目 | 类别 | 规范 |
VmwareVM | 虚拟机组 | Vmware 平台VM虚拟机组 |
项目 | 类别 | 规范 |
Vmware Vcenter | 虚拟机组 | Vmware 虚拟机组 数据中心 Datecenter: |
Vmware Cluster | 虚拟机组 | Vmware 虚拟机组 群集 Cluster: |
Vmware ESXI | 虚拟机组 | Vmware 虚拟机组 主机 ESXI: |
项目 | 类别 | 规范 |
Vmware Vcenter | 虚拟机组 | Vmware 主机组 数据中心 Datecenter: |
Vmware Cluster | 虚拟机组 | Vmware 主机组 群集 Cluster: |
为了使 Vmware Vcenter 数据中心,虚拟机方便管理审阅,规范 Vmware 下虚拟化平台分组名称。
命名规范:
项目 | 规范 | 范例 |
数据中心 DadaCenter | 描述功能用途 | 数据中心 |
群集 CLUSTER | 描述功能用途 | XXX平台 |
主机 ESXI | IP地址 | 192.168.1.1 |
虚拟机VM | 系统-版本-功能描述-IP | linux-redhat-6.7-zabbix测试-192.168.1.2 |
Template VM VMware 模板修改,需要修改 Vmware 自动发现主机与自动发现虚拟机的主机模板。
根据 8.2 节, zabbix 命名规范,修改组模板的两项:
1 、 Wmare 主机组 群集 Cluster : {#CLUSTER.NAME}
2 、 Wmare 主机组 数据中心 DateCenter : {#DATACENTER.NAME}
说明: 1 是群集组分组, 2 是数据中心分组,此组下均为 ESXI 主机信息
要先创建 zabbix 主机组: Vmware 平台 Center 数据中心组,才能在此处的 “ 群组 ” 中添加。
根据 8.2 节, zabbix 命名规范,修改组模板的三项:
1 、 Vmware 虚拟机组 群集 Cluster : {#CLUSTER.NAME}
2 、 Vmware 虚拟机组 数据中心 Datecenter : {#DATACENTER.NAME}
3 、 Vmware 虚拟机组 主机 ESXI : {#HV.NAME}
要先创建 zabbix 主机组: Vmware 平台 VM 虚拟机组,才能在此处的 “ 群组 ” 中添加。
Template VM VMware 、 Template VM VMware Hypervisor 、 Template VM VMware Guest
Zabbix 自带 Vmware 监控模板无触发器配置,需要自研配置触发器,且能配置触发器项较少,尽量依靠部署 agent 进行全面监控告警。简而言之,此触发器告警是宏观上的,为虚拟平台整体状态告警,不能详尽描述虚拟机某一指标。
但有几个关键性指标,在 OS 下体现不出来,需要在 VMware 平台上做监控:如 CPU ready time 、内存 ballon 、 swap 等,依次要判断 VM 运行情况。
1 、
VMware ESXI 主机运行状况
2 、
VMware 虚拟传感器运行状况
3 、主机不通,获取不到数据
在主机是关机或网络不通状态下,那肯定获取不到某一监控项。可使用 5 分钟内获取不到数据判断为主机不通。
在主机是在开机状态下,已经死机, CPU 、内存某些监控项,数据是否恒为定值不确定,是停留某个值还是归为 0 ,要以此为参考依据建立触发器,目前死机状态值未获取到,此项触发器无法建立。只能提供思路。
名称:主机不通,获取不到数据: {HOST.NAME}
表达式: {Template VM VMware Hypervisor:vmware.hv.cpu.usage[{$URL},{HOST.HOST}].nodata(5m)}=1
4 、主机产生 balloon 内存
Balloon 产生会在某种程度上说明:内存资源不足。此情况发生在,需要 vm kernel 调度其他 VM 虚拟机上空闲的内存资源,给内存不足的 VM 虚拟机。
此具体问题需要分析,目前此量值无法在实践中确定,首先进行提升信息,再根据 VM 或是 ESXI 主机内存资源情况进行合理判断。
可配置触发器较少,对于虚拟机监控告警,只是辅助告警,尽量依靠部署 agent ,因此,重点关注 2 虚拟机电源关闭 触发器。
创建 磁盘使用率 触发器, C 、 D 、 E 等磁盘剩余空间不足 10% 告警。
说明:此处监控针对 windows 系统,创建该触发器必然与 agent 监控告警重复,建议关闭此处触发器。(也可以创建使用空间超过 90% ,依赖关系 99% 提升告警级别)
创建触发器:
名称:磁盘剩余空间不足 10% : on {#FSNAME}
表达式: {Template VM VMware Guest:vmware.vm.vfs.fs.size[{$URL},{HOST.HOST},{#FSNAME},pfree].last()}<10
允许手动关闭
创建 虚拟机电源状态翻转的触发器,当关闭虚拟机时,提示信息 “ 虚拟机电源关闭 ” ,当虚拟机重新打开电源时,恢复表达式。因虚拟机电源开关可控,有可能存在误关机操作。虚拟机开启不做告警。
创建触发器:
名称:虚拟机电源关闭: {HOST.NAME}
问题表现形式: {Template VM VMware Guest:vmware.vm.powerstate[{$URL},{HOST.HOST}].abschange()}=1
恢复表达式: {Template VM VMware Guest:vmware.vm.powerstate[{$URL},{HOST.HOST}].last()}<>0
关键重要指标,如果此值大于 2000ms 或是 2s ,说明 CPU 性能不足,需要关注。可以通过 ssh 到 ESXI 主机上使用 esxtop 命令查看。此处实践配置成 10 个周期内的均值 3000ms 告警。
虚拟机设置 CPU 核心数,如果 ESXI 主机 CPU 核心数较少, VM 设置的过多,会造成 VM 虚拟机直接抢占 CPU 资源造成, CPU ready time 值偏高,所以说虚拟机 CPU 核心数设置的并不是越多越好,只要满足计算量即可。
重要关键指标:共享内存大小、气球内存大小、交换内存大小、压缩内存大小。
内存资源严重性逐步提高。共享、气球内存是 VM 合理利用内存的方式,避免:交换内存、压缩内存的产生。
压缩内存大小:
表达式: {Template VM VMware:vmware.cluster.status[{$URL},{#CLUSTER.NAME}].last()}>1
名称:群集状态异常: {HOST.NAME}
主要介绍通过邮件实现告警,当然告警的方式还有短信(需要短信猫)、企业微信、钉钉等。
E-mail 邮件告警配置有两种方式:
1 、 zabbix-server 服务器开启 sendmail 或者 postfix 服务, linux 系统默认安装好了邮件发送工具 mail ,利用该服务直接将告警信息通过 E-mail 发送到运维工程师的电子邮箱。
2 、 zabbix-server 使用外部邮箱账户发送告警信息到运维工程师的电子邮箱,类似 outlook 、 foxmail 邮箱代理。
总结:经过对上述两种方式实践,第一种方式邮件容易被识别为垃圾邮件遭过滤,公司目前有企业邮箱,可以开通名为 zabbix@XXXX.com 账号做为外部邮箱发送告警信息,考虑到移动平台应用支撑,运维人员使用有移动终端的邮箱,综上建议部署第二种外部邮箱的方式。
详细配置参考链接:
https://www.osyunwei.com/archives/8113.html
http://www.ttlsa.com/zabbix/zabbix-media-email/
https://www.cnblogs.com/nice1163/articles/11123423.html
1 、
开启服务 sendmail 与 postfix 只开一个、 DNS 服务,并加入开机启动。
service sendmail restart 或 service postfix restart
chkconfig --level 3 sendmail on 或 chkconfig --level 3 postfix off
service named restart
chkconfig --level 3 named on
service sendmail restart
service named restart
2 、
修改主机名
vim /etc/hosts
127.0.0.1 localhost DY-zabbix
192.168. 1 . 2 DY-zabbix
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=DY-zabbix
重启 reboot
3 、
mail 发邮件测试
echo "this is my test mail" | mail -s 'mail test ' 37571 6 @qq.com
报错,根据提示解决报错问题,
未报错,邮箱不能收到邮件可能被邮箱服务器屏蔽掉了, 139 邮箱收不到信息,
未报错,邮箱能收到邮件说明发送正常。
1 、设定发送 mail 途径
说明: SMTP 服务器就是 zabbix-server 服务器,地址是 192.168.1.2 , DY-zabbix 是 zabbix-server 服务器的主机名, linux 下执行 hostname 命令查看, 1.2.1 节已配置好了。为啥要这样配置,因为 zabbix 要利用 linux 下的 sendmail 工具发送邮件。
2 、设定收件人
3 、设定告警动作
配置》动作》创建动作》动作、操作、恢复操作、确认操作,根据情况来设定。
本例中使用发送告警邮件的账号为 1833XXXX@139.com ,移动 139 邮箱,邮箱开启短信功能,手机就可以收到告警短信,
1 、
关闭 sendmail 和 postfix 服务,重启域名服务。
service sendmail stop
service postfix stop
service named restart
2 、
配置 vim /etc/mail.rc 最后一行添加
set [from=18335 XXXX @139.com](mailto:from=18335976981@139.com)
set smtp=smtp.139.com XXXXXX
set smtp-auth-user=1833 XXXX @139.com
set smtp-auth-password= 密码
set smtp-auth=login
配置说明:使用 139 外部邮箱服务器
set from 邮件从该邮件发出
set smtp 配置邮件服务的 smtp 域名地址
set smtp-auth 使用这个邮箱账户发送告警信息,需要填写用户名密码。
3 、
mail 发邮件测试
echo "this is my test mail" | mail -s 'mail test ' 375 XXXXX @qq.com
将 139 邮箱开启短信服务,可以将邮件以短信的发送发送至手机。
4 、
配置脚本,该脚本新增了格式化输出的功能,提高了邮件的可读性。
vim /etc/zabbix/server_scripts/sendmail.sh
#!/bin/bash
export LANG=zh_CN.UTF-8
to=$1
subject=$2
body=$3
FILE=/tmp/history.txt
info=`cat $FILE |tr '\\r' '\\n'|grep ^$ -v |tr '\\r' '\\n'`
echo "$3" >$FILE
echo "$info" |mail -s "$2" $1
1 、设定发送 mail 途径
2 、设定收件人
3 、设定告警动作
配置》动作》创建动作》动作、操作、恢复操作、确认操作,根据情况来设定。
动作功能:将告警信息以什么样的方式,什么样的内容形式发送给运维人员知晓。
默认接收人:
【故障】服务器 :{HOSTNAME1} 发生 : {TRIGGER.NAME} 故障
默认信息如:
告警主机 :{HOSTNAME1}
告警时间 :{EVENT.DATE} {EVENT.TIME}
告警等级 :{TRIGGER.SEVERITY}
告警信息 : {TRIGGER.NAME}
告警项目 :{TRIGGER.KEY1}
问题详情 :{ITEM.NAME}
事件 ID:{EVENT.ID}
操作细节
1-1 触发一次告警
步骤持续时间默认 0 为 1 小时
仅送到 选择创建的脚本名称 send_mail_script
【恢复】 服务器 :{HOSTNAME1}: {TRIGGER.NAME} 已恢复!
告警主机 :{HOSTNAME1}
告警时间 :{EVENT.DATE} {EVENT.TIME}
告警等级 :{TRIGGER.SEVERITY}
告警信息 : {TRIGGER.NAME}
告警项目 :{TRIGGER.KEY1}
问题详情 :{ITEM.NAME}
事件 ID:{EVENT.ID}
严重性规则设定,可将 “ 灾难 ” 、 “ 严重 ” 信息设置为邮件发送
设置位置:
微信告警是指企业微信告警,首先要注册一个企业微信,地址: https://work.weixin.qq.com/
请参考链接:
https://www.cnblogs.com/yanjieli/p/10840132.html
即可完成微信告警配置。
这里提供一个优化测试好的脚本模板,以供交流
#!/bin/bash
###SCRIPT_NAME:wechat.sh###
###send message from weixin for zabbix monitor###
CropID='wwcc3a7fd57b3c67b0'
Secret='9RNYztO2Y3f1aCKpL2n2AxpbnY6k1pzB-pEKP3Guvo4'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\\" '{print $10}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
#企业号中的应用id
local int AppID='1000002'
#部门成员id,zabbix中定义的微信接收者
local UserID=$1
#部门id,定义了范围,组内成员都可接收到消息
local PartyID=1
#过滤出zabbix传递的第三个参数
local Msg=$(echo "$@" | cut -d " " -f3-)
printf '{\\n'
printf '\\t"touser":"'"$UserID"\\"",\\n"
printf '\\t"toparty":"'"$PartyID"\\"",\\n"
printf '\\t"msgtype":"text",\\n'
printf '\\t"agentid":"'" $AppID "\\"",\\n"
printf '\\t"text":{\\n'
printf '\\t\\t"content":"'
echo -e "$Msg\\c"
printf \\""\\n"
printf '\\t},\\n'
printf '\\t"safe":"0"\\n'
printf '}\\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
【故障】数据中心监控平台
告警主机: {HOST.NAME}
告警信息: {TRIGGER.NAME}
告警等级: {TRIGGER.SEVERITY}
告警日期: {EVENT.DATE}
告警时间: {EVENT.TIME}
事件 ID : {EVENT.ID}
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞5
添加新评论4 条评论
2021-08-14 10:20
2021-05-17 20:00
2021-05-17 20:00
2021-05-17 20:00