Pages

Thursday, 24 July 2014

在Debian的VPS上搭建Observium监控服务端和SNMP v2/SNMP v3客户端

最近想安装observium,发现网上的中文资料少之甚少。于是乎在google上搜索了众多资料后总结一下observium安装服务端和SNMPv2/SNMPv3客户端的问题.

在Ubuntu/Debian的VPS上搭建Observium监控服务端和SNMPv2/SNMPv3客户端

Observium并不是什么很专业的监控方案。一个美国的系统运维朋友和我说Munin,Nagios+NRPE,Icinga都会是更好的选择。我并不是专业运维,只是Linux爱好者,所以先从简单的来吧。

Observium的安装可以是一个独立的环境,也就是说官方提供的安装方法可以很轻易的搭建一个以Apache2为主的Observium监控环境。但是最近习惯用了俄罗斯的VestaCP面板,所以下面的介绍会捎带把Observium在VestaCP上安装的细节也介绍出来。[转载请注明出处 http://vtp.me]

1. VestaCP的安装

1.1 OS系统

如果你用的是OpenVZ的虚拟化,大部分provider可能用的不是OpenVZ的最新template,那么建议你用Debian 6来避免apt-get dist-upgrade后出现的问题。Ubuntu就用12.04 LTS吧。

如果你用的是非OpenVZ的虚拟化,那么可以用Debian 7。Ubuntu的12.04 LTS为好。

1.2 VestaCP准备工作

1.2.1 更新源

apt-get update -y

1.2.2 删除无用组件

apt-get -y --purge autoremove libapache2-mod-php5 php5-cli php5-mysql php5-gd php5-snmp php-pear snmp graphviz php5-mcrypt php5-json subversion mysql-server mysql-client rrdtool fping imagemagick whois mtr-tiny nmap ipmitool python-mysqldb
apt-get -y --purge autoremove apache*
apt-get -y --purge autoremove exim*
apt-get -y --purge autoremove nginx apache2 apache2-utils apache2-doc apache2.2-common apache2.2-bin apt-utils
apt-get -y --purge autoremove apache2-suexec-custom libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn
apt-get -y --purge autoremove mysql-server mysql-common mysql-client
apt-get -y --purge autoremove php5-common php5-cgi php5-mysql php5-curl libapache2-mod-php5
apt-get -y --purge autoremove vsftpd mc exim4 exim4-daemon-heavy clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats
apt-get -y --purge autoremove webalizer jwhois git spamassassin roundcube roundcube-mysql
apt-get -y --purge autoremove roundcube-plugins apparmor-utils sudo bc ftp lsof ntpdate rrdtool
apt-get -y --purge autoremove vesta vesta-nginx vesta-php
apt-get autoremove -y
update-rc.d -f apache2 remove
apt-get --purge autoremove httpd*

1.2.3 安装几个包

apt-get install -y screen curl nano

1.2.4 更新/升级内核

apt-get upgrade -y

apt-get dist-upgrade -y

1.3 安装VestaCP

screen

curl -O http://vestacp.com/pub/vst-install.sh

sh vst-install.sh

在输入y和信箱以后,根据VPS性能不同可能等待1.5分钟-10分钟不等

1.4 登陆/设置VestaCP

在Ubuntu/Debian的VPS上搭建Observium监控服务端和SNMPv2/SNMPv3客户端

根据最后安装好后的登陆信息登陆VestaCP面板通常为:https://ip:8083

在Ubuntu/Debian的VPS上搭建Observium监控服务端和SNMPv2/SNMPv3客户端

添加一个网站作为Observium的登陆地址

1.5 查看默认系统生成的mysql的root密码

开始这里一直困扰我,如果用sql命令强行更改root的密码则会破坏VestaCP和mysql之间的交流。然而安装的时候又没有提示默认mysql的root是什么。输入以下指令找到默认vestacp生成的mysql的root密码

root@INIZ-LA:~# cat /usr/local/vesta/conf/mysql.conf
HOST='localhost' USER='root' PASSWORD='123456' CHARSETS='UTF8,LATIN1,WIN1250,WIN1251,WIN1252,WIN1256,WIN1258,KOI8' MAX_DB='500' U_SYS_USERS='' U_DB_BASES='1' SUSPENDED='no' TIME='09:07:38' DATE='2014-01-17'
root@INIZ-LA:~#

2 Observium的安装[转载请注明出处http://vtp.me]

2.1 安装Observium必要包

apt-get install libapache2-mod-php5 php5-cli php5-mysql php5-gd php5-snmp php-pear snmp graphviz php5-mcrypt php5-json \
subversion mysql-server mysql-client rrdtool fping imagemagick whois mtr-tiny nmap ipmitool python-mysqldb

2.1.1 如果需要安装libvirt的虚拟机可安装如下

apt-get install libvirt-bin

2.2 我们需要把Observium的安装包直接放在VestaCP的目录下,进入如下目录

cd /home/admin/web/status.abc.com/public_html/

2.2.1 下载和解压Observium到正确目录

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

tar zxvf observium-community-latest.tar.gz

mv observium/* ./;rm -rf observium/

2.3 配置config.php

cp config.php.default config.php

nano config.php

// Database config
$config['db_host'] = "localhost";
$config['db_user'] = "root"; //mysql最高权限用户
$config['db_pass'] = "KBCqnA7USt"; //mysql最高权限用户密码,在1.5中已查得
$config['db_name'] = "observium"; //数据库名称,稍后建立,不可使用vestaCP中的数据库

// Location
$config['install_dir'] = "/home/admin/web/status.abc.com/public_html"; //这个一定要改否则不能更新config.php的配置

// Thie should *only* be set if you want to *force* a particular hostname/port
// It will prevent the web interface being usable form any other hostname
#$config['base_url'] = "http://status.abc.com"; //你的域名绑定的observium后台访问地址

// Default community list to use when adding/discovering
$config['snmp']['community'] = array("public");

// Authentication Model
$config['auth_mechanism'] = "mysql"; // default, other options: ldap, http-auth, please see documentation $

// Enable alerter
// $config['poller-wrapper']['alerter'] = TRUE;

// Set up a default alerter (email to a single address)
$config['alerts']['alerter']['default']['descr'] = "Default Email Alert";
$config['alerts']['alerter']['default']['type'] = "email"; //通知类型email为默认
$config['alerts']['alerter']['default']['contact'] = "you@yourdomain.org"; //接收alert的信箱地址
$config['alerts']['alerter']['default']['enable'] = TRUE; //通知开启

2.4 建立observium所用的mysql数据库[转载请注明出处http://vtp.me]

mysql -u root -p
<mysql root password>
mysql> CREATE DATABASE observium;
mysql> GRANT ALL PRIVILEGES ON observium.* TO 'observium'@'localhost'
-> IDENTIFIED BY '<observium db password>';

2.5 为vestacp更改目录权限

假设我们还在/home/admin/web/status.abc.com/public_html目录下

chown -R admin:admin ../public_html/

2.6 更新config.php的设置

php includes/update/update.php

执行完应该看到一些内容,如果什么都没有就是不成功

2.7 建立RDDs目录

mkdir rrd
chown admin:admin rrd

2.8 更改vestaCP, vHost配置

vestaCP的Apache vHost配置目录在

/home/admin/conf/web/apache2.conf

找到域名绑定的observium登陆配置

<VirtualHost ip:8080>

ServerName status.abc.com
ServerAlias www.status.abc.com
ServerAdmin info@status.abc.com
DocumentRoot /home/admin/web/status.abc.com/public_html/html/ //这里要改成html
ScriptAlias /cgi-bin/ /home/admin/web/status.abc.com/cgi-bin/
Alias /vstats/ /home/admin/web/status.abc.com/stats/
Alias /error/ /home/admin/web/status.abc.com/document_errors/
#SuexecUserGroup admin admin
CustomLog /var/log/apache2/domains/status.abc.com.bytes bytes
CustomLog /var/log/apache2/domains/status.abc.com.log combined
ErrorLog /var/log/apache2/domains/status.abc.com.error.log

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory /home/admin/web/status.abc.com/public_html/html/>
AllowOverride All
Options +Includes -Indexes +ExecCGI
Order allow,deny
allow from all
Options FollowSymLinks MultiViews
</Directory>
<Directory /home/admin/web/status.abc.com/stats>
AllowOverride All
</Directory>

<IfModule mod_ruid2.c>
RMode config
RUidGid admin admin
RGroups www-data
</IfModule>
<IfModule itk.c>
AssignUserID admin admin
</IfModule>

Include /home/admin/conf/web/apache2.status.abc.com.conf*

</VirtualHost>

2.9 开启mod_rewrite

a2enmod rewrite
apache2ctl restart

2.10 添加observium管理员用户

回到 /home/admin/web/status.abc.com/public_html 目录,最高权限是level 10

./adduser.php <username> <password> <level>

2.11 添加被监控主机

./add_device.php <hostname> <community> v2c

官方这行命令是添加使用SNMPv2的客户端

稍后我们配置完SNMPv3,用observium的面板添加

注意这里<hostname>必须为一个主机名,不可为ip地址。请先在服务端的/etc/hosts中建立客户端主机名与ip的对应关系

2.12 添加服务器端与客户端snmp交互cron job[转载请注明出处http://vtp.me]

nano /etc/crontab

添加

33 */6 * * * root /home/admin/web/status.abc.com/public_html/discovery.php -h all >> /dev/null 2>&1
*/5 * * * * root /home/admin/web/status.abc.com/public_html/discovery.php -h new >> /dev/null 2>&1
*/5 * * * * root /home/admin/web/status.abc.com/public_html/poller-wrapper.py 1 >> /dev/null 2>&1

2.12.1 由于权限不同,这三行cron无法用vestacp中的cron执行。所以必须添加在/etc/crontab中以root身份执行

2.12.2 poller-wrapper.py 1为默认,代表同时可执行1个任务,性能好的主机可选用10个或者更多

2.12.3 cron job中的格式为 [Minute] [Hour] [Day] [Month] [Day of week] [user] [Command]

例如:33 */6 * * * root /home/admin/web/status.abc.com/public_html/discovery.php -h all >> /dev/null 2>&1

代表:[第33分钟] [每6个小时] [每天] [每个月] [每个星期的每一天] [以root的身份] [执行/home/admin/web/status.abc.com/public_html/discovery.php -h all >> /dev/null 2>&1]

也可临时在客户端执行以下来同步snmp信息

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

2.12.4  有关服务器端和客户端snmp的性能测试

Opcode cacher会把php编译成Opcode,当你访问网页的时候编译不会被打断。当php代码有变化的时候会自动重新编译。

apt-get install -y aptitude
aptitude install -y php5-xcache

CPU和I/O性能好的服务器端可以使用更高的poller-wrapper.py [num of processes]

3. 客户端SNMPv3的配置

apt-get install snmp snmpd

3.1 准备

无论是SNMPv2还是SNMPv3都是需要:

mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
nano /etc/snmp/snmpd.conf

中添加:

echo "com2sec readonly default 123456 //这个类似是一个密码 或者是识别码 用于SNMPv2的验证
group MyROGroup v1 readonly
group MyROGroup v2c readonly
group MyROGroup usm readonly
view all included .1 80
access MyROGroup "" any noauth exact all none none
syslocation <LOCATION> //客户端地理位置,例如洛杉矶可以为 Los Angeles 也可以写全为 Los Angeles, California
syscontact <CONTACT> //联系方式通常为信箱
#This line allows Observium to detect the host OS if the distro script is installed
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro " >> /etc/snmp/snmpd.conf

3.2 设置SNMPv2

此时你用2.11中的

./add_device.php <hostname> <community> v2c

已经可以把此客户端添加进observium了

3.3 设置SNMPv3

3.3.1 简化设置SNMPv3用户

我们可以用这个命令来简化设置net-snmp-config,在此之前请先终止snmp服务

service snmpd stop

格式为:

net-snmp-config [--cflags] [--agent-libs] [--libs] [--version]
... [see below for complete flag list]

例如: net-snmp-config --create-snmpv3-user -ro -A 123456 watcher

此时我们添加了一个用户名为watcher,验证方式为MD5,验证码为123456的账号, 权限authNoPriv

root@DS-CAT2:/etc/snmp# net-snmp-config --create-snmpv3-user -ro -A 123456 watcher
adding the following line to /var/lib/snmp/snmpd.conf:
createUser watcher MD5 "123456" DES
adding the following line to /usr/share/snmp/snmpd.conf:
rouser watcher

重启服务

service snmpd start

3.3.2 详细配置SNMPv3用户(未完待续) [转载请注明出处http://vtp.me]

3.3.2.1 SNMPv3用户分级

SNMP 版本3 (SNMPv3)提供了更安全的环境用来管理系统和网络。SNMPv3 Agent提供了3个等级的用户权限. 在USM MIB (RFC 2574)中三种安全等级如下:
noAuthNoPriv 通信无验证无隐私
authNoPriv - 通信有验证无隐私 验证加密方式为MD5和SHA
authPriv - 通信有验证有隐私 验证加密方式为MD5和SHA. DES用于隐私

3.3.2.2 MIB权限树

1.3.6.1.2.1.1 - SNMP MIB-2 System
1.3.6.1.2.1.2 - SNMP MIB-2 Interfaces
1.3.6.1.2.1.3 - at
1.3.6.1.2.1.4 - ip
1.3.6.1.2.1.5 - icmp
1.3.6.1.2.1.6 - tcp
1.3.6.1.2.1.7 - udp
1.3.6.1.2.1.1.1 - sysDescr
1.3.6.1.2.1.1.2 - sysObjectID
1.3.6.1.2.1.1.3 - sysUpTime
1.3.6.1.2.1.1.4 - sysContact
1.3.6.1.2.1.1.5 - sysName
1.3.6.1.2.1.1.6 - sysLocation
1.3.6.1.2.1.1.7 - sysServices

配置文件用户权限范例:

注意:我尝试过在/etc/default/snmpd中添加:

#=====================================
#Users Creation
createUser monitor SHA ***
createUser engineer MD5 ***
createUser supervisor MD5 *** DES ***
#Access features
rouser monitor noauth .1.3.6.1.2.1
rouser engineer auth .1.3.6.1.2.1
rwuser supervisor auth .1.3.6.1.2.1.1
rouser supervisor priv .1.3.6.1.2.1
#=====================================

可是返回:

no createUser no rouser指令不可用

配置解释:

- User1: monitor
Password: monitorpw (type SHA)
Access: Read Only (With NoAuth) to OID .1.3.6.1.2.1

- User2: engineer
Password: engineerpw (type(MD5)
Access: Read Only (With Auth) to OID .1.3.6.1.2.1

-User3: supervisor
Password: supervisorpw(type MD5)
Password PDU encryption: supervisorx (type DES)
Access: Read Write (With Auth ) to OID .1.3.6.1.2.1.1
Access: Read Only (With Auth and Encryp) to OID .1.3.6.1.2.1

3.3.3 测试SNMPv3用户 [转载请注明出处http://vtp.me]

在服务端上执行

snmpwalk -u watcher-A 123456 -a MD5 -l authnoPriv 1.1.1.1 -v3

替换1.1.1.1为远程客户端地址或者主机名

在客户端上执行请用localhost

并且测试本地161端口开启

netstat -anp | grep 161



参考资料:

http://www.observium.org/wiki/Performance_tuning

http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/mrtg/snmpd.conf.txt

http://xmodulo.com/2013/12/configure-snmpv3-ubuntu-centos-cisco.html

http://blog.tersmitten.nl/how-to-get-snmpv3-working-in-ubuntu-12-04.html

http://wmunguiam.blogspot.com.au/2009/07/howto-use-snmpv3-ubuntu.html

http://www.fineconnection.com/How_to_install_and_enable_SNMPv3_on_a_linux_system_for_authentication_en_encryption_testing

http://www.observium.org/wiki/NetSNMPd_Client_Configuration

http://www.observium.org/wiki/Debian_Ubuntu_Installation

http://www.observium.org/wiki/Performance_tuning

http://www.alvestrand.no/objectid/1.3.6.1.2.1.html