目錄
zabbix
監控系統:硬件、軟件、業務
采樣:sensor
存儲:
數據:歷史數據、趨勢數據
展示:
報警:
被監控對象:主機、交換機、路由器、UPS、...
采樣:周期性地獲取某個關注指標相關的數據;
監控系統采集數據通道:
ssh/telnet
agent:
master/agent
IPMI:
SNMP:Simple Network Management Protocol
v1,v2(community,public),v3
JMX:Java Management extension
JVM:Java Virtual Machine
存儲系統:
歷史數據:每次采樣的結果,保存時長較短,一般3個月、半年;
趨勢數據:聚合數據,保存時長較長周期內的數據;
存儲系統:
關系型數據庫:MySQL,PGSQL,Oracle,...
rrd:RoundRobin Database
NoSQL:redis/mongodb
時間序列數據庫
報警:
郵件、短信、微信
腳本
展示:
WebGUI
GUI
APP
開源監控項目:
cacti:采樣,報警,保存,展示;
nagios:采樣,報警,不存儲,不存儲也就不展示;
zabbix:
ganglia
zabbix:
Version:
LTS:Long Time Support
3.0,4.0,5.0
特性:
數據采樣:snmp,agent,ipmi,jmx;
報警:
升級:步進
數據存儲:
mysql/pgsql
展示:php程序
實時繪圖:graph,screen,slide show,map
支持監控模板
網絡自動發現
分布式監控
API:支持二次開發
zabbix架構圖
zabbix程序組件概述
Zabbix Server:服務端守護進程,負責接收agent發送的報告信息的核心組件,所有配置、統計數據及操作數據均由其組織進行;
Database Storage(zabbix_storage):存儲系統,MySQL/PgSQL,專用於存儲所有配置信息,以及由zabbix收集的數據;
Web interface(zabbix_web): zabbix的GUI接口,通常與Server運行在同一台主機上;
Proxy(zabbix_proxy):代理服務器,可選組件;常用於分布監控環境中,代理Server收集部分被監控端的監控數據並統一發往Server端;
Agent(zabbix_agentd):agent守護進程,部署在被監控主機上,負責收集本地數據並發往Server端或Proxy端;
zabbix_get:命令行工具,測試向agent端發起數據采集請求;
zabbix_sender:命令行,測試向server端發送數據;
zabbix_java_gateway:java網關;
Zabbix監控Java應用
Zabbix Architecture
Zabbix邏輯組件
主機(host):要監控的網絡設備,可由IP或DNS名稱指定;
主機組(host group):主機的邏輯容器,可以包含主機和模板,但同一個組內的主機和模板不能互相鏈接;主機組通常在給用戶或用戶組指派監控權限時使用;
監控項(item):一個特定監控指標的相關的數據,這些數據來自於被監控對象;item是zabbix進行數據收集的核心,沒有item,將沒有數據;相對某監控對象來說,每個item都由“key”進行標識;
觸發器(trigger):一個表達式,用於評估某監控對象的某特定item內所有接收到的數據是否在合理范圍內,即閾值;接收到的數據量大於閾值時,觸發器狀態將從“OK”轉變為“Problem”,當數據量再次回歸到合理范圍時,其狀態將從“Problem”轉換回“OK”;
事件(event):即發生的一個值得關注的事情,例如觸發器的狀態轉變,新的agent或重新上線的agent的自動注冊等;
動作(action):指對於特定事件事先定義的處理方法,通過包含操作(如發送通知)和條件(何時執行操作);
報警升級(escalation):發送報警或執行遠程命令的自定義方案,如每隔5分鍾發送一次警報,共發送5次等;
媒介(media):發送通知的手段或通道,如Email、Jabber或SMS等;
通知(notification):通過選定的媒介向用戶發送的有關某事件的信息;
遠程命令(remote command):預定義的命令,可在被監控主機處於某特定條件下時自動執行;
模板(template):用於快速定義被監控主機的預設條目集合,通常包含了item、trigger、graph、screen、application、以及low-level discovery rule; 模板可以直接鏈接至單個主機;
應用(application):一組item的集合;
web場景(web scennario):用於檢測web站點可用性的一個或多個HTTP請求;
前端(frontend):Zabbix的web接口;
圖形(graph):
屏幕(screens):
幻燈(slide show):
item:item key
兩類:
zabbix內建
zabbix agent:服務端通過agent拉取數據
zabbix agent(active):由agent主動推送數據到服務端
用戶自定義(UserParameter)
采集到的數據類型:
數值:
整數
浮點數
字符型:
字符串
text
log
存儲的值:
As is:不對數據做任何處理,存儲采集到的數據本身;
Delta(simple change):本次采樣的數據減去前一次采樣的數據;
Delta(speed per second):本次采樣的數據減去前一次采樣的數據,再除以經過的時長;速率數據;
邏輯組件
zabbix安裝及配置
1.安裝 zabbix-server(服務端)
(1) 安裝ZBX DB 192.168.0.112
yum install mariadb-server
vim /etc/my.conf
skip-name-resolve = ON
innodb_file_per_table = ON
mysql>
mysql>create database zabbix charset 'utf8';
mysql>grant all on 'zabbix.*' to 'zbxuser'@'192.168.%.%' identified by 'zbxpass';
mysql>grant all on 'zabbix.*' to 'zbxuser'@'127.0.0.1' identified by 'zbxpass';
mysql>flush privileges;
安裝服務器端:
1. 配置zabbix yum源
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
vim /etc/yum.repos.d/zabbix.repo
將3.0改成4.0即可
2.添加gpgkey
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
3.添加之后即可使用,更新源
yum makecache -y
# 查詢zabbix相關的包:
yum list all | grep zabbix
yum install zabbix-server-mysql zabbix-agent zabbix-get -y
4. 程序環境:
配置文件:/etc/zabbix_server.conf
Unit File:zabbix-server.service
5.在mariadb數據庫創建表,根據 rpm -ql zabbix-server-mysql 中的sql腳本:/usr/share/doc/zabbix-server-mysql-4.0.33/create.sql.gz 導入數據庫結構,才能運行zabbix
~]# gzip -d /usr/share/doc/zabbix-server-mysql-4.0.33/create.sql.gz
~]# mysql -uzabbix -h127.0.0.1 -pzabbix zabbix </usr/share/doc/zabbix-server-mysql-4.0.33/create.sql # 指定將create.sql 重定向導入zabbix數據庫
注意:zabbix 2的sql腳本有三個,需要一次導出;
6.zabbix server配置啟動
cd /etc/zabbix
cp zabbix_server.conf{,.bak} # 備份配置文件
# zabbix_server.conf中的配置段:
grep "^#####" zabbix_server.conf
############ GENERAL PARAMETERS ################# 通用配置參數
############ ADVANCED PARAMETERS ################ 高級配置參數
####### LOADABLE MODULES ####### 可加載的模塊
####### TLS-RELATED PARAMETERS ####### 使用ssl加密傳輸數據
通用配置相關的參數:
ListenPort=10051
SourceIP=
LogType=file
LogFile=/var/log/zabbix/zabbix_server.log
DebugLevel=3 # 日志級別
DBHost=127.0.0.1
DBName=zabbix # 我們在mariadb數據庫創建的數據庫名稱是zabbix
DBUser=zabbix # 我們在mariadb數據庫授權的用戶是zabbix
DBPassword=zabbix # 我們在mariadb數據庫授權的用戶zabbix的密碼是zabbix
DBPort=
DBSocket=/tmp/mysql.sock
高級配置參數:
StartPollers=5 # 啟動多少個進程負責數據采集
配置好這些參數,基本能滿足正常需要了。。。
在啟動zabbix-server.service之前,我們還要檢查trousers包的版本,zabbix要求其版本要在0.3.12以上。
yum info trousers
7. 啟動zabbix-server
systemctl start zabbix-server.service
systemctl status zabbix-server.service
2.安裝zabbix-web(GUI)
這里我們安裝zabbix的GUI和zabbix server 在不同主機,在192.168.0.111;
(1)zabbix-web(GUI)依賴以下包,因為zabbix-web是php語言寫的:
yum install php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml -y
(2) 安裝web GUI
yum install -y zabbix-web-mysql zabbix-web
(3) 配置php時區參數,有以下(a),(b)兩種方式:
rpm ql zabbix-web # 默認會在/etc/httpd/conf.d下添加一個zabbix.conf文件,在此文件中修改時區為Asia/Shanghai 如下圖1
(a)php.ini
(b)/etc/httpd/conf.d/zabbix.conf
vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
(4)啟動httpd web服務
systemctl start httpd.service
(5)訪問zabbix web頁面
http://192.168.0.111/zabbix # /etc/httpd/conf.d/zabbix.conf定義zabbix是web頁面的根目錄 如下圖2
安裝后生成的配置文件在:/etc/zabbix/web/zabbix.conf.php
圖1:
圖2:
給zabbix-web配置數據庫連接:
在Next step遇到問題:
Please create database manually, and set the configuration parameters for connection to this database. Press “Next step” button when done.
問題來源:連接mariadb的時候總是連接不上
解決方法:創建zabbix數據庫的時候應該這樣創建:create database zabbix character set utf8 collate utf8_bin;
而我之前創建的時候是:create database zabbix character set utf8;
只好刪除之前創建的zabbix庫,重新創建zabbix庫,然后導入/usr/share/doc/zabbix-server-mysql-4.0.33/create.sql
配置成功!!!!
登錄zabbix web:
使用默認的Username和Password無法登錄zabbix web,因為他創建的Admin用戶是存在mysql數據庫中的,所以我們可以修改admin用戶的密碼,如下:
~]# mysql -h192.168.0.112 -uzabbix -pzabbix
# 進入mysql數據庫以后查詢users表
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> select userid,alias,passwd from users;
+--------+-------+----------------------------------+
| userid | alias | passwd |
+--------+-------+----------------------------------+
| 1 | Admin | 5fce1b3e34b520afeffb37ce08c7cd66 |
| 2 | guest | d41d8cd98f00b204e9800998ecf8427e |
+--------+-------+----------------------------------+
2 rows in set (0.00 sec)
# 生成一個新密碼MD5,admin是密碼
[root@zhang ~]# echo -n admin | openssl md5
(stdin)= 21232f297a57a5a743894a0e4a801fc3
update users set passwd='21232f297a57a5a743894a0e4a801fc3' where userid = '1';
登錄后:
3.zabbix agent 安裝配置
現在在被監控主機上都需要安裝的包:
zabbix-agent
zabbix-sender
我們准備了包括監控端在內的四台虛擬機:
192.168.0.11 # zabbix-agent zabbix-sender
192.168.0.111 # zabbix-web zabbix-web-mysql zabbix-get zabbix-agent zabbix-sender
192.168.0.112 # zabbix-server zabbix-server-mysql zabbix-agent zabbix-sender
192.168.0.113 # zabbix-agent zabbix-sender
在 192.168.0.112虛擬機將,zabbix源拷貝到 192.168.0.11和192.168.0.113主機上:
scp -r /etc/yum.repos.d/zabbix.repo root@192.168.0.11:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/zabbix.repo root@192.168.0.113:/etc/yum.repos.d/
在192.168.0.11和192.168.0.113主機上,從阿里鏡像源下載包校驗key:
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
在四台主機上分別裝上 zabbix-agent zabbix-sender:
yum install -y zabbix-agent zabbix-sender
程序環境:
配置文件:/etc/zabbix/zabbix_agentd.conf
Unit File:/usr/lib/systemd/system/zabbix-agent.service
cd /etc/zabbix
grep -i "^####" zabbix_agentd.conf
############ GENERAL PARAMETERS #################
##### Passive checks related 被動監控相關的配置
##### Active checks related 主動監控相關的配置
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS ####### 用戶自定義的監控參數,UserParameter
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
####### For advanced users - TLS ciphersuite selection criteria #######
############ GENERAL PARAMETERS #################
PidFile=
LogType=
DebugLevel=3
SourceIP=
EnableRemoteCommands=0 # 是否允許執行遠程命令
LogRemoteCommands=0
##### Passive checks related
#Server=127.0.0.1 # 允許哪一台主機來采集數據,訪問控制授權的功能
Server=IP1,IP2,.....
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3 # 預先生成的agent子進程的數量,
##### Active checks related
# ServerActive=127.0.0.1 # 作為客戶端,主動報告給服務器端的IP
ServerActive=IP1,IP2,...
Hostname= # 當前主機的主機名
HostnameItem=
HostMetadata=
HostMetadataItem=
RefreshActiveChecks=120
BufferSend=5
BufferSize=100
MaxLinesPerSecond=20
(3)啟動zabbix-agent服務
systemctl start zabbix-agent # 確保10050是監聽的
配置監控項
快速配置一個監控項:
host groups-->host-->applications-->item-->triggers(events)-->action(conditions,operations)
operations:remote command,alert
item-->simple graph
items-->graph
grapps-->screen
screens-->slide show
在zabbix-server主機(192.168.0.112):
zabbix-get -h
zabbix-get -s 192.168.0.111 -k "system.cpu.switches" # 內置的item,如下圖1.如果不滿足需求可以自定義。
21772839
zabbix_get -s 192.168.1.11 -k "net.if.in[eth0,packets]"
zabbix_get -s 192.168.1.11 -k "net.if.out[eth0,packets]"
zabbix_get -s 192.168.1.11 -k "net.if.in[eth0,bytes]"
zabbix_get -s 192.168.1.11 -k "net.if.out[eth0,bytes]"
前提是在對方主機的zabbix_agentd.conf文件中的server已經配置了當前主機的IP,並且對方主機已啟動了zabbix-agent服務。
圖1:
創建觸發器(trigger)
創建觸發器(trigger)
"監控項"僅負責收集數據,而通常收集數據的目的還包括在某指標對應的數據超出合理范圍時給相關人員發送告警信息,“觸發器”正式用於為監控項所收集的數據定義閾值;
每一個觸發器僅能關聯至一個監控項,但可以為一個監控項同時使用多個觸發器
事實上,為一個監控項定義多個具有不同閾值的觸發器,可以實現不同級別的報警功能
一個觸發器由一個表達式構成,它定義了監控項所擦去的數據的一個閾值
一旦某次采集的數據超出了此觸發器定義的閾值,觸發器狀態將會轉換為“Problem”;而當采取的數據再次回歸至合理范圍內時,其狀態將重新返回到“OK”
OK--> PROBLEM
Recovery:PROBLEM --> OK
item > 100,TRUE,PROBLEM
FALSE,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等
patameter:函數參數;大多數數值函數可以接受秒數為其參數,而如果在數值參數之前使用“#”作為前綴,則標識為最近幾次的取值,如sum(300)表示300秒內所有取值之和,而sum(#10)則表示最近10次取值之和;
此外,avg、count、last、min和max還支持使用第二個參數,用於完成事件限定;例如,max(1h,7d)將返回一周之前的最大值;
觸發器之間存在依賴關系:主機依賴網絡設備,服務依賴於主機;
媒介類型(Media Types):
報警信息的傳遞方式:
類型:
Email:郵件,需要定義發件人郵箱地址和SMTP服務器;
Script:自定義腳本,此腳本有發送信息至相關用戶的功能;
SMS:短信,僅對北美的運營商有效;jabber、Ez Texting
Action:
conditions:觸發此動作的條件,一般通過“事件”觸發;
operations:觸發條件滿足時要采取的動作;
send message
remote command
功能:
在agent所在的主機上運行用戶指定的命令或腳本來嘗試着恢復故障;例如:
重啟服務:
任何由用戶自定義的腳本;
類型:
IPMI命令
custom script
ssh
telnet
global script
觸發器支持的運算符
觸發器表達式例子
{zhang.ansible2.com:system.cpu.load[all,avg1].last(0)}>3
表示主機zhang.ansible2.com上所有CPU的過去1分鍾內的平均負載的最后一次取值大於3時將觸發狀態變換
對last函數來說,last(0)相當於last(#1)
模板
模板:
主機配置模板,可鏈接至主機,從而實現主機的快速監控配置;
模板可繼承:
在模板之上link其它模板即可;
從主機上刪除模板:
unlink:反鏈接
ulink and clear:反鏈接並清除數據;
模板可導出,也可以從指定文件導入;
宏:MACRO
預設的文本替換模式;
級別:
全局宏:Administation-->Genaral-->Macros
模板宏:Configuration--> Tempates-->TEMPLATE-->Macros
主機宏:Configuration-->Hosts-->HOST-->Macros
類型:
內建:{MACRO_NAME}
自定義:{$MACRO_NAME}
命名方式:大寫字母、數字和下划線;
網絡發現:
zabbix server掃描指定網絡范圍內的主機;
發現方式:
ip地址范圍:
可用服務探測(ftp,ssh,http,...)
zabbix_agentd的相應對某個key的請求;
snmp_agent響應;
一旦發現某主機,就會產生發現時間;
事件有8類:
Host,Service
Up/Down,Discovered/Lost
發現操作
網絡發現:接口添加
網絡發現中添加主機時會自動創建interface
the services detected
例如,如果基於SNMP檢測成功,則會創建SNMP接口
如果某服務同事響應給了agent和SNMP,則兩種接口都會創建
如果同一中發現機制(如agent)返回了非唯一數據,則第一個接口被識別為默認,其他的為額外接口
即便是某主機開始時只有agent接口,后來又通過snmp發現了他,同樣會為其添加額外的snmp接口;
不同的主機如果返回了相同的數據,則第一個主機將被添加,余下的主機會被當作第一個主機的額外接口;
zabbix web 菜單
菜單:
Monitoring
Inventory
Reports
Configuration
Administration