[pve][snmp][centreon]用centreon-plugins执行snmp监控

2022-05-20 14:12:38 浏览数 (1)

几年下来,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高手出手

0 人点赞