高負載web架構(四)

f.node9上部署好zabbixphp

監控:前端

       最關鍵的工具:傳感器:收集數據,檢測數據node

過程:mysql

       數據採集 --> 數據存儲 --> 數據展現web

       報警:採集到的數據超出閾值sql

 

       常見的實現監控SNMPSimple Network Management Protocol 簡單網絡管理協議數據庫

              有兩部分組成:監控端(NMS)和被監控端(agentjson

 

       SNMP的工做模式:後端

              NMS主動向agent採集數據服務器

              agent主動向NMS報告數據

              NMS請求agent修改配置

 

       SNMP的組件:三部分組成

              MIBmanagement information base  管理信息庫(。。。將每一被監控的id到對應名稱的轉換)MIB:全部能夠被監控、被管理的對象的集合

每一個Agent都有管理信息庫

              SMIMIB表示符號

              SNMP協議

 

SNMP是一個簡單協議,這個協議只能發送get,好比get abc,對方收到get abc以後,知道對方要收集abc的指標,可是abc是什麼?cpu利用率?內存空間?這就是MIB庫中定義的,abc假如爲cpu利用率,bcd爲磁盤空間空閒等,get abc後,Agent就知道對方要收集什麼數據了。而專用的agent端他們對協議自己實現了擴展,在協議自己就能夠描述獲取什麼數據的,在zabbix 2.2以前協議使用的都是JSON格式的,JSON(相似輕量級的xml

 

NMS可發起操做:

              Get(得到數據), GetNext(得到下一個數據或下一批), Set(設定、修改配置), Trap(等待被監控端所發來的主動報告數據)

 

              agent: Response  響應一個或多個值

 

       SNMP工做於UDP協議

                     NMS: 161端口

                     agent: 162端口

 

SNMP自己沒有提供數據存儲、報警等的能力,因此須要藉助第三方工具來實現數據存儲展現和報警。

 

常見的報警: 郵件、短信

 

報警升級操做:在指定時間內若是報警依然存在,則須要實現升級。

定義在維護時間內不進行報警【服務器下線,更新版本】

 

       監控功能的實現:

              專用agent

              ssh

              SNMP

              IPMI

 

       智慧平臺管理接口(Intelligent Platform Management Interface)本來是一種Intel架構的企業系統的周邊設備所採用的一種工業標準。IPMI亦是一個開放的免費標準,使用者無需支付額外的費用便可使用此標準。

 

zabbix 是基於json格式,因爲json有不少元數據,額外須要多消耗帶寬,到zabbix 2.4以後,不在使用json格式來描述數據,它本身直接在協議中經過換行來定義協議是如何工做的。zabbix自己是php所實現的,能夠經過API接口添加擴展自身業務的需求

 

MIBmib視圖是mib的子集,一般配置Agent時,用戶能夠將commit名與mib視圖綁定,從而限制nms能夠訪問的mib對象。能夠在定義Agent時,明確指定經過哪個commit             僅能獲取那一部分mib庫中的子集。包含關係經過mib樹來實現,是一顆倒置的數,每個被監控對象都有其惟一的OID

 

       Linuxsnmp功能: net-snmp程序包

 

       zabbix: 有專用agent的監控工具

              監控主機:

                     LinuxWindowsFreeBSD

              網絡設備:

                     SNMP, SSH(並不是全部)

 

       數據存儲:

              cacti: rrd (round robin database 環狀數據庫,環滿了,就覆蓋數據)

              zabbix: mysql, pgsql

 

能夠在zabbix上定義一個觸發器,對每個被監控項定義一個或多個觸發器,觸發器中定義了閾值,一旦採集的數據超出了閾值或不符合閾值的指標,觸發器被觸發就會產生一個觸發事件,這個事件能夠被action所調用,action操做主要有兩類:執行程序;發送報警;

 

若是監控節點和數據量太大,則須要部署分佈式的zabbix監控,經過一箇中心控制zabbix【不監控任何數據】代理到後端多個zabbix上。代理監控的數據都保存到本身獨立的數據庫中,在一個指定的時間段時把代理監控的數據所有複製到中心控制端的數據存儲上,然後就能夠把代理上的數據都刪除,從而繼續進行監控存儲數據。

 

zabbix 2.4支持兩種分佈式機制:zabbix proxy; zabbix node               

 

       zabbix架構中的組件:

       監控端  zabbix-server:C語言

       被監控端     OS:zabbix-agent: C語言

              zabbix-webGUI,用於實現zabbix設定和展現  php研發的

              zabbix-proxy: 分佈式監控環境中的專用組件

 

      zabbix-database: MySQL, PGSQL(postgreSQL)OracleDB2SQLite


Zabbix架構
wKiom1XMLbLi80DFAAH0jZTnsUk417.jpg

Zabbix Server:負責接收Agent發送的報告信息的核心組件,全部配置、統計數據及操做數據均由其組織進行;

Database Storage:專用於存儲全部配置信息,以及由zabbix收集的數據;

Web interfacezabbixGUI接口,一般與Server運行在同一臺主機上;

Proxy:可選組件,經常使用於分佈式監控環境中,代理Server收集部分被監控端的監控數據並同一發往Server端;

Agent:部署在被監控主機上,負責收集本地數據併發往Server端或Proxy端;

JMXZabbix監控Java應用

 

zabbix架構wKioL1XML_uyx_4WAALROMRi9Yw192.jpg

Zabbix經常使用術語

  主機(host):要監控的網絡設備,可由IPDNS名稱指定;

  主機組(host group):主機的邏輯容器,能夠包含主機和模板,但同一個組內的主機和模板不能互相連接;主機組一般在給用戶或用戶指派監控權限時使用;

  監控項(item):一個特定監控指標的相關的數據,這些數據來自於被監控對象;itemzabbix進行數據收集的核心,沒有item,將沒有數據;相對某監控對象來講,每一個item都由「key」進行標識;

  觸發器(trigger):一個表達式,用於評估某監控對象的某特定item內所接收到的數據是否合理範圍內,即閾值;接收到的數據量大於閾值時,觸發器狀態將從「OK」轉變爲「Problem」,當數據量再次迴歸到合理範圍時,其狀態將從「Problem」轉換回「OK」;

  事件(event):即發生的一個值得關注的事情,例如觸發器的狀態轉變,新的Agent或從新上線的Agent的自動註冊等;

  動做(action):指對於特定事件事先定義的處理方法,經過包含操做(如發送通知)和條件(什麼時候執行操做);

  報警升級(escalation):發送警報或執行遠程命令的自定義方案,如每隔5分鐘發送一次警報,共發送5次等;

  媒介(media):發送通知的手段或通道,如EmailJabberSMS等;

  通知(notification):經過選定的媒介向用戶發送的有關某事件的信息;

  遠程命令(remote command):預約義的命令,可在被監控主機處於某特定條件下時自動執行;

  模板(template):用於快速定義被監控主機的預設條目集合,一般包含了itemtriggergraphscreenapplication以及low-level discovery rule;模板能夠直接鏈接至單個主機;

  應用(application):一組item的集合;

  web場景(web scennario):用於檢測web站點可用性的一個或多個HTTP請求;

  前端(frontend):Zabbixweb接口;

Zabbix的邏輯架構

wKiom1XML9rgGc0ZAAE1paxFlSo983.jpg


Zabbix啓動後,Zabbix Server Processes

watchdog 【監控每個進程是否處於正常運行當中】

housekeeper 【管家,監控數據是保存到數據庫上的,定義item時須要說明數據的保存時間,不在指定範圍內監控到的數據都會被清理】

poller【收集數據的】

alerter 【執行警報操做的】

httppoller【專用web的收集數據】

discoverer 【發現機制,一旦對應的主機啓動了就會加入監控列表中,很是消耗資源】

escalator 【報警升級】

timer【計時器】

nodewatcher 【監控各節點的,每個被監控主機都不在線時,這些主機上的item都不能監控數據了】

db_data_syncer 【數據庫的數據同步器,在分佈式場景中使用】

db_config_syncer 【數據庫的配置同步器,在分佈式場景中使用】

pinger 【經過ping操做探測主機是否在線】

 

       zabbix產生的數據主要由四部分組成:

              配置數據:比較小

              歷史數據:50Bytes

              歷史趨勢數據: 128Bytes

              事件數據: 130Bytes

 

Install Zabbix

1.Create zabbixuser

2.Untar sourcetarball

3.Create zabbixdatabase and populate it

  A mysql (Postgresql,....) installation isneeded...

4. ./configure ;make ; make install;

  Some packages may be missing..

  Does not take too long ( < 10min )

5.Createconfiguration file for zabbix server

  (misc/conf/zabbix_server.conf)

6.Start the zabbixserver

 

經過服務器端的web接口來完成zabbix server的初始化,不使用web接口則如下操做完成便可。

Install the Zabbixweb interface

1.Apache/PHP isrequired

   Copy PHP files to $DocumentRoot/zabbix

   http://localhost/zabbix

2.Change php.ini

   Default settings are by far not enough!

   date.timezone = Asia/Shanghai

3.Restart webserver

4.Finishconfiguration

5.Login withadmin/zabbix

登陸默認帳號和密碼爲adminzabbix

1.安裝httpdphpmysql-serverzabbix-2.4.0-1.el6.x86_64.rpm zabbix-sender-2.4.0-1.el6.x86_64.rpmzabbix-agent-2.4.0-1.el6.x86_64.rpm zabbix-server-2.4.0-1.el6.x86_64.rpmzabbix-get-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpmzabbix-web-2.4.0-1.el6.noarch.rpm zabbix-web-mysql-2.4.0-1.el6.noarch.rpm

,受權用戶給zabbix使用

mysql> grantall on zabbix.* to 'zabxuser'@'192.168.%.%' identified by 'zabxpass';

mysql> grantall on zabbix.* to 'zabxuser'@'localhost' identified by 'zabxpass';

2.在啓動zabbix web以前須要先導入數據到數據庫中,對應數據在

# ls/usr/share/doc/zabbix-server-mysql-2.4.0/

create  upgrades MySQL的模板腳本

# ls/usr/share/doc/zabbix-server-mysql-2.4.0/create/  建立數據庫

data.sql  p_w_picpaths.sql schema.sql 三個腳本都須要導入數據庫中,若是是proxy端,則只須要導入一個,他們執行次序和名字次序是相反的,先導入schema.sql、再導入p_w_picpaths.sql、最後導入data.sql

# mysql zabbix </usr/share/doc/zabbix-server-mysql-2.4.0/create/schema.sql 。。。

3. 配置zabbix的主配置文件,指定MySQL所在的位置等

# ListenPort=10051  服務器上須要監聽的端口

# DBHost=localhost  數據庫服務器節點,若是是本機建議使用localhost,與MySQL通訊時會更快

DBName=zabbix

# DBSchema=使用的爲mysql,不用指定

DBUser=zabbix

DBPassword=xxx

4. Change php.ini

   Default settings are by far not enough!

   date.timezone = Asia/Shanghai

 

#servicezabbix-server start

監控客戶端,客戶端須要安裝:zabbix-2.4.0-1.el6.x86_64.rpm net-snmp zabbix-agent-2.4.0-1.el6.x86_64.rpmzabbix-sender-2.4.0-1.el6.x86_64.rpm


wKiom1XMMCSycUkNAAD4uI_u3qQ284.jpg

wKioL1XMMijyzN96AADC3Tko9tg643.jpg

wKiom1XMMCTD9ztAAADcTOZ-PTI047.jpg

wKioL1XMMiiSNuEjAADtXo47Wso934.jpg

wKiom1XMMCTCURWLAAD4t77kkNw815.jpg

wKioL1XMMimgLSo9AALvtXTtWFI401.jpg

wKiom1XMMCXRVqCZAACJcI2N5-g627.jpg

mysql> selectkey_,type from items;

+-------------------------------------------+------+

| key_                                      | type |

+-------------------------------------------+------+

| proc.num[]                                |    0 |

|system.cpu.load[percpu,avg1]             |    0 |0zabbix Agent所提供的

|proc.num[,,run]                          |    0 |

|system.swap.size[,free]                  |    0 |

|system.users.num                         |    0 |

|vfs.file.cksum[/etc/passwd]              |    0 |

| agent.ping                                |    0 |

|system.uptime                            |    0 |

| vm.memory.size[total]                     |    0 |

。。。

zabbix_get -s127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"

向某一zabbix agent獲取key

 

媒介類型(Media type

zabbix中,媒介指發送通知信息的通道,其一般有如下幾種類型

  E-mail:電子郵件,即通知郵件的方式傳送通知信息;

  SMS:手機短信,即經過鏈接至zabbix服務器GSM Modem發送通知;

  Jabberjabber消息;Jabber是一個開放的、基於XML的協議,可以實現基於InternetLAN的即時通信服務;

   自定義的通知腳本:以上方式不能知足需求時,zabbix能夠調用位於其配置文件「AlertScriptsPath」變量所定義的腳本查找目錄中的腳原本完成通知功能;

 

類別爲「Send Message」時的相關屬性:

   Send to User groups:給選定組中的全部用戶發送通知;

   Send to users: 給選定的用戶發送通知;

   Send only to:發送通知時所使用的媒介,all爲全部媒介

   Default Message:若是啓用,則發送默認消息;

   Subject:消息的自定義主體,能夠包含宏;

   Message:要發送的消息內容,可使用宏;

相關文章
相關標籤/搜索