监控这台宿主机可以通过两方面完成:IPMI 监控硬件状况,ESXi 监控 CPU 内存等信息。
Contents
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 宿主机进行监控了。
参考资料:
https://kb.vmware.com/s/article/2145018#mem