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 MySQLPHPRRDToolnet-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獲取信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM