Telegraf 监控 ESXi 主机

Telegraf 监控 ESXi 主机

IT, 其他

最近把闲置的 Xeon E3 1240v5 又拿出来做成 ESXi 平台的宿主机,这台 ESXi 主要用于承载 pfSense 软路由和 一台用于监控其他服务器的 Linux 系统。我将之前 BPI-M3 上面的网络/服务器监控全部转移到这台虚拟机中。由于如果要监控这台宿主机自身需要登陆 ESXi 的控制面板,这就比较麻烦,因此我考虑将监控功能也合并到虚拟机中。

监控这台宿主机可以通过两方面完成:IPMI 监控硬件状况,ESXi 监控 CPU 内存等信息。

IPMI 监控

我使用的主板是 Supermicro X11-SSM 它带有 IPMI 可以非常方便的监控温度,电压等信息。

新建账户

我们新建一个账户 telegraf, 赋予权限 Operator

设置 Telegraf

在 Telegraf 中集成 IPMI 监控非常简单,可以直接修改 /etc/telegraf/telegraf.conf 或者新建 /etc/telegraf/telegraf.d/monitor-ipmi.conf,并通过如下内容启用监控:


[[inputs.ipmi_sensor]]

​	privilege = "OPERATOR"

​	servers = ["telegraf:passwd@lan(IP)"]

重启 telegraf 后即可通过 influxdb 结合 Grafana 绘制图像。

ESXi 监控

ESXi 监控通常是使用 vCenter 完成的,但是首先 vCenter 是付费的企业级应用,其次安装 vCenter 需要一台内存至少有 8GB 的虚拟机,这对于我的这台主机来说略显奢侈,因此我改用 SNMP 来完成监控。

启用 SNMP

ESXi 的 snmpd 默认情况下并不运行,第一次运行需要输入如下内容(假设 community-string 为 public):


esxcli system snmp set -c public

esxcli system snmp set -e yes

设置 Telegraf

从 ESXi 的 SNMP 中我们可以得到非常多的信息,但是这些信息都是以 oid 的形式出现的,想要得到这些值的对应关系,可以查阅 http://oidref.com/ 也可以直接使用 http://communities.vmware.com/community/developer/forums/managementapi#SNMP-MIB。这两种方法我们都可以得到大量数据,但是这些数据仍然需要进行加工才能使用。这里我就以 CPU, Uptime,内存用量为例。首先还是直接修改 /etc/telegraf/telegraf.conf 或者新建 /etc/telegraf/telegraf.d/monitor-esxi-snmp.conf,并通过如下内容启用监控:


[[inputs.snmp]]
   agents = [ "192.168.0.1:161" ]
   timeout = "5s"
   retries = 3
   version = 2
   community = "public"
   max_repetitions = 10
   name = "ESXI"
   [[inputs.snmp.field]]
     name = "esxi-uptime"
     oid = "iso.3.6.1.2.1.25.1.1.0"
   [[inputs.snmp.field]]
     name = "esxi-cpuload1"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.1"
   [[inputs.snmp.field]]
     name = "esxi-cpuload2"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.2"
   [[inputs.snmp.field]]
     name = "esxi-cpuload3"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.3"
   [[inputs.snmp.field]]
     name = "esxi-cpuload4"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.4"
   [[inputs.snmp.field]]
     name = "esxi-cpuload5"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.5"
   [[inputs.snmp.field]]
     name = "esxi-cpuload6"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.6"
   [[inputs.snmp.field]]
     name = "esxi-cpuload7"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.7"
   [[inputs.snmp.field]]
     name = "esxi-cpuload8"
     oid = ".1.3.6.1.2.1.25.3.3.1.2.8"
   [[inputs.snmp.field]]
     name = "esxi-memavailable"
     oid = ".1.3.6.1.2.1.25.2.2.0"
   [[inputs.snmp.table]]
     oid = "1.3.6.1.2.1.25.5.1"
     index_as_tag = true
   [[inputs.snmp.table.field]]
     name = "esxi-memused"
     oid = ".1.3.6.1.2.1.25.5.1.1.2"

这里我们得到的是 CPU 每一个核心的使用情况,uptime,内存总量以及每个进程使用的内存量。

这里得到的 CPU 用量只是很简单的 0-100% 的数字,因此可以很简单的直接绘图。

Uptime 的值是以 10ms 为单位的,因此需要简单的计算: SELECT last("esxi-uptime") / 8640000

由于内存是各个进程占用的量,因此需要将它们叠加起来:SELECT sum("esxi-memused") FROM "hrSWRunPerfTable",这里得到的内存用量比起宿主机实际的内存用量还会少一些(由于部分内存是硬件保留,且 ESXi 系统还需要使用掉一些)。

使用这些数据绘图后我们就可以简单的对 ESXi 宿主机进行监控了。

参考资料:

https://medium.com/@tkunlin/esxi-6-5-snmp-%E7%84%A1%E6%B3%95%E5%95%9F%E5%8B%95-b5048986d06a

https://exchange.nagios.org/directory/Plugins/Operating-Systems/%2A-Virtual-Environments/VMWare/check_esx_cpu_snmp/details

https://kb.vmware.com/s/article/2145018#mem

https://thwack.solarwinds.com/t5/NPM-Documents/Disk-Volume-RAM-Memory-Calculation/ta-p/531370

Amefs, EFS, IT, Linux
上一篇文章
pyenv 与 python-virtualenv
下一篇文章
横评几家 ARM64 VPS

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Fill out this field
Fill out this field
请输入有效的邮箱地址。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

keyboard_arrow_up