一、工作原理
管理服务器(nms)通过一种协议监控远程被监控主机状态,并将返回结果统计分析。并且可以通过设置阈值来通知管理员告警信息的软件系统,就称为监控系统。
常见的通信方式:
SNMP协议通信
command,命令方式
remote script(ssh)
二、常见工具
cacti
强大的绘图展示工具,它通过RRDtool来统计数据。它以时间轴为基准进行统计和展示。
nagios
监控系统状态、通知机制。
三、SNMP
1、版本介绍
snmp-v1版本:
nms通过snmp和被监控端进行通信,他们之间通过“社区(comminuty)“进行安全认证,这种认证是明文的,只需要在客户端设置comminuty为一个相同的字符串即可。
comminuty的工作方式有readonly(nms只能获取信息),read-write(NMS可以修改查询请求),trap(陷阱模式,被监控端可以主动发送告警信息)。
snmp-v2版本(snmpv2c)
区别不大,功能做了一些强化。
snmp-v3版本:
增强了认证机制,但是使用率上同样是v1版本。
2、centos服务器SNMP程序:
net-snmp(agent):被监控端程序
net-snmp-utils(nms):监控端程序
注意:如果nms端要启动trap工作模式,就需要安装net-snmp程序,并且启动snmptrapd服务。
[root@node6.dtedu.com /etc/puppetlabs/puppet]# yum install net-snmp net-snmp-utils
配置文件:
[root@node6.dtedu.com /etc/puppetlabs/puppet]# rpm -ql net-snmp
/etc/rc.d/init.d/snmpd
/etc/rc.d/init.d/snmptrapd
/etc/snmp
/etc/snmp/snmpd.conf agent配置文件
/etc/snmp/snmptrapd.conf
/etc/sysconfig/snmpd agent配置文件
/etc/sysconfig/snmptrapd trap配置文件
3、MIBS
SNMP的管理信息库。此数据库有些类似树状结构,依据被被监控对象分层细化标识名称(像域名结构),这种结构的使用,也有一个类似FQDN的名称,就是OID。
通常所有监控软件都会提供一个最基本的MIB库,就是MIB-II。
[root@node6.dtedu.com /etc/puppetlabs/puppet]# ls /usr/share/snmp/mibs/
AGENTX-MIB.txt IPV6-TC.txt SNMP-FRAMEWORK-MIB.txt
BRIDGE-MIB.txt IPV6-UDP-MIB.txt SNMP-MPD-MIB.txt
COROSYNC-MIB.txt KEEPALIVED-MIB.txt SNMP-NOTIFICATION-MIB.txt
DISMAN-EVENT-MIB.txt LM-SENSORS-MIB.txt SNMP-PROXY-MIB.txt
DISMAN-SCHEDULE-MIB.txt MTA-MIB.txt SNMP-TARGET-MIB.txt
DISMAN-SCRIPT-MIB.txt NET-SNMP-AGENT-MIB.txt SNMP-USER-BASED-SM-MIB.txt
EtherLike-MIB.txt NET-SNMP-EXAMPLES-MIB.txt SNMP-USM-AES-MIB.txt
HCNUM-TC.txt NET-SNMP-EXTEND-MIB.txt SNMP-USM-DH-OBJECTS-MIB.txt
HOST-RESOURCES-MIB.txt NET-SNMP-MIB.txt SNMPv2-CONF.txt
HOST-RESOURCES-TYPES.txt NET-SNMP-PASS-MIB.txt SNMPv2-MIB.txt
IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt NET-SNMP-TC.txt SNMPv2-SMI.txt
IANAifType-MIB.txt NET-SNMP-VACM-MIB.txt SNMPv2-TC.txt
IANA-LANGUAGE-MIB.txt NETWORK-SERVICES-MIB.txt SNMPv2-TM.txt
IANA-RTPROTO-MIB.txt NOTIFICATION-LOG-MIB.txt SNMP-VIEW-BASED-ACM-MIB.txt
IF-INVERTED-STACK-MIB.txt PCMK-MIB.txt TCP-MIB.txt
IF-MIB.txt RFC1155-SMI.txt TRANSPORT-ADDRESS-MIB.txt
INET-ADDRESS-MIB.txt RFC1213-MIB.txt UCD-DEMO-MIB.txt
IP-FORWARD-MIB.txt RFC-1215.txt UCD-DISKIO-MIB.txt
IP-MIB.txt RMON-MIB.txt UCD-DLMOD-MIB.txt
IPV6-ICMP-MIB.txt SCTP-MIB.txt UCD-IPFWACC-MIB.txt
IPV6-MIB.txt SMUX-MIB.txt UCD-SNMP-MIB.txt
IPV6-TCP-MIB.txt SNMP-COMMUNITY-MIB.txt UDP-MIB.txt
MIB下面的常用监控主机选项:
host:OID:1.3.6.1.2.1.25
hrsystem:主机系统状态信息,1
hrstorage:主机存储信息,2
hrdevice:主机设备信息,3
hrswrun:4,
hrswrunperf:主机性能信息,5
hrswinstalled:主机已安装软件,6
[root@node6.dtedu.com /etc/puppetlabs/puppet]# snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.25.1
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (33931409) 3 days, 22:15:14.09
HOST-RESOURCES-MIB::hrSystemUptime.0 = No more variables left in this MIB View (It is past the end of the MIB tree)
[root@node6.dtedu.com /etc/puppetlabs/puppet]#
4、基本配置
被监控端监控端口:UDP161
监控端端口:UDP 162(仅在使用trap模式时使用)
SNMP的操作
get:获取OID信息
getnext:获取指定节点下的所有OID信息
getbulk:v2或v3版本用
set:
getresponse:获取响应报文
trap:
notification
inform:
report:
修改配置文件的安全属性,comminuty。
#com2sec notConfigUser default public
com2sec notConfigUser 127.0.0.1 mypublic
com2sec notConfigUser 10.40.0 mypublic
四、RRDtool
轮转数据库,用于收集并存储snmp被监控端信息。以rrd文件名结尾。需要编译安装rrdtool工具。
实例:
每个5秒钟生成一个随机数,并查看每5秒的平均值,50秒的平均值。并存储一天的统计信息。
24h*60*60=86400,86400/5=17280,表示存储在rrd数据库中的分区个数。
命令格式:
rrdtool create filename [—start|-b start time] [—step|-s step] [—no-overwrite] [DS:] [RRA:CF:cf arguments]
五、CACTI
1、简介:
将rrdtool通过命令行方式实现的数据统计制图工具,通过简单的窗口方式实现的工具。
支持模板工具,简化管理及编写脚本工作。
运行lnmp的前提是需要lnmp平台,并且php需要启用 --enable-sockets。
2、模板类型
图形模板:通过数据模板制作图形文件。
数据模板:用来定义cacti服务器从被监控主机上获取的数据的保存格式。
主机模板
3、安装
安装教程使用的0.8.8a,适用于yum安装的mysql5.1,这里我就图省事了。
首先是解压缩cacti.0.8.8a软件包,并复制到/var/www/html/cacti目录下。
修改httpd.conf的配置文件及创建cacti数据库,及相关账户。(用1.1.7相同)
修改cacti的配置文件/var/www/html/cacti/include/conf.php文件,将mysql相关信息添加进去。
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "123123";
$database_port = "3306";
$database_ssl = false;
$url_path = "/“; 修改url访问路径
注意:poller.php脚本用于实现定期执行收集数据的工作的,但是他适用于单线程工作,如果是多线程工作方式需要使用spine进行替换。
为cacti制作周期性计划:
[root@node6.dtedu.com /var/www/html/cacti]# echo '*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &>/dev/null' >/var/spool/cron/cactiuser
可以通过登录cactiuser来验证计划执行情况,这个时候会有错误的,也就是需要配置php.ini文件修改时区了。重启mysql、php-fpm、httpd服务。
date.timezone = Asia/Shanghai
以下适用于通过yum安装cacti,并且版本为1.1.7。要求mysql使用5.6及以上版本。步骤是yum安装lamp平台,修改httpd.conf配置文件创建虚机主机(关闭documentroot)。创建mysql数据库cacti,并导入cacti.sql文件。
<virtualhost *:80>
servername cacti.dtedu.com
documentroot /var/www/html/cacti/
<directory "/var/www/html/cacti/">
options indexes
allowoverride none
Order allow,deny
Allow from all
directoryindex index.php
#require all granted
</directory>
errorlog "/var/log/cacti/error.log"
customlog "/var/log/cacti/access.log" common
</virtualhost>
addtype application/x-httpd-php .php
addtype application/x-httpd-php-source .phps
directoryindex inex.php
[root@node6.dtedu.com ~]# rpm -ql cacti |grep .sql
/usr/share/doc/cacti-1.1.7/cacti.sql
/usr/share/doc/cacti-1.1.7/docs/html/check-mysql-updating.html
/usr/share/doc/cacti-1.1.7/docs/html/unix-configure-mysql.html
/var/lib/cacti/cli/sqltable_to_php.php
/var/lib/cacti/scripts/sql.php
/var/lib/cacti/scripts/ss_sql.php
[root@node6.dtedu.com ~]# mysql cacti < /usr/share/doc/cacti-1.1.7/cacti.sql
[root@node6.dtedu.com ~]#
[root@node6.dtedu.com ~]# mysql -e " GRANT all ON cacti.* TO cactiuser@localhost IDENTIFIED BY '123123' "
[root@node6.dtedu.com ~]# mysqladmin flush-privileges
[root@node6.dtedu.com ~]# mysql -u cactiuser
ERROR 1045 (28000): Access denied for user 'cactiuser'@'localhost' (using password: NO)
[root@node6.dtedu.com ~]# mysql -u cactiuser -p
Enter password:
[root@node6.dtedu.com ~]# vim /etc/cacti/db.php
<?php
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = '123123';
$database_port = '3306';
$database_ssl = false;
$url_path = '/‘; 表示直接通过”/“来访问,根据需要设置。
修改log 和rra目录的属主和属组改成cactiuser。
[root@node6.dtedu.com /var/www/html/cacti]# chown cactiuser:cactiuser /var/www/html/cacti/{log,rra} -R
修改device选项卡的SNMP选项,并保证/etc/snmp/snmpd.conf的comminuty和其相同。
模板也可以通过cacti的官网论坛下载。
http://forums.cacti.net/viewforum.php?f=12&sid=ca55172419984bfeef1e79a0fb559b2f
established:0[root@node6.dtedu.com /var/www/html/cacti]# vim scripts/enstablished.sh
#!/bin/bash
#total localhost established
# $1:hostname or IP
# $2:community
SNMPNETSTAT=/usr/bin/snmpnetstat
established=`$SNMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1 |grep -i 'established' |wc -l`
echo -n "established:$established"