监控这台宿主机可以通过两方面完成: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