溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

中小企業(yè)Zabbix監(jiān)控生產案例實踐

發(fā)布時間:2020-08-08 18:10:23 來源:網絡 閱讀:9500 作者:2012hjtwyf 欄目:建站服務器


一、Zabbix監(jiān)控介紹

1、Zabbix的功能概述


1.1 zabbix是什么

Zabbix是一個企業(yè)級的、開源的、分布式的監(jiān)控套件。

Zabbix可以對網絡和服務進行監(jiān)控。Zabbix利用靈活的告警機制,可實現(xiàn)微信

短信和郵件的自動報警。Zabbix利用存儲的監(jiān)控數(shù)據提供監(jiān)控報告及實現(xiàn)圖形化顯示


1.2 zabbix特性

Zabbix是一個高度集成的網絡監(jiān)控套件,通過一個軟件包即可提供如下特性


數(shù)據收集

  • 可用性及性能檢測

  • 支持SNMP(trapping及polling)、IPMI、JMX監(jiān)控

  • 自定義檢測

  • 自定義間隔收集收據

  • server/proxy/agents實現(xiàn)分布監(jiān)控環(huán)境

靈活的閥值定義

  • 允許靈活地自定義故障閥值,Zabbix中稱為觸發(fā)器(trigger), 存儲在后端數(shù)據庫中

高級告警配置

  • 可以自定義告警升級(escalation)、接收者及告警方式

  • 告警信息可以配置并允許使用宏(macro)變量

  • 通過遠程命令實行自動化動作(action)

實時繪圖

  • 通過內置的繪圖引擎實現(xiàn)監(jiān)控數(shù)據實時繪圖

擴展的圖形化顯示

  • 允許自定義創(chuàng)建多監(jiān)控項視圖

  • 網絡拓撲(network maps)

  • 自定義的面板(screen)和slide shows,并允許在dashboard頁面顯示

  • 報告

  • 高等級(商業(yè))監(jiān)控資源

歷史數(shù)據存儲

  • 數(shù)據存儲在數(shù)據庫中

  • 歷史數(shù)據可配置

  • 內置數(shù)據清理機制

配置簡單

  • 主機通過添加監(jiān)控設備方式添加

  • 一次配置,終生監(jiān)控(除非調整或刪除)

  • 監(jiān)控設備允許使用模板

模板使用

  • 模板中可以添加組監(jiān)控

  • 模板允許繼承

網絡自動發(fā)現(xiàn)

  • 自動發(fā)現(xiàn)網絡設備

  • agent自動注冊

  • 自動發(fā)現(xiàn)文件系統(tǒng)、網卡設備、SNMP OID等

快速的web接口

  • web前端采用php編寫

  • 訪問無障礙

  • 你想怎么做就能做么做

  • 審計日志

Zabbix API

  • Zabbix API提供程序級別的訪問接口,第三方程序可以很快接入

權限系統(tǒng)

  • 安全的權限認證

  • 用戶可以限制允許維護的列表

全特性、agent易擴展

  • 在監(jiān)控目標上部署

  • 支持Linux及Windows

二進制守護進程

  • C開發(fā),高性能,低內存消耗

  • 易移植


1.3 Zabbix功能


監(jiān)控拓撲圖說明:

(1)可以通過微信、短信、郵件實現(xiàn)自動報警機制

(2)可以通過Web頁面進行配置,監(jiān)控狀態(tài)查看

(3)可以通過SNMP協(xié)議實現(xiàn)對打印機、路由器、交換機的設備的監(jiān)控


對主機可監(jiān)控項包括:

CPU:CPU負載,CPU使用率

Memory:內存使用率,可交換內存/虛擬內存使用率

Network:網絡傳輸、網絡故障、丟包

Disk:磁盤使用率,磁盤I/O

Service:進程監(jiān)控、界面服務、TCP端口連接,響應時間、DNS監(jiān)控、NTP監(jiān)控

Log:日志監(jiān)控,文本日志,事件日志

File:文件監(jiān)控

Other:性能計數(shù)器(僅限于Windows系統(tǒng))


自定義報警機制:

如果故障在10分鐘沒有被解決,可以短信或郵件通知系統(tǒng)管理員

如果故障在15分鐘沒有被解決,可以短信或郵件通知運維人員

如果故障在30分鐘沒有被解決,可以短信或郵件通知經理


可以通過proxy代理服務器

代理Zabbix server搜集被監(jiān)控的監(jiān)控數(shù)據,并統(tǒng)一發(fā)送到Server端


2、zabbix程序架構

架構圖如下:

中小企業(yè)Zabbix監(jiān)控生產案例實踐


2.1 Zabbix各組件的說明:

Zabbix Server

Zabbix Server為核心組件,用來獲取agent存活狀況及監(jiān)控數(shù)據

所有的配置、統(tǒng)計、操作數(shù)據均通過Server進行存取到database

Zabbix database

所有的Zabbix數(shù)據均存儲在數(shù)據庫中

Web GUI

為了更簡單的無障礙的訪問Zabbix, 所以提供了web接口

該接口作為Zabbix Server的一部分,通常和server運行在同一臺主機上


注意:如果采用SQLite作為數(shù)據庫,web接口和Zabbix Server必須運行在同一臺主機上

Proxy

Zabbix Proxy能夠代替Zabbix Server進行性能及可用性數(shù)據采集

Proxy是Zabbix部署的可選組件。 如果想分擔單一Zabbix Server負載,推薦使用proxy

Agent

Zabbix agents 部署在目標監(jiān)控機上并監(jiān)控本地資源和應用,將收集數(shù)據匯報給Zabbix Server

監(jiān)控流程:

通過zabbix監(jiān)控數(shù)據流,并采取相應的措施。

首先要創(chuàng)建一個host,再創(chuàng)建一個item來搜集數(shù)據

通過item來創(chuàng)建觸發(fā)器(trigger)

通過觸發(fā)器(trigger)來創(chuàng)建一個動作(action)


2.2 Zabbix各組件結構圖:

中小企業(yè)Zabbix監(jiān)控生產案例實踐


2.3 Zabbix相關術語:


相關名詞解釋:

主機(host)

一個你想監(jiān)控的網絡設備(需要知道IP/DNS)

主機組(host group)

一個邏輯的主機組,它包含主機和模板

主機和模板在同一個主機內的話模板不能被link到其他上。主機組通常用于給不同的用戶組創(chuàng)建訪問權限

監(jiān)控項(item)

你想從主機中收集到的數(shù)據

觸發(fā)器(trigger)

一個邏輯表達式,用來表達從監(jiān)控項獲取的數(shù)據達到了預設的故障閥值

當接收到的監(jiān)控值達到了預設的閥值

則觸發(fā)器狀態(tài)由’OK’變更為’Problem’,當收到的監(jiān)控值低于閥值,則狀態(tài)保持/變更為’OK’

事件(event)

一個事情發(fā)生如觸發(fā)器狀態(tài)變更或一個自動發(fā)現(xiàn)(discovery)/agent自動注冊等

動作(action)

當一個事件發(fā)生時預設的處理過程

一個動作(action)包括操作(operations,如發(fā)送告警)和條件(當指定的操作完成)

告警升級(escalation)

在動作中一個自定的操作執(zhí)行過程,一個發(fā)送告警/執(zhí)行遠程命令的隊列

媒介(media)

發(fā)送告警的渠道

告警(notification)

通過媒介(media)渠道發(fā)送事件的消息

遠程命令(remote command)

當監(jiān)控主機達到某些條件(condition)后預設的自動執(zhí)行的命令

模板(template)

一組包含監(jiān)控項、觸發(fā)器、繪圖、面板(screen)、應用、低級別自動發(fā)現(xiàn)規(guī)則等

并且能被其他主機應用的實體模板能夠提升主機部署監(jiān)控任務的速度

同時也非常容易對監(jiān)控任務做批量(mass)更新。模板被主機鏈接(link)

應用(application)

監(jiān)控項邏輯組

web方案(scenario)

對一個web站點可用性進行檢查的一個或多個http請求

前端(frontend)

Zabbix提供的web接口

Zabbix API

Zabbix API允許通過JSON RPC協(xié)議去創(chuàng)建、更新

獲得Zabbix對象(如主機、監(jiān)控項、繪圖等等)以及完成自定義任務

Zabbix server

Zabbix軟件中心進程

用于連通Zabbix proxy及agent完成監(jiān)控、評估觸發(fā)器、發(fā)送告警以及中心數(shù)據存儲

Zabbix agent

部署在監(jiān)控主機上的進程,用于監(jiān)控本地資源和應用

Zabbix proxy

替代Zabbix server完成數(shù)據收集的進程,通常用于降低中心Zabbix Server的負載

節(jié)點(node)

一套完整的Zabbix server配置,通常位于分布式系統(tǒng)中,用于負責本區(qū)域的監(jiān)控


2.4 Zabbix工作流程介紹:


Server

Zabbix server是Zabbix軟件的核心進程


Server通過polling和trapping采集數(shù)據來判斷是否達到閥值,從而使用觸發(fā)器發(fā)送報警給用戶

Server也可以通過簡單服務檢查(simple service check)來完成遠程網絡服務檢測

Server既是保存所有配置、統(tǒng)計和操作數(shù)據的數(shù)據庫,也是故障報警服務


Zabbix server根據不同功能可劃分為三個部分:Zabbix server、Web GUI及Database

由于Zabbix的所有的配置信息保存在數(shù)據庫中,server和web GUI可以直接進行操作

比如,通過Web界面(或者API)創(chuàng)建一個新的監(jiān)控項時,它將創(chuàng)建的數(shù)據插入數(shù)據庫

一分鐘左右Zabbix server會查詢監(jiān)控項數(shù)據表

并將查詢的監(jiān)控項列表保存在自己的緩存(cache)中

這也是為什么通過Zabbix前端進行的變更將在兩分鐘左右生效的原因


Zabbix server以守護(daemon)進程方式運行

Zabbix server默認要求運行在非root賬戶下


如果Zabbix server和agent運行在同一臺主機上

建議分別運行在不同的用戶下,因為一旦運行的同一個用戶下

agent將可以訪問server的配置文件

并且能夠輕松取得Zabbix Admin級別用戶,例如:數(shù)據庫密碼


Agent

Zabbix agent部署在被監(jiān)控主機上用來監(jiān)控本地資源和應用(如硬盤、內存、處理器等)


Zabbix agent收集本地主機運行信息并將數(shù)據發(fā)送給Zabbix server進行處理

一旦出現(xiàn)異常(如硬盤滿或服務進程中斷),Zabbix server會自動響應并進行報警操作

Zabbix agent利用本地系統(tǒng)調用完成統(tǒng)計信息收集,因此它非常的高效


被動(passive)和主動(active)檢查


Zabbix agent提供被動和主動查方式

被動檢查模式中agent應答數(shù)據請求,Zabbix server或者proxy詢問agent數(shù)據

如CPU load,然后Zabbix agent回送結果給server


主動檢查 處理過程將相對復雜

agent必須先進行一次請求Zabbix server索取監(jiān)控項列表,然后發(fā)送對應的值給server

選擇是被動還是主動檢查,需要在監(jiān)控項類型 中選擇

’Zabbix agent’或者’Zabbix agent (active)’


Zabbix agent運行在被監(jiān)控主機上,可以通過守護進行的方式運行

Zabbix agent一般要求運行在非root賬戶下

如果你在’root’賬戶下啟動Zabbix agent,它將自動選擇

在操作系統(tǒng)中建立的’zabbix’用戶,除非你修改agent配置文件中’AllowRoot’參數(shù)


代理proxy


Zabbix代理(proxy)通常用于替代server收集監(jiān)控信息并將數(shù)據發(fā)送給Zabbix server

所收集數(shù)據會先存儲在代理主機的緩存中然后傳送給Zabbix server


代理是可選的,不過使用它可以有效的降低分布式環(huán)境中單一的Zabbix server負載

通過代理去收集監(jiān)控數(shù)據,server可以有效降低CPU和磁盤I/O消耗


Zabbix代理可以出色的完成遠程區(qū)域、分支機構、無本地管理員的網絡的集中監(jiān)控

Zabbix代理使用獨立的數(shù)據庫


注意:

Zabbix proxy數(shù)據庫可以使用SQLite, MySQL, PostgreSQL

如果Oracle或IBM DB2在低等級自動發(fā)現(xiàn)規(guī)則時存在限制和風險


Zabbix proxy作為守護進程運行。

Zabbix proxy一般要求運行在非root賬戶下


如果在’root’賬戶運行

它將自動選擇之前已經在操作系統(tǒng)建立的’zabbix’用戶,但是無法在編譯時或在配置文件中進行配置


二、項目規(guī)劃架構方案

中小企業(yè)Zabbix監(jiān)控生產案例實踐

2.1 主機分組

交換機 
Nginx 
Tomcat 
Mysql

2.2 監(jiān)控對象識別

使用SNMP監(jiān)控交換機 
使用IPMI監(jiān)控服務器硬件 
使用Agent監(jiān)控服務器 
使用JMX監(jiān)控java 
監(jiān)控Nginx狀態(tài) 
監(jiān)控Mysql 
監(jiān)控Web狀態(tài)


三、Zabbix監(jiān)控實踐

3.1 SNMP監(jiān)控網絡設備

3.1.1交換機上開始SNMP
config t
snmp-server community public ro
3.1.2在zabbix上添加監(jiān)控

設置SNMP interfaces

3.1.3關聯(lián)監(jiān)控模板

選擇默認的Template-SNMP-device

(網絡設備,可以監(jiān)控交換機,路由器和防火墻等;模板里面item使用了宏,如下圖 

中小企業(yè)Zabbix監(jiān)控生產案例實踐

所以主機里面要設置宏,替代默認的模板中的宏,配置網絡設備時,團體名命名為下面的名字 

中小企業(yè)Zabbix監(jiān)控生產案例實踐

3.2 添加硬件監(jiān)控(服務器IPMI)

  • 經驗:直接用IPMI監(jiān)控,經常獲取不到數(shù)據,模板自帶的item也不可能不適合真正的服務器

  • 推薦:使用自定義item,本地執(zhí)行ipmitool命令監(jiān)控獲取數(shù)據,可以用來監(jiān)控服務器風扇轉速

3.3 添加系統(tǒng)監(jiān)控

使用zabbix agent監(jiān)控,略

3.4 添加應用監(jiān)控

3.4.1 JAVA應用

使用JXM模式+java_gateway代理監(jiān)控 
java_gateway可以運行在任何服務器上,是一個單獨的服務 

中小企業(yè)Zabbix監(jiān)控生產案例實踐
1)安裝zabbix-java-gateway

[root@linux-node1 ~]# yum install -y zabbix-java-gateway

2)配置zabbix_java_gateway,其實什么都不用改

[root@linux-node1 ~]# vim /etc/zannox/zabbix_java_gateway

3)啟動zabbix_java_gateway,檢查端口和進程

[root@linux-node1 ~]# systemctl start zabbix-java-gateway
[root@linux-node1 ~]# ps -ef|grep java
[root@linux-node1 ~]# netstat -lntup|grep 10052

4)告訴zabbix-server服務器,javaGateway服務器的位置,重啟server 
5)開啟jmx遠程監(jiān)控

[root@linux-node2 ~]# vim /usr/local/tomcat/bin/catalina.sh
 CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
 -Dcom.sun.management.jmxremote.port=8888
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
 -Djava.rmi.server.hostname=192.168.56.12"
[root@linux-node2 ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@linux-node2 ~]# /usr/local/tomcat/bin/startup.sh

6)在zabbix-server上添加tomcat的主機

并連接Template-JMX-Generic模板,選擇JMX interfaces

中小企業(yè)Zabbix監(jiān)控生產案例實踐

3.4.2 Nginx應用

1)開啟nginx監(jiān)控 
在nginx配置文件中添加一個location,只允許本地訪問

location /nginx_status {
         stub_status on;
         access_log off;
         allow 127.0.0.1;
         deny all
}

2)編寫腳本來進行數(shù)據采集(此腳本可以用來監(jiān)控redis,memcached,nginx,tcp-status)

[root@linux-node1 ~]# vim redis-memcached-nginx-tcp.sh 
#!/bin/bash
############################################################
# $Name:         zabbix_linux_plugins.sh
# $Version:      v1.0
# $Function:     zabbix plugins
# $Description:  Monitor Linux Service Status
############################################################
tcp_status_fun(){
        TCP_STAT=$1
        #netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,state[key]}' > /tmp/netstat.tmp
        ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/netstat.tmp
        TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/netstat.tmp | cut -d ' ' -f2)
        if [ -z $TCP_STAT_VALUE ];then
                TCP_STAT_VALUE=0
        fi
        echo $TCP_STAT_VALUE
}

nginx_status_fun(){
        NGINX_PORT=$1
        NGINX_COMMAND=$2
        nginx_active(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
        nginx_reading(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
       }
        nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
       }
        nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
       }
        nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
       }
        nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
       }
        nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
        case $NGINX_COMMAND in
                active)
                        nginx_active;
                        ;;
                reading)
                        nginx_reading;
                        ;;
                writing)
                        nginx_writing;
                        ;;
                waiting)
                        nginx_waiting;
                        ;;
                accepts)
                        nginx_accepts;
                        ;;
                handled)
                        nginx_handled;
                        ;;

                requests)
                        nginx_requests;
                esac 
}
memcached_status_fun(){
        M_PORT=$1
        M_COMMAND=$2
        echo -e "stats\\nquit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND " | awk '{print $3}'
}
redis_status_fun(){
        R_PORT=$1
        R_COMMAND=$2
        (echo -en "INFO \\r\\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
        REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
        echo $REDIS_STAT_VALUE
}
main(){
        case $1 in
                tcp_status)
                        tcp_status_fun $2;
                        ;;
                nginx_status)
                       nginx_status_fun $2 $3;
                        ;;
                memcached_status)                      memcached_status_fun $2 $3;
                        ;;
                redis_status)                       redis_status_fun $2 $3;
                        ;;
                *)
                        echo $"Usage: $0 {tcp_status key|memcached_status key|redis_status key|nginx_status key}"
        esac
}
main $1 $2 $3
[root@linux-node1 ~]# chmod +x redis-memcached-nginx-tcp.sh

添加完測試腳本是否正常

[root@linux-node1 ~]# ./redis-memcached-nginx-tcp.sh nginx_status 8080 active
101

3)設置用戶自定義參數(shù)

[root@linux-node1 ~]# vim redis-memcached-nginx-tcp.conf
UserParameter=linux_status[\\*],/etc/zabbix/zabbix_agetd.d/redis-memcached-nginx-tcp.sh "$1" "$2" "$3"

4)增加zabbix-agent配置,并通過zabbix-server測試 
修改agent配置

[root@linux-node1 ~]# Include=/etc/zabbix/zabbix_agentd.d/\\*.conf
[root@linux-node1 ~]# service zabbix-agent restart

server端get測試

[root@linux-node1 ~]# zabbix_get -s 192.168.11.11 -k linux_status[nginx_status,8080,active]
12

5)添加template,添加item,多次克隆添加不同item即可 

中小企業(yè)Zabbix監(jiān)控生產案例實踐 

6)創(chuàng)建圖形 

7)創(chuàng)建觸發(fā)器 

8)創(chuàng)建通用模板 

3.4.3 使用percona監(jiān)控插件監(jiān)控Mysql應用

學習percona請移步percona-mysql, 此原理是php連接mysql數(shù)據庫,shell腳本獲取數(shù)據,下面開始部署 
1)在agent端安裝模板

[root@linux-node1 ~]# yum install percona-zabbix-templates

2)創(chuàng)建zabbix-agent的配置文件

[root@linux-node1 ~]# mkdir -p /etc/zabbix_agentd.conf.d/
[root@linux-node1 ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf

3)修改agent配置并重啟

[root@linux-node1 ~]# Include=/etc/zabbix/zabbix_agentd.d/\*.conf
[root@linux-node1 ~]# service zabbix-agent restart

4)配置連接Mysql

<?php
$mysql_user = 'zabbix';
$mysql_pass = '123456';<

5)測試腳本是否正常,確認密碼爭取,否則會連不上mysql

[root@linux-node1 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
405647

6)配置mysql

[client]
user = zabbix
password = 123456

7)使用zabbix測試腳本,返回0正常,1代表access denied

[root@linux-node1 ~]# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
0

8)import模板,添加mysql主機關聯(lián)此模板,添加trigger,添加Graph展示


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI