对于我的 OpenStack 设置,我使用 LVM 作为 Cinder Block 存储后端。我为 Thin Provisioning 创建了一个 cinder-volumes vg。
现在,我想监控该 vg 的使用量(而不是其中的独立磁盘)。我发现 lvs -a 可以做到这一点。我能够检查我的卷池利用率
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
cinder-volumes-pool cinder-volumes twi-aotz-- 1.49t 26.35 22.20
我可以看到该卷池的利用率约为 26%。有什么方法可以监控它吗?我目前使用 Zabbix 来全面监控服务器和其他服务。但 Zabbix 支持监控文件系统,而不是磁盘和 LVM 池。
您知道我可以使用什么解决方案来监控它吗?当数据百分比超过 80% 左右时,是否有一些 bash 或 python 脚本通过 smtp 发送邮件?或者一些 zabbix 模板?
编辑1:我想我可以使用这种方法。
disk_usage=$(sudo lvs -a | grep -w cinder-volumes-pool | awk '$1 ~ /cinder-volumes-pool/ { POOL = $1 } { DISK += $5 } END { print DISK }')
我将把这个 var 值与我的阈值(50% 或 80%)进行比较。当它们匹配时,我将配置 SMTP 来发送邮件。这应该是一个不错的解决方案。如果你们有更好的方法,请随时帮助我。
答案1
好的,我解决了这个问题,因此发布一个解决方案以防有人需要帮助。首先,我们将使用lvs -a
命令获取磁盘使用情况。以下自定义将获得精确值。确保在 grep 和 awk 正则表达式中替换 LVM 精简池名称。
sudo lvs -a | grep -w cinder-volumes-pool | awk '$1 ~ /cinder-volumes-pool/ { DISK += $5 } END { print DISK }'
将该值与您在 lvs -a 命令中获取的卷池值进行比较,如果相同,我们可以继续。否则,计算其位置并在 awk 中修改它(从 $5 到您的 Data% 位置)。
就我而言,我已经在使用 Zabbix。因此,我编辑了 zabbix 代理文件 (/etc/zabbix/zabbix_agent2.conf) 并添加了以下行。
UserParameter=cinder-volumes.disk_usage,sudo lvs -a | grep -w cinder-volumes-pool | awk '$1 ~ /cinder-volumes-pool/ { DISK += $5 } END { print DISK }' | bc -l
UserParameter 在 Zabbix 中用于将用户定义的密钥从代理发送到 Zabbix 服务器。这里,cinder-volumes.disk_usage 是我的密钥名称,命令是该密钥的值。
由于我的命令需要 root 权限,我修改了 zabbix-agent systemd 单元以 root 身份运行(我知道这不是最好的方法,更好的解决方案总是受欢迎的)。重新启动您的 Zabbix Agent。
确认您的自定义按键是否正常工作:
sudo zabbix_agent2 -t cinder-volumes.disk_usage
如果您获得输出值,请转到 Zabbix 仪表板。对于您的主机,使用您在上一步中创建的密钥创建一个新项目。选择数字(浮点)作为信息类型,并选择更新间隔 1h,您就可以开始了。
创建项目后,使用表达式根据该项目创建触发器
last(/Openstack control01 Linux Server/cinder-volumes.disk_usage,#1)>=80
为了进行测试,请创建一个值较低的触发器(低于您当前的磁盘使用量)。如果创建了触发器,则一切正常。您现在可以创建媒体警报(电子邮件、pagerduty、slack 或任何其他内容)来接收触发器的警报。