Zabbix:
功能:
1.監控硬件、軟件、業務指標; 【此功能又可稱爲:採樣】
2.告警;
3.將數據存儲下來;
4.展示;
【有云道:我們決不允許任何未經監控的系統服務甚至是業務上線;監控系統是幫助我們瞭解系統運行狀態的、指標非常重要的組件】
監控系統:
硬件:主機、路由器、交換機、UPS、I/O系統(專業的存儲)……;
軟件:操作系統,網絡,以及各種各樣的應用程序;
異常狀態:DB down掉了、從服務器無法使用了或者所有的複製功能無法繼續進行、服務器不可達了;
非常關鍵的事件:磁盤利用率快接近滿值了(還有5%就滿了)、主從複製結構中從服務器落後主服務器(即有大量的從服務器延遲導致);數據節點down;
CPU的100%利用率:
趨勢數據(包括時間):通過圖形方式(趨勢曲線)進行展示
持續多長時間監控磁盤是否佔滿;內存是否佔滿;什麼時候發生事件是峯值還是持續性;多次採樣;多長時間發生一次,是否週期性發生;例如一天一次,或每週日晚上;發生是事件是否導致其它事件發生例如I/O出問題
採樣:主機:系統指標、業務指標(QPS,TPS),告警
週期性地數據指標採樣 –> 存儲 –> 展示
報警:分析採樣得到的數據是否依然在合理區間;
監控系統工作的兩個關鍵點:1.首先要有一個【網絡傳感器】,它能夠幫我們在關鍵事件上或關鍵組件上獲取數據指標,然後報告給監控系統端(NMS)。
監控系統端稱爲NMS(網絡監控系統),被監控端稱爲agent;可分爲無agent和有agent;無agent方式包括:ssh,snmp,telnet;基於web監控可使用curl命令;agent一般都是專業開發的;
傳感器【agent】在系統當中有個專門的稱呼,它是個安裝在被監控系統上的組件,這個組件能監控多少指標取決於監控的開發和組件自己的能力.
agent 與監控端之間可以基於專有協議進行通信,agent是按需開發的,所有功能比ssh做起來要簡單很多,同時功能也要完善和強大很多。
監控通道:基於ssh協議(無agent時),SNMP:Simple Network Management Protocol(簡單網絡管理協議),基於telnet,基於agent進行監控。基於IPMI接口。
SNMP:
Simple Network Management Protocol(簡單網絡管理協議),管理和監控數據,但默認不支持存儲數據。
SNMP是一個非常古老的協議,幾乎市面上所有的網絡組件(也包括操作系統)都原生自帶了SNMP的agent接口;因此只要配置了SNMP的監控端,它就能夠到所有支持snmp 的agent的主機節點上實現數據採集,這個agent就屬於監控在每一個監控主機之上的一個進程,這個進程可以獲取幾乎所有能夠被snmp納入進來的監控指標,而幾乎所有關心的硬軟件指標,尤其是系統性指標,snmp都能夠執行監控操作,也就意味着snmp可以採集本地主機上幾乎所有你所關注的指標數據:比如像CPU利用率,網絡帶寬使用狀態,網卡數據報文傳輸速率等等一切都可以採集;
snmp:最通用的監控系統;只要配置了snmp的監控端,就能監控所有設備;
v1 老版本:沒有認證功能,通信過程沒有加密;很多網絡設備僅支持v1版本;
v2c 社區版本:有身份識別機制,基於預密鑰系統,加密方式不成熟;
v3: 包括了安全認證,通信過程加密;
以LINUX 來說明,SNMP的監控端就是一個命令行工具,它可以基於snmp協議向被監控端的進程發出請求;
它的命令有:
snmpget:獲取某個數據指標;
snmpgetnext:獲取一個數據後會連續自動獲取下一個數據;
snmpwalk:像散步一樣踩;數據輪詢讀取;
snmptrap:捕捉;被監控端(agent)能夠自動發送“關鍵型事件“ (比如再不進行處理就要掛了的、磁盤快滿了等)給SNMP監控端;
MIB 庫描述許多指標,用倒置的樹狀結構描述,每一個被監控對象都有一個全局唯一標識;
唯一標識稱爲:OID 監控對象ID;
snmp支持管理端發送寫操作,在被管理端執行;但不會採樣後,把數據存儲下來,沒有周期地數據指標採樣,不會繪圖;
rrd【round-robin database】:輪詢數據庫
IPMI:intel公司生產的專用接口;
也是監控工具:
cacti(利用snmp週期性的存取數據;繪圖工具,rrd監控,但不能報警;繪製完後存取在rrd(輪詢數據庫)中);
nagios(只記錄過去到目前爲止的幾個數據,實現關注的業務指標的數據定義合理區間,在合理區間則不問,不在則;報警功能異常強大。但無法存取數據,無法繪圖)
ganglia:強大的數據整合功能,分佈式展示;
被監控設備通用支持snmp監控,有些可安裝agent監控,如果是類unix系統也可使用ssh接口進行監控,有些硬件還支持智慧平臺管理接口IPMI(在主版上的跟網卡接
口相似,現代專用服務器都有這樣的接口,不同公司生產的可能不太一樣)
之前都是通過將cacti 和nagios 一併起來使用。
監控系統存儲的數據:時間序列數據(根據時間的走勢產生的),zabbix是存取在mysql或pdsql這樣的開源系統中的kp;
存儲數據的數據庫:
關係型數據庫
輪詢數據庫(rrd)
時間序列數據庫(非關係型數據庫,NoSQL中的一種)
zabbix (自行升級報警機制,強大的運維聯動工具)
LTS(長期支持維護的版本):2.2, 3.0 【建立安裝的版本】
Zabbix特性:
存儲於數據庫(默認爲兩種數據庫):
mysql
pgsql支持告警升級:
script 【自定義腳本】
notification 【通知】graph 【圖表】
map 【網絡拓撲圖】
screen 【將多個graph(圖表)整合在一個屏幕上展示】
slide show 【支持使用幻燈片的形式展示】
自定義檢測機制:UserParamenter 【用戶參數】
自定義指定時間間隔 【每隔多長時間監控一次】
數據採樣:snmp,ssh/telnet,agent,lpml,jmx【java的管理接口】
實時繪圖方案:展示功能的一種表現
告警功能:
數據存儲:
支持使用模板:好處在於,如果監控200個linux主機,裏面有50個是webserver,但監控的指標應該都是相同的,可以做一個模板,每個主機進行套用,就可以使用模板機制完成快速監控和配置。
支持網絡自動發現機制:如果網絡中新增了200臺主機,不需要手動添加這200臺主機進行監控,而是添加進來之後能夠自動納入到zabbix的監控體系中去;zabbix通過掃描一個網段中的主機,如果發現了某個主機,就自動加進來進行監控,還可以自動把模板機制套上去來完成所有數據指標的監控。
支持API做自己展示的接口:
啓動幾個監控子進程取決於到底監控的指標有多少個。
分佈式監控:
proxy:server值監控一部分指標,代理也收集數據,會在某一時刻同一發送給zabbix service。
sever <—-> proxy <—-> agent/ssh/ipmizabbix的組件:
Zabbix Server:負責接收agent發送的報告信息的核心組件(最關鍵的組成部分,使用C語言所研發,工作性能非常棒),所有配置、統計數據及操作數據均由其組織進行;Database Storage:專用於存儲所有配置信息(使用mysql或pdsql),以及由zabbix收集的數據;Web interface:zabbix的GUI接口,通常與Server運行在同一臺主機上;Proxy:可選組件,常用於分佈監控環境中代理Server收集部分被監控端的監控數據並統一發往Server端;Agent:部署在被監控主機上,負責收集本地數據併發往Server端或Porxy端;
zabbix宏觀架構圖1:
zabbix 的宏觀架構圖2:
zabbix程序的組件構成:
zabbix-server::服務端守護進程;zabbix-database:數據庫;zabbix web GUI:web界面;zabbix-agent:agent端守護進程; 【做分佈式監控纔會用到】zabbix-proxy:代理服務器,可選組件;zabbix-get:命令行工具,手動測試向agent發起數據採集收發;zabbix-sender:命令行工具,運行於agent端,手動向server端發送數據;zabbix-java-geteway:JMX接口用到的組件,zabbix2.0引入,java網關類似於zabbix_agentd,監控java或jam虛擬機的相關程序;只能是單單向,由zabbix server從JMX來取數據;JMX: JVM
zabbix的核心術語:
host --> host group 【主機是要監控的網絡設備;可能是服務器或者 路由器 或 交換機】 item:key[arg1, arg2], command 【監控項,key+採集到數據】 key:【定義採集命令的別名;配置時可查看官方文檔】 trigger:【觸發器,表達式;】 host: cpu.cs[#1] > 10000 event(狀態變更):trigger events,discovery events;【事件有多種;】 action:condition,operation;【針對特定事件的處理動作】 alert:【報警】 media:【媒介;傳遞報警信息】 templation:【模板,邏輯或者抽象的組件;】 application:【應用,即同類別的多個item構成的組;】 監控項(item):【對於zabbix監控來說,我們真正每一個監控的數據指標,在zabbix中我們用 item 進行描述,而每個item都由一個“key”進行標識;】 hosts (host groups):items screens:屏幕 maps:拓撲圖
zabbix server端的子進程poller通用的,基於agent實現採集;httppoller執行基於http協議監控數據採集;還有很多poller,例如ipmipoller、snmppoller、jmxpoller;housekeeper進程負責清理過期數據;例如每5分鐘檢查一次是否有過期數據;pinger進程探測主機是否在線;nodewatcher進程監控節點是否在線;alerter報警器,執行報警時可分級escalator;可實現自動發現discoverer;db_config_syncer與代理通信時發送數據配置同步;db_data_syncer與代理通信時發送數據同步;watchdog進程是用來監控每個子進程是否OK;
zabbix的進程:
閾(yu)值:一個目標應該存在的合理區間和非合理區間的界限。比如定義閾值爲100,大於100則爲非合理區間,小於等於100則爲合理區間。
zabbix的安裝和使用
Database: mysql, pgsql 【依賴關係】
選用:mariadb
zabbix安裝:
依賴關係:
要求部署apache、php;
其中php要提供的模塊:
gb 爲php gd的擴展,必須支持--with-png-dir, --with-jpeg-dir, --with-freetype-dir;bcmath 爲php-bcmath模塊,--enable-bcmath;ctype 爲php-ctype模塊,--enable-ctype;libXML 爲php-xml或php5-dom模塊;xmlreader 爲php-xmlreader模塊;xmlwriter 爲php-xmlwriter模塊;session 爲php-session模塊;sockets 爲php-net-socket模塊,--enable-sockets;mbstring 爲多字節字符串模塊,php-mbstring模塊,--enable-mbstring;gettext 爲php-gettext模塊,--with-gettext;ibm_db2 爲如果zabbix後端數據庫是IBM DB2數據庫所提供的模塊;mysql 爲如果zabbix後端數據庫是MYSQL數據庫所提供的模塊;oci8 爲如果zabbix後端數據庫是Oracle數據庫所提供的模塊;pgsql 爲如果zabbix後端數據庫是PostgreSQL數據庫所提供的模塊;sqlite3 爲如果zabbix後端數據庫是SQLite數據庫所提供的模塊;zabbix服務器依賴軟件:OpenIPMI 爲支持IPMI所依賴到的軟件;libssh2 爲支持SSH所依賴到的軟件;fping 爲支持ICMP所依賴到的軟件;libcurl 爲支持web監控所依賴到的軟件;libiksemel 爲支持Jabber即時通信協議所依賴到的軟件;net-snmp 爲支持SNMP所依賴到的軟件;
安裝方式:
Source code(源代碼):不建議使用;
預編譯好的二進制程序包:
rpm:
epel
zabbix repository 【直接指向zabbix的官方源即可】
deb 【Debian軟件包格式的文件擴展名】
教室yum源baseurl=ftp://172.16.0.1/pub/Sources/7.x86_64/zabbix/x86_64/ 官方yum源: [epel]name=zabbix epelbaseurl=http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/gpgcheck=0
2.2,2.4,3.0 【3.0中server.service 由server-mysql 包提供;】
安裝zabbix 【此處以3.0爲例】
[root@localhost ~]# vim /etc/yum.repos.d/zabbix.repo------------------------------------------------------------------------------------[zabbix]name=zabbix.repobaseurl=ftp://172.18.0.1/pub/Sources/7.x86_64/zabbix/x86_64/gpgcheck=0 [root@localhost ~]# yum -y install zabbix-server-mysql 【此處僅爲演示是否這個包就是server包】[root@localhost yum.repos.d]# rpm -q zabbix-server-mysqlzabbix-server-mysql-3.0.2-1.el7.x86_64 [root@localhost ~]# yum install mariadb-server[root@localhost ~]# vim /etc/my.cnf-------------------------------------------------------------------------------------[mysqld_safe]...skip_name_relsolve=on 【跳過名稱解析】innodb_file_per_table=on 【啓動innodb】 [root@localhost ~]# systemctl start mariadb.service[root@localhost ~]# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:808 *:* LISTEN 0 50 *:3306 *:* [root@localhost ~]# mysqlMariaDB [(none)]> create database zabbix charset 'utf8'; 【創建一個zabbix 數據庫,並把它的字符集設爲'utf8'】MariaDB [(none)]> gtant all on zabbix.* to zbxuser@'127.0.0.1' identified by 'zbxpass'; 【創建一個用戶名爲zbxuser,密碼爲zbxpass的用戶能夠通過本機遠程訪問zabbix 數據庫】MariaDB [(none)]> gtant all on zabbix.* to zbxuser@'172.18.%.%' identified by 'zbxpass'; 【創鍵17.18網段的所有主機均可遠程訪問】MariaDB [(none)]> select host,user,password from mysql.user; 【查看當前數據庫中用戶賬號及密碼】 [root@localhost ~]# yum install zabbix-server-mysql zabbix-get zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender 【安裝所有要用到的程序包】 [root@localhost ~]# ls /usr/lib/systemd/system | grep zabbix 【查找/usr/lib/systemd/system 目錄下關於zabbix的文件】zabbix-agent.servicezabbix-server.service [root@localhost ~]# vim /usr/lib/systemd/system/zabbix-server.service 【查看這個文件】...[Service]Environment="CONFFILE=/etc/zabbix/zabbix_server.conf" 【可以看到服務是由/etc/zabbix/zabbix_server.conf 這個文件提供的】EnvironmentFile=-/etc/sysconfig/zabbix-server [root@localhost ~]# rpm -ql zabbix-server-mysql/usr/share/doc/zabbix-server-mysql-3.0.2/README/usr/share/doc/zabbix-server-mysql-3.0.2/create.sql.gz 【此sql腳本 用於初始化zabbix server數據庫】 [root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.2/[root@localhost zabbix-server-mysql-3.0.2]# lsAUTHORS ChangeLog COPYING create.sql.gz NEWS README [root@localhost zabbix-server-mysql-3.0.2]# gzip -d create.sql.gz 【展開解壓壓縮包】[root@localhost zabbix-server-mysql-3.0.2]# lsAUTHORS ChangeLog COPYING create.sql NEWS README [root@localhost zabbix-server-mysql-3.0.2]# ll -h-rw-r--r-- 1 root root 3.0M 4月 20 22:36 create.sql [root@localhost zabbix-server-mysql-3.0.2]# mysql -h127.0.0.1 -uzbxuser -p zabbix < create.sql 【以 zbxuser 用戶身份導入數據庫 zabbix 指明給 create sql】Enter password: 【密碼:zbxpass】 [root@localhost zabbix]# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak [root@localhost zabbix]# vim /etc/zabbix/zabbix_server.conf-----------------------------------------------------------------------------DBHost=127.0.0.1DBName=zabbixDBUser=zbxuserDBPassword=zbxpassDBSocket=/var/lib/mysql/mysql.sock [root@localhost ~]# systemctl start zabbix-server.service 【啓動zabbix服務】 #啓動 web GUI[root@localhost zabbix]# rpm -q php-mysql 【確保此包安裝上】php-mysql-5.4.16-36.el7_1.x86_64 [root@localhost zabbix]# vim /etc/httpd/conf.d/zabbix.conf ---------------------------------------------------------------------------------<Directory "/usr/share/zabbix/conf"> ... php_value date.timezone Asia/Shanghai 【更改此處時區定爲 亞洲/上海 】 </IfModule></Directory> [root@localhost zabbix]# systemctl start httpd.service 【啓動httpd 服務】 訪問http://172.18.77.84/zabbix/setup.php 首次安裝zabbix 使用;
安裝服務端:
# yum install zabbix-server-mysql zabbix-get
安裝web GUI:
# yum install zabbix-web zabbix-web-mysql
安裝agent端:
# yum install zabbix-agent zabbix-sender
zabbix server數據庫初始化:
2.x:三個sql腳本;
3.x: 一個sql腳本;
create.sqlmysql -h127.0.0.1 -uzbxuser -p zabbix < create.sql
啓動zabbix-server進程:
/usr/lib/systemd/system/zabbix-server.service
配置文件:/etc/zabbix/zabbix_server.conf
指令有四類:
############ GENERAL PARAMETERS ################# 【通用指令】 ############ ADVANCED PARAMETERS ################ 【高級指令;用於定義子進程數量、超時時長以及緩存大小】 ####### LOADABLE MODULES ####### 【加載的模塊】 ####### TLS-RELATED PARAMETERS ####### 【跟TLS 相關的參數】
通用參數:
ListenPort=10051 【監聽的端口】 SourceIP= 【指定那個zabbix_serverIP 爲源ip】 LogType=file 【日誌將使用自我獨立格式進行】 LogFile=/var/log/zabbix/zabbix_server.log 【定義日誌文件路徑】 LogFileSize=0 【0 表示不滾動,但是這樣是不合理的;如果此處設爲 1024 則表示1G之後開始滾動】 PidFile=/var/run/zabbix/zabbix_server.pid 【服務端PID文件的文件路徑】 ----------------------上面爲無需更改選項-------------------------------------- 下面爲手動更改選項--------------- DBHost=localhost 【數據庫服務器地址】 DBName=zabbix 【數據庫名稱】 DBUser=zbxuser 【數據庫用戶;千萬不能設爲管理員賬號】 DBPassword=zbxpass 【數據庫用戶密碼;真正生產使用需要使用複雜密碼】 DBSocket=/var/lib/mysql/mysql.sock 【指明DBSocket 的位置(做本地通信的);此處爲默認rpm包安裝所在位置;生產使用時如果database 和 zabbix 不在同一主機上,這個就沒有影響】
啓動服務:systemctl start zabbix-server.service
注意:CentOS 7.0和7.1需要升級trousers程序包版本到0.3.13-1 以上.; 【否則無法啓動 zabbix-server服務】
配置zabbix-web
配置php的時區指定:
(1) php.ini 【編輯此文件】
(2) /etc/httpd/conf.d/zabbix.conf 【rpm安裝的可以編輯此文件,它是zabbix安裝時主動提供的片段化的配置文件,有個專門的指令用來定義只爲zabbix應用程序所開啓的配置而不至於全局生效】
訪問URL:http://server/zabbix
安裝後配置文件:/etc/zabbix/web/zabbix.conf.php
登錄:
用戶名:admin/zabbix——密碼
添加一臺被監控主機:
host group 【首先定義好主機組】–> host 【添加被監控主機】–> appliction【建立應用】 –> item【閾值】 –> graph (simple, customed)【簡單,自定義的】 –> triggers【定義觸發器】 –> action 【完成報警操作】
回顧:
監控系統:採集、存儲(歷史數據:採用某個時間點獲取到的數據;不會保持太長時間,最多90天;和趨勢數據:對於過去的數據基於某種平度求平均值,一般是基於每天來做的;可以保持1年、2年、5年之久)、可視化、報警(發送通知)
採樣:ssh/telnet, IPMI, agent, snmp, …
存儲:
歷史數據、趨勢數據
存儲於何處:
(1)rrd
(2)sql:MySQL, PGSQL,Oracle, SQLite, DB2
(3)時間序列數據庫
(4)NoSQL展示:應用程序(web,比如運行再php上)
告警:通過郵件、短信、微信等方式發送報警信息
zabbix的術語:
主機、主機組; 監控項:key, command 應用(監控項組):application Graph: 屏幕(graph組):screen Trigger:表達式 Action: Operations remote command send notification escalation:報警升級 Maps ……
程序組成部分:
zabbix-server, zabbix-agent, zabbix-get, zabbix-sender, zabbix-database(MySQL), zabbix-web 【zabbix前端接口】
zabbix-proxy(分佈式監控會用到)
安裝配置監控系統:
zabbix-database: 【可獨立主機實現】
CentOS 6:mysql-server
CentOS 7:mariadb-serverzabbix-server:【獨立的主機、組件】
/etc/zabbix/zabbix-server.conf 【指明連接哪個數據庫、服務器等】zabbix-web:
依賴於:httpd.php(extensions:擴展)
安裝被監控的系統:
zabbix監控接口:
(1)ssh:ssh service 【ssh服務】
(2)telnet: telnet service 【配置telnet服務】
(3)IPMI:有這樣的硬件接口
(4)SNMP:snmp agent 【通用的接口機制】
(5)agent:OS, 【安裝agent,啓動agent進程纔可以實現監控操作】
zabbix(2)
agent端配置:
···
# yum install zabbix-agent zabbix-sender/etc/zabbix/zabbix_agentd.conf
···
zabbix agent:
############ GENERAL PARAMETERS ########## EnableRemoteCommands=0 【是否允許執行遠程命令;0 爲禁用,設爲1則啓用】 ##### Passive checks related(被動檢測相關的配置:agent等待server過來請求數據) 【被動監控僅需配置此處】 Server=127.0.0.1 【授權執行數據採集監控操作的zabbix server主機的地址】 【以逗號分隔授權給哪些zabbix-server或zabbix-proxy過來採集數據的服務器地址列表;】 ListenPort=10050 ListenIP=0.0.0.0 【即監聽所有的IP地址】 StartAgents=3 【啓動agent進程數:此處爲3】 【真正啓動多少取決於併發允許有多少個過來對當前主機上需要監控item 採集數據的線程有多少個,比如有50個線程,則agent需要啓動進程數也要50個】 ##### Active checks related(主動檢測相關的配置:agent主動向server發送監控數據) *ServerActive=IP[:Port] 【以逗號分隔的、由當前agent主動發送監控數據過去的server端;可以指明端口】【主動監控僅需配置處 1】 ServerActive=127.0.0.1 【發送監控數據至哪些地址;地址列表,逗號分隔的IP[:PORT];】【主動監控僅需配置處 2】 Hostname=Zabbix server 【在zabbix主機上的主機名,用於報告給zabbix server,因此,需惟一;】 HostnameItem=system.hostname 【使用其他方式檢測出來的相關信息給服務器端進行發送,指明一個Item(key)來獲取本機的主機名然後發送給服務端】 HostMetadata= 【指明一個源數據】 RefreshActiveChecks=120 【刷新時間間隔;此處爲120秒刷新一次】 BufferSend=5 【發送時使用多少個緩衝】 BufferSize=100 【發送時使用多大緩衝】 #systemctl start zabbix-agent.service
例如:配置zabbix被監控端
使用代理方式:]# yum -y install zabbix-agent zabbix-sender]# cd /etc/zabbix/]# cp /etc/zabbix/zabbix_agentd.conf{,.bak} 配置被監控agent端只基於被動模式監控,所以只需配置server地址即可;]# vim /etc/zabbix/zabbix_agentd.confServer=172.18.11.113 服務端ip,爲授權項;可寫多個ip地址授權列表,用逗號分隔; ]# systemctl start zabbix-agent.service]# systemctl status zabbix-agent.service]# ss -tnl 確保10050端口監聽;]# iptables -vnL 確保防火牆沒有阻斷10050端口; ]# vmstat 【查看cpu狀態】]# vmstat 1 【持續查看cpu狀態1秒看一次;】
監控接口 –> Host (設定好相關服務)
host group –> host –> application –> item –> trigger –> action (condition, operation)
快速添加主機:
(1)主機發現:host discover
(2)發現事件:
lld: low level discover
快速監控主機:
、 link
主機:
監控主機的接口(只有4種):【不要基於多種接口進行監控】
Agent interfaces 【建議首選】
SNMP interfaces
JMX interfaces
IPMI interfaces
在主機上定義item的方式
(1)zabbix內建:預定義;內建key有n種分類
type:agent【agent端是被動的】,agent(active:主動的),snmp v1,ssh, ……(2)用戶自定義:在客戶端進行定義,在服務端進行添加;
item:key+parameters
key(2種):
3.0官方文檔:https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_agent
採集到的信息的種類:
numeric:數值,無符號,浮點數;charactor:字符串數據;log 日誌數據;text 文本數據;
數據的類型:
boolean:布爾型;octal:八進制數據;decimal:十進制數據;hexadecimal:十六進制數據;
store value:
AS is:數據不做任何處理;採樣的是什麼就記錄什麼;Delta(Simple change):本次採樣數據減去前一次採樣數據;Delta(speed per second):本次採樣數據減去前一次採樣數據,而後除以採樣間隔時長;
trigger:觸發器
邏輯表達式;通過邏輯表達式評估通過item獲取到的數據是否位於合理區間;item採集到的數據會直接交由trigger評估;
狀態:OK(正常狀態–>較老的版本中,其爲FALSE), PROBLEM(非正常狀態–>較老的版本中,其爲TRUE)
OK –> PROBLEM: event 【false】
PROBLEM –> OK: event 【true】通常會用到函數:
nodata()【未採集到的數據】,now()【獲取當前時間】, ...
{node2.mageedu.com:system.cpu.switches.last(#3)}>100 【此主機中 CPU 檢測 最近3次中有1次】
媒介:定義告警方式的傳輸信息的通道;
(1)Email:郵件;
[email protected]
[email protected](2)jabber:即時通信通用框架;基於msn、sq、Yahoo Messenger、google的GTalk的等通信軟件;
(3)SMS:短信(北美使用);
(4)script:自定義腳本;必須放置在指定路徑下,可調用短信網關、微信網關;自定義腳本文件存放路徑:AlertScriptsPath=/usr/lib/zabbix/alertscripts
(5)Ez Texting(USA,Canada):商業;
Meida Type類型:
默認3種:
安全連接:發郵件時是否使用安全的連接;
starttls:使用smtp協議時,自動觸發ssl;
ssl/tls:需要額外配置ssl,明確指明使用smtp協議時纔會調用ssl;
如果使用的是互聯網上的郵件服務器,基於認證的方式,填入註冊的郵箱、密碼即可;
例如:
]# ab -n 2000 -c 100 http://172.18.11.11/index.html
在被監控端測試,以便觸發cpu上下文切換超過100閾值;
一次完整的(簡單)監控配置:
host group –> host –> [application] –> item(必須屬於application) –>trigger(Events) –> (Media Type,User Group,User) –> action (conditions,operation(send message,remote script))依賴關係:
表達式格式:
<server>:<key>.<function>(<paramter>)<operator><constant> key[args] min(3m)>100
events:
事件的種類:
event source: trigger, discovery, auto registration, internal內部事件:某item從normal轉換爲unsupported、lld發現規則從normal轉換爲unsupported,某trigger從normal轉換爲unsupported等等 ;觸發器事件:發現事件:Service UP, Service Down, Host Up, Host Down, Service Discovered, Service List, Host Discovered, Host Lost自動註冊事件:active模式agent主動與server通信,zabbix server使用agent的ip地址與端口來添加一個被監控主機;
例如:監聽建立 TCP 是否能連接到指定端口
net.tcp.port[<ip>,port] 檢查是否能建立 TCP 連接到指定端口。返回 0 - 不能連接;1 - 可以連接// net.tcp.port[172.18.77.84,80]
注意:定義完成後要重啓 httpd 服務纔可生效
告警:
send message(發送信息):
Media Types:傳遞消息的通道;
script:用來定義信息通道,完成信息傳遞的腳本;
(1)腳本放置路徑:在服務器端/etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
(2)zabbix會向腳本傳遞三個參數:
$1:經由此信道發送的信息的接收目標;可以是郵箱地址,電話號碼; $2:信息的主題,subject; $3:傳遞信息的內容;
Users:利用指定信道接收消息;
Users Groups:用戶的邏輯容器;remote command(執行遠程命令):
功能:
重啓服務:
通過IPMI接口重啓服務器;
任何自定義腳本可完成的功能:清理磁盤空間,虛擬機實例遷移等等;
remote command中的腳本是遠程執行的腳本,而sent message中media type裏的腳本是用來發信息的腳本;
在被管理主機上zabbix_agentd進程是以zabbix用戶身份運行的,所以要執行遠程命令時,會用到管理權限,所以zabbix基於sudo的方式執行命令;
前提:
在agent需要完成的配置:
(1)zabbix用戶有所需要管理權限(基於sudo授權);
編輯/etc/suudoers ]# visudo 1) Defaults requiretty,修改爲 # Defaults requiretty,表示不需要控制終端就可以運行sudo 命令; 2) Defaults requiretty,修改爲 # Defaults:nobody !requiretty,表示僅 nobody 用戶不需要控制終端;
(2)agent進程要允許執行遠程命令;/etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
可執行的命令的類型(5種方式):
IPMI ssh:需要提供賬號、密碼,一般不使用; telnet Custom Script:自定義腳本 sudo /usr/bin/systemctl restart httpd.service Global:全局
告警配置:
在被管理端:
第一步:開啓zabbix用戶的sudo管理權限:]# visudo-------------------------------------------------------------## Same thing without a password# %wheel ALL=(ALL) NOPASSWD: ALLzabbix ALL=(ALL) NOPASSWD: ALL 【手動添加】 表示zabbix用戶擁有所有權限,無需密碼就可執行命令; 其中顯示:#includedir /etc/sudoers.d表示也可自己創建一個配置文件,在/etc/sudoers.d/目錄下: #Defaults requiretty 把此項註釋掉,否則遠程執行命令失敗; 第二步:開啓zabbix server執行遠程命令]# cd /etc/zabbix/]# vim /etc/zabbix/zabbix_agentd.conf---------------------------------------------------------------------------EnableRemoteCommands=1 允許遠程命令在本機執行LogRemoteCommands=1 啓用遠程命名執行的記錄日誌【可選可不選】 ]# systemctl restart zabbix-agent.service]# usermod -s /bin/bash zabbix]# mkdir /var/lib/zabbix
告警升級:
(1)remote command
(2)send message
在zabbix server端編輯發送郵件的腳本:
例如:]# vim /usr/lib/zabbix/alertscripts/sendmail.sh#!/bin/bash# contact=$1subject=$2body=$3 echo "$body" | mail -s "$subject" "$contact" ]# chmod +x /usr/lib/zabbix/alertscripts/sendmail.sh ]# /usr/lib/zabbix/alertscripts/sendmail.sh root@localhost "test" "test body"手動測試腳本 ]# mail 在web頁面設置:]# vim /etc/zabbix/zabbix_server.confDebugLevel=5 開啓調試級別