jiaoyutwt
作者jiaoyutwt·2021-01-06 09:04
系统运维工程师·山西省运城市盐湖区

基于 zabbix 系统监控 系列3——Vmware 虚拟平台监控、邮件告警、企业微信告警配置

字数 9523阅读 7658评论 4赞 5

基于 zabbix 系统监控 系列1——zabbix 简介 与 windows 系统监控

基于 zabbix 系统监控 系列2——windows 系统硬件信息获取、 linux 系统监控、 linux 系统硬件信息获取

8 Vmware 虚拟平台监控

官方监控虚拟机相关文档 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 下群集、主机、虚拟机、存储等命名规范。

8.1 自发现模板配置

主要通过创建主机 VMware vCenter 和 ESXI ,连接 Template VM VMware 模板,进行自发现获取群集、主机、虚拟机、存储等信息。

8.1.1 创建主机

此处创建主机为 Vmware Vcenter 平台,配置如下:

主机名称: IP 地址

端口 默认使用: 80

主机组 命名为: Vmware 平台 Center 数据中心组

宏配置:

{$PASSWORD} 密码

{$URL} https://IP 地址 /sdk

{$USERNAME} 账号

模板: Template VM VMware ( zabbix 自带模板)

8.1.2 数据验证

在配置 -- 主机中查看是否已有虚拟机自生成,在最新数据 -- 查看是否有最新数据,这样就实现了 Vmware 平台上的数据监控,但平台分组不易读,还要制定分组命名规范。

8.2 制定分组命名规范

为了使 zabbix 平台 Vmware 分组分类整洁明了,方便管理审阅,规范 zabbix 下虚拟化平台分组名称。

  1. 首先宏观分 3 大类, Vmware 平台、 ESXI 主机和 WM 虚拟机

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虚拟机组

  1. 细分在某一 Vmware Vcenter 下进行分组, WM 虚拟机组有:数据中心( Vmware Vcenter )、群集与主机。
项目类别规范
Vmware Vcenter虚拟机组Vmware 虚拟机组 数据中心 Datecenter:
Vmware Cluster虚拟机组Vmware 虚拟机组 群集 Cluster:
Vmware ESXI虚拟机组Vmware 虚拟机组 主机 ESXI:

  1. 细分在某一 Vmware Vcenter 下进行分组, ESXI 主机组有:数据中心( Vmware Vcenter )与群集。
项目类别规范
Vmware Vcenter虚拟机组Vmware 主机组 数据中心 Datecenter:
Vmware Cluster虚拟机组Vmware 主机组 群集 Cluster:

为了使 Vmware Vcenter 数据中心,虚拟机方便管理审阅,规范 Vmware 下虚拟化平台分组名称。

命名规范:

项目规范范例
数据中心 DadaCenter描述功能用途数据中心
群集 CLUSTER描述功能用途XXX平台
主机 ESXIIP地址192.168.1.1
虚拟机VM系统-版本-功能描述-IPlinux-redhat-6.7-zabbix测试-192.168.1.2

8.3 规范模板中组的命名

Template VM VMware 模板修改,需要修改 Vmware 自动发现主机与自动发现虚拟机的主机模板。

8.3.1 Vmware 自动发现主机

根据 8.2 节, zabbix 命名规范,修改组模板的两项:

1 、 Wmare 主机组 群集 Cluster : {#CLUSTER.NAME}

2 、 Wmare 主机组 数据中心 DateCenter : {#DATACENTER.NAME}

说明: 1 是群集组分组, 2 是数据中心分组,此组下均为 ESXI 主机信息

要先创建 zabbix 主机组: Vmware 平台 Center 数据中心组,才能在此处的 “ 群组 ” 中添加。

说明:包括所有 ESXI 主机,跨数据中心。

8.3.2 Vmware 自动发现虚拟机

根据 8.2 节, zabbix 命名规范,修改组模板的三项:

1 、 Vmware 虚拟机组 群集 Cluster : {#CLUSTER.NAME}

2 、 Vmware 虚拟机组 数据中心 Datecenter : {#DATACENTER.NAME}

3 、 Vmware 虚拟机组 主机 ESXI : {#HV.NAME}

要先创建 zabbix 主机组: Vmware 平台 VM 虚拟机组,才能在此处的 “ 群组 ” 中添加。

说明:包括所有虚拟机,跨数据中心。

8.3.3 对模板进行汉化

Template VM VMware 、 Template VM VMware Hypervisor 、 Template VM VMware Guest

8.4 创建触发器

Zabbix 自带 Vmware 监控模板无触发器配置,需要自研配置触发器,且能配置触发器项较少,尽量依靠部署 agent 进行全面监控告警。简而言之,此触发器告警是宏观上的,为虚拟平台整体状态告警,不能详尽描述虚拟机某一指标。

但有几个关键性指标,在 OS 下体现不出来,需要在 VMware 平台上做监控:如 CPU ready time 、内存 ballon 、 swap 等,依次要判断 VM 运行情况。

8.4.1 ESXI 主机触发器

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 主机内存资源情况进行合理判断。

8.4.2 VM 虚拟机触发器

可配置触发器较少,对于虚拟机监控告警,只是辅助告警,尽量依靠部署 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

注意:表达式多种多样,但有的并不一定能实现。

  1. 经研究,虚拟机触发器可告警项较少,构建出发器也是可行,但总会与 agent 监控重复,效果并不理想,以上只做参考。比如 C 、 D 盘使用率监控, CPU ,内存使用率,而且有时候虚拟机不安装 VMware tools 工具下监控不到 C 盘(如果是 linux 系统则是目录),因此,针对虚拟机电源有必要监控告警,其他项不再深入研究。
  2. CPU ready time CPU 就绪时间

关键重要指标,如果此值大于 2000ms 或是 2s ,说明 CPU 性能不足,需要关注。可以通过 ssh 到 ESXI 主机上使用 esxtop 命令查看。此处实践配置成 10 个周期内的均值 3000ms 告警。

虚拟机设置 CPU 核心数,如果 ESXI 主机 CPU 核心数较少, VM 设置的过多,会造成 VM 虚拟机直接抢占 CPU 资源造成, CPU ready time 值偏高,所以说虚拟机 CPU 核心数设置的并不是越多越好,只要满足计算量即可。

  1. 内存触发器

重要关键指标:共享内存大小、气球内存大小、交换内存大小、压缩内存大小。

内存资源严重性逐步提高。共享、气球内存是 VM 合理利用内存的方式,避免:交换内存、压缩内存的产生。

共享内存大小:

气球内存大小:

交换内存大小:

压缩内存大小:

8.4.3 Cluster 群集触发器

监控群集整体状态

表达式: {Template VM VMware:vmware.cluster.status[{$URL},{#CLUSTER.NAME}].last()}>1

名称:群集状态异常: {HOST.NAME}

9 邮件告警

主要介绍通过邮件实现告警,当然告警的方式还有短信(需要短信猫)、企业微信、钉钉等。

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

9.1 第一种方式

9.1.1 zabbix linux 下配置

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 邮箱收不到信息,

未报错,邮箱能收到邮件说明发送正常。

9.1.2 zabbix 界面配置

1 、设定发送 mail 途径

管理》报警媒介类型》 Email ,配置截图如下:

说明: SMTP 服务器就是 zabbix-server 服务器,地址是 192.168.1.2 , DY-zabbix 是 zabbix-server 服务器的主机名, linux 下执行 hostname 命令查看, 1.2.1 节已配置好了。为啥要这样配置,因为 zabbix 要利用 linux 下的 sendmail 工具发送邮件。

2 、设定收件人

界面右上角,点进去,报警媒介,添加收件人地址。

3 、设定告警动作

配置》动作》创建动作》动作、操作、恢复操作、确认操作,根据情况来设定。

详细配置,见 9.3 节。

9.1.3 验证测试

9.2 第二种方式

9.2.1 zabbix linux 下配置

本例中使用发送告警邮件的账号为 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

9.2.2 zabbix 界面配置

1 、设定发送 mail 途径

管理》报警媒介类型》创建媒介类型,配置截图如下:

2 、设定收件人

界面右上角,点进去,报警媒介,添加收件人地址。

3 、设定告警动作

配置》动作》创建动作》动作、操作、恢复操作、确认操作,根据情况来设定。

详细配置,见 9.3 节。

9.2.3 验证测试

9.3 告警动作详细配置

动作功能:将告警信息以什么样的方式,什么样的内容形式发送给运维人员知晓。

界面配置示意图:动作名称是:外部邮件方式。需要创建

9.3.1 操作

默认接收人:

【故障】服务器 :{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

9.3.2 恢复操作

【恢复】 服务器 :{HOSTNAME1}: {TRIGGER.NAME} 已恢复!

告警主机 :{HOSTNAME1}

告警时间 :{EVENT.DATE} {EVENT.TIME}

告警等级 :{TRIGGER.SEVERITY}

告警信息 : {TRIGGER.NAME}

告警项目 :{TRIGGER.KEY1}

问题详情 :{ITEM.NAME}

事件 ID:{EVENT.ID}

9.3.3 告警级别

严重性规则设定,可将 “ 灾难 ” 、 “ 严重 ” 信息设置为邮件发送

设置位置:

界面右上角,点进去,报警媒介,编辑。

10 微信告警

微信告警是指企业微信告警,首先要注册一个企业微信,地址: https://work.weixin.qq.com/

请参考链接:

https://www.cnblogs.com/yanjieli/p/10840132.html

即可完成微信告警配置。

10.1 脚本

这里提供一个优化测试好的脚本模板,以供交流

 #!/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

10.2 消息配置

【故障】数据中心监控平台

告警主机: {HOST.NAME}

告警信息: {TRIGGER.NAME}

告警等级: {TRIGGER.SEVERITY}

告警日期: {EVENT.DATE}

告警时间: {EVENT.TIME}

事件 ID : {EVENT.ID}

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论4 条评论

jooejooe系统架构师中免国际有限公司
2021-08-14 10:20
实际项目经验
匿名用户
2021-05-17 20:00
Mark
匿名用户
2021-05-17 20:00
Mark
匿名用户
2021-05-17 20:00
Mark
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广