当前位置: 首页 > Web与应用 > 正文

摘抄一句:Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。

最近弄了一个树莓派2,想着把它打造成一个小服务器。FAQ:树莓派是个基于arm内核的PC,银行卡片大小,性能并不是很高,没有内置EMMC或者NAND,而是搭配TF卡,IO性能也并不好。

首先第一个应用就是监控各交换机的流量情况。由于不打算使用apt-get进行直接安装cacti,这边进行分步骤说明。

首先安装Ubuntu,可以参考:https://blog.ich8.com/post/5526

Cacti是使用php语言的产物,在树莓派上搭建nginx+php+mysql环境。个人推荐使用nginx,首先是个人的习惯问题,其次nginx可以在占用较少资源的情况下提供较高的并发性能。apache则占用的资源比较多一点,个人linux首选nginx。
关于编译过程,这些在linux平台上都是通用的。建议编译完成后对MySQL的配置文件my.cnf进行修改,以减少MySQL所占用的资源。数据库管理我在树莓派2上使用phpmyadmin,方便。

附上我的my.cnf配置:

max_connections = 500
key_buffer_size = 8M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 320K
net_buffer_length = 8K
read_buffer_size = 192K
read_rnd_buffer_size = 320K
myisam_sort_buffer_size = 4M
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
max_allowed_packet = 16M
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 1M
write_buffer = 1M

环境搭配这里不详细介绍,网上很多了。

1.安装所需要的软件支持,snmp不需要介绍,在部分发行版的linux中snmp,snmpd都属于net-snmp的组件,rrdtool是绘图工具。
sudo apt-get install snmp snmpd rrdtool snmp-mibs-downloader

关于snmp-mibs-downloader,若无MIB库支持,则无论在cacti中添加什么主机,都输出SNMP Error的提示。安装后则获取SNMP信息正常。
安装完成后可以在ssh中使用 snmpwalk 命令snmp是否正常。

修改snmpd配置文件,修改/etc/snmp/snmpd.conf文件,

# Listen for connections from the local system only
agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
#agentAddress udp:161,udp6:[::1]:161

修改成:

# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

测试本机snmp输出命令:
snmpwalk -v 2c -c public 127.0.0.1

如果snmp工作正常则输出以下内容:

root@Nano-Server:~# snmpwalk -v 2c -c public 127.0.0.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux Nano-Server 3.18.0-25-rpi2 #26-Ubuntu SMP PREEMPT Sun Jul 5 06:46:34 UTC 2015 armv7l
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (39869827) 4 days, 14:44:58.27
SNMPv2-MIB::sysContact.0 = STRING: Me <me@example.org>
SNMPv2-MIB::sysName.0 = STRING: Nano-Server
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (8) 0:00:00.08
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance
SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.
SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (6) 0:00:00.06
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (6) 0:00:00.06
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (6) 0:00:00.06
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (6) 0:00:00.06
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (7) 0:00:00.07
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (8) 0:00:00.08
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (8) 0:00:00.08
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (39870658) 4 days, 14:45:06.58
HOST-RESOURCES-MIB::hrSystemDate.0 = STRING: 2015-7-21,19:16:42.0,+8:0
HOST-RESOURCES-MIB::hrSystemInitialLoadDevice.0 = INTEGER: 393216
HOST-RESOURCES-MIB::hrSystemInitialLoadParameters.0 = STRING: "dma.dmachans=0x7f35 bcm2708_fb.fbwidth=592 bcm2708_fb.fbheight=448 bcm2709.boardrev=0xa01041 bcm2709.serial=0xb9decec8 smsc95xx."
HOST-RESOURCES-MIB::hrSystemNumUsers.0 = Gauge32: 1
HOST-RESOURCES-MIB::hrSystemProcesses.0 = Gauge32: 46
HOST-RESOURCES-MIB::hrSystemMaxProcesses.0 = INTEGER: 0
HOST-RESOURCES-MIB::hrSystemMaxProcesses.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

测试snmp v3
snmpwalk -u user -A userpassword -a MD5 -l authnoPriv 192.168.1.1 -v 3

2.获取Cacti源码,并解压到相关的目录。选择zip格式纯粹解压命令短……少敲自己个字。
cd /tmp
wget http://www.cacti.net/downloads/cacti-0.8.8f.zip
unzip cacti-0.8.8f.zip
mv cacti-0.8.8f /网站目录

3.赋予Cacti目录www运行权限(权限根据你环境的www服务创建的用户自己改)
chown www:www -R /网站目录/

每隔5分钟运行poller获取数据。
创建/etc/cron.d/cacti
vi /etc/cron.d/cacti
cacti文件包含以下内容:
*/5 * * * * www /usr/bin/php /Cacti网站目录/poller.php > /dev/null 2>&1
service cron restart #重启cron服务

@@@如果是使用了LNMP一键安装包的童鞋,需要删除网站目录下的.user.ini文件并重启nginx。
chattr -i /网站目录/.user.ini
rm /网站目录/.user.ini

4.提取Cacti压缩包中的cacti.sql文件,在phpmyadmin中新建数据库并导入此文件。
手动创建数据库
create_sql

手动上传cacti.sql并导入。
create_sql2

5.安装cacti
①修改/网站目录/inclucde/config.php文件,进行如下修改:
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "new_cacti"; #修改成你刚才创建的Cacti的数据库名
$database_hostname = "localhost";
$database_username = "root"; #修改成你的MySQL用户名,默认为root,如果未创建其他用户名或者其他操作则保持默认
$database_password = "123456"; #数据库用户名对应的密码
$database_port = "3306"; #默认MySQL的工作端口是3306
$database_ssl = false;

/*
Edit this to point to the default URL of your Cacti install
ex: if your cacti install as at http://serverip/cacti/ this
would be set to /cacti/
*/
$url_path = “/”; #默认为domain/cacti的访问格式,如果修改了目录名称请修改,去掉双斜杠//注释。如果使用根目录(http://domain/)访问格式则修改成“/”。

/* Default session name – Session name must contain alpha characters */
//$cacti_session_name = “Cacti”;

②运行 http://domain/install/index.php 进行安装。
安装过程会对所需要支持的组件进行检测和snmp/rrdtool版本选择,默认1.2-1.4.x都被支持。如图(这张图来自网络)。
cacti_install

③点击Finish后会跳转到登陆页面,默认用户名密码:admin/admin,首次登陆会要求你更改密码。
cacti_login

6.让Cacti生成的图片支持中文显示
修改Cacti目录下lib目录中的functions.php文件,在
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
+-------------------------------------------------------------------------+
*/

setlocale(LC_CTYPE,”en_US.UTF-8″);
/* title_trim – takes a string of text, truncates it to $max_length and appends
three periods onto the end

7.添加监控主机
这里以华为交换机为例,首先启用SNMP支持,这里启用SNMP v3支持。当然,前提是你已经配置了交换机的管理地址并且能在远程管理到交换机。
参考:https://blog.ich8.com/post/5555

①Console -> Devices 中,右侧有个Add链接。点击Add。
Description ==> 填写该主机的描述,比如公司接入交换机
Hostname ==> 填写该主机的IP或者域名
SNMP Version ==> 选择SNMP版本,由于被监控的主机采用SNMP v3协议,这里选择SNMPv3
SNMP Username ==> SNMP用户名
SNMP Password ==> SNMP密码
SNMP Auth Protocol ==> SNMP认证协议
SNMP Privacy Passphrase ==> SNMP私密
cacti_host_options

添加数据查询项目,这里我们添加SNMP – Interface Statistics,接口状态信息查询。
Associated_Data_Queries

最后点击保存。如果信息获取正常则会显示如下信息:如果错误则红色字体显示SNMP Error
snmp_info

②进入Console -> Graph Trees,创建树形列表。

③进入Console -> Devices,点击右上角 Create Graphs for this Host ,创建图形。选择需要添加的接口,图表类型中选择 In/Out Bits(64-bit Counters) ,之后点击Create,创建图表。
create-graph

④进入Console -> Graph Management,选择 Graph Management 下的 host ,获取接口图表列表。右侧勾选需要的接口,添加到相应的树形目录下。
graph_management

⑤可以到Console -> Graph Trees中对图表排列进行修改。Graphs -> Tree Mode查看图表。每隔5分钟生成新的数据。

⑥使用自定义字体:上传字体到 /usr/share/fonts/ 目录下,之后在 Console -> Cacti Settings 的 Paths 选项卡中,找到 RRDTool Default Font ,添加完整的字体路径+名称,例如 /usr/share/fonts/MSYH.TTF 。最后点击保存。

效果图查看:
graph_image.php

[分享]Ubuntu Server 15.04 安装 Cacti 并添加监控主机:目前有 1 条评论

发表评论