Zabbix –内核,CPU和硬盘的低级发现

屏幕截图来自2013-12-29-165743-e1388332859892 Zabbix SSD状态,配置有低级发现

在家里,我正在使用Zabbix监视服务器,它具有许多有趣的功能,并且可以通过使用User Parameter进行很多扩展。

在这篇文章中,我将讨论低级发现(LLD)。 如果您只对最终结果感兴趣,请转到“结论”部分,您可以下载包含所有规则的模板!

低层发现(LLD)

LLD是一项功能,可自动发现受监视主机的某些属性并创建项目,触发器和图形。

默认情况下,Zabbix支持三种类型的项目发现:

  • 挂载的文件系统
  • 网络接口
  • SNMP的OID

前两个非常有用,因为它们默认情况下会为您提供例如每个已安装文件系统的可用空间或每个网络接口进出的带宽。 因为我只监视Linux服务器,所以我不使用最后一个,但是最终它将使其他人感兴趣。

关于此功能的另一个非常有趣的事情是,您可以通过发现更多项目来扩展它。 在本文中,我将展示如何发现CPU,CPU核心和硬盘。

定制发现的最重要部分是在受监视的计算机上创建可以“发现”某些东西的脚本。 它可以是任何可执行文件,唯一重要的是它以正确的格式输出数据。 我不得不说格式很丑陋,但这可能不是很重要。 这是我的硬盘发现脚本的输出:

{
"data":[
    {"{#DISKNAME}":"/dev/sda","{#SHORTDISKNAME}":"sda"},
    {"{#DISKNAME}":"/dev/sdb","{#SHORTDISKNAME}":"sdb"},
    {"{#DISKNAME}":"/dev/sdc","{#SHORTDISKNAME}":"sdc"},
    {"{#DISKNAME}":"/dev/sdd","{#SHORTDISKNAME}":"sdd"},
    {"{#DISKNAME}":"/dev/sde","{#SHORTDISKNAME}":"sde"},
    {"{#DISKNAME}":"/dev/sdf","{#SHORTDISKNAME}":"sdf"},
    {"{#DISKNAME}":"/dev/sdg","{#SHORTDISKNAME}":"sdg"},
]
}

每个发现的项目可以有尽可能多的键,但是格式必须保持不变。 在项目,触发器和图形原型中,然后将使用{#DISKNAME}或{#SHORTDISKNAME}来使用发现的值。

创建脚本后,必须在zabbix配置中将其注册为用户参数。 例如,如果使用zabbix守护程序,则在/etc/zabbix/zabbix_agentd.conf中需要以下几行:

EnableRemoteCommands=1
...
UnsafeUserParameters=1
...
UserParameter=discovery.hard_disk,/scripts/discover_hdd.sh

现在,当您创建发现规则时,可以使用discovery.hard_disk作为键。

如果没有原型,发现规则本身很有用,您可以创建三种类型的原型:

  • 项目原型:这将为每个发现的实体创建一个新项目
  • 触发器原型:这将为每个发现的实体创建一个新触发器。
  • 图形原型:这将为每个发现的实体创建一个图形。

到目前为止,最有用的是物料和触发器原型。 图的最大问题是,您不能为每个发现的项目创建汇总图。 例如,如果您记录CPU内核的温度,则无法使用每个发现的内核的温度自动创建图表。 为此,您必须在每个主机中创建图。 恕我直言,这使图原型变得毫无用处。 无论如何…

在下一节中,我将展示如何为硬盘,CPU和CPU内核创建发现规则。

发现硬盘

发现脚本非常简单:

#!/bin/bash

disks=`ls -l /dev/sd* | awk '{print $NF}' | sed 's/[0-9]//g' | uniq`

echo "{"
echo "\"data\":["

for disk in $disks
do
    echo "    {\"{#DISKNAME}\":\"$disk\",\"{#SHORTDISKNAME}\":\"${disk:5}\"},"
done

echo "]"
echo "}"

它仅列出所有/ dev / sdX设备,删除分区号并删除重复项,以便仅将硬盘放在末尾。

我为每个硬盘创建了多个项目原型。 以下是一些使用SMART的示例(您可以在结论部分中下载包含所有项目的模板):

  • 原始读取错误率
  • 加速时间
  • 剩余SSD寿命
  • 温度

您可能会注意到其中一些仅对SSD(SSD剩余寿命)有意义,而另一些对SSD(加速时间)则没有意义。 这不是问题,因为Zabbix只会将它们标记为“不支持”。

所有这些数据都是使用smartctl实用程序收集的。

我还创建了一些触发器来指示硬盘即将发生故障:

  • SSD寿命过低
  • 重新分配的扇区数太低

我刚刚使用了smartctl报告的阈值,它们可能因一家磁盘制造商而异。 我不太相信这些值,因为磁盘通常会在达到阈值之前发生故障,但是无论如何它可能是一个很好的指标。

发现CPU

这是发现CPU的脚本:

#!/bin/bash

cpus=`lscpu | grep "CPU(s):" | head -1 | awk '{print $NF}'`
cpus=$(($cpus-1))

echo "{"
echo "\"data\":["

for cpu in $(seq 0 $cpus)
do
    echo "    {\"{#CPUID}\":\"$cpu\"},"
done

echo "]"
echo "}"

它仅使用lscpu并分析其输出以找到CPU的数量,然后为每个CPU创建一个条目。

每个CPU我只有一个项目:CPU利用率。
我尚未在此处创建任何触发器。

探索CPU核心

就在之前,我们发现了CPU,但是发现内核也很有趣。 如果没有超线程,结果将是相同的。 获取每个核心的温度特别有趣。 这是脚本:

#!/bin/bash

cores=`lscpu | grep "Core(s) per socket:" | awk '{print $NF}'`
cores=$(($cores-1))

echo "{"
echo "\"data\":["

for core in $(seq 0 $cores)
do
	echo "    {\"{#COREID}\":\"$core\"},"
done

echo "]"
echo "}"

它的工作方式与以前的脚本相同。

我只创建了一个项目原型,以使用lm_sensors获取每个内核的温度。

包起来

这是使发现和各项正常工作所需的所有UserParameter:

### System Temperature ###
UserParameter=system.temperature.core[*],sensors|grep Core\ $1 |cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4

### DISK I/O###
UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$4}'
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$7}'
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$8}'
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$11}'
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | egrep $1 | head -1 y| awk '{print $$13}'
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$6}'
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | egrep $1 | head -1 | awk '{print $$10}'
UserParameter=system.smartd_raw[*],sudo smartctl -A $1| egrep $2| tail -1| xargs| awk '{print $$10}'
UserParameter=system.smartd_value[*],sudo smartctl -A $1| egrep $2| tail -1| xargs| awk '{print $$4}'

### Discovery ###
UserParameter=discovery.hard_disk,/scripts/discover_hdd.sh
UserParameter=discovery.cpus,/scripts/discover_cpus.sh
UserParameter=discovery.cores,/scripts/discover_cores.sh

(必须在zabbix_agentd.conf中设置)

您还需要授予zabbix使用sudo和smartctl的权利。 为此,您必须编辑/ etc / sudoers文件并添加以下行:

ALL ALL=(ALL)NOPASSWD: /usr/sbin/smartctl

结论与下载

我希望这可以帮助某些人在其Zabbix监视安装中使用低级发现。

LLD极大地简化了具有不同硬件或配置的主机的多个项目发现的创建。 但是,它存在一些问题,我尚未找到合适的解决方案。 首先,您必须在每个主机上复制客户端脚本(或至少将它们共享在每个主机上的可用共享中)。 然后,每个代理的配置也将在每个主机的配置中重复。 我认为最大的问题是您无法使用每个发现的实体的生成项自动创建图。 例如,我必须在每个主机中创建一个CPU温度图。 如果您拥有的主机很少,就像许多主机一样,这是可以接受的,但是如果您有数百个主机,那么您就别这么做。

所有脚本和模板导出文件在zabbix-lld存储库中都可用。 为了使一切正常工作,您需要lscpu,lm_sensors和smartmontools实用程序。

如果您有任何疑问或某些问题不起作用(我不提供任何保证,但它在大多数最新的Linux机器上都可以工作),请随时对此发表评论。


翻译自: https://www.javacodegeeks.com/2014/01/zabbix-low-level-discovery-of-cores-cpus-and-hard-disk.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值