Observium:基于SNMP的网络监控平台

Observium是一个用PHP写的基于SNMP的网络监控平台,可以监控Linux/Windows等众多设备。

你就理解为这东西可以监控你的小鸡就好了,并且被控端只需要安装一个SNMP服务即可,配置起来很方便。

下面是一些预览,机器列表:

机器概览:

一些详细的信息:

文章目录

Observium安装

以下步骤在Debian10上完成。更新软件源:

apt -y update

安装需要用到的软件包:

apt -y install php7.3-fpm php7.3-cli php7.3-mysql php7.3-gd php7.3-json php-pear \
snmp fping mariadb-server mariadb-client python-mysqldb rrdtool subversion whois \
mtr-tiny ipmitool graphviz imagemagick nginx python-certbot-nginx

我看到官方的文档没具体说到底要不要php-mcrypt这个扩展,为了避免后面出现幺蛾子问题,这里也装一下(可能不需要这个)

apt -y install build-essential php7.3-dev libmcrypt-dev
pecl channel-update pecl.php.net
pecl install mcrypt-1.0.4
echo "extension=mcrypt.so" > /etc/php/7.3/mods-available/mcrypt.ini

设置开机自启:

systemctl enable --now nginx mariadb php7.3-fpm

rrdtool绘图是根据系统时区来的,如果你人在厉害国的话,建议设置一下系统时区,这里我设置为东八区:

timedatectl set-timezone Asia/Shanghai

PHP时区也需要设置,编辑如下两个php.ini文件:

nano /etc/php/7.3/fpm/php.ini
nano /etc/php/7.3/cli/php.ini

找到如下位置去掉前面的注释,改为和系统时区一致的东八区:

date.timezone = Asia/Shanghai

重启php-fpm使更改生效:

systemctl restart php7.3-fpm

接下来初始化mariadb:

mysql_secure_installation

登录到mysql:

mysql -u root -p

创建数据库/用户/授权:

CREATE DATABASE observium CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'observium'@'localhost' IDENTIFIED BY '设置你的数据库用户密码';
GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost';
FLUSH PRIVILEGES;
exit

下载解压observium社区版压缩包:

cd /opt
wget http://www.observium.org/observium-community-latest.tar.gz
tar -xzvf observium-community-latest.tar.gz
cd observium

复制一份配置文件并编辑:

cp config.php.default config.php
nano config.php

修改mysql数据库连接信息:

// Database config ---  This MUST be configured
$config['db_extension'] = 'mysqli';
$config['db_host']      = 'localhost';
$config['db_user']      = 'observium';
$config['db_pass']      = 'password';
$config['db_name']      = 'observium';

初始化数据表:

./discovery.php -u

创建两个需要用到的目录:

mkdir logs rrd

设置正确的目录和文件权限:

chown -R www-data:www-data /opt/observium

创建管理员账号,后面的10表示账号等级,10是最高也就是管理员的意思:

./adduser.php imlala password 10

添加计划任务:

crontab -e

写入如下配置:

33 */6 * * *  /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 * * * *  /opt/observium/discovery.php -h new >> /dev/null 2>&1
*/5 * * * *  /opt/observium/poller-wrapper.py >> /dev/null 2>&1
13 5 * * * /opt/observium/housekeeping.php -ysel >> /dev/null 2>&1
47 4 * * * /opt/observium/housekeeping.php -yrptb >> /dev/null 2>&1

新建一个nginx站点配置文件:

nano /etc/nginx/conf.d/observium.conf

写入如下配置:

server {
listen      80;
server_name observium.imlala.best;
root        /opt/observium/html;
index       index.php;
location / {
try_files $uri $uri/ /index.php;
}
location ~ /\.(?!well-known).* {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}

签一个ssl证书:

certbot --nginx

打开你的域名访问,可以看到登录界面的话,使用之前你创建的管理员账号登录:

接下来是SNMP相关的配置。

安装并配置SNMP

各个系统安装配置SNMP的方式略有不同,但基本都一样,这里我只介绍一下Debian10的。

注意这个SNMP的配置一定要配置好,否则可能会导致安全问题,比如被人利用来做UDP放大的DDoS攻击。

首先安装snmpd:

apt -y install snmpd

安装之后为安全起见先停止运行:

systemctl stop snmpd

同时设置一下开机自启:

systemctl enable snmpd

接下来备份一下配置文件:

cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

把默认的配置文件清空:

echo > /etc/snmp/snmpd.conf

编辑默认的配置文件:

nano /etc/snmp/snmpd.conf

写入如下配置:

agentAddress udp:161
sysLocation Japan Tokyo
sysContact imlala <example@qq.com>
createUser imlala MD5 password AES privpassword
rouser imlala priv

关于SNMP的配置这里要详细的说一下,SNMP目前有3个协议版本,一个v1还有一个v2c,以及现在最安全的v3。

上面配置的协议是使用的v3,并且验证等级是authpriv。

在createUser这一行,其中imlala是用户名,password是验证密码,privpassword是加密密码。这些密码一定要改一个高强度的。

rouser是只读用户,这个权限足够了,如果不是必要不要配置rwuser。

确认配置无误后,重新启动snmpd服务:

systemctl start snmpd

现在回到Observium的WEB界面添加设备,单击Devices-Adddevice,按如下图所示来配置:

一旦设备添加成功,等待5分钟,也就是之前你设置的cron计划任务执行,observium的web界面就可以看到监控数据了:

如果你需要立即发现设备并绘制图表的话,在observium的根目录下执行如下命令即可:

./discovery.php -h all
./poller.php -h all

不过我建议还是等5分钟让系统自动收集数据,正好也可以测试下crontab的配置是否正常。

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论