Mrtg网络监控和Shell邮件报警
linux网络博客
http://www.haiyun.me/category/security/
Snmp网络管理协议
1.网络管理概念
2.网络管理组成
3.网络管理协议
snmpv1比较流行, snmpv2, snmpv3
轮循和中断
snmp服务器开启161端口
基于udp协议
trap报文使用162端口
共同体名,community,也就是口令,密码
只读口令
读写口令
sitescope
netview
mrtg
cacti
solarwinds
whatsup
被监控的服务器上必须安装开启snmp协议的软件
然后被这些监控软件监控
windows里面
安装windows组件
管理和监控工具
wmi snmp提供程序
简单网络管理协议
linux里面每个节点, 文件,内存,目录,cpu,disk,都有个OID,objecid
监控软件就监视这些oid
4.snmp常用操作
安装snmp
rpm -qa | grep net-snmp*
yum -y install net-snmp*
配置文件
这个文件很长,我们自己写一个简单的
vi /etc/snmp/snmpd.conf
#这里设置口令,允许所有计算机来访问,只要是使用public,到达192.168.10.1
recommunity public 192.168.10.1
#如果要监控硬盘,必须写上,/表示根分区, /boot是boot分区
#数值要使用df -k命令查找
#在vi编辑器里面 :! df -k可以直接查看,而不需要退出
#这个值用来计算百分比
disk / 17965420
disk /boot 101086
启动
service snmpd restart
chkconfig snmpd on
pstree |grep snmp
netstat -tunpl | grep :161
Linux服务器SNMP常用OID
服务器负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
CPU信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
系统运行时间:
.1.3.6.1.2.1.1.3.0
SNMP System Group:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
sysLocation 1.3.6.1.2.1.1.6
sysServices 1.3.6.1.2.1.1.7
SNMP TCP Group:
tcpCurrEstab 1.3.6.1.2.1.6.9.0
应用示例:
首先用linux命令观察各种信息
uptime 查看服务器负载,1分钟,5分钟,15分钟
top 命令查看cpu 使用率
ps -ef |wc -l 统计进程数
netstatus -tun 查看当前在线连接数, established
free -k 查看内存使用率
df 硬盘空间
查看系统所有oid以及其名称
snmpwalk -v1 -cpublic localhost -m all
查看oid描述
snmptranslate -Td .1.3.6.1.4.1.2021.9.1.8.1
单个oid查看
snmptranslate -T1 .1.3.6.1.4.1.2021.9.1.8.1
查看整个oid全称
snmptranslate -Of .1.3.6.1.4.1.2021.9.1.8.1
查看oid的名称和值,是snmpwalk -v1的一部分
snmpget -v1 -cpublic localhost .1.3.6.1.4.1.2021.9.1.8.1
****************************************************
Mrtg系统监控
0 snmp调试已完成
1.安装Mrtg
rpm -qa | grep mrtg*
yum -y install mrtg*
2.修改mrtg配置文件
vi /etc/mrtg.cfg
#文件都生成到哪个路径下
HtmlDir: /var/www/mrtg
ImageDir: /var/www/mrtg
LogDir:/ var/lib/mrtg
ThreshDir: /var/lib/mrtg
#网卡
#监控网卡服务器localhost通过public口令监控/192.168.10.1
Target[eth0]: /192.168.10.1:public@localhost:
#右对齐
Options[eth0]: growright
#统一放入一个目录下/var/www/mrtg/eth0/
Directory[eth0]: eth0
#网卡最大流量100M
MaxBytes[eth0]: 100000000
#Y轴上单位
Kmg[eth0]: K,M,G
YLegend[eth0]: Bytes per Second
ShortLegend[eth0]: B/s
Legend1[eth0]: 每秒流入量 单位Bytes
Legend2[eth0]: 每秒流出量 单位Bytes
LegendI[eth0]: 流入:
LegendO[eth0]:流出:
Title[eth0]: eht0网络流量[流入+流出]
PageTop[eth0]: eth0网络流量[流入+流出]
#CPU
#CPU的OID
Target[cpu]: .1.3.6.1.4.2021.11.50.0&.1.3.6.1.4.2021.11.53.0:public@localhost:
Options[cpu]: nopercent,growright
#统一放入一个目录下/var/www/mrtg/cpu/
Directory[cpu]: cpu
#最大100%
MaxBytes[cpu]: 100
Unscaled[cpu]: dwym
YLegend[cpu]: CPU Utilization
ShortLegend[cpu]: %
Legend1[cpu]: CPU用户负载%
Legend2[cpu]: CPU闲置%
LegendI[cpu]: 用户:
LegendO[cpu]:闲置:
Title[cpu]: CPU负载[用户+闲置]
PageTop[cpu]: CPU负载[用户+闲置]
#内存
Target[memory]: .1.3.6.1.2.1.25.2.3.1.6.2&.1.3.6.1.2.1.25.2.3.1.6.3:public@localhost:
Options[memory]: gauge,growright
#统一放入一个目录下/var/www/mrtg/mem/
Directory[memory]: mem
#最大的Mem和Swap大小,通过free -k查看
MaxBytes1[memory]: 255412
MaxBytes2[memory]: 524280
Kmg[memory]: K,M,G
Kilo[memory]: 1024
Unscaled[memory]: dwym
YLegend[memory]: Mem Bytes
ShortLegend[memory]: B
Legend1[memory]: 已用Mem Bytes
Legend2[memory]: 已用Swap Bytes
LegendI[memory]: 已用Mem:
LegendO[memory]:已用Swap:
Title[memory]: 内存使用量[Mem+Swap]
PageTop[memory]: 内存使用量[Mem+Swap]
#硬盘[系统盘+数据盘]
Target[disk]: .1.3.6.1.4.1.2021.9.1.8.1&.1.3.6.1.4.1.2021.9.1.8.2:public@localhost:
Options[disk]: gauge,growright
#统一放入一个目录下/var/www/mrtg/disk/
Directory[disk]: disk
#最大的根分区和boot分区大小,通过df -k查看
MaxBytes1[disk]: 19679908
MaxBytes2[disk]: 101086
Kmg[disk]: K,M,G
Kilo[disk]: 1024
Unscaled[disk]: dwym
YLegend[disk]: Disk Bytes
ShortLegend[disk]: B
Legend1[disk]: 系统盘已用空间
Legend2[disk]: 数据盘已用空间
LegendI[disk]: 系统已用:
LegendO[disk]:数据已用:
Title[disk]: 硬盘空间[系统盘+数据盘]
PageTop[disk]: 硬盘空间[系统盘+数据盘]
3.根据配置文件生成图
图片有每天,每周,每月,每年这4幅
还能和昨天的记录做对比
cron轮循生成监控图片文件
每5分钟做一次图片生成
cd /etc/cron.d
放在这个目下的脚本会自动被crontab执行
比如这里就有个mrtg文件
vi mrtg
*/2 * * * * root LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
每隔两分钟root用户执行后面的指令,加载配置文件
我们干脆直接运行下列命令,生成图片到以上配置好的路径
LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok
需要运行3次,直到没有警告
之后会自动每两分钟运行
cd /var/www/mrtg/
可以看到disk,cpu,memory,eth0等子目录
里面有图片
4.生成首页index.html
cd /var/www/mrtg/
indexmaker --output /var/www/mrtg/index.html --title="Web Test" /etc/mrtg/mrtg.cfg
在当前页面下生成了index文件
发布到apache下
cd /etc/httpd/conf.d
vi mrtg.conf
复制内容到apache的配置文件,创建虚拟目录
Alias /mrtg /var/www/mrtg
<Location /mrtg>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
# Allow from .exmple.com
</Location>
粘贴到
vi /usr/local/apache2/etc/httpd.conf
Alias /mrtg /var/www/mrtg
<Location /var/www/mrtg>
Options indexes
AllowOverride Node
Order deny,allow
Deny from all
Allow from all
</Location>
也可以直接在文件中找一段Directory,复制后修改
/usr/local/apache2/bin/apachetl restart
netstat -tunpl |grep :80
访问
192168.10.1/mrtg
编码有问题的时候
在html中加入<meta>标签,指定浏览器推荐编码为urf8
Postfix邮件和Shell报警脚本
*************************************************
常见的预定义变量:
预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,
用户只能根据shell的定义来使用这些变量,而不能重定义它。
所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
$$:当前进程的进程号
$0:当前执行的进程名
$n, n为1~9之间的数字
表示执行脚本时的参数位置
echo $0 $$
bash 5887
echo $? 返回0表示上一个命令执行正确,非0表示错误
*************************************************
1.postfix邮件服务器安装和配置
使用postfix而不是sendmail
发邮件,25, smtp, postfix
收邮件,110, pop3, docecot
linux邮件服务器
安装 postfix, docecot
同一个服务器上只能有同一个邮件服务器
所有先要关闭sendmail
rpm -qa sendmail *
rpm -e sendmail-8.13.1.-2
或者
pstree |grep sendmail
service sendmail stop
chkconfig sendmail off
pstree |grep sendmail
安装
yum -y install postfix*
yum -y install dovecot*
配置
cd /etc/postfix/
vi main.cf
myhostname=mail.g.cn
mydomain=g.cn
#发件人后缀
myorigin=myhostname
myorigin=$mydomain
#所有接口监听,允许其它主机通过它发邮件
inet_interfaces=all
#收邮件后缀
mydestination=$myhostname, $mydomain
#服务器网段
mynetworks=192.168.10.0/24, 127.0.0.0/8
#启动服务,允许转发
relay_domains=$mydestination
启动
service postfix restart
pstree | grep master
netstat -tunpl |grep 25
chkconfig postfix on
修改计算机默认邮件服务器
alternatives --config mta
选择postfix
2.dovecot pop3服务器
vi /etc/dovecot.conf
#开放110,pop3
protocols=imap imaps pop3 pop3s
service dovecot restart
chkconfig dovecot on
!net
3 测试邮件收发
首先创建两个linux用户
默认会自带邮箱
useradd user1
passwd user1
useradd user2
passwd user2
自带邮箱分别为
[email protected]
[email protected]
在outlook中注册这两个用户
互相发送邮件
linux里面发邮件方式
1 telnet
telnet 192.168.10.1 25
mail from:
[email protected]
rcpt to:
[email protected]
data
hi user1
.
quit
user1回信后
mail 命令可以看到所有root用户下的邮件
测试脚本发邮件
vi disk.sh
#!/bin/bash
#disk.sh
#把管道前的输出作为管道后的输入
#这里就把内容传给了后面mail的邮件正文
echo "shell..." | mail
[email protected] -s "subject test"
chmod a+x disk.sh
./disk.sh
收到邮件
4.磁盘空间报警脚本
touch disk.sh
chmod a+x disk.sh apache.sh mysql.sh
超过22%报警
awk编程用于取得linux输出文本的行列单元格的文本
df | awk 'NR==3{print $4}'
这句话就是df命令运行后,取出第三行第四列的文本内容
得到的是20%,就是根目录的Use%
还可以转整形,去掉%
df | awk 'NR==3{print int($4)}'
得到20
vi disk.sh
#!/bin/bash
#disk.sh
#使用反撇号执行shell指令
num=`df | awk 'NR==3{print int($4)}'`
if [$num -gt 22]
then
echo "disk space ${num} is more than 22%..." | mail
[email protected] -s "disk test"
fi
使用无限大的空间/dev/zero中取得一块空间给test.txt
一块数据1M,总共1000块,就是1G的空间给test.txt
dd if=/dev/zero of=test.txt bs=1M count=1000
这样使磁盘空间大于22%
./desk.sh
收到邮件
*******************************************
DD作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
1.将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份磁盘开始的512个字节大小的MBR信息到指定文件
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
dd if=/root/image of=/dev/hda
7.备份软盘
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
(即块大小为1.44M)
8.拷贝内存内容到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
(指定块大小为1k)
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
dd if=/dev/cdrom(hdc) of=/root/cd.iso
11.销毁磁盘数据
dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度
/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着
禁止标准输出. cat $filename >/dev/null --文件内容丢失,而不会输出到标准输出.
禁止标准错误 rm $badname 2>/dev/null --这样错误信息[标准错误]就被丢到太平洋去了.
禁止标准输出和标准错误的输出. 1 cat $filename 2>/dev/null >/dev/null
*******************************************
4.apache报警脚本
touch apache.sh
使用nc命令测试
可以设置登陆时间
netstat -tunpl |grep :80
穿入80端口访问2秒后自动退出,若没有开放直接退出
nc -w2 localhost 80
使用$?测试上一条nc命令是否运行成功,成功返回0,失败返回非0
echo $?
vi apache.sh
#!/bin/bash
#apache.sh
nc -w2 localhost 80
if [$? -ne 0]
then
echo "apache server is down..." | mail
[email protected] -s "apache test"
#server httpd restart
/usr/local/apache2/bin/apachectl restart
fi
/usr/local/apache2/bin/apachectl stop
./apache.sh
收到邮件
5.mysql报警脚本
touch mysql.sh
netstat -tunpl |grep :3306
vi mysql.sh
#!/bin/bash
#mysql.sh
nc -w2 localhost 3306
if [$? -ne 0]
then
echo "mysql server is down..." | mail
[email protected] -s "mysql test"
#server mysqld restart
/usr/local/mysql/bin/mysql_safe --user=mysql &
fi
pkill mysqld
./mysql.sh
收到邮件
计算机自动每5分钟执行3个脚本
crontab -e
*/5 * * * * /root/disk.sh
*/5 * * * * /root/apache.sh
*/5 * * * * /root/mysql.sh
保存
cronttab -l 查看