实现监控的方式:
SNMP
命令、脚本(remote script)
Cacti(php脚本)
强大的绘图引擎
将其他监控软件收集的数据通过图形的方式展示
时间序列数据的展示工具
Nagios
状态监控工具
监控的对象:
Fault Management故障管理
Configuration Management配置管理
Accounting Management统计管理
Performance Management性能管理
Security Management安全管理
SNMP----------Simple Network Management Protocol
161/UDP
协议版本:
SNMP v1
安全机制通过community实现
read-only
read-write
trap:被监控端向监控端主动发送状态数据的机制
SNMP v2
通过community实现安全机制
SNMP v3
SNMP内置Community
SNMP协议安装启动后,会有两个内置的community
public
private
MIB--------Management Information Base管理信息库
用于保存每一个可被监控对象的OID(Object ID)与名称的对应关系
标准MIB OID:
system 1.3.6.1.2.1.1
interfaces 1.3.6.1.2.1.2
at 1.3.6.1.2.1.3
ip 1.3.6.1.2.1.4
icmp 1.3.6.1.2.1.5
tcp 1.3.6.1.2.1.6
udp 1.3.6.1.2.1.7
egp 1.3.6.1.2.1.8
transmission 1.3.6.1.2.1.10
snmp 1.3.6.1.2.1.11
host 1.3.6.1.2.1.25
hrSystem
hrDevice
hrStorage
hrSWRun
hrSWRunPerf
hrSWInstalled
SNMP操作报文:
get 获取某一个特定OID的状态信息
getnext 获取指定节点的所有子节点的信息
getbulk 能获取更大范围的子节点的信息
set 向被监控节点发起控制指令
Linux中SNMP软件包
net-snmp(Agent端,被监控端)
net-snmp-utils(NMS,监控端)
/usr/share/snmp/mibs:
存放MIB库
# yum install -y net-snmp net-snmp-utils
# service snmpd start
正在启动 snmpd: [确定]
# chkconfig snmpd on
# netstat -unlp | grep snmpd
udp 0 0 0.0.0.0:161 0.0.0.0:* 26907/snmpd
获取本机状态信息
# snmpwalk -v 2c -c public localhost
获取指定对象的信息
# snmpwalk -v 2c -c public localhost SNMPv2-MIB::sysName.0
SNMPv2-MIB::sysName.0 = STRING: node1.bj.com
获取TCP相关的状态信息
1、查看tcp MIB库中的OID
# cat /usr/share/snmp/mibs/TCP-MIB.txt
2、编辑snmp主配置文件,添加view
# vim /etc/snmp/snmpd.conf
view systemview included .1.3.6.1.2.1.6
# /etc/init.d/snmpd restart
停止 snmpd: [确定]
正在启动 snmpd: [确定]
# snmpwalk -v 2c -c public localhost tcp
TCP-MIB::tcpRtoAlgorithm.0 = INTEGER: other(1)
TCP-MIB::tcpRtoMin.0 = INTEGER: 200 milliseconds
TCP-MIB::tcpRtoMax.0 = INTEGER: 120000 milliseconds
TCP-MIB::tcpMaxConn.0 = INTEGER: -1
TCP-MIB::tcpActiveOpens.0 = Counter32: 1
TCP-MIB::tcpPassiveOpens.0 = Counter32: 3
TCP-MIB::tcpAttemptFails.0 = Counter32: 0
TCP-MIB::tcpEstabResets.0 = Counter32: 0
TCP-MIB::tcpCurrEstab.0 = Gauge32: 1
TCP-MIB::tcpInSegs.0 = Counter32: 2304
定义新的community
# vim /etc/snmp/snmpd.conf
com2sec notConfigUser 127.0.0.1 mypublic
com2sec notConfigUser 10.1.1.0/24 mypublic
# /etc/init.d/snmpd restart
获取指定主机的tcp各状态连接的信息
# snmpnetstat -v 2c -c mypublic -Can -Cp tcp 10.1.1.1
Active Internet (tcp) Connections (including servers)
Proto Local Address Remote Address (state)
tcp *.22 *.* LISTEN
tcp *.111 *.* LISTEN
tcp *.60335 *.* LISTEN
tcp 10.1.1.1.22 10.1.1.100.51063 ESTABLISHED
tcp 127.0.0.1.25 *.* LISTEN
tcp 127.0.0.1.199 *.* LISTEN
tcp 127.0.0.1.631 *.* LISTEN
tcp 127.0.0.1.6010 *.* LISTEN
RRDTool------Round Robin Database Tool
将获取的状态信息数据根据一定的机制保存到rrd数据库文件中(以.rrd结尾),对这些数据进行处理后,绘图显示
PDP:Primary Data Point 主数据节点
RR数据库中用于保存获取的状态信息,用户不可见
RRA:Round Robin Archive
每n组PDP进行归档的操作
CDP: Consolidation Data Point 聚合节点
每n个PDP一组,对每组数据进行聚合运算(平均值、最大/小值等),运算的结果称为CDP
解析度:Resolution
时间跨度
rrd文件:
一个rrd文件中可以保存多个数据DS,可对每个DS进行聚合运算
DS:Data Source
创建空白rrd数据库文件
rrdtool create file_name [--start | -b start_time ] [--step | -s step ] [--no-overwrite] [DS:ds_name:DST:dst_arguments] [RRA:CF:cf_arguments]
--start | -b start_time(default : now---10s)
--step | -s step (default 300 seconds)
DS:ds_name:DST:dst_arguments
ds_name:
最长19个字符,[a-zA-Z0-9_]
DST:数据源类型
GAUGE:保存原始数据(PDP)
COUNT:保存相对上一个数据的值,必须是递增的,不允许接受负值
DERIVE:保存相对上一个数据的值,可增可减
ABSOLUTE:保存相对于初始值的值
例:
初始值为1,分别产生2 3 6 9四个数字
GAUGE: 2 3 6 9
COUNT: 1 1 3 3
DERIVE: 1 1 3 3
ABSOLUTE: 1 2 5 8
dst_arguments
heartbeat
例如指定每5秒钟接收数据,heartbeat用于指定5秒过后多长时间仍然接收 ;超过时间标记为UNKNOWN
min:定义每个时间槽上可接收的数值的最小值
max:定义每个时间槽上可接收的数值的最大值
U:表示无论任何数据都接收
RRA:CF:cf_arguments
RRA:AVERAGE | MIN | MAX | LAST:xff:steps:rows
xff: 指定PDP中可以有多大比例的UNKNOWN
steps: 指定对几个PDP进行聚合
rows: 保存多少个CDP(聚合后的结果)
示例:
创建test.rrd文件,每5秒产生随机数;分别保存每5秒,50秒,500秒的平均值
# rrdtool create test.rrd --step 5 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280 RRA:AVERAGE:0.5:10:3456 RRA:AVERAGE:0.5:100:1210
向rrd数据库文件中提供数据
rrdtool { update | updatev } file_name [--template | -t ds_name[:ds_name] ] [--]N| timestamp:value[:value]
--template | -t ds_name[:ds_name]: 如果rrd文件中有多个数据源,-t用于指定数据源的次序
示例:向test.rrd文件中指定数据
# rrdtool update test.rrd N:$RANDOM
#!/bin/bash
#
while true;do
rrdtool update /root/test.rrd N:$RANDOM
sleep 5
done
绘图
# rrdtool graph a.png -s 1455603485 DEF:vartest=/root/test.rrd:testds:AVERAGE:step=5 LINE1:vartest#ff0000:"testline"
cacti
rrdtool create
周期性执行能够取得数据的命令,并将取回的数据保存至rrd文件中
利用rrdtool绘图并显示
php网页程序
LAMP,LNMP
编译安装PHP需要启用--enable-sockets
插件机制
thold:为cati提供报警功能
模板机制:
图形模板
数据模板
主机模板
cacti安装配置
1、解压并重命名
# tar zxf cacti-0.8.8a.tar.gz -C /web/vhost/
# mv /web/vhost/cacti-0.8.8a/ /web/vhost/cacti
# /etc/init.d/httpd restart
停止 httpd: [确定]
正在启动 httpd: [确定]
2、为cacti准备数据库
# mysql -e 'CREATE DATABASE cactidb'
# mysql -u root cactidb < /web/vhost/cacti/cacti.sql
# mysql -e "GRANT ALL ON cactidb.* TO 'cactiuser'@'localhost' IDENTIFIED BY 'redhat'"
# mysql -e "FLUSH PRIVILEGES"
3、编辑cacti配置文件,指定mysql名称及访问路径
# vim /web/vhost/cacti/include/config.php
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "redhat";
$database_port = "3306";
$database_ssl = false;
$url_path = "/";
4、创建cactiuser用户,并把cacti目录下的log及rra的所属修改为cactiuser
# useradd cactiuser
# chown -R cactiuser.cactiuser /web/vhost/cacti/log /web/vhost/cacti/rra
在浏览器中访问http://cacti.bj.com进入cacti安装界面
进入cacti页面的默认用户名、密码分别为admin
cacti页面工具:
1、数据收集方法
Collection Methods
数据查询
事先定义好的xml格式的数据收集方法
数据输入方法
命令或者脚本
脚本:
只需要指定如何获取数据,并且获取到的数据经过处理后按照规定的格式输出
TAG:data TAG:data
input:30 output:40
由poller.php负责周期性执行获取数据的脚本,对于大规模主机的监控,应使用spine替换poller
# echo '*/5 * * * * /usr/bin/php /web/vhost/cacti/poller.php &> /dev/null' > /var/spool/cron/cactiuser
手动执行此脚本,会发现有时区相关的报错,按照报错信息将Php的时区修改一致
# vim /etc/php.ini
date.timezone = Asia/Chongqing
# /etc/init.d/httpd restart
再此执行此脚本,无此错误
cacti插件
cacti插件体系能够让程序员在不改变cacti核心代码的情况下为cacti开发附加功能,并且能够在不影响cacti运行的前提下为其添加安全补丁,而且也能够让终端用户为cacti添加其需要但cacti核心缺失的功能
插件特性:
增强的用户接口
访问cacti数据库
管理RRD文件
增进的缓存和增强的性能
附加的新功能,如统计报告、日志和阈值监控等
常见的插件:
MAC Track插件------用于记录设备接口相关的MAC、IP等信息
Network WeatherMap ---- 用于在cacti中创建网络设备间连接关系图,并能在图像中简单展现其性能指标
Thold------ 阈值监控功能,并可实现通知功能