系统学习 Zabbix 系统监控(二)

image本系列文章介绍了zabbix 基本概念及其特点,阐述 zabbix 系统环境搭建与基础安装,如何实现对各类操作系统、硬件设备、应用软件监控告警。本文为系列第二篇,内容包括Windows 系统硬件信息获取、Linux 系统监控、Linux 系统硬件信息获取。前文点此:系统学习 Zabbix 系统监控(一)

5 windows 系统硬件信息获取

本文通过在 OS 操作系统层面上,主要获取 windows 服务器下 CPU 信息、内存信息、硬盘信息、操作系统、服务器信息。信息获取的实现方式是通过在 windows 系统下部署自定义 bat 脚本,执行脚本获取数据,再将获取的信息发送给 zabbix 服务端, zabbix 界面创建相应的监控项,触发器等,最终将信息展示出来。监控项内容如下:

CPU 信息:型号、个数、内核数、逻辑核、 CPU 健康状态,及状态告警。

内存信息:容量、个数、厂商、型号、序列号;主板支持内存最大容量和个数。

硬盘信息:厂商、个数、容量、序列号、接口类型、硬盘健康状态,及状态告警。

操作系统信息:主机名、操作系统版本、运行时长、统线程数、系统时间。

服务器信息:品牌、型号、序列号。

说明:一些特殊数据需要实现监控,例如 CPU 温度、硬盘状态、 Raid 卡状态、风扇转速等, windows 没有提供检测硬件温度组件,需要借助第三方工具如 IPMI tools , fan-speed 等,也可以使用 IPMI 协议等其他方法来丰富 windows 系统硬件监控项,对于虚拟机并不适用,此时,推荐使用服务器的管理口,如 HPE 服务器的 iLO 、 DEll 服务器的 iDRAC ,联想服务器 XCC 等开启 snmp 功能,再进行 zabbix 配置,实现对服务器硬件全面监控。如果服务器未配置管理口,当然不能适用。

5.1 CPU 信息获取

应用集:CPU 硬件

cpu 信息主要有:CPU 型号、 CPU 颗数、 CPU 核数、 CPU 逻辑核与线程(超线程,一般是核心数的 2 倍)

监控项配置:

5.1.1 CPU 型号

需要编写程序对 CPU 型号进行提取,相关配置如下:

1 、在 C:zabbixconfzabbix_agentd.win.conf 文件中:自定义程序开关设置为开启, UnsafeUserParameters=1 并添加监控项:

CPU 型号
UserParameter=cpu_hardware_model,C:zabbixscriptcpu_hardware_model.bat

Zabbix 界面添加监控项:

监控 key 值:

cpu_hardware_model

2、程序目录为

C:zabbixscriptcpu_hardware_model.bat

3 、监控项配置:

5.1.2 CPU 颗数

需要编写程序对 CPU 型号进行提取,相关配置如下:

1 、在 C:zabbixconfzabbix_agentd.win.conf 文件中:自定义程序开关设置为开启, UnsafeUserParameters=1 并添加监控项:

CPU 型号
UserParameter=cpu_hardware_number,C:zabbixscriptcpu_hardware_number.bat

2 、程序目录为:

C:zabbixscriptcpu_hardware_number.bat

3 、监控项配置:

5.1.3 CPU 核数

需要编写程序对 CPU 核数进行提取,相关配置如下:

1 、在 C:zabbixconfzabbix_agentd.win.conf 文件中:自定义程序开关设置为开启, UnsafeUserParameters=1 并添加监控项:

CPU 核数 一颗 CPU 的核心数
UserParameter=cpu_hardware_core,C:zabbixscriptcpu_hardware_core.bat

2 、程序目录为:

C:zabbixscriptcpu_hardware_core.bat

3 、监控项配置:

5.1.4 CPU 逻辑核与线程

使用 zabbix 自带 key ,监控 key 值:system.cpu.num[]

说明:type 可用值, online ( 默认值 ), max 范例 : system.cpu.num

经实践检查此处的 key 值为逻辑核心, CPU 逻辑核心、线程(超线程,一般是核心数的 2 倍) windows 系统下管理处理器,看到的数量。

监控项配置:

5.1.5 监控结果

5.2 内存信息获取

memery 内存信息:包括序号、制造商、容量、序列号、型号、速率

memery 内存主板支持:最大容量 , 最大槽位数

5.2.1 创建监控项

创建:memery 内存信息、 memery 内存主板支持

键值:memory_biso_support_info 、 memory_hardware_info

应用集:Memory 内存硬件

5.2.2 监控结果

1 、监测中 > 最新数据 >Memory 内存硬件 >memery 内存信息

可以看到,序列依次为:内存序号、容量、制造商、型号、序列号、速率。

2、监测中 > 最新数据 >Memory 内存硬件 >memery 内存主板支持

第一列为主板支持最大容量,第二列为主板支持最大槽位数。

5.3 操作系统信息

OS 操作系统信息:主机名、操作系统版本、运行时长、统线程数、系统时间。

其中操作系统版本是自定义程序获取,主机名、运行时长、统线程数、系统时间是 zabbix 自带监控模板,自带模板直接套用。

5.3.1 创建监控项

创建:系统时间、操作系统版本、绝对秒、系统线程数、系统运行时长、主机名

键值:system.localtime[local] 、 os_version 、 system.localtime[] 、 perf_counter[2250] 、 system.uptime 、 system.hostname[]

应用集:OS 操作系统

5.3.2 监控结果

监测中 > 最新数据 >OS 操作系统

5.4 服务器信息

监控服务器信息:品牌、型号、序列号。

5.4.1 创建监控项

创建:OS 服务器序列号、 OS 服务器型号、 OS 服务器品牌

键值:os_device_serialnumber 、 os_device_mode 、 os_device_manufacturer

应用集:OS 服务器信息

5.4.2 监控结果

监测中 > 最新数据 >OS 服务器信息

6 Linux 系统状态监控

Linux 系统监控,监控项原则上能利用 zabbix 提供模板就尽量使用, zabbix 提供不了的就编写 shell 脚本,这样就省去大部分代码编写时间,减少工作量。状态信息原则上已使用率为主要观察点,不需要再监控剩余率, Linux 系统监控模板,与 window 系统监控应用集、监控项命名保持统一,监控模板如下所示:

应用集:CPU 状态、 CPU 硬件、 Disk 硬盘、 Disk 磁盘状态、 Memory 内存状态、 Memory 内存硬件、 OS 操作系统、 OS 服务器信息、 agent 模板链接。

6.1 Linux 部署 zabbix_agent

说明:为了支持批量安装,一键化安装 linux 5 、 6 、 7 不同版本安装,需要有脚本程序支撑,自己编写的一建安装脚本,易于批量部署,至于 zabbix agent 安装配置也很简单,网上搜索很多,这里就给读者讲一些我的实践过程。

zabbix_agent_linux_install 脚本目录,上传至被监控 linux 主机,执行 sh install.sh IP

IP 为 zabbix 服务 IP ,当前环境为 192.168.9.123 ,该脚本一键化安装,无需配置 /etc/zabbix/ 下配置,自动识别 linux 版本,脚本内安装选项可以调整。

安装完毕后, zabbix 界面添加主机,并关联模板。当然可以配置 IP 范围使用自动发现主机。

6.2 Linux 系统 CPU 监控

应用集:CPU 状态
CPU 状态:CPU 使用率、 CPU 负载 1 分钟、 5 分钟、 15 分钟。
linux 系统 CPU 状态监控,官方已提供监控项,可以直接使用,无需自行编写脚本。具体参考官方链接:https://www.zabbix.com/documentation/3.4/zh/manual/appendix/items/supported_by_platform?s[]=system&s[]=hw&s[]=cpu&s[]=info ,支持 linux 与 windows 系统。

监控项配置:

注意:实际环境采用 user 系统使用率代替 cpu 整体使用率,因 linux 系统占用的 cpu 资源比较少 1% 。此处 cpu load 负载监控的值为 top 命令下看到的数值。

6.3 Linux 系统内存监控

应用集:Memory 内存状态

Memory 内存状态主要监控项有:Memory 内存使用率、 Memory 内存使用量、 Memory 内存总量(带上 Memory 方便了排序归类)。Swap 交换分区使用率、 Swap 交换分区使用量、 Swap 交换分区总量。

注意:此处的内存使用率为真实使用,会计算上缓存里占用的内存空间。不使用 zabbix 系统提供的 vm.memory.size[pused] (会将缓存计算进去),而使用通过 shell 脚本计算的真实内存。

监控项配置:

说明:配置与 windows 下内存监控方法一样不在详述。

1 、提供计算真实内存脚本 /etc/zabbix/script/memory_fact_used.sh :

2 、在 /etc/zabbix/zabbix_agentd.d/ 目录下创建规范文件名 .conf 结尾,添加如下内容:

UserParameter=mem.fact.used, /etc/zabbix/script/memory_fact_used.sh

3 、监控项配置:

6.4 Linux 磁盘使用监控

应用集:Disk 磁盘使用

Linux 磁盘使用监控主要信息是:磁盘目录的使用情况,包括容量与索引。

监控方式:采用 zabbix 自动发现,将信息批量获取。

监控项配置:

监控项原型配置:

6.5 Linux 磁盘读写监控

应用集:Disk 磁盘读写

Disk 磁盘读写主要监控的信息有:读写速率、 IO 使用率、 IO 响应时间等

1、采用 zabbix 自发现,编写代码生成含有 sda 磁盘信息的 json 文件

Shell 代码:discovery_disk.sh

或 Python 代码:discovery_disk.py

2、编写代码获取 IO 信息:iocheck.sh ,脚本使用了 iostat 命令进行数据获取,关于 iostat 获取的数据信息解释,可翻阅资查看。主要对读写速率、 IO 使用率、 IO 响应时间关键指标进行监控。

3 、创建自发现规则

4 、创建监控项原型,如下图所示,在 zabbix 界面的最新数据可查看监控信息。

6.5 Linux 网卡状态监控

使用 zabbix 已有自发现规则进行监控,方法比较简单,配置截图如下:

1 、自发现规则配置

2 、过滤器配置 此项是为了过滤不需要监控的网卡,采用正则匹配

3 、监控项原型配置

7 Linux 系统硬件信息获取

这里 linux 硬件信息获取,类比 windows 硬件信息获取,都是在 OS 操作系统层面,如果想监控更多硬件,推荐使用服务器的管理口。

实践过程中,原则是尽可能使用 zabbix 系统已有监控项,直接使用效率高。

7.1 CPU 信息获取

应用集:CPU 硬件

cpu 信息主要有:CPU 型号、 CPU 颗数、 CPU 核数、 CPU 逻辑核与线程(超线程,一般是核心数的 2 倍)

监控项配置:

7.1.1 CPU 型号

使用 zabbix 自带 key :

监控 key 值:
system.hw.cpu[,]

说明:cpu 为数量或是默认 all , info :full ( 默认 ), curfreq, maxfreq, model 或者 vendor 。

监控项配置:

7.1.2 CPU 颗数

此处的 CPU 颗数指的是物理个数,如果是虚拟机则不具备参考依据。

使用编写的命令获取 CPU 物理个数:

监控 key 值:
UserParameter=server.cpu.num,cat /proc/cpuinfo |grep -E ‘physical[ t]+id’ |sort |uniq |wc -l

监控项配置:

7.1.3 CPU 核数

使用编写的命令获取 CPU 核数,此处的核数为单个 CPU 的核心数,总核数为:CPU 颗数 * 单个 CPU 的核数。

在 /etc/zabbix/zabbix_agentd.d/ 目录下创建规范文件名 .conf 结尾,添加如下内容:

UserParameter=server.cpu.corenum,echo “$(cat /proc/cpuinfo |grep -E ‘cpu[ t]+cores’ |sort |uniq |awk ‘{print $NF}’)”

监控项配置:

7.1.4 CPU 逻辑核与线程

使用 zabbix 自带 key :

监控 key 值:

system.cpu.num[]

说明:type 可用值, online ( 默认值 ), max 范例 : system.cpu.num

经实践检查此处的 key 值为逻辑核心, CPU 逻辑核心、线程(超线程,一般是核心数的 2 倍) Linux 系统下 top 命令输入 1 ,看到的 cpu 数量。

监控项配置:

7.1.5 监控结果

7.2 Memory 内存信息获取

应用集:Memory 内存硬件

Memory 内存硬件信息主要有:主板支持情况、每个内存条硬件信息。

监控项配置:

7.2.1 Memory 内存主板支持

编写的命令获取内存主板支持情况:

在 /etc/zabbix/zabbix_agentd.d/ 目录下创建规范文件名 .conf 结尾,添加如下内容:

UserParameter=server.memory.info,dmidecode -t 16 | grep -E ‘Maximum|Devices’|sed -e ‘s/1//g;s/[ t]$//g;s/[t]//g;s/Maximum Capacity/ 支持容量 /g;s/Number Of Devices/ 支持槽位 /g’

监控项配置:

最新数据:

7.2.2 Memory 内存信息

编写的命令获取每个内存条硬件信息:

在 /etc/zabbix/zabbix_agentd.d/ 目录下创建规范文件名 .conf 结尾,添加如下内容:

UserParameter=server.memory.info.num,dmidecode -t 17|grep -E “Size: [0-9]” -A12 |grep -E ‘Locator:|Size:|Manufacturer:|Part Number|Speed:|Type:’ |sed -e ‘s/2//g;s/[ t]$//g;s/[t]//g;s/Size/ 容量 /g;s/Locator/ 槽位 /g;s/Type/ 类型 /g;s/Speed/ 速率 /g;s/Manufacturer/ 制造商 /g;s/Part Number/ 序列号 /g’|grep -v ‘Bank’|awk ‘{if (NR%6==0){print $0} else {printf"%st",$0}}’

监控项配置:

最新数据:

7.3 Disk 硬盘信息获取

因有的服务器安装了 RAID 卡或是连接了 EMC 等 SAN 存储设备,而且企业里大量使用了虚拟机 , 增加了硬盘信息获取的难度。对于 linux 与 windows 系统服务器获取硬盘信息,将在后续文章中详细介绍,下面介绍的方法,最适用于服务器安装 linux 系统的场景,可简单了解。

应用集:Disk 硬盘

Disk 硬盘主要获取两类信息 : 硬盘的硬件信息、硬盘的状态(包括只读):

1 、直通硬盘

直通硬盘使用 hdparm -i /dev/sda 命令获取硬盘信息

直通硬盘使用 smartctl -H /dev/sda 命令获取硬盘健康状态

编写脚本,读写 /dev/sdX 硬盘,获取硬盘读写检查

2 、 RAID 硬盘

需要安装 MegaCli 等软件,使用软件命令来实现

监控结果:

7.4 OS 操作系统信息获取

应用集:OS 操作系统

OS 操作系统信息主要有:主机名、操作系统版本、登录用户数量、系统时间、系统运行时长。除过操作系统版本需要编写脚本外,其他都是 zabbix 系统已有监控项,可以直接使用。

监控项配置:

监控结果:

7.5 OS 服务器信息获取

应用集:OS 服务器信息

OS 服务器信息主要有:服务器品牌、型号、序列号。

注意:如果是虚拟机则反应的是虚拟化平台的厂家。如:VMware, Inc.

监控项配置:

脚本命令:

在 /etc/zabbix/zabbix_agentd.d/ 目录下创建规范文件名 .conf 结尾,添加如下内容:

UserParameter=server.company,dmidecode -s system-manufacturer |grep -v ^#
UserParameter=server.product.name,dmidecode -s system-product-name |grep -v ^#
UserParameter=server.serial.number,dmidecode -s system-serial-number |grep -v ^#|tr -d " "

监控结果:


  1. t ↩︎

  2. t ↩︎