Zabbix 監控平臺

一、SNMP?

簡單網絡管理協議(snmp),由一組網絡管理的標準組成,包含一個應用層協議,數據庫模型和一組資源對象。該協議能夠支持網絡管理系統,用以檢測連接到網絡上的設備是否由任何引起管理上關注的情況。

SNMP管理的網絡主要由三部分組成:

  • 被管理的設備
  • SNMP代理
  • 網絡管理系統(NMS)

SNMP的工作模式:

  • NMS向agent採集數據,監控端向agent端發起收集數據請求;
  • agent向NMS報告數據,agent向監控端主動發送數據;
  • NMS強求agent修改配置,監控端向agent請求修改數據

SNMP的組件:

  • MIB:管理信息庫,定義各個數據採集規範,實現了雙方可接受的監控組件以及監控組件中數據存取各是的一個組件,將每一個被管理端的ID(OID)到對應名稱的轉換。每一個agent都有自己對應的mib庫。
  • SMI:管理信息結構,用於定義通過網絡管理協議可訪問的對象的規則,SMI定義在MIB中使用的數據類型及網絡資源在MIB中的名稱或表示。
  • SNMP協議
    這裏寫圖片描述

SNMP協議的版本

SNMP共有v1,v2,v3這三個版本

  • v1和v2都具有基本的讀,寫MIB功能
  • v2增加了警報,批量數據獲取,管理站和管理站通信能力
  • v3在v2的基礎上增加了USM,使用加密的數據和用戶驗證技術,提高了安全性
  • 另外,RMON是SNMP的一個重要擴展,爲SNMP提供了子網流量,統計,分析能力。現有兩個版本:Rmon:提供了OSI七層網絡結構中網絡層和數據鏈路層監視能力。Rmon2:提供了OSI七層網絡結構中網絡層之上各層的監視能力。

SNMP支持的網管操作

對於網絡管理,我們面對的數據是設備的配置,參數,狀態等信息,面對的操作是讀取和設置;同時,因爲網絡設備衆多,爲了能及時得到設備的重要狀態,還要求設備能主動的彙報重要狀態,這就是報警功能。如下圖,

這裏寫圖片描述

  • Get:讀取網絡設備的狀態信息
  • Set:遠程配置設備參數
  • Trap:管理站及時獲取設備的重要信息

SNMP的實現結構

在具體實現上,SNMP爲管理員提供了一個網管平臺(NMS),又稱爲管理站,負責網管命令的發出,數據存儲,及數據分析。被監管的設備上運行一個SNMP代理(Agent),代理實現設備與管理站的SNMP通信。如下圖,
這裏寫圖片描述

管理站與代理端通過MIB進行接口統一,MIB定義了設備中的被管理對象。管理站和代理都實現了相應的MIB對象,使得雙方可以時別對方的數據,實現通信。管理站向代理申請MIB定義的數據,代理識別後,將設備提供的相關狀態或參數等數據轉換爲MIB定義的格式,應答給管理站,完成一次管理操作。

二、cacti和nagios

Cacti

Cacti是一套基於PHP,MySQL,SNMP及RRCTool開發的網絡流量監測圖形分析工具。利用SNMP已有的功能,週期性的採集收集數據,利用一個非常直觀的數據圖像展示出來,也能夠讓用戶定義一個關注的指標的閾值,一旦數據超出閾值,也能夠實現報警操作,但是它的報警功能很差,需要安裝額外的第三方軟件。
同時cacti也支持讓我們自己寫腳本,向每一個被監控端,通過snmp協議,發起數據採集請求,這些腳本我們需要讓cacti定義一個任務計劃。數據採集到以後,cacti會將他存儲在一個數據庫當中。cacti是使用php研發的,所以它的前端能夠利用php強大功能完成數據的展示,也就意味着它能夠從數據庫中提取到數據,並臨時的繪製一幅數據走勢圖。

nagios

Nagios是一款開源的免費網絡監控工具,能有效的監控windows,linux和unix的主機狀態,交換機路由器等網絡設備,打印機等。在系統或服務器狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。
nagios擁有強大的報警機制,只關心超出閾值的狀態轉換,實現報警。不收集具體的數據,不展示數據。主要目的實現從軟狀態轉換爲硬狀態實現報警,可以定義各種各樣的報警策略。支持組建依賴關係。比如A依賴B,如果A發生故障,理論上報警後面的所有,而由於依賴機制,只會報警A,這樣就會避免我們收到一大堆的報錯。由於我們監控很多主機,一臺主機上監控項也很多,這就會影響監控系統的I/O,所以不同的指標可以佈置不同的監控系統,保證監控公平有序。

三、Zabbix簡介

1 zabbix簡介

zabbix是由Alexel Vladishev開發的一種網絡監視,管理系統,基於Server-Client架構。可用於監控各種網絡服務,服務器和網絡機器等的狀態。可以使用MySQL,PostGreSQL,SQLite,Oracle等存儲數據。Server端基於C語言,Web管理器frontend則是基於PHP所製作的。在客戶端如UNIX,Windows中安裝Zabbix Agent之後,可監視CPU Load,網絡使用狀況,硬盤容量等各種狀態。而就算沒有安裝Agent在監視對象中,Zabbix也可以經由SNMP,TCP,ICMP,利用IPMI,SSH,telnet等對目標進行監控。

2 zabbix架構中的組件

這裏寫圖片描述

zabbix由三部分構成,zabbix-server,可選組件zabbix-agent和可選組件zabbix-proxy組成的。

zabbix-server:C語言編寫,可以通過SNMP,zabbix agent,ping,端口監測等方法提供對遠程服務器/網絡狀態的監視,實現數據收集等功能。它可以運行在linux,freeBSD,AIX,等平臺之上。

zabbix-agent:C語言編寫,安裝在被監視的目標服務器上,它主要完成對硬件信息或操作系統有關的內存,CPU等信息的收集。zabbix-agent可以運行在Linux,Solaris,HP-UX,AIX,Windows (2000/2003/XP/Visal)等系統之上。

zabbix-proxy:時從監控設備收集監測數據和發送到zabbix-server的進程,屬於代表zabbix-server的運行所有收集到的數據被暫時存放的=在代理服務器,之後統一由代理服務器轉發給zabbix-server所屬的服務器,不數proxy時可選的,但對於分擔單個zabbix服務器的負載時非常有益的。如果僅在zabbix-proxy上收集數據,那麼將減輕zabbix-server上的進程對cpu資源和磁盤I/O的消耗。zabbix-proxy在沒有本地管理員的情況下,是集中監控遠程區域,分支和網絡的理想解決方案。

zabbix-server可以單獨監視遠程服務器的服務狀態;同時也可以配合zabbix-agent配合,可以輪詢zabbix-agent主動接收監視數據(trapping方式),同時還可被動接收zabbix-agent發送的數據(trapping方式)

3 zabbix監控範疇

  • 硬件監控:Zabbix IPMI Interface
  • 系統監控:Zabbix Agent Interface
  • Java監控:Zabbix JMX Interface
  • 網絡設備監控:Zabbix Agent UserParameter
  • MySQL數據庫監控:percona-monitoring-pldlgins
  • URL監控:Zabbix Web監控

4 zabbix特點

  • 安裝配置簡單,學習成本低
  • 支持多語言(包括中文)
  • 免費開源
  • 自動發現服務器與網絡設備
  • 分佈式監控以及Web集中管理功能
  • 可以無agent
  • 用戶安全認證和柔軟的授權
  • 通過Web界面設置或查看監視結果
  • email等通知功能
    等等。。。。。。

四、zabbix配置

主機環境: rhel7.3 selinux and iptables disabled
參考文檔:www.zabbix.com

1. 安裝 zabbix

zabbix-server:
在服務端同樣也安裝上agent監控主機。
yum install zabbix zabbix-server zabbix-get zabbix-mysql zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender

zabbix-get :zabbix服務端主動拉取信息的軟件
zabbix-sender :zabbix客戶端主動將信息上傳給服務端所需要的軟件
zabbix-mysql :安裝數據庫
zabbix-web zabbix-web-mysql :安裝網頁配置zabbix

軟件依賴性:
fping-3.10-1.el7.x86_64.rpm
iksemel-1.4-2.el7.centos.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm

zabbix客戶端:
yum install zabbix zabbix-agent zabbix-sender

2. 配置 mysql 數據庫

zabbix數據庫可以和zabbix服務器分離,採用專門的mysql服務器存儲數據,此時要給zabbix數據庫授予相應的權限
[root@vm5 ~]# mysql_secure_installation
[root@vm5 ~]# mysql -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'redhat';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'redhat';
MariaDB [(none)]> quit
[root@vm5 ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.6/
[root@vm5 zabbix-server-mysql-3.4.6]# zcat create.sql.gz | mysql -uzabbix -predhat  zabbix  #導入數據庫表

3. 配置 zabbix server

[root@vm5 zabbix]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=redhat

4. 配置 php

[root@vm5 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai

[root@vm5 ~]# vim /etc/php.ini 
date.timezone = Asia/Shanghai

5. 啓動 zabbix server、zabbix agent、httpd

[root@vm5 ~]# systemctl restart zabbix-server zabbix-agent httpd
[root@vm5 ~]# systemctl enable zabbix-server zabbix-agent httpd mariadb

6. 登陸 zabbix web

http://172.25.254.201/zabbix 按照提示完成安裝並登陸:
Username: Admin
Password: zabbix

這裏寫圖片描述

這裏寫圖片描述

7. 添加 agent 主機

在被監控端安裝軟件包:
[root@vm6 ~]# yum install zabbix-agent-3.4.6-1.el7.x86_64.rpm -y

[root@vm6 zabbix]# vim zabbix_agentd.conf 
Server=172.25.254.201        #允許誰來取數據
ServerActive=172.25.254.201  #允許向誰報告數據
Hostname=vm6      
#當zabbix策略爲主動發現時,主機將通知給zabbix-server的主機名。當zabbix支持各主機推送數據時,這個名字要唯一。

這裏寫圖片描述

選擇這個人圖標。可以選擇中文版本。

五、zabbix網頁配置

zabbix完整的監控配置流程大體上由如下步驟組成:並非必須
Host group –> Host –> Application –> Items –> Trigger –> Events –> Action –> User group –> User –> Media –> graph –> screen
application:可以將多個功能相近的item定義在一起,以便統一管理。
每一個被監控主機主機上都有N各監控項,每個監控項都要通過或主動或被動方式向服務器端發送數據,服務器上收集到的數據,都要保存在database中,database中的數據可以通過graph展示,graph展示的數據可以通過screen用一個機和的方式予以顯示。 我們定義的這些監控項所產生的數據有一個合理區間,所以我們需要去定義一個Trigger,由Trigger來觸發事件,從而由action當中的operation採取某個操作。

1、item(監控項)

item是zabbix服務用於監控一個特定對象上的一個特定指標,並負責針對其收集相關的監控數據。比如CPU每分鐘的平均負載可以是一個item,每五分鐘的平均負載是一個item,某特定網絡接口接收報文的速率又是一個item等。每一個item都擁有相應的類型。例如“zabbix agent“,“SNMP“,“External check“,“IPMI agent“,“SSH agent“,“JMX agent“等。zabbix服務器會使用相應類型的協議或機制同被監控端通信。

item key

每一個item都有其專用的“Key“,zabbix服務器在與被監控端通信時就使用相應的協議或機制取詢問被監控端這個Key的值,被監控端則調用與此key對應的監控腳本獲取數據並返回給服務器端。zabbix有許多預定義的key,詳細信息請訪問官網。對於每一個item,zabbix服務器還定義了怎麼存儲這個item的數據,以及數據採集的頻率和歷史數據的保存時長等。多個item還可以歸類爲一個由“application“定義的邏輯組。

item

默認的item有多種類型:
    網卡流量相關:
        net.if.in[if,<mode>]    []:可選   <>:必須
            if:接口,如eth0
            mode:bytes,packets,errors,dropped
        net.if.out[if,<mode>]
        net.if.total[if,<mode>]
    端口相關:  監控端口是否處於打開狀態
        net.tcp.listen[port]  tcp協議監聽了哪些端口
        net.tcp.port[<ip>,<port>]
        net.service[service,<ip>,<port>]  基於tcp協議的某個服務
        net.udp.listen[port]
    進程相關:
        kernel.maxfiles  內核所允許打開文件的最大數
        kernel.maxproc   內核所允許當前用戶運行的最大進程數
    cpu相關:
        system.cpu.intr   中斷次數
        system.cpu.load[<cpu>,<mode>]   負載
        system.cpu.num[<type>]  cpu的核數
        system.cpu.switches  上下文切換的次數
        system.cpu.util[<cpu>,<type>,<mode>]  利用率
    磁盤I/O相關:
        vfs.dev.read[<device>,<type>,<mode>]
        虛擬文件接口哪個設備什麼類型什麼模式進行讀取
        vfs.dev.write[<device>,<type>,<mode>]
        哪個設備什麼類型什麼模式寫入
        vfs.fs.inode[fs,<mode>]
        哪個文件系統的哪個模式的inode可用量

一旦默認item無法實現想要的功能,就可以自定義item實現
自定義item: 關鍵:選取唯一的key; 命令:收集數據的命令或腳本;

創建item

這裏寫圖片描述
歷史數據:採樣生成的數據
趨勢數據:每小時的最大值,最小值,平均值,等
這裏寫圖片描述

2、graph

配置 –> 主機 –> 圖像 –> 創建圖像
將上面創建出來的兩個item同時放進一個圖中:
這裏寫圖片描述
圖像類型: 線狀圖,堆疊圖,餅圖,漸變圖

3、觸發器(Trigger)

“監控項“僅負責收集數據,而通常收集數據的目的還包括在某指標對應的數據超出合理範圍時給相關人員發送告警信息,“觸發器“正是用於爲監控項所收集的數據定義閾值。zabbix server每次接收到items新數據時,就會對item當前採樣值進行判斷,即與trigger的表達式進行比較;
每一個觸發器僅能關聯至一個監控項,但可以爲一個監控項同時使用多個觸發器。事實上,爲一個監控項定義多個具有不同閾值的觸發器,可以實現不同級別的報警功能。
一個觸發器由一個表達式構成,它定義了監控項所採取的數據的一個閾值。
一旦某次採集的數據超出了此觸發器定義的閾值,觸發器狀態會轉換爲“Problem“;而當採取的數據再次迴歸至合理範圍內時,其狀態將重新返回到“OK“
觸發器表達式高度靈活,可以以之創建除非常複雜的測試條件。基本的觸發器表達式格式如下所示:

{<server>:<key>.<function>(<parameter)}<operator><constant>

server:主機名稱
key:主機上關係的相關監控項的key;
function:評估在及道德數據是否在合理範圍內時所使用的函數,其評估過程可以根據採取的數據,當時的事件以及其他因素進行;
目前,觸發器所支持的函數有avg,count,change,date,dayofweek,delta,diff,iregexp,last,max,min,nodata,now,sum等
parmeter:函數參數:大多數數值函數可以接受秒數爲其參數,而如果在數值參數之前使用“#“作爲前綴,則表示爲最近幾次的取值,如sun(300)表示300秒內所有取值之和,而sum(#10)則表示最近10次取值之和;
一個例子: {high1:system.cpu.load[all,avg1].last(0)}>3
high1主機上所有CPU的過去一分鐘內的平均負載的最後一次取值大於3時將觸發狀態變換
對於last函數來說,last(0)相當於last(#1)

創建trigger(觸發器)

配置 –>主機 –>觸發器 –> 創建觸發器
創建表達式的時候可以自己手動寫入,也可以通過選擇系統已存在的配置進行設置。點擊添加即可配置。
這裏寫圖片描述

查看觸發的事件

每一次狀態轉換都會觸發一個事件
監控 –> 問題
這裏寫圖片描述

4、自定義發送郵件

創建發送郵件的用戶
管理 –> 用戶 –> 創建用戶
這裏寫圖片描述
這裏寫圖片描述
配置 –> 動作 –> 創建動作
這裏寫圖片描述
操作:
這裏寫圖片描述

報警升級

這裏寫圖片描述
步驟持續時間:每一次報警區間爲多長時間,比如,五分鐘黃埔仍然報警怎麼辦? 告警升級。從第一次報警到第二次報警之間,可以執行某些命令,也可以繼續發送某些郵件。發郵件:可以發送給某個人或者某個組。是僅發送消息還是?這裏選擇發送消息,All表示所有方式都發消息。使用默認消息發送,什麼條件發送,可以繼續添加,也可以不添加。

8. 在 zabbix server 上添加zabbix agent 主機的幾種方法

1。手動添加主機
配置-->主機-->創建主機-->填寫信息
2。自動發現主機
配置--> 自動發現主機--> 創建發現規則--> 填寫規則,可以給發現的主機選擇添加相應的模板
3。自動註冊
配置--> 動作--> 事件源:自動註冊,創建動作--> 填寫名稱,觸發條件等,可以選擇添加的主機添加相應的模板

來看看 zabbix 是怎樣添加服務監控項的,利用 zabbix 自帶的監控模版,以 http 服務爲例:

配置--> 主機--> vm6--> 模板--> 選擇--> 添加

這裏寫圖片描述

添加成功

這裏寫圖片描述

9. 監控 zabbix server 上的 mysql 服務

在/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf 文件中指定了 zabbix-agent 如何獲取 mysql服務的各種信息,並在/var/lib/zabbix 目錄中新建“.my.cnf”文件,用以指定 zabbix agent 如何登陸數據庫,默認使用的是 zabbix 用戶,可以在 zabbix_server.conf 文件中找到密碼。

[root@vm5 ~]# mkdir /var/lib/zabbix
[root@vm5 ~]# vim /var/lib/zabbix/.my.cnf
[mysql]
host = localhost
user = zabbix
password = redhat
socket = /var/lib/mysql/mysql.sock
[mysqladmin]
host = localhost
user = zabbix
password = redhat
socket = /var/lib/mysql/mysql.sock

[root@vm5 templates]# systemctl restart zabbix-agent

如果是監控遠程主機的 mysql 服務需要創建 zabbix 用戶並授權
Mysql > GRANT USAGE ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'westos';
Mysql > FLUSH PRIVILEGES;

鏈接 mysql 監控模版
配置--> 主機--> Zabbix-server--> 模板--> 選擇Template DB MySQL添加

點擊 配置--> 主機 --> zabbix server 圖形 可以看到兩個新的監控圖形

這裏寫圖片描述

這裏寫圖片描述
2018-02-03

參考snmp博客:https://www.cnblogs.com/sddai/p/5911031.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章