本系列文章介绍了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/^[ t]//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/^[ t]//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 " "
监控结果: