1.系统环境
采用LNMP架构(本案例中不予安装过程的说明,重点讲Cacti)作为Cacti运行的PHP环境,RedHat 5.8 32位操作系统。
本案例中采用Cacti版本是0.8.8a,截至发稿前的最新版,英文原版。
2.snmp安装
SNMP有两种方法,一种是yum,还有一种是采用源代码的编译安装。
(1)yum安装
- yum -y install net-snmp-devel net-snmp-libs net-snmp
执行上面的命令即可安装完毕。
(2)源代码的安装
重点讲下源代码的安装,采用官方最新版。
- wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.1/net-snmp-5.7.1.tar.gz
- tar zxf net-snmp-5.7.1.tar.gz
- cd net-snmp-5.7.1
- ./configure \
- --prefix=/usr/local/snmp \
- --enable-mfd-rewrites \
- --with-default-snmp-version="2" \
- --with-sys-contact="Luxiaok,E_mail:[email protected]" \
- --with-sys-location="China" \
- --with-logfile="/usr/local/snmp/var/log/snmpd.log" \
- --with-persistent-directory="/usr/local/snmp/var/snmp" \
- --sysconfdir=/usr/local/snmp/etc \
- --with-mib-modules=ucd-snmp/diskio
- make && make install
编译参数说明
prefix:net-snmp的安装路径
enable-mfd-rewrites:允许用新的MFD重写可用的mid模块
with-default-snmp-version:默认的SNMP版本
with-sys-contact:可以配置该设备的联系人
with-sys-location:该设备的位置
with-logfile:日志文件路径
with-persistent-directory:不变数据存储目录
with-mib-modules=ucd-snmp/diskio 选项,可以让服务器支持磁盘I/O监控
使用以上参数选项即可,否则configure配置时会要求手动输入。
配置文件
- cp EXAMLE.conf /usr/local/snmp/share/snmp/snmpd.conf
EXAMLE.conf是在源代码文件夹里。
配置snmpd.conf
1).监听
agentAddress udp:127.0.0.1:161 注释掉该行
agentAddress udp:161,udp6:[::1]:161 修改为该行,也可以不要后面的IPv6部分。
2).v2c授权
找到
rocommunity public default -V systemonly
注释掉,添加一行
- rocommunity public 192.168.1.101
IP地址是监控服务器的IP,不解释
3).v3授权
暂不多赘述,因为现在利用snmp协议监控多使用1或者2版本。
启动文件
- cp dist/snmpd-init.d /etc/init.d/snmpd
启动
- /etc/init.d/snmpd start
或者:
- /usr/local/snmp/sbin/snmpd -c /usr/local/snmp/etc/snmpd.conf
注意:在RedHat Enterprise Linux平台下,用源代码自带的snmpd作为SystemV启动脚本,使用service命令启动时,获取snmp数据时总是显示超时(实际上是服务并没有完全启动),就必须使用上面的命令手动启动。建议修改下snmpd的systemV文件,把start函数部分修改为手动启动的代码,即上面的代码。
测试:
- /usr/local/snmp/bin/snmpwalk -c public -v 2c 127.0.0.1
在服务器上执行
- snmpwalk -v2c -c public 192.168.1.101
IP地址写被监控服务器的IP
系统运行时间OID
.1.3.6.1.2.1.25.1.1.0
测试:
- [root@cacti ~]# snmpwalk -v2c -c public 192.168.1.101 .1.3.6.1.2.1.25.1.1.0
- HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (583354108) 67 days, 12:25:41.08
- [root@cacti ~]#
3.rrdtool安装
先安装必要的rpm包
- yum install cairo cairo-devel libxml2 libxml2-devel pango pango-devel perl perl-devel
使用官方最新版
- wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.7.tar.gz
- tar zxf rrdtool-1.4.7.tar.gz
- cd rrdtool-1.4.7
- ./configure --prefix=/usr/local/rrdtool
- make && make install
- ln -s /usr/local/rrdtoo/bin/* /usr/local/bin/
小提示:很多同学会发现Cacti里用rrdtool画的图片的最右边有一竖排关于RRDTOOL标识的字,怎么去掉呢,有办法。在解压了rrdtool源代码包后,修改src目录下的rrd_graph.c文件,用vim打开查找“RRDTOOL”,要是大写的呢,1.4.7的版本是在第2740行,如图:
去掉“RRDTOOL / TOBI OETIKER”,记住引号要留着。然后开配置,编译,安装就OK了,画图就没有多余的字了。我们可以看到源代码里有个“-90”,其实是恰好把那引号里的字顺时针转了90度。
4.spine安装
spine的安装稍有点麻烦,如果net-snmp是编译安装的,加--with-snmp=/usr/local/net-snmp。另外,LNMP架构基本是编译安装的,所以
- ln -s /usr/local/mysql/lib/libmysql* /usr/lib/
做一个MySQL的库的软链接。
如果snmp是采用的yum安装的,记得安装net-snmp-devel和net-snmp-libs这两个包。
编译
- ./configure --prefix=/usr/local/spine
- make && make install
配置文件
填写对应的数据库和用户名,可以做一个软链接也可以不做:
- ln -s /usr/local/spine/etc/spine.conf /etc/
5.安装Cacti
准备工作都差不多了,开始安装Cacti。它的安装过程挺简单的,只要需要的软件都安装好了。
这里采用官方最新版:0.8.8a
- wget http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz
解压释放到web根目录下,最好沿用默认的二级目录访问形式cacti。
导入数据库,修改config.php,填入相关数据库和用户名密码。
打开客户端浏览器http://ip/cacti/install,填入正确的路径即可,不再详细说明。
6.监控远程Linux主机
以监控RedHat/CentOS系统为例说明
需要注意的是以Unix开头的模版只能监控本机,如果监控别的(远程)的Linux主机,那所有主机的图像和数据都是一样的,即监控服务器本身的数据。
监控模版说明:
CPU:ucd/net - CPU Usage,SNMP - Get Processor Informatio(每个核一个图,相对前面的比较准确点)
内存:SNMP - Get Mounted Partitions
磁盘: ucd/net - Get Monitored Partition(如果无数据就在被监控机器的snmpd.conf里添加disk /), SNMP - Get Mounted Partitions也可以获取到磁盘分区(如果是VPS,虚拟化出来的可能获取不到,标准的物理Linux服务器是可以的)
负载:ucd/net - Load Average
进程:Host MIB - Processes
用户:Host MIB - Logged in Users
网卡流量:SNMP - Interface Statistics
其他:待定。
7.常见问题
(1)rrdtool中文问题
1.4.7的版本是支持中文的,不需要修改源代码文件,而1.2的版本就会乱码。要让图完全显示中文还需要修改下cacti目录下lib/function.php,就在第一个PHP标签里加入setlocale(LC_CTYPE,"en_US.UTF-8");
(2)监控nginx和php-fpm配置文件
- server {
- listen 80;
- server_name 192.168.1.100;
- root /var/www/.monitor;
- index index.php index.html;
- location /nginx_status {
- stub_status on;
- # disable access_log if requared
- access_log off;
- allow 192.168.1.101;
- deny all;
- }
- location ~ ^/(php_status)$ {
- include fastcgi_params;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
- access_log off;
- allow 192.168.1.101;
- deny all;
- }
- }
(3)Cacti里的单位
Cacti中使用如下单位:M(兆)、K(千)、m(微)。
这里的单位 m 表示微,即需要除以1000。100m表示0.1。
m - 10^-3 即0.001
M - 10^6
G - 10^9
T - 10^12
(4)snmp.conf自定义OID的说明
之所有讲下这个是因为snmp软件版本(区分清楚snmp协议版本与软件版本)问题,会出现一些很抓狂的问题。
举个例子,自定义一个OID,监测LNMP架构中Nginx、MySQL以及php各种占用的CPU和内存是多少。
首先上脚本:/etc/snmp/lnmp_status.sh
- #!/bin/bash
- #
- # 定义函数
- function ps_aux() {
- process=$1 # nginx httpd mysql php-fpm,and so on
- # 获取对应性能占用百分比,并用AWK求和
- percent_cpu=(`ps aux | grep -i $process | grep -v "grep" | awk '{ total += $3 } END { print total }'`)
- percent_mem=(`ps aux | grep -i $process | grep -v "grep" | awk '{ total += $4 } END { print total }'`)
- # 判断进程是否为空,为空表示未开启服务或进程
- [ ! $percent_cpu ] && percent_cpu=0
- [ ! $percent_mem ] && percent_mem=0
- # 输出
- echo $percent_cpu
- echo $percent_mem
- }
- # 调用函数
- ps_aux nginx
- ps_aux mysql
- ps_aux php-fpm
- # 统计网站数量并输出
- web_num=`ls /var/www/html | wc -l`
- echo $web_num
这里多添加了一个统计/var/www/html/目录下所运行的网站的数量,所以一共有7个数据返回,定义的OID是.1.3.6.1.4.1.2021.23,所以在/etc/snmpd.conf里添加一下内容:
- extend .1.3.6.1.4.1.2021.23 lnmp_status /bin/bash /etc/snmp/lnmp_status.sh
需要说明的问题在这里:在RHEL 5平台下的snmp软件的版本是5.3,而到了RHEL 6平台下snmp的版本是5.5(可以使用snmpd -v命令查询软件版本),是5.3的版本里可以使用exec关键字来定义自己的OID,但是在5.5版本下就不行了,如果用exec,就会报错
这会很抓狂的,所以统一都使用extend。
模版在附件里有,先看看效果图:
(5)图形模版里的“| date_time |”
在有些图形模版里,有些打印了“最后更新时间”,但是打印出来的格式却不怎么符合我们的习惯,是如下的模式:
就像是在Linux下执行单纯的“date”命令一样,这其实是用php的date函数打印出来的,我们可以修改下Cacti的源代码,文件是cacti/lib/rrd.php。
打开后查找"date_time",可以看到模式的格式是:
- date('D d M H:i:s T Y')
修改为
- date('Y-m-d (l) H:i:s')
看看打印的效果
这个是可以自定义的,php里的date函数具体怎么用可以去查下资料,大致按照中国人的习惯打印出”年-月-日 时间“的格式就差不多习惯了。
(6)监控磁盘使用率
这里是说监控磁盘的百分比使用率,便于报警。
详见这里:Cacti监控报警磁盘使用率
(7)等你来分享和添加
本文出自 “陆小K网络工作室” 博客,请务必保留此出处http://luxiaok.blog.51cto.com/2177896/1006175