jiaoyutwt
作者jiaoyutwt2021-01-05 08:08
系统运维工程师, 山西省运城市盐湖区

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

字数 10200阅读 992评论 0赞 2

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

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

  1. 程序目录为 C:zabbixscriptcpu_hardware_model.bat
@echo off

::

wmic cpu get name|C:\zabbix\gawk-3.1.6-1-bin\bin\awk.exe "NR==2 { print }" > C:\zabbix\script\cpu_hardware_model.txt

type C:\zabbix\script\cpu_hardware_model.txt

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

@echo off

::

wmic cpu get DeviceID | findstr /V "DeviceID" |findstr /V "^$" | C:\zabbix\UnxUtils\usr\local\wbin\grep.exe "CPU" |C:\zabbix\UnxUtils\usr\local\wbin\wc.exe -l | C:\zabbix\UnxUtils\usr\local\wbin\sed.exe "s/ //g" > C:\zabbix\script\cpu_hardware_number.txt

type C:\zabbix\script\cpu_hardware_number.txt

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

@echo off

wmic cpu get NumberOfCores | C:\zabbix\gawk-3.1.6-1-bin\bin\awk.exe "NR==2 { print }" > C:\zabbix\script\cpu_hardware_core.txt

type C:\zabbix\script\cpu_hardware_core.txt

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 内存信息

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

  1. 监测中 > 最新数据 >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 :

#!/bin/bash
OS=`uname -a |grep -Eo 'el[567]' |head -n1`
case $OS in
"el7")
free |grep 'Mem' |awk '{print ($2-$7)/$2}'
;;
"el6")
free |grep 'Mem' |awk '{print ($2-$4-$6-$7)/$2}'
;;
"el5")
;;
*)
echo "OS not support!"
;;
esac

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

#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk '{print $3}'|sort|uniq 2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf '\t'"\"data\":["

for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done

printf "\n\t]\n"
printf "}\n"

或 Python 代码: discovery_disk.py

#/usr/bin/python
#This script is used to discovery disk on the server
import subprocess
import json
import os

#alldisks_command="cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk '{print $3}'|sort|uniq 2>/dev/null"

alldisks_command="cat /proc/partitions | grep sd | grep -v sd.[1-9] | awk {'print $4'}"
alldisks=subprocess.Popen(alldisks_command,shell=True,stdout=subprocess.PIPE).communicate()[0].strip()
sysdisk_command="df |grep -w '/'|awk '{print $1}'|awk -F '/' '{print $3}'|sed 's/[0-9]//g'"
sysdisk=subprocess.Popen(sysdisk_command,shell=True,stdout=subprocess.PIPE).communicate()[0].strip()

disks=[]
for disk in alldisks.split('\n'):
if (disk == sysdisk):
disks.append({'{#DISK_NAME}':disk,'{#SYSDISK}':"1"})
elif ( os.path.exists("/opt/software/hadoop/hdfs")) == False :
disks.append({'{#DISK_NAME}':disk,'{#SYSDISK}':"0"})
print json.dumps({'data':disks},indent=4,separators=(',',':'))

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

#/bin/bash
device=$1
item=$2

case $item in
rBps)
RKB=`iostat -d $device -xkt 1 2 | grep "\b$device\b"|tail -n1 | awk '{print $6}'`
echo "$RKB*1024"|bc
;;
wBps)
WKB=`iostat -d $device -xkt 1 2 | grep "\b$device\b"|tail -n1 | awk '{print $7}'`
echo "$WKB*1024"|bc
;;
await)
iostat -dxkt 1 2 | grep "\b$device\b"|tail -n1 | awk '{print $10}'
;;
util)
iostat -dxkt 1 2 | grep "\b$device\b"|tail -n1 | awk '{print $12}'
;;
esac

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 " "

监控结果:

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

2

添加新评论0 条评论

Ctrl+Enter 发表