几年下来,PVE集群上面跑的虚拟机和容器超过两百了,因为种种原因,其中部分不在监控里面。这两周打算全部放入监控,想来想去还是snmp centreon-plugin最省事。
1. 为lxc安装配置snmp服务
由于基本上都是LXC容器,所以弄了个简单粗暴的脚本,放到共享存储,在每个节点执行。
因为在用的lxc容器基本都是centos,所以只写了yum安装,如果是debian/ubuntu相应的把yum改为apt就可以了,有兴趣还可以自己增加判断系统的版本,以选择使用systemctl或者service/chkconfig。
代码语言:javascript复制#!/bin/bash
#for NODE in $(pvecm nodes | tail -5 | awk '{print $3}'); do ssh $NODE hostname; done
InstallSNMP () {
#获取所有LXC的VMID
for VMID in $(pct list | grep running | awk '{print $1}')
do echo $VMID
#检查该lxc是否已经启用snmp服务
pct exec $VMID -- sh -c 'ss -aupnl | grep 161'
#如果没有启用snmp服务,检测是否centos或者redhat
if [ ! $? -eq 0 ]; then
pct exec $VMID -- sh -c 'egrep "(CentOS|RedHat)" /etc/*release*'
#安装配置snmp
if [ $? -eq 0 ]; then
pct exec $VMID -- sh -c 'yum install net-snmp -y'
pct exec $VMID -- sh -c 'echo "syslocation jlp.CQ.CN " > /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "syscontact huky0924 <huky0924@aliyun.com>" >> /etc/snmp/snmpd.conf'
#上面两行不是必须的,只是为了方便收集管理信息
pct exec $VMID -- sh -c 'echo "rocommunity publiC" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "com2sec notConfigUser default public" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "com2sec mynetwork 192.168.10.0/24 publiC" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "group notConfigGroup v2c notConfigUse" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "view systemview included .1.3.6.1.2.1.1" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'echo "view systemview included .1.3.6.1.2.1.25.1.1" >> /etc/snmp/snmpd.conf'
pct exec $VMID -- sh -c 'systemctl restart snmpd.service && systemctl enable snmpd.service'
pct exec $VMID -- sh -c 'service snmpd restart && chkconfig snmpd on'
pct exec $VMID -- sh -c 'ss -aupnl | grep 161'
fi
fi
done
}
InstallSNMP
2. 使用centreon-plugins获取监控指标
2.1 安装centreon-plugins
代码语言:javascript复制# apt install libxml-libxml-perl libjson-perl libwww-perl libxml-xpath-perl libnet-telnet-perl libnet-ntp-perl libnet-dns-perl libdbi-perl libdbd-mysql-perl libdbd-pg-perl perl libsnmp-perl
# mkdir /usr/lib/nagios/plugins/thirdparty
# cd /usr/lib/nagios/plugins/thirdparty
# git clone https://github.com/centreon/centreon-plugins.git
# cd centreon-plugins
#某些功能可能需要一些perl库文件
# apt install bc libsnmp-mib-compiler-perl libdatetime-perl libsnmp-base
2.2 测试
代码语言:javascript复制#测试磁盘使用情况
$ cd /usr/lib/nagios/plugins/thirdparty/centreon-plugins/
$ ./centreon_plugins.pl --plugin=os::windows::snmp::plugin --hostname 192.168.10.20 --snmp-community publiC --mode storage
OK: All storages are ok | 'count'=4;;;0; 'used_/'=7508328448B;;;0;29784784896 'used_/dev/shm'=0B;;;0;16903589888 'used_/boot'=41086976B;;;0;499355648 'used_/opt'=55060914176B;;;0;316933963776
3. 告警和展示
把centreon-plugins嵌入监控软件直接利用其告警和展示功能就好了,我是granafa嵌入icinga2:
4. 更多centreon
4.1 centreon-plugins的snmp功能非常强大而且全面,除了通用的OID,还支持大量的设备,可以查找自己的设备和可以检测的项目,常见的cpu/负载磁盘/磁盘IO/端口流量等基本是标准必有,下面是一些命令的例子:
代码语言:javascript复制#查看插件
./centreon_plugins.pl --list-plugin
./centreon_plugins.pl --list-plugin | grep 'PLUGIN: network::cisco'
./centreon_plugins.pl --list-plugin | grep 'PLUGIN: network::huawei'
#查看插件可检测项目
./centreon_plugins.pl --plugin=network::huawei::snmp::plugin --list-mode
./centreon_plugins.pl --plugin=network::cisco::standard::snmp::plugin --list-mode
./centreon_plugins.pl --plugin=os::windows::snmp::plugin --list-mode
./centreon_plugins.pl --plugin=os::linux::snmp::plugin --list-mode
#测试命令
./centreon_plugins.pl --plugin=network::huawei::snmp::plugin --hostname 192.168.100.253 --snmp-community public --mode cpu --verbose --snmp-version=2c
./centreon_plugins.pl --plugin=network::cisco::standard::snmp::plugin --hostname 10.205.1.254 --snmp-community public --mode cpu
./centreon_plugins.pl --plugin=os::windows::snmp::plugin --hostname 10.205.1.23 --snmp-community public --mode cpu
./centreon_plugins.pl --plugin=os::linux::snmp::plugin --hostname 192.168.10.141 --snmp-community public --mode cpu
4.2 阈值
新版本的centreon告警阈值参数名称不再是统一的"--warnning"和"--critical"每个监控项目都都有自己的写法,用"--help"查看,如磁盘(storage):
代码语言:javascript复制$ ./centreon_plugins.pl --plugin=os::windows::snmp::plugin --mode storage --help | egrep '(warning|cri)'
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Plugin Description:
--warning-usage
Threshold warning.
--critical-usage
Threshold critical.
--warning-access
Threshold warning.
--critical-access
Threshold critical. Check if storage is readOnly:
--critical-access=@2:2
4.3 乱码
centreon-plugins的检测结果不支持中文,希望有国内的perl高手出手