Centos7 Cacti-0.8.8g安装及SNMP简介
在官网可以看到关于cacti的下载说明http://www.cacti.net/download_cacti.php
Download Cacti
The latest stable version is 0.8.8g, released 02/21/16.
Cacti requires MySQL, PHP, RRDTool, net-snmp, and a webserver that supports PHP such as Apache or IIS. Please see the requirements section of the manual for information on how to fulfill these requirements under certain operating systems. Please use the install guide for either Unix or Windows for information about installing Cacti.
0x01 安装前准备
下载最新源码后根目录下有cacti.sql文件,里面包含数据库语句,用于初始化cacti的数据库环境,但其中不包含数据库建立,所以需要手动建立数据库再导入
1、导入数据库语句,新建数据库用户
mysql> create database cacti;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on cacti.* to 'cactiuser@localhost' identified by 'cactiuser'
2、登陆进入mysql,导入数据库语句。
mysql> source /usr/local/apache2/htdocs/cacti.sql
3、在include目录下有config.php,配置连接数据库的用户信息。可以按照这个内容对数据库配置,也可以自定义。
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$database_port = "3306";
$database_ssl = false;
4、建立一个普通用户用于获取数据,rra和log目录改成该用户,这个用户其实就是用于添加和执行计划任务
0x02 安装
安装cacti是通过网页进行,将cacti内所有文件解压到网页根路径即cacti的index.php在根路径下,访问http://IP(include/config.php里面的url路径设置没改动,自动跳转到http://IP/cacti/install/出现404错误),然后改$url_path = "/";再次访问http://IP,成功出现页面。
注意的是cacti安装默认跳转IP/install或者是IP/cacti/install,是在cacti的配置文件config.php设置的$url_path,没有取消注释就是跳转到IP/cacti/install,这个时候解压的文件夹名称对应上才可以。
在一次用yum搭建的lamp环境中访问http://IP时候,httpd的error_log出现了如下报错。
PHP Notice: A session had already been started - ignoring session_start() in /var/www/html/include/global.php on line 157
重启了httpd又无法重现这个问题,先放着
安装界面可以看到一堆东西缺少
[root@localhost htdocs]# yum install rrdtool 使用yum安装并查看相应组件的路径
[root@localhost htdocs]# rpm -ql rrdtool
/usr/bin/rrdcached
/usr/bin/rrdcgi
/usr/bin/rrdcreate
/usr/bin/rrdinfo
/usr/bin/rrdtool
[root@localhost htdocs]# yum install net-snmp net-snmp-utils
[root@localhost htdocs]# rpm -ql net-snmp-utils
/usr/bin/encode_keychange
/usr/bin/snmpbulkget
/usr/bin/snmpbulkwalk
/usr/bin/snmpdelta
/usr/bin/snmpdf
/usr/bin/snmpget
/usr/bin/snmpgetnext
/usr/bin/snmpinform
/usr/bin/snmpnetstat
/usr/bin/snmpset
/usr/bin/snmpstatus
/usr/bin/snmptable
/usr/bin/snmptest
/usr/bin/snmptls
/usr/bin/snmptranslate
/usr/bin/snmptrap
/usr/bin/snmpusm
/usr/bin/snmpvacm
/usr/bin/snmpwalk
按照向导安装完成
0x03 错误信息
首次登陆用户名和密码都是admin,但是首次登陆会强制要求改密码。
在根目录下还有一个 poller.php,添加计划任务,定期执行这个php脚本 ,注意的是你用哪个用户身份添加的计划任务要保证这个用户可以访问log和rra目录
但是因为其是单线程,所以功能较弱,官方推出spine替代
尝试用php解释器运行,发现一堆报错
[root@localhost cacti]# /usr/local/php/bin/php ./poller.php
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/local/apache2/htdocs/cacti/lib/functions.php on line 482
03/07/2016 04:59:02 PM - SYSTEM STATS: Time:1.8146 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5
这个也被记录到日志中了
[root@localhost cacti]# tail log/cacti.log
03/07/2016 04:59:02 PM - SYSTEM STATS: Time:1.8146 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5
1、报错中可以看出这是因为php时区问题,/etc/php.ini文件中,将注释行;date.timezone改为date.timezone = Asia/Shanghai ,再次执行结果如下。
[root@localhost cacti]# /usr/local/php/bin/php ./poller.php
OK u:0.00 s:0.00 r:0.01
OK u:0.00 s:0.00 r:0.01
OK u:0.00 s:0.00 r:0.01
OK u:0.00 s:0.00 r:0.01
OK u:0.00 s:0.00 r:0.02
03/08/2016 01:03:10 AM - SYSTEM STATS: Time:0.1658 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5
2、snmp public 报错
注意cacti使用的community要和snmp对应
0x04 SNMP理解
SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent)),实现设备与管理站的SNMP通信。
每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。简单来说,就是需要一个服务器程序(代理,agent)和一个客户机(管理器,manager)。而与直观上不同的是,SNMP的服务器端代表被管理的事物,而客户机端才是管理者。
其中MIB是以树状结构来组织数据的,每一个节点表示一个被管理的对象,如果没有在这个树上面,那就无法管理(获取信息)
在snmp协议的开始学习中,发现自己比较难理解的就是MIB库的作用。找了一些相关资料相关描述如下
1、管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。
2、管理信息库MIB:定义了设备上可以使用的管理信息。代理和管理站使用MIB作为统一的数据接口通信。管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。
3、厂商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本的MIB的多个路由器。当然,一个没有新的MIB项目的路由器不能提供这些项目的信息。这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。
4、SNMP对于任何程序设计人员来说是特别易于理解的。总体的简化能够很好地把这个系统简化。一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自网络的各种请求信息。该SNMP代理提供大量的对象标识符(OID-Object Identifiers)。一个OID是一个唯一的键值对。该代理存放这些值并让它们可用。一个SNMP管理器(客户)可以向代理查询键值对中的特定信息(就是Agent用MIB可以解析来自NMS的请求)。
从程序员的角度看,这和导入大量的全局变量没有多少区别。SNMP的OID是可读或可写的。尽管向一个SNMP设备写入信息的情况非常少,但它是各种管理应用程序用来控制设备的方法(例如针对交换机的可管理GUI)。SNMP中有一个基本的认证框架,能够让管理员发送公共名来对OID读取或写入的认证。绝大多数的设备使用不安全的公共名 "public" 。 SNMP协议通过UDP端口161和162进行通信的。
注意,我还没有提到MIB!MIB的重要性被大大地夸大了。刚开始时,MIB显得非常复杂,但是它们其实非常简单。OID是数字的和全局的键值对。一个OID看起来和一个IPv6的地址很象(比如:1.3.6.1.2.1),并且不同的厂商有不同的前缀等信息。OID都非常长,使得人们难以记住,或者对他非常感冒。因此,人们就设计了一种将数字OID翻译为人们可读的格式。这种翻译映射被保存在一个被称为 “管理信息基础"(Management Infomation Base) 或MIB的、可传递的无格式文本文件(管理信息库)里。
使用SNMP或者向SNMP设备查询,你不需要使用MIB,但是,如果没有MIB,你就得猜测你正在查看的数据是什么。某些情况下,不使用MIB也非常简单,例如查看主机名、磁盘使用率数字,或者端口状态信息。其他情况下,就非常困难了,这个时候使用MIB就非常有帮助。对于准备编写的应用程序来说,为了让用户避免妥当安装MIB带来的麻烦,而严格使用数字OID是并不是很少见的。
安装一个MIB的动作,只是将他放置到你的SNMP客户端应用软件能够搜索到并进行上述翻译映射工作的某个位置而已。
5、IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历SNMP MIB树形目录中的节点来访问网络中的设备。
总结一下:我们可以通过NMS发送指令查询Agent的相关信息,可是怎么获得想要的信息呢,比如我想查询cpu,而不是磁盘,那要怎么标识呢?我的理解就是MIB里面的OID就是唯一标识,如果MIB里面没有这个OID那么NMS也就无法查到相关信息。即被监控主机上提供了怎样的MIB库就能对库里定义的信息进行监控,要是库中不包含就无法获取信息,因为无法解析请求。
同样MID也记录了映射关系,我们要找一个人通常是知道这个人的名字而不是他的身份证号码(对应OID)
MIB也可以自行添加,关于自定义MIB的参考:
http://wenku.baidu.com/view/c3ebe8c008a1284ac8504346.html 基于NETSNMP开发mib说明
http://blog.csdn.net/shanzhizi/article/details/15340305 关于SNMP的MIB文件的语法简述
0x05 SNMP基本使用
要使用SNMP就要安装net-snmp 和net-snmp-utils 两个工具
打开/etc/snmp/snmpd.conf配置文件,发现除了四行步骤说明和下面几行,后面的都是注释,注释内容就是个使用步骤了,这里注意community(密码)。
1、snmpwalk
snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT(获取一个设备下所有子节点的信息)请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户
snmpwalk -v 1或2(代表SNMP版本) -c SNMP读密码 IP地址 OID(对象标示符)
(1) -v: 指定snmp的版本, 1或者2(2c);
(2) -c: 指定连接设备SNMP读密码;
(3) IP: 指定要walk的设备的IP地址;
(4) Oid:代表要获取设备的指标oid;
用法举例:
[root@localhost22 ~]# snmpwalk -v 2c -c public localhost .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost22 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64
http://blog.sina.com.cn/s/blog_54837cf301011607.html SNMP中MIB2所有主要节点
注意:
(1)配置文件中的view定义了可以查看MIB库的哪些资源,如果发现查看不了就在配置文件添加view/,或者是community不对。
(2)返回一个OID时会包括一个数据类型,数据类型后的值有些会自动被解释。如上面的sysDescr.0
2、snmpget
snmpget是取具体的OID的值。(适用于OID值是一个叶子节点的情况,即没有子节点)
snmpwalk是针对该节点下面还有子节点的情况
3、snmptranslate
snmptranslate [OPTIONS] OID [OID]
将一个或者多个 SNMP OID 从文字名称格式转换为数字格式的程序[oid] 可以是数字格式或者文字格式。
注意!snmptranslate 可以直接将数字格式的 oid 转换为名称格式,但要把名称格式的 oid 转换为数字格式的 oid ,需要 -I 选项的配合。
[root@localhost22 ~]# snmptranslate tcp //直接使用名称的情况
tcp: Unknown Object Identifier (Sub-id not found: (top) -> tcp)
[root@localhost22 ~]# snmptranslate -IR tcp //单独使用IR
TCP-MIB::tcp
[root@localhost22 ~]# snmptranslate -On -IR tcp //-On(输出数字格式的oid),使用 -IR(允许“随机”访问 MIB)
.1.3.6.1.2.1.6
[root@localhost22 ~]# snmptranslate .1.3.6.1.2.1.6 //OID转名称
TCP-MIB::tcp
4、snmpnetstat
直接通过snmp获取网络状态
[root@localhost22 ~]# snmpnetstat -v 2c -c public -Can -Cp tcp localhost
Active Internet (tcp) Connections (including servers)
Proto Local Address Remote Address (state)
tcp *.22 *.* LISTEN
tcp *.3306 *.* LISTEN
tcp 127.0.0.1.25 *.* LISTEN
tcp 127.0.0.1.199 *.* LISTEN
tcp 172.16.4.22.22 172.16.4.146.53945 ESTABLISHED
http://bbs.linuxtone.org/thread-6694-1-1.html snmpd使用详解,这个文章写得还可以。
0x06 MIB文件简介
MIB路径 /usr/share/snmp/mibs/,选取一个mib文件打开如下:
首先就是一个MIB头,在头部使用BEGIN声明来开始MIB的定义,IMPORT用来从其他MIB库中提取信息,一般用来提取规范要求的内容。--是注释符号
SNMPv2-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
TimeTicks, Counter32, snmpModules, mib-2
FROM SNMPv2-SMI
DisplayString, TestAndIncr, TimeStamp
FROM SNMPv2-TC
MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
FROM SNMPv2-CONF;
一些基本结构如下标注。
上图那个”子树对象标识符“失误打成了“子数”(⊙﹏⊙)
关键是::={}的内容,可以得知父子关系。
0x07 获取其他信息
1、查看/usr/share/snmp/mibs路径下的MIB库,简单的可以通过文件名判断,比如TCP-MIB,HOST-RESOURCES-MIB。
2、查看文件内的具体,找到如:tcp OBJECT IDENTIFIER ::= { mib-2 6 },可以获知tcp的OID为mib-2下的6,(即.1.3.6.1.2.1.6)
3、将OID添加到/etc/snmp/snmpd.conf配置文件下的view
4、重新加载服务systemctl reload snmpd
5、使用工具snmpwalk获取信息
Centos7 Cacti-0.8.8g安装及SNMP简介的更多相关文章
- Centos Cacti 0.8.8g
一.Cacti简介1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户.因 ...
- Centos7.0挂载优盘安装jdk1.7和tomcat7.0
Centos7.0挂载优盘安装jdk1.7和tomcat7.0 前言: 笔者发现用wget方法直接在服务器下载jdk和tomcat速度很慢,而且jdk1.7用wget方法下载链接不好找,不如直接从官网 ...
- CentOS7 Zabbix4.0环境下的安装和配置实例
1.安装准备 Zabbix4.0对基础架构有一定的要求,对的英文尤其PHP状语从句:MySQL: 类型 内容 服务端运行环境 Linux和PHP与Web服务器和数据库 服务端操作系统 CentOS7. ...
- CentOS7.0 采用压缩包 安装Nginx 1.7.4和添加Tomcat为系统服务 nginx结合tomcat
CentOS7.0 采用压缩包 安装Nginx 1.7.4 一.安装准备首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc ...
- 腾讯云CentOS7.0使用yum安装mysql
背景: 今天才申请了腾讯云+校园计划的1元服务器,(https://www.qcloud.com/event/qcloudSchool)安装了Centos7.0,在安装mysql的时候,使用yum l ...
- Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入(1)
一.本系列分为6部分 1.Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入 2.Centos 6.5 下安装 Zabbix server 3.0服务器的安 ...
- 【CentOS】在Centos7 下无图形界面安装 Oracle11g
目标 - 在虚拟机CentOS7中无图形界面安装Oracle11G R2版本 ① 系统要求以及准备 1. 物理内存不小于1G: 查看方式: # grep MemTotal /proc/meminfo ...
- 搭建centos7的开发环境3-Spark安装配置
说起大数据开发,必然就会提到Spark,在这片博文中,我们就介绍一下Spark的安装和配置. 这是Centos7开发环境系列的第三篇,本篇的安装会基于之前的配置进行,有需要的请回复搭建centos7的 ...
- centos7和centos6通过yum安装JDK1.8
centos7和centos6通过yum安装JDK1.8 查看JDK的安装路径# java -version============================查看Linux系统版本信息# cat ...
随机推荐
- LeetCode "Russian Doll Envelopes"
An intuitive DP - should be 'medium'. class Solution { public: int maxEnvelopes(vector<pair<in ...
- 利用docker搭建rtmp服务器(1)
以后的项目里面可能需要用到直播,所以就先看看 本来想在自己MAC上搭建nginx的,后来怕把自己的机子搞乱,刚好就学习了下docker,感觉docker强大就在于是一个操作系统软件的版本管理系统,可以 ...
- jboss端口说明
http://blog.csdn.net/yangbobo1992/article/details/8876587 jboss端口修改说明 1. jboss 的端口修改位置总结 Jboss通常占用的端 ...
- IOS中图片拉伸技巧与方法总结(转载)
以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...
- winform中DataGrid控件的宽度设置
最近修改一个win5.0的PDA程式,碰到一个问题.就是给DataGrid控件绑定数据的时候,这个控件的宽度不能调整,有时候数据较长,就显示不全.然后想在程式里自定义它的宽度,设置不成功.然后网上没找 ...
- 用Visual Studio 2015 编写 MASM 汇编程序(一)环境配置
原文地址:http://kipirvine.com/asm/gettingStartedVS2015/index.htm#CreatingProject 下面内容根据上面文章翻译整理而来! 开发32位 ...
- Intel汇编语言程序设计学习笔记1
第一章 汇编器链接器:汇编器将汇编语言翻译成机器语言,链接器将单个文件合并为可执行文件 intel 80X86系列处理器的汇编语言与VAX或者motorala 68x00等系统的汇编是否相同?不相同, ...
- Android dispatchTouchEvent介绍
一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_ ...
- Jmeter-获取响应结果中参数出现的次数
在测试中,有时候会遇到要统计响应结果中某个参数出现了多少次,如果量级很大,一个一个数不太现实,下面讲一下实现自动打印出该参数出现的次数的方法. 例如我的响应信息为:{"ip":&q ...
- maven仓库介绍《本地仓库、远程仓库》
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方)任何的构件 ...