cacti 仅仅只是个绘图引擎监控,时间序列数据
nagios 是主要状态监控,主要服务,是否发生状态转换
snmp:简单到只要发几条命令,就可以获取到信息
SNMPv1 : 所有安全机制主要基于communities 来实现
那这里有三种communities 分别是read-ONLY;read-write;trap
那来简单看下SNMP 到底是
怎样工作的
首先在服务器段也就是监控端有成为
NMS(网络管理工作站) 那他会给管理员提供一个命令行借口,可以发送SNMP操作指令,到任何一个被监控端
被监控端怎样能接受监控端发来的指令呢?那就要在我们的被监控端装一个服务器进程,这个进程主要就是来接收监控端所发来的查询请求,并能解析对方的查询请求,并把对方所请求的信息返回对对方。因此我们称之为
Agent
那如果任何一个人都向我们的被监控端发送一个请求信息,那么我们的隐秘性是不是就没了。所以双方这里就引入了
communities,双方是怎么建立通信的,就是说双方在建立通信前,大家都属于一个团伙。
那现在communities的名字就叫aaa那我服务端向你被监控端发送数据时就告诉你我叫aaa,如果认可就返回所要的数据,
所以社区的名字就是双发所用到的认证密码。是不是够简单的。
这就是我们的SNMP
那刚才我们提到的communities 有三种:
read-ONLY : 就是只读 只能读取被监控端的一些信息
read-write : 那就是可以具体操作被监控端,比如关机,
trap : 这里主要是指被监控端主动去联系监控端的,给你发送个短信,或邮件。
SNMPv2: 在功能上强化,
SNMPv3 : 增强上其认证机制,在数据传输上也增强了其安全性。
但现在还是SNMPv1 版用的多
MIB:
为了全球确定唯一确定的被监控对象,他创建了一个倒状树状图。
在监控端和被监控端是如何通信的
那我们是用snmp 协议进行通讯的,snmp又是建立在UDP上的,那么正常情况下我们那个服务被动打开端口,就是被监控端就要打开端口udp161
那么一旦被监控端发生问题,就会发送trap命令,那么监控端也要打开一个udp162端口。(只有双方要用到trap功能时监控端才要打开162端口,否则是不需要的)
对于snmp主机都有两个内置的communities它会自动的启用 一个叫public (read-ONLY)另一个叫private(read-write)
那么对于任何一 个被监控主机都有这两个communities,一旦我们启用snmp服务,对方向我们这里public发起请求,使用密码public就可以获取我们的信息了。那么这就有个潜在的风险。如果你不该那别人拿过来就可以访问。所以有些时候为了安全期间,很多主机就把private默认禁用的只留下public。
在linux上有两个snmp包
net-snmp (agent)
net-snmp-utils (NMS:commond)
获取对方主机的信息
[root@g snmp]# snmpnetstat -v 2c -c mypublic -Can -Cp tcp localhost
Active Internet (tcp) Connections (including servers)
Proto Local Address Remote Address (state)
tcp *.22 *.* LISTEN
tcp *.25 *.* LISTEN
tcp *.111 *.* LISTEN
tcp *.798 *.* LISTEN
tcp *.3306 *.* LISTEN
tcp 127.0.0.1.199 *.* LISTEN
tcp 192.168.10.3.22 192.168.10.13.49272 ESTABLISHED
[root@g snmp]#
记录下的数据保存在哪呢
RRDTool:(Round Robin database)轮转数据库
那不是每个就把数据直接存到这个数据库中,而是经过一定的运算处理
比如经过5分钟收集一次数据
那收集到的数据放到数据库的临时空间内,叫做PDP(主数据节点)
PDP取得后还要做聚合计算,比如每两个取平均值(CDP)再两个平均(CDP),那么我们最后把总共所取得的平均值拿出来就叫做(RRA),这才是最终保存到时间槽中的数据
接下来创作RRD数据库:
看一个项目实例,现在要每隔5S钟取一个随机数;
5S ,生成一个随机数-》
5S
50S
500S
我们要看一下一天的数据,一天是86400S 那就除以5就ok。
创建一个初始化的数据库语法:
rrdtool create :
那现在来看一下:保存的数据格式
有GAUGE COMPUTE DERIVE ABSOLUTE
那现在初始值为0
2 3 9 9
GAUGE: 2 3 6 9
COMPUTE: 2 1 3 3 (保存上一个增长的数)
DERIVE : 2 1 3 3 (可以接受负值,不如将开始只改为 2 6 3 9 compute 就傻了。)
ABSOLUTE : 2 3 6 9 (如果初始编程1 则为 1 2 5 8)
看下面的例子
[root@g ~]# cd /usr/local/rrdtool-1.2.27/bin/
[root@g bin]# ./rrdtool create test.rrd --step 6 DS:testds:GAUGE:8:0:U RRA:AVERAGE:0.5:1:17280 RRA:AVERAGE:0.5:10:3456 RRA:AVERAGE:0.5:100:1210
[root@g bin]#
[root@g bin]#
[root@g bin]# ll
总计 428
-rwxr-xr-x 1 root root 56506 08-09 13:16 rrdcgi
-rwxr-xr-x 1 root root 6949 08-09 13:16 rrdtool
-rwxr-xr-x 1 root root 177238 08-09 13:16 rrdupdate
-rw-r--r-- 1 root root 176568 08-09 13:22 test.rrd
[root@g bin]# ll -h
查看10S有没有取到数据
[root@g bin]# ./rrdtool fetch --r 10 test.rrd AVERAGE
那我们在这里写一个脚本让
它每5S取一次数据
:
[root@g bin]# cat genval.sh
#!/bin/bash
#
while true; do
./rrdtool update test.rrd N:$RANDOM
sleep 5
done
[root@g bin]#
rrdtool的绘图命令
-s(start time) -e (end time) --step (解析度) -t (制定title) -v (竖向标签)
-w (宽度) -h (高度) -D (自动缩放)
-u(上限) -l (下限)
[root@g bin]# ./rrdtool graph a.png --step 5 -s 1376027238 -t Test -v vtest DEF:vtest=test.rrd:testds:AVERAGE LINE1:vtest#ff0000:testline
497x179
那接下来就该cacti 来发挥作用了
:
:RRdtool create
:周期性执性能够取得数据的命令,并将取回的数据保存到rrd文件中。
:利用rrdtool绘图并展示
:实际上cacti就是一个用php开发的网页程序
:LAMP,LNMP
:所以编译安装的上面这些必须要指定一个--enable-sockets
支持模板的导入导出:图形模板,数据模板,主机模板
支持插件:thold (报警机制)
那cacti怎么获取数据呢??
通常有以下几种
脚本,SNMP,ssh
cacti中
Collection Methods 数据收集方法
数据查新 : 一些事先定义好的xml格式数据收集方法
数据输入方法: 命令或脚本
脚本: 只需指定如何获取数据,并且获取到的数据经过处理后要按规定输出:TAG: data TAG:data
比如说网卡: input:30 output:40
把数据收集方法结合数据模板一定以到某个主机上,就可以进行构图了。
那接下来我们看一下,如何自己去创建数据收集方法,并将其做成数据模板,给其提供图形模板,并最终应用到主机上,形成某种要求。
在写脚本的时候,通常要求要用标签加数据格式的形式输出;
[root@g ~]# cat snmpconn.sh
#!/bin/bash
#$1 hostname or ip
#$2 communicate
SNMPNETSTAT=`/usr/bin/snmpnetstat -v 2c -c $2 -Can -Cp tcp $1 | grep -i "established" | wc -l`
echo -n "established:$SNMPNETSTAT"