監控介紹:
傳感器:
數據采集 --> 數據存儲 --> 數據展示
報警:采集到的數據超出閾值
時間序列數據
開源監控工具:
SNMP:
工作模式:NMS端向agent端采集數據;agent端向NMS端報告數據;NMS端請求agnet端修改配置
安裝:# yum install -y net-snmp
組件:MIB(management information base,管理信息庫);SMI(MIB表示符號);SNMP協議
NMS可發起操作:
Get, GetNext, Set, Trap(接收agent發來的數據)
agent: Response
UDP
NMS:161
agent:162
IPMI,windows自帶的一種免費接口。
SNMP協議之所以需要MIB庫來對監控的數據進行描述,是因為協議本身很簡單,沒有對各項指標進行描述。而不同於SNMP,其他復雜一點的監控系統,比如nagios或者zabbix,他們協議自身就有定義過這些指標,所以zabbix沒有類似MIB之類的東西。這樣做的缺點在於,zabbix在傳輸監控數據的時候就會占用較大帶寬,因為zabbix使用jason格式傳輸數據。但是在2.4版本之后,就會簡化傳輸數據的內容,減少帶寬消耗。
SNMP協議的版本:
v1,v2,v3版本。v1對數據沒有任何加密認證。v2也被叫做v2c,c即是communicate,團體認證,即明文表示的共享密鑰。而v3是對v2c進行改進的,帶有密文的共享密鑰。
Nagios:會關注事件的狀態轉換,強大的報警監控系統。但是不支持大規模的場景。適用於100台之內的服務器監控場景。因為Nagios不支持分布式,所以對於大場景,可能需要部署多台Negios。
cacti:可以完成數據的收集和展示,但是對狀態轉換的敏感度較低,報警較為薄弱。
zabbix:融合上述兩種監控系統的優點,就不用部署兩套監控系統了。所謂的分布式監控,是在環境中部署多個agent和一個master,每一台zabbix系統都有自己的數據庫,而每台agent會把監控的到的數據存放在自己的數據庫中,並且每隔一段時間(比如一小時)之后,將數據發往master,之后刪除自身數據庫上面的數據。這樣下來,master的zabbix的負擔就會減少很多。
ganglia:有許多zabbix所不具備的功能,所以在高性能集群或者分布式系統中被應用。
多套監控系統監控不同模塊,部署多套不同的監控系統監控相同模塊。
zabbix:有專用agent的監控工具
監控主機:
Linux、Windows、FreeDSB
網絡設備:
SNMP,SSH
可監控對象:
針對服務器:CPU、內存、網絡、磁盤、服務、日志、文件等
針對網頁:響應時間、下載速度、返回值、獲取特定內容等
數據存儲
cacti:rrd(round robin database)
zabbix:mysql,pgsql
報警機制:
E-mail、SMS、Jabber、Chat message、Command Execution
zabbix監控方式:
Agent:
passive:
active:
SNMP:Simple Network Management Protocol
# yum install -y net-snmp net-snmp-utils net-snmp-libs
# vim /etc/snmp/snmpd.conf
# First, map the community name "public" into a "security name"
com2sec notConfigUser default public
# Second, map the security name into a group name:
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
# Third, create a view for us to let the group have rights to:
view systemview include .1.3.6.1.2.1
# Finally, grant the group read-only access to the systemview view.
access notConfigGroup "" any noauth exact systemview none none
# systemctl start snmpd
# netstat -lntup
udp 0 0 0.0.0.0:161 0.0.0.0:* 885/snmpd
在host里面可以看到有host通過SNMP方式進行監控,之后在創建item的時候的type就可以選擇SNMPv2,輸入OID之后,就可以
IPMI:智慧平台管理接口原本是Intel架構的企業系統的周邊設備所采用的一種工業標准。可以脫離操作系統進行監控
JMX:
zabbix server端安裝zabbix—java-gateway
# vim /etc/zabbix/zabbix_java_gateway.conf
Listen_IP=
Listen_PORT=10052
# vim /etc/zabbix/zabbix_server.conf
JavaGateWay=
JavaGateWayPort=10052
Java應用程序開啟JMX接口
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10053 -Dcom.sun.management.jmxremote.authentication=false -Dcom.sun.management.jmxremote.ssl=false
監控Tomcat
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
zabbix組件:
zabbix-server;zabbix-agent;zabbix-server-database;zabbix-web-GUI;zabbix-proxy;zabbix-proxy-database
zabbix-server:主程序
zabbix-database:存放監控數據
zabbix-web:展示監控數據
zabbix-proxy:代理zabbix server收集zabbix agent的數據並存放在自己的database中,並且周期性的發送給zabbix server database中。分布式監控環境中的專用組件,適用於較大規模使用場景
zabbix-agent:部署在被監控的主機上,負責收集本地數據並且發往Server斷或者Proxy端
各組件之間的工作模式:
zabbix server的配置文件是zabbix_server.conf,日志文件是zabbix_server.log
zabbix agentd是一個運行在agnet上面的守護進程,zabbix server可以通過發送收集數據的請求直接從zabbix agentd上獲取數據,也可以使用zabbix_get來獲取數據,但是zabbix_get通常只用於測試。zabbix agentd可以同時啟用多個子進程來監聽zabbix server發來的請求,從而發送不同的數據給server。他的配置文件是zabbix_agentd.conf,而期間產生的日志信息則保存在zabbix_agentd.log中。如果zabbix server沒有定義主動去收集zabbix agentd的數據,而是開啟了被動接收,這樣的話zabbix agentd則會通過zabbix_sender將數據主動發送至zabbix server。數據會保存至database中。
zabbix proxy和上述兩種模式類似,也有自己的配置文件zabbix_proxy.conf和日志文件zabbix_proxy.log
zabbix server也有主動發現的功能,可以主動發現未添加的並且啟用了agent的被監控主機,但是由於周期性的探測很耗費資源,所以在大規模監控場景中是會關閉自動發現功能的。
專業術語:
主機(host):被監控的主機,可由IP與DNS名稱指定。
主機組(group):主機的邏輯容器,包含主機和模板。
監控項(item):監控指標。
item key:對應定義item。
觸發器(tigger):一個表達式,用於評估某指標是否在合理范圍內。
事件(event):一個值得關注的事情。
動作(action):對於特定事件是先定義的處理方法,包含操作與條件。
報警升級(escalation):發送警報或執行遠程命令的自定義方案
媒介(media):發送通知的手段或通道
通知(notification):通過選定的媒介向用戶發送的有關某事件的信息
遠程命令(remote command):預定義命令,當被監控主機處於某種條件下自動執行
模板(template):用於快速定義被監控主機的預設條目集合
應用(application):一組item的集合
web場景(web scennario):用於檢測web站點可用性的一個或多個HTTP請求
前端(frontend):Zabbix的web接口
zabbix的邏輯架構:
zabbix server在啟動的時候會啟動很多進程,包括watchdog(監控進程的活性)、housekeeper(管理數據保存時間)、alerter(執行警報操作)、poller(拉取數據,最重要)、httppoller(拉取web頁面相關數據)、discoverer(主動發現機制)、pinger(通過ping方式檢測主機是否在線)、db_config_syncer(數據庫配置同步器)、db_data_syncer(數據庫數據同步器)、nodewatcher(監控節點)、timer(計時器)、escalator(報警升級)這些進程。
主動與被動在配置文件中的體現,就是Server與ServerActive。
host group ==> host ==> item(存儲於MySQL)(或者Template) ==> graph(zabbix-web) ==> trigger ==> action(condition+operation)
application:把功能相近的一組item歸類在一起統一管理組件
zabbix配置要求:
官方建議:
對於數據量要求:
在每次zabbix進行數據采集的時候,每個item的歷史數據量大概有50個字節,歷史趨勢數據一般有128個字節,事件數據差不多有130個字節。比如某場景有100台被監控設備,每台20個item,每5分鍾采集一次數據,數據保存一年,就可以計算出來大概需要100*20*365*24*60/5=4GB的存儲空間。
zabbix產生的數據主要由4部分組成:
配置數據:
歷史數據:實際采集到的數據,50Bytes
天數 X 每秒鍾處理的數據量X 24 X 3600 X 50
歷史趨勢數據:每小時計算出來的最大值、最小值、平均值和統計,128Bytes
天數 X 監控項 X 24 X 128
事件數據:130Bytes
天數 X 86400 X 130
對於被監控主機較多的場景,比如5000台,每台主機的有40個監控指標,那么一共就有20萬個指標了,在這種場景下,監控的頻率不宜太頻繁,對於某些重要指標可以頻率較快(1分鍾一次),而某些指標就可以定義的慢一些(30分鍾一次)。
zabbix配置思路:
Host group ==> Hosts ==> Applications ==> Items ==> Triggers ==> Events ==> Actions ==> User groups ==> Users ==> Medias
graph,screen
依賴關系:
Host ==> Item ==> Trigger ==> Action ==> Notice,Command
安裝zabbix:
使用yum安裝zabbix-server;zabbix-server-mysql;zabbix-get;zabbix;zabbix-web;zabbix-web-mysql;zabbix-agent;zabbix-sender
zabbix server、zabbix web和zabbix server mysql這三個角色可以不用定義在一台主機上面,可以分開來自己跑自己的業務。
安裝數據庫
# yum install -y mariadb mariadb-server mariadb-devel
安裝並測試nginx與PHP
# yum install -y nginx
# yum install php-fpm php-common php-devel php-mysqlnd php-mbstring php-mcrypt
使用編譯安裝:
同時安裝server和agent,並支持將數據放入mysql數據中,可使用類似如下配置命令:
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssl2
僅安裝server,並支持將數據放入mysql數據中,可使用如下配置命令:
./configure --enable-server --with-mysql --with-net-snmp --with-libcurl
僅安裝proxy,並支持將數據放入mysql數據中,可使用如下配置命令:
./configure --prefix=/usr --enable-proxy --ith-net-snmp --with-mysql --with-ssh2
僅安裝agent,可使用類似如下命令:
./configure --enable-agent
而后編譯安裝zabbix即可:
# make && make install
另外還需要安裝web服務器(nginx/apache),mysql以及php,之后創建zabbix用戶和zabbix數據庫,並且授權zabbix用戶。
啟動zabbix:
安裝完zabbix-web之后,在/usr/share/zabbix目錄下就會生成web頁面所需要的的所有的php文件,將這些文件復制到nginx的網頁目錄下,就可以打開zabbix的設置頁面了。在安裝完zabbix-web-mysql之后,會在/usr/share/doc/zabbix-server-mysql-3.4.13中生成一個create.sql.gz的文件,使用gzip -d解壓之后,產生一個sql文件,這個就是web數據庫的初始數據庫,需要導入進新安裝的數據庫中。
# mysql zabbix < create.sql
當然也可以使用mysql里面是source命令,那樣的話可以看到導入結果是不是失敗。
mysql> source /usr/share/doc/zabbix-server-mysql-3.4.13/create.sql
配置文件:/etc/zabbix/zabbix_server.conf
這里對部分配置文件中的內容做一下解釋:
StartPollers:server中啟動對poller動作做准備的進程數,0~1000,默認5個。poller可以一次性啟動多個進程同時收集數據,這一項用來定義進程數,對於cpu性能較高的主機可以多啟動幾個。
StartIPMIPollers:基於IPMI做的poller。
StartPollersUnreachable:探測主機是否在線的時候使用。
StartTrappers:捕獲agent主動發的數據的進程數。
trapper直譯為陷阱,類似"捕獲"數據。在zabbix監控數據的時候,在主機收到從來沒有監控過的指標發來的數據的時候,監控主機會進行捕獲。
StartPingers:
StartDiscovers:自動發現。設置特定條件,比如IP地址段並且監聽agent端口,如果發現符合條件的主機,會自動完成后續操作,比如加入監控組、添加模板等。
StartHTTPPollers:請求頁面並且監控響應時長
StartTimers:計時器進程
JavaGateway:
JavaGatewayPort:
StartJavaPollers:
StartVMwareCollectors:zabbix可以直接通過VMware上的hypervisor監控虛擬機的狀態
VMwareFrequency:
VMwareCacheSize:
SNMPTrapperFile:Trapper信息保存位置
StartCNMPTrapper:
ListenIP:監聽地址,默認0.0.0.0
HousekeepingFrequency:執行Housekeeping的頻率
housekeeper主要是清除超出設定時間之外的數據庫中的數據的。
MaxHousekeeperDelete:最多刪除多少個Housekeeper信息
SenderFrenquency:沒有發送出去的警報的發送頻率。有些警報會因為媒介的問題發送不出去,比如郵件或者短信等,而這個指標就是重試頻率。
CacheSize:緩存打小
CacheUpdateFrequence:
StartDBSyncers:
HistoryCacheSize:
TrendCacheSize:
HistoryTextCacheSize:
ValueCacheSize:
Timeout:
TrapperTimeout:
UnreachablePeriod:
UnreachableDelay:
UnavailableDelay:
AlertScriptsPath:內部報警腳本位置
ExtenalScripts:外部報警腳本位置
FpingLocation:
Fping6Location:
SSHKeyLocation:如果執行腳本的過程中會用到ssh,此為ssh密鑰位置
LowSlowQueries:
TmpDir:
StartProxyPollers:
ProxyConfigFrequency:后面的就都是和proxy相關的
ProxyDataFrequency:
AllowRoot:
最后一步,修改php.ini的時區以及部分參數:
# vim /usr/local/php/lib/php.ini
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
date.timezone = Asia/Shanghai
接下來就可以啟動zabbix了:
# systemctl start zabbix-server
可以看到進程有一大堆,都是上面可以進行調整與定義的:
# ps aux | grep zabbix
zabbix 924 0.0 0.1 1587564 1752 ? S 15:31 0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix 995 0.0 0.1 1587564 1792 ? S 15:32 0:00 /usr/sbin/zabbix_server: configuration syncer [synced configuration in 0.006351 sec, idle 60 sec]
zabbix 996 0.0 0.0 1587564 960 ? S 15:32 0:00 /usr/sbin/zabbix_server: alerter #1 started
zabbix 997 0.0 0.0 1587564 960 ? S 15:32 0:00 /usr/sbin/zabbix_server: alerter #2 started
zabbix 998 0.0 0.0 1587564 960 ? S 15:32 0:00 /usr/sbin/zabbix_server: alerter #3 started
zabbix 999 0.0 0.1 1587836 1612 ? S 15:32 0:00 /usr/sbin/zabbix_server: housekeeper [deleted 0 hist/trends, 0 items/triggers, 0 events, 0 sessions, 0 alarms, 0 audit items in 0.001305 sec, idle for 1 hour(s)]
zabbix 1000 0.0 0.2 1587712 2180 ? S 15:32 0:00 /usr/sbin/zabbix_server: timer #1 [processed 1 triggers, 0 events in 0.000352 sec, 0 maintenances in 0.000853 sec, idle 30 sec]
zabbix 1001 0.0 0.1 1587564 1376 ? S 15:32 0:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000662 sec, idle 5 sec]
zabbix 1002 0.0 0.2 1691932 2748 ? S 15:32 0:00 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000425 sec, idle 60 sec]
zabbix 1003 0.0 0.2 1587628 2324 ? S 15:32 0:00 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000002 sec, idle 1 sec]
zabbix 1004 0.0 0.2 1587628 2332 ? S 15:32 0:00 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000003 sec, idle 1 sec]
zabbix 1005 0.0 0.2 1587628 2328 ? S 15:32 0:00 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000003 sec, idle 1 sec]
zabbix 1006 0.0 0.2 1587628 2332 ? S 15:32 0:00 /usr/sbin/zabbix_server: history syncer #4 [synced 1 items in 0.000700 sec, idle 1 sec]
zabbix 1007 0.0 0.1 1587564 1736 ? S 15:32 0:00 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000467 sec, idle 3 sec]
zabbix 1008 0.0 0.1 1587564 1736 ? S 15:32 0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000002 sec, idle 5 sec]
zabbix 1009 0.0 0.1 1587564 1152 ? S 15:32 0:00 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000003 sec, idle 1 sec]
zabbix 1010 0.0 0.1 1587564 1156 ? S 15:32 0:00 /usr/sbin/zabbix_server: vmware collector #1 [updated 0, removed 0 VMware services in 0.000001 sec, idle 5 sec]
zabbix 1011 0.0 0.1 1587564 1156 ? S 15:32 0:00 /usr/sbin/zabbix_server: vmware collector #2 [updated 0, removed 0 VMware services in 0.000001 sec, idle 5 sec]
zabbix 1012 0.0 0.1 1587564 1372 ? S 15:32 0:00 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000292 sec, idle 5 sec]
zabbix 1013 0.0 0.3 1694552 3180 ? S 15:32 0:00 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix 1014 0.0 0.3 1694552 3180 ? S 15:32 0:00 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix 1015 0.0 0.4 1694652 4096 ? S 15:32 0:00 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000002 sec, idle 1 sec]
zabbix 1016 0.0 0.3 1694568 3460 ? S 15:32 0:00 /usr/sbin/zabbix_server: poller #4 [got 1 values in 0.000285 sec, idle 1 sec]
zabbix 1017 0.0 0.3 1694568 3632 ? S 15:32 0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000001 sec, idle 1 sec]
zabbix 1018 0.0 0.3 1694744 3152 ? S 15:32 0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix 1019 0.0 0.1 1587564 1444 ? S 15:32 0:00 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
zabbix 1020 0.0 0.2 1600588 2980 ? S 15:32 0:00 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.308861 sec, waiting for connection]
zabbix 1021 0.0 0.2 1600588 2988 ? S 15:32 0:00 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000221 sec, waiting for connection]
zabbix 1022 0.0 0.1 1587564 1440 ? S 15:32 0:00 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
zabbix 1023 0.0 0.2 1600588 2984 ? S 15:32 0:00 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000197 sec, waiting for connection]
zabbix 1024 0.0 0.1 1590172 1188 ? S 15:32 0:00 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix 1025 0.0 0.1 1587564 1588 ? S 15:32 0:01 /usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.007194 sec during 5.007195 sec]
zabbix 1026 0.0 0.1 1587564 1616 ? S 15:32 0:00 /usr/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 6 values, idle 5.003677 sec during 5.003741 sec]
zabbix 1027 0.0 0.1 1587564 1032 ? S 15:32 0:00 /usr/sbin/zabbix_server: preprocessing worker #1 started
zabbix 1028 0.0 0.1 1587564 1032 ? S 15:32 0:00 /usr/sbin/zabbix_server: preprocessing worker #2 started
zabbix 1029 0.0 0.1 1587564 1032 ? S 15:32 0:00 /usr/sbin/zabbix_server: preprocessing worker #3 started
zabbix 1208 0.0 0.1 82812 1260 ? S 16:18 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 1209 0.0 0.1 82812 1384 ? S 16:18 0:02 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 1210 0.0 0.2 82936 2440 ? S 16:18 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 1211 0.0 0.2 82936 2440 ? S 16:18 0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 1212 0.0 0.2 82936 2440 ? S 16:18 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix 1213 0.0 0.2 82940 2192 ? S 16:18 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
zabbix 1214 0.0 0.2 82940 2200 ? S 16:18 0:01 /usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]
zabbix頁面:
Monitoring:監控頁面
Dashboard:面板,各常用監控項匯總頁面
Problems:問題頁面
Overview:
Web:
Lastest data:最近一次收集的數據
Tiggers:查看觸發器
Graphs:通過圖表的方式監控單個主機的單個指標
Screens:通過圖表的方式監控單個主機的多個指標
Maps:
Discovery:
Services:
Inventory:資產清單
Overview:
Hosts:
Reports:顯示監控報告
Status of Zabbix:
Availability report:
Tiggers top 100:
Audit:
Action log:
Notification:
Configuration:配置
Host groups:
Templates:一堆item的集合
Hosts:
Maintenance:增加維護時間,防止因服務器維護下線而引起的告警。配置完成之后會在action的condition中涉及關聯。
Actions:
Event correlation:
Discovery:
Services:
Administrator:管理整個zabbix工作接口的工作特性
General:通用配置
Proxies:設置代理節點
Authentication:認證機制
User groups:管理用戶組
Users:管理用戶
Media types:管理通知方式(短信或者郵件)
Scripts:管理腳本
Queue:隊列管理
在面板上可以看到,zabbix一開始是不會監控自己的(因為是使用yum安裝的,如果使用編譯安裝可以加參數--enable-agent,就會默認安裝agent了),這里就開啟對本機的監控,通過agent的方式來進行監控。需要配置agent的配置文件:/etc/zabbix/zabbix_agentd.conf
對於里面的參數部分的解釋如下:
Server:基於IP地址的授權機制,允許特定Server來此agent獲取數據。
StartAgents:啟用多少個agent進程
ServerActive:配合Sender,主動發送數據給Active Server。如果想啟用這個需要自行定義監控機制,如果不定義則使用上面那個Server來進行被動監控。做Agent也做Server的主機不要去掉127.0.0.1,其他可以。
Hostname:自動發現的時候使用,一定要全局唯一。
# egrep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,172.16.0.50
ServerActive=127.0.0.1,172.16.0.50
Hostname=Node01
然后就可以啟動zabbix_agent了:
# systemctl start zabbix-agent
可以看到10050和10051都處於監聽狀態:
# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1365/nginx: master
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 2140/zabbix_agentd
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1622/zabbix_server
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2174/php-fpm: maste
tcp6 0 0 :::10050 :::* LISTEN 2140/zabbix_agentd
tcp6 0 0 :::10051 :::* LISTEN 1622/zabbix_server
tcp6 0 0 :::3306 :::* LISTEN 1577/mysqld
zabbix會用到的幾個端口是80(httpd/nginx);9000(php);3306(mysql);10050(zabbix_server);10051(zabbix_agent),如果都起來了,就正常了。
接下來通過http://localhost/zabbix.php可以打開初始化頁面,之后完成基本配置就可以打開頁面了。
啟動zabbix agent:
yum安裝zabbix-agent和zabbix-sender即可。
之后編輯配置文件:
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.0.50
ServerActive=172.16.0.50
Hostname=node02
之后就可以啟動zabbix agent了:
# systemctl start zabbix_agent
debug方式:
# vim /etc/zabbix/zabbix_agentd.conf
DebugLevel=4 //改成4
# systemctl restart zabbix_agent
日志會更加詳細
手動方式添加agent主機:
打開zabbix首頁,在configuration里面的hosts里面添加新增的agent
添加主機里面有幾個子項
Host:主機信息
Host name:必須保持唯一,一般使用IP地址,如果使用DNS名稱的話,一定要和agent的配置文件中的hostname保持一致
Visible name:一般使用DNS地址
Groups:自己定義主機組,一個主機可以加入多個組
Agent interfaces:一般使用IP地址和端口,默認10050
SNMP interfaces:若agent啟用SNMP,可以添加
JMX interaces:與SNMP類似,一般是監控java的
IPMI interfaces:與SNMP類似,一般是在windows上
Description:描述
Monitored by proxy:是否要代理,在配置完proxy就可以在這里選擇了
Enable:是否啟用
Templates:template主要包含item,其他的就還有application、trigger、graph、action。可以使用各種模板,也可以自己定義items而不使用模板。使用link將模板套用至主機,unlink表示清除模板,unlike and clear表示清除模板和數據。
監控項可以選擇自帶的模板,也可以自己設置監控項item。下面就對item進行一下學習:
監控項(item):用於監控一個特定對象上的一個特定指標,並負載針對其收集相關的監控數據。每一個item都有相應的類型,所以在創建的時候需要針對不同的數據指定不同的類型,目前有zabbix agent(passive)(被動接收請求之后發送數據)、zabbix agent(active)(主動發送數據)、simple check、SNMPv1 agent、SNMPv2 agent、SNMPv3 agent、SNMP trap、zabbix internal、zabbix trapper、zabbix aggregate、external check、database monitor、IPMI agent、SSH agent、telnet agent、JMX agent、Calculated。每一個item都有一個專用的item key,要求在全局保持唯一,zabbix服務器在與被監控端通信時就使用相應的協議或機制去詢問被監控端這個key值,被監控端則調用此key對應的監控腳本獲取數據並返回給服務器端。zabbix有一些默認的key,用戶也可以自定義key值。
定義獲取數據的方式,取值的數據類型,獲取數據的間隔,歷史數據的保存時長,趨勢數據的保存時間,監控key的分組等。
查看方法:
# mysql -uzabbix -pzabbix
mysql> use zabbix;
mysql> select * from items\G
獲取到key值之后,如果agent也支持這個key,可以通過key值再來獲取對應所監控的數據:
# zabbix_get -s 172.16.0.50 -k "system.cpu.load"
0.000000
key的自定義可以使用"0-9a-zA-Z_-.",且可以支持接收參數,舉例:system.cpu.load[<cpu>,<mode>]。
含義參考:知識文檔-Zabbix監控系統中內置的監控參數(Key)詳解
create item:
name:監控項名稱
type:上面提到的類型
key:key值,類型要和上面的type對應
host interface:主機端口,IP:10050
type of information:信息類型,整型、浮點等
units:單位,bps(可以定義流量),對於次數,可以定義為空,比如intr中斷次數
update interval:采樣時間間隔,頻率越快,需要的空間越大
custom intervals:自定義監控時間。interval:50s表示時間間隔50秒,period:1-7,00:00-24:00表示周一到周七的零點到二十四點。
history storage period:歷史數據存放天數,會影響數據庫的存儲空間
trend storage period:歷史趨勢數據存放的天數
show value:展示數據的模式,默認原始數據
有些監控項所采集到的數據,比如流量、cpu中斷次數等,肯定是一直增長的,現在的版本會采取默認用當前時刻減去前一時刻的方式記錄這個數據。
new application
applications
populates host inventory field:資產清單相關
description:描述
enable:是否啟用
監控項(item)可以在graph中展示出來,graph可以使用默認的,也可以進行創建。
create graph:
name:圖形的名稱
width:寬度,適用於預覽模式、餅圖和分離型餅圖
height:高度
graph type:圖標類型(線條、區域、餅圖、分離型餅圖)
show legend:展示線條對應的名稱
show working time:是否高亮顯示工作時間的數據,工作時間白色背景,非工作時間是灰色背景
show triggers:展示指標,餅圖是無法顯示的
percentile line(left):百分比取值,左側
percentile line(right):百分比取值,右側
Y axis MIN value:Y坐標的最小值。如果是想看某個值以上的趨勢,可以用這個
calculated:計算出來的值作為最小值
fixed:固定最小值
item:該item最后一次采集的數值作為最小值
Y axis MAX value:Y坐標的最大值。如果是想看某個值以下的趨勢,可以用這個
item:監控指標以及一些格式、參數的設置
觸發器(trigger):item僅用來收集數據的,而觸發器可以為item采集來的數據定義閾值。zabbix server在收集到items的新數據時,就會對item的當前采樣值進行判斷,即與trigger的表達式進行比較,如果符合表達式,則會使狀態變成PROBLEM狀態。觸發器表達式高度靈活,可以創建出非常復雜的測試條件。
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:主機名稱
key:主機上關系的相應監控項的key
function:評估采集到的數據是否在合理范圍內時所使用的函數,目前所支持的函數有avg(最近幾次的平均值)、count(指定時間間隔內的數值統計)、change(最近獲取到的值與前一次的差值,返回布爾值,1為變化,0位不變化)、date(返回當前日期)、dayofweek(返回星期數)、delta(返回指定時間/次數內最大值與最小值之差)、diff(比較最后一次采樣和前一次采樣是否不同)、iregexp(用忽略大小寫的正則表達式進行模式匹配)、regexp(檢查最后一次采樣的數據是否能被指定的模式所匹配)、last(最近幾次)、max(最近幾次的最大值)、min(最近幾次的最小值)、nodata(無數據)、now(返回自Unix元年到現在的秒數,時間戳)、prev(倒數第二個采樣值)、str(從最后一次的采樣中查找此處指定的字符串,返回布爾值,1表示有,0表示無)、strlen(最后一次采集的字符串長度)、sum(指定指定次數采樣的數據之和)等
parameter:函數參數;大多數數值函數可以接受秒數為其參數,前面加#則表示最近幾次的數值。avg、count、last、min和max還支持第二個參數,用於完成時間限定,例如max(1h,7d)將返回一周之前的最大值。
operator(操作符):
比較函數,大於>、小於<、等於=、不等於#
運算,加+、減-、乘*、除/
邏輯運算,與&,或|
constant:某個值
舉例:{node02:system.cpu.load[all,avg1].last(0)}>3
觸發器應該定義依賴關系,可以避免很多連環的告警,比如一台匯聚交換機故障,則下面的接入交換機都無法連接,如果不定義依賴關系,則會收到非常多告警,浪費資源。
觸發器等級,用來標識事件的嚴重性:
not classified:未知
information:信息
warning:警告
average:故障
high:嚴重
disaster:災難
create trigger:
name:名稱,可以使用宏
serverity:安全級別
expression:表達式。可以使用Expression constructor來創建表達式
OK event generation:
PROBLEM event generation mode:選擇multiple的話,在每次產生故障的時候都會對應再次產生事件,適合一些如果故障沒解決就一直告警的場景中
OK event closes:故障解決就關閉事件
tags:
Allow manual close:支持手動關閉
URL:可以在trigger中看到這個URL,可以在報警信息中添加
Description:描述
Enable:是否啟用
Dependencies:依賴的組件,比如監控Nginx服務,如果Nginx服務掛了,那么訪問首頁的返回值、響應時間等信息就都可以一並移除了,減少重復警報浪費的資源。
觸發器創建完成之后,再回到graph中就可以看到一條trigger的線。
測試CPU中斷可以使用hping,這是一個DDOS的模擬工具,可以一瞬間發很多個包出去。
# yum install -y hping3
# hping 172.16.0.50 --faster
媒介(media):
有了觸發器之后,zabbix就會根據不同的觸發器做出相應的告警,要想管理員收到告警的內容,則需要配置媒介。在administrator中的media type可以選擇email、jabber或者sms。
郵件(email):
name:媒介名稱
type:類型
SMTP server:郵件服務器。一般是公司內部郵件服務器名稱或者三方郵件服務器名稱。測試可以使用localhost
SMTP server port:郵件服務器端口,一般是25
SMTP helo:
SMTP email:發件人郵箱
connection security:安全性
authentication:認證
Enable:是否啟用
創建一個用戶來關聯郵件。在administrator中的user選擇新建:
create user:
alias:別名
name:用戶名
surname:顯示名稱
groups:所屬用戶組
password:密碼
password(once again):確認密碼
language:語言
theme:
auto-login:自動登入
auto-logout:自動登出
refresh:刷新時間
rows per page:一頁多少行
URL:
添加完用戶,可以點上面的media,可以設置郵件發送的細節:
type:具體的媒介
send to:收件人
when active:活躍時間
use if severity:發送郵件的級別
enable:是否啟用
permissions:設置權限。權限的設置是在用戶組中進行設置的,用戶只需要加入用戶組,即可有相應的權限。
動作(action):
用戶配置完成之后就該配置告警了,action中有send message和remote command,可以指定多步操作自行操作,比如先執行腳本,再發送警報等。在configuration里面選擇actions。
觸發條件,一般是事件:
Trigger events:OK ==> PROBLEM
Discovery events:zabbix的network discovery工作時發現主機
Services Up, Service Down, Host Discovered, Host lost, Host Up, Host Down, Service discovered, Service Lost
Low level discovery
Auto registration event:主動模式的agent注冊時產生的事件
Internal events:Item變成不再支持,或Trigger變成未知狀態
動作可以配置send message和command
配置send message:
1.定義好media
2.定義好用戶
3.配置要發送的信息
配置remote command:
使用remote command的話可以解決一些小問題,比如不小心把服務器給kill掉了,或者因為內存不足把服務器給kill掉,等等情況,可以使用這個讓zabbix自己對服務進行一些簡單的操作(重啟、啟動)。但是要注意如下的幾點:
1.zabbix_agentd.conf中開啟EnableRemoteCommands=1和LogRemoteCommand=1
2.agent上visudo中的Defaults requiretty給注釋掉
3.給zabbix定義sudo規則,zabbix ALL=(ALL) ALL,生產環境建議自己定義命令
4.Script:Alert Script:
放置於特定的目錄下,AlertScriptsPath=/usr/lib/zabbix/alertscripts,在zabbix_server.conf中進行配置。
腳本中可以使用$1, $2, $3來調用action中的郵件收件人, Default Subject, Default Message
5.不支持active模式的agent
6.不支持代理模式
7.命令長度不超過255個字節
8.支持使用宏
9.不關心命令是否執行成功,僅執行命令
action:
name:名稱
conditions:指定觸發條件、與或非
new condition:添加觸發條件
enable:是否啟用
operations:出現問題時采取的動作
default operation step duration:處理的時間段,該時間內問題如果沒有解決,則會進行告警升級,在operations中設置
default subject:標題,可以支持宏
default message:正文
pause operations while in maintenance:維護期間暫停
operations:告警升級的具體配置信息
steps:階段
step duration:階段的時間
operation type:操作類型
send message:
send to user groups:發送給用戶組
send to user:發送給用戶
send only to:發送信息的方式
default message:上面定義的正文信息
remote command:
target list:目的列表
type:發送類型
execute on:server遠程執行還是agent收到指示后運行
commands:需要執行的命令,需要使用sudo的方式書寫命令
conditions:發送條件,如果不設置則沿用action里面的條件
recovery operations:故障恢復時候發送郵件
default subject:標題
default message:正文
operations:
acknowledgement operations:
default subject:標題
default message:正文
operations:
IPMI:windows用的
Macros:宏,可以理解為變量,一次定義,多次引用
定義宏的地方,只對這一台主機生效
Host inventory:將主機加入資產清單,就會在inventory里面顯示
Encryption:加密
Discovery方式添加agent:
如果每一台主機都是用手動方式添加的話,工作量會很大,這個時候如果配置discovery方式添加,就會方便很多。discovery可以自動掃描局域網中的被監控服務器,然后自動將被監控服務器添加進入特定的服務器組中,之后再套用特定的template,簡單高效而且正確率高。
Auto_registrion方式添加agent:
agent主動加入監控
Low level discovery方式添加agent:
這種方式會支持主動發現,但是發現的主機不會直接套模板進行監控。
zabbix可視化:
zabbix的可視化包括四個,graph、screen、slide shows、map。
graph:
默認每個item都有自己的graph,只有需要將多個item定義在一個圖形里面,才需要自定義graph。自定義圖形的方式在上面有。
screen:
屏幕用於集中展示多個數據源的相關信息,就是一個圖表,可以指定行數和列數來在每個格子中指定要展示的內容。
宏(macros):
宏是一種變量,書面化的解釋是根據一系列預定義的規則替換一定的文本模式,而解釋器或編譯器在遇到宏時會自動進行這一模式替換。zabbix有很多內置的宏,在官方文檔manual中的macros中有定義。也可以自行定義宏。宏的名稱只能使用大寫字母、數字和下划線。
兩類:
內置:{MACRO_NAME}
自定義:{$MACRO_NAME}
三個級別使用:
Global, Template, Host(優先級Host最高,Global最低)
宏可以使用item key和description、trigger名稱和表達式、主機接口IP/DNS及端口、discovery機制和SNMP協議中的相關信息中等。全局宏在Administration -> General -> Macros中定義,主機或者模板級別的宏在編輯相應Host或模板的屬性即可。
舉例:
定義:{$INBOUND_OK}=>100
調用:{xxx.last(#1)}<{$INBOUND_OK},等同於{xxx.last(#1)}<100
好處,修改變量就比修改規則容易多了。
模板(Template):
模板是一些列配置的集合,可以方便的部署在某監控對象上並且支持重復應用。包括items、triggers、graphs、applications、screens、web。web還支持嵌套,支持從其他的模板上面繼承規則。在configuration中的template選項中可以進行定義。
User Parameters:
zabbix內置了許多item key,User Parameters實現用戶自定義item key,實現特有數據指標監控。必須定義在agent端。重啟之后,新的User Parameter生效。
語法格式:UserParameter=<key>,<command>
例子:
UserParameter=Nginx.active[*], /usr/bin/curl -s “http://$1:$2/status” | awk '/^Active/ {print $NF}’
需要注意的是,如果前面的key指明可以接收參數,則如果使用單個$表示接收到的參數,命令中如果再需要使用$調用,則需要使用多個$,以免被錯誤的調用。比如print $$3。
舉例:監控內存:
# vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/ //可以看到在conf文件里面有定義了自定義腳本的位置
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf //還有其他的方式
# vim /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
# systemctl restart zabbix-agent
這樣在Hosts中的key選項中手動輸入os.memory.used(后面的select可能沒有),單位自己注意改一下(這里已經是MB了,所以填MB),然后點add就完成了。測試的話可以用zabbix_get命令來測試一下。
監控數據庫中的select等使用次數:
UserParameter=Mysql.dml[*],/usr/local/mysql/bin/mysql -h$1 -u$2 -p$3 -e ‘SHOW GLOBAL STATUS’ | awk ‘/Com_$4\>/{print $$2}'
# zabbix_get -s X.X.X.X -p 10050 -k "Mysql.dml[X.X.X.X,root,password,select]"
在添加監控項也需要使用Mysql.dml[X.X.X.X,root,password,select],而不是直接寫個key就完了。
zabbix自動發現(Discovery和Low Level Discovery):
基於http、icmp、ssh、ldap、tcp、snmp、telnet、zabbix_agent掃描指定網絡內的主機,一旦被發現,接下來就由action來確定接下來的操作方式。可以實現自動添加主機、鏈接至模板、添加監控項、分組、定義觸發器等功能。
Discovery:
Services Up, Service Down, Host Discovered, Host lost, Host Up, Host Down, Service discovered, Service Lost
Actions:
Sending notifications、Adding/Removing hosts、Enabling/Disabling hosts、Adding hosts to a group、Removing hosts from a group、Linking hosts to/Unlink from a template、Executing remote scripts
網絡發現:接口添加
the services detected。以主機為默認單位,給對應服務創建接口。一台主機所創建的接口和收集到的數據,如果存在多個,則最先的那個會被認為是默認接口,后面的會被認為是額外接口,而不會被認定為不同的主機。但是不同的主機就算收集到了相同的數據,也會被認定是兩台主機的默認接口,不會被認為是同一台。
Phase 1.Discovery:
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.0.50
ServerActive=172.16.0.50
Hostnam=node03
EnableRemoteCommands=1
之后在configuration里面的Discovery中可以看到有一個create rule選項,來創建一個discovery規則。
create rule:
Name:規則名稱
Discovery by proxy:通過代理發現
IP range:發現的IP范圍
Delay:掃描時間
Check:基於發現的方式,常用ICMP ping
Device uniqueness criteria:設備唯一的標准
Enable:是否啟用
定義完成之后,在monitoring中的discovery中就可以看到(如果有符合條件的主機)被掃描的主機進來了。
Phase 2.Action:
event source要改成discovery
action:基本配置和觸發條件
name:名稱
type of calculation:計算方式,包括與或非
conditions:觸發條件。
一般會指定discovery rule和discovery status,rule中定義了IP地址,status選擇up,這樣就可以發現在范圍內並且已經是up狀態的被監控主機
new condition:添加條件
可以選擇ip/host metadata/proxy。host metadata是一個唯一字符串,用來標識當前主機,用以主機的注冊。
# vim /etc/zabbix/zabbix_agentd.conf
HostMetadata=string
enable:是否啟用
operations:添加對應規則,比如添加主機組、鏈接模板
default subject:
default message:
operations:操作
Auto_registation:
建議與discovery分開使用,不要兩個同時使用。
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.0.50
ServerActive=172.16.0.50 //主要需要定義的東西
ListenIP=172.16.0.101 //本機IP地址
Hostnam=node05
HostMetadata=string //用來標識當前主機
HostMetadataItem=item key //一般使用system.uname
Action:
event source要改成auto_registation,其他步驟和discovery類似。
LLD:Low Level Discovery
LLD會自動發現特定變量的名稱,zabbix會根據LLD返回json值來定義item,防止事先定義item出現因為不確定因素原因導致item無效的情況出現。
在configuration中的template中,可以點到某個template中,之后進入discovery rule中來定義discovery rule:
create discovery rule:
Discovery rule:
name:名稱
type:類型
key:item的key
update interval:更新周期
custom intervals:執行發現的時間段
keep lost resources priod:
description:描述
enable:是否啟用
Filters:設置過濾條件
設置完過濾條件之后,就可以在hosts里面設置引用變量名了,比如filter中設置為{#IFNAME}之后,可以在hosts中的key中設置net.if.in[#IFNAME,bytes]。這里面的IFNAME就是通過LLD獲取到的值。
Web監控:
可以使用zabbix來監控web站點的可用性。通過創建一個web方案(scenarios)來實現。方案包括一個或多個HTTP請求或"步驟",通過web監控可以獲取整個web方案中所有步驟的平均下載速度、失敗的步驟號以及失敗的報錯信息,還可以按需獲取某個步驟的下載速度、回應時間以及回應狀態碼,還可以檢測獲取到HTML頁面中是否包含預設的自負,還可以實現登陸和頁面點擊。監控級別根據需求的不同來區分。
創建web方案的前提需要創建一個適用的應用(application),可以在"Hosts"或"Template"中創建應用,如果在"Templates"上創建應用,則需要將此"Templates"鏈接至要監控其web的主機上方能使用此"Application"。
這里以Hosts中創建web監控為例,點擊進入Hosts然后點web
create web scenarios:
Scenario:
Name:名稱
Application:選擇所屬的application
New Application:添加application
Update interval:更新周期,單位是秒
Attempts:
Agent:代理(瀏覽器)
Http proxy:HTTP代理
Variables:用戶自定義的宏
Headers:
Enable:是否啟用
Steps:創建步驟
Name:名稱
URL:地址
Query field:
Post type:
Post fields:
Variables:
Headers:
Follow redirects:
Retrieve only headers:
Timeout:超時時間
Required string:期望返回的字符串
Required status codes:期望返回的代碼
Authentication:
HTTP authentication:
SSL verify peer:
SSL verify host:
SSL certificate file:
SSL key file:
SSL key password:
完成之后可以看到監控項已經出來了:
zabbix分布式監控:
zabbix在大型環境中提供兩種解決方案(主要是在跨公網環境中):proxy和node
proxy用於本區域數據收集,並將數據發送給server。
node提供完整的zabbix server用以建立分布式監控中的層級。
Server-node-Client:
Child的Database會在Master的Database中周期性讀取配置並保存在自己的database中,這樣就獲取了item等信息了。
解決host過多時Server面臨的性能瓶頸的問題:使用多個instance;每個instance相對獨立。
支持熱插拔,node和server的連接隨時可以斷開,但是不影響node正常運行。
node定時給server發送configuration、history、event。
server定時給node發送configuration
所有配置變更只能在node節點操作,不能在server操作
樹狀結構,node又可以是其他node的server
proxy:
proxy不會向server同步configuration,只會接收
proxy的數據庫定時會將數據傳送給server,proxy本地數據庫只保存最近沒有發送的數據
proxy模式部署:
# yum install -y zabbix-proxy
# yum install -y mariadb mariadb-level mariadb-server
# mysql
mysql> create database zabbix_proxy character set 'utf8';
mysql> grant all on zabbix_proxy.* to zabbix@'172.16.%.%' identified by 'zabbix';
mysql> flush privileges;
# rpm -ql zabbix-proxy-mysql
/usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql.gz //找到默認數據庫
# gzip -d /usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql.gz
# mysql zabbix_proxy < /usr/share/doc/zabbix-proxy-mysql-3.4.12/schema.sql //幾乎與zabbix-server是一樣的
# egrep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
Server=172.16.0.50
Hostname=proxy01
DBHost=172.16.0.6
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
HeartbeatFrequency=60 //探測服務器活性的周期
ConfigFrequency=600 //獲取配置的周期
DataSenderFrequency=10 //發送數據的周期
在administrator中的proxies中可以創建proxy
create proxy:
Proxy:
proxy name:proxy的名字
proxy mode:proxy的模式,有主動和被動
hosts:proxy所代理的主機
description:描述
Encryption:是否加密