zabbix部署監控集羣,自定義監控Flume(圖片多,步驟詳細)

大家好,我是後來,我會分享我在學習和工作中遇到的點滴,希望有機會我的某篇文章能夠幫助你解決你遇到的問題,所有的文章都會在公衆號首發,歡迎大家關注我的公衆號**" 後來X "**,感謝你的關注。

1、Zabbix的介紹

1.1 Zabbix是幹啥的?

Zabbix是一款能夠監控各種網絡參數以及服務器健康性和完整性的框架。Zabbix使用靈活的通知機制,允許用戶爲幾乎任何事件配置基於郵件短信或者是電話的告警。還可以自定義開發基於公衆號提醒等,這樣可以快速反饋服務器的問題。基於已存儲的數據,Zabbix提供了出色的報告和數據可視化功能。
和zabbix類似的還有小米的開源監控框架open-falcon等,但各有千秋吧,畢竟哪個技術也不是萬能的。今天我來複盤一下我在測試集羣部署Zabbix的全過程。首先說我的版本號。

框架 版本號
zabbix 4.2.8
Flume 1.9.0
Hadoop 3.1.3

1.2 Zabbix 基礎架構

在這裏插入圖片描述

2、開始安裝Zabbix

在安裝之前我們先做好集羣規劃,我這裏是測試集羣,只有3臺機器,所以我的規劃是這樣的。

節點 服務
bigdata101 zabbix-server、zabbix-agent、MySQL、zabbix-web
bigdata102 zabbix-agent
bigdata103 zabbix-agent

每個服務的具體功能我們上面也分析了。所以接下來我們開始安裝,mysql的安裝這裏就不寫了,可以看我的另一篇安裝mysql的帖子,附鏈接

2.1 101節點安裝server/agent

2.1.1 準備工作

  1. List item

確認關閉防火牆(已關閉)

systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall開機啓動
  1. 關閉SELinux(這玩意兒就是 Linux 的一個安全子系統,太安全了,我們用起來實在是很麻煩,所以直接關掉),修改配置文件/etc/selinux/config
sudo vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
  1. 重啓服務器
sudo reboot

2.1.2 101節點Zabbix-server/Zabbix-agent編譯及安裝

/agent

  1. 創建用戶
sudo groupadd --system zabbix
sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
  1. 上傳zabbix安裝包並解壓,將安裝包上傳至/opt/software路徑並解壓到當前路徑
tar -zxvf zabbix-4.2.8.tar.gz
  1. 創建zabbix數據庫和表
## 1)進入/opt/software/zabbix-4.2.8/database/mysql路徑
cd /opt/software/zabbix-4.2.8/database/mysql

## 2)進入MySQL客戶端執行建表語句,並導入zabbix提供的sql腳本
mysql>
create database zabbix default character set utf8 collate utf8_bin;
use zabbix;
source schema.sql;
source data.sql;
source images.sql;
  1. 編譯環境準備,建議大家直接複製,不用管centos6或者7,因爲我試了把這些rpm包改爲了centos7的,結果報錯了,改爲centos6後可以了,具體原因也沒仔細研究。
sudo rpm -ivh  http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm

sudo yum-config-manager --enable city-fan.org

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/l/libnghttp2-1.6.0-1.el6.1.x86_64.rpm

sudo rpm -e --nodeps libxml2-python-2.7.6-21.el6.x86_64

sudo yum install -y libcurl libcurl-devel libxml2 libxml2-devel net-snmp-devel libevent-devel pcre-devel gcc-c++
  1. 編譯及安裝
## 1)進入/opt/software/zabbix-4.2.8路徑
cd /opt/software/zabbix-4.2.8
## 2)編譯安裝
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2

如果順利編譯成功了,執行

sudo make install

也可以看我的報錯有沒有你的問題。解決完問題後重新執行編譯語句。

注意:編譯報錯踩坑

1、報錯1

如果這時候出現

Protected multilib versions: libxml2-2.9.10-4.0.cf.rhel7.x86_64 != libxml2-2.9.1-6.el7.4.i686

這種情況是依賴衝突了,所以卸載掉這個關於python的rpm包,路徑是系統默認的,不需要改

./configure --with-libxml2=/usr/local/bin/xml2-config

2、報錯2

Centos7 在這一步可能會出現

configure: error: libcurl library not found

在這裏插入圖片描述
這個時候,再執行任何yum相關的命令,都不能執行,會報以下異常:

/lib64/libcurl.so.4: undefined symbol: nghttp2_session_callbacks_set_error_callback

解決辦法: 這是因爲更新導致的,執行以下命令

rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libnghttp2-1.31.1-2.el7.x86_64.rpm

如果以上都沒問題,那就說明bigdata101節點的服務已經裝好了,只需要修改配置就可以了。

  1. 修改配置文件
1)修改zabbix-server配置文件
sudo vim /usr/local/etc/zabbix_server.conf
# 這裏設置的是zabbix連接數據庫的信息
DBHost=bigdata101
DBName=zabbix
DBUser=root
DBPassword=123456

2)修改zabbix-agent配置文件,這是指定該101節點爲server節點
sudo vim /usr/local/etc/zabbix_agentd.conf

Server=bigdata101
#ServerActive=127.0.0.1
#Hostname=Zabbix server
  1. 編寫系統服務腳本
    1)編輯zabbix-server文件
sudo vim /etc/init.d/zabbix-server

2)內容如下


#!/bin/sh
#
# chkconfig: - 85 15
# description: Zabbix server daemon
# config: /usr/local/etc/zabbix_server.conf
#

### BEGIN INIT INFO
# Provides: zabbix
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start and stop Zabbix server
# Description: Zabbix server
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -x /usr/local/sbin/zabbix_server ]; then
    exec=/usr/local/sbin/zabbix_server
else
    exit 5
fi

prog=zabbix_server
conf=/usr/local/etc/zabbix_server.conf
pidfile=/tmp/zabbix_server.pid
timeout=10

if [ -f /etc/sysconfig/zabbix-server ]; then
    . /etc/sysconfig/zabbix-server
fi

lockfile=/var/lock/subsys/zabbix-server

start()
{
    echo -n $"Starting Zabbix server: "
    daemon $exec -c $conf
    rv=$?
    echo
    [ $rv -eq 0 ] && touch $lockfile
    return $rv
}

stop()
{
    echo -n $"Shutting down Zabbix server: "
    killproc -p $pidfile -d $timeout $prog
    rv=$?
    echo
    [ $rv -eq 0 ] && rm -f $lockfile
    return $rv
}

restart()
{
    stop
    start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    status)
        status -p $pidfile $prog
        ;;
    try-restart|condrestart)
        if status $prog >/dev/null ; then
            restart
        fi
        ;;
    reload)
        action $"Service ${0##*/} does not support the reload action: " /bin/false
        exit 3
        ;;
    *)
	echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
	exit 2
	;;
esac

3) 加執行權限

sudo chmod u+x /etc/init.d/zabbix-server

4)編輯zabbix-agent文件

sudo vim /etc/init.d/zabbix-agent

5)內容如下
-指的是任何狀態下都不開機自啓 86指的是啓動級別,越大越後啓動,14是關閉級別,越大越先關閉

#!/bin/sh
#
# chkconfig: - 86 14
# description: Zabbix agent daemon
# processname: zabbix_agentd
# config: /usr/local/etc/zabbix_agentd.conf
#

### BEGIN INIT INFO
# Provides: zabbix-agent
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Should-Start: zabbix zabbix-proxy
# Should-Stop: zabbix zabbix-proxy
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start and stop Zabbix agent
# Description: Zabbix agent
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -x /usr/local/sbin/zabbix_agentd ]; then
    exec=/usr/local/sbin/zabbix_agentd
else
    exit 5
fi

prog=zabbix_agentd
conf=/usr/local/etc/zabbix_agentd.conf
pidfile=/tmp/zabbix_agentd.pid
timeout=10

if [ -f /etc/sysconfig/zabbix-agent ]; then
    . /etc/sysconfig/zabbix-agent
fi

lockfile=/var/lock/subsys/zabbix-agent

start()
{
    echo -n $"Starting Zabbix agent: "
    daemon $exec -c $conf
    rv=$?
    echo
    [ $rv -eq 0 ] && touch $lockfile
    return $rv
}

stop()
{
    echo -n $"Shutting down Zabbix agent: "
    killproc -p $pidfile -d $timeout $prog
    rv=$?
    echo
    [ $rv -eq 0 ] && rm -f $lockfile
    return $rv
}

restart()
{
    stop
    start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    status)
        status -p $pidfile $prog 
        ;;
    try-restart|condrestart)
        if status $prog >/dev/null ; then
            restart
        fi
        ;;
    reload)
        action $"Service ${0##*/} does not support the reload action: " /bin/false
        exit 3
        ;;
    *)
	echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
	exit 2
	;;
esac

6)加執行權限

sudo chmod u+x /etc/init.d/zabbix-agent

2.2 101節點部署Zabbix-web

2.2.1 部署httpd

1)安裝httpd

sudo yum -y install httpd

2)修改httpd配置文件

sudo vim /etc/httpd/conf/httpd.conf

將以下紅色部分放至改配置文件的對應位置

131 <Directory "/var/www/html">
132     #
133     # Possible values for the Options directive are "None", "All",
134     # or any combination of:
135     #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
136     #
137     # Note that "MultiViews" must be named *explicitly* --- "Options All"
138     # doesn't give it to you.
139     #
140     # The Options directive is both complicated and important.  Please see
141     # http://httpd.apache.org/docs/2.4/mod/core.html#options
142     # for more information.
143     #
144     Options Indexes FollowSymLinks
145 
146     #
147     # AllowOverride controls what directives may be placed in .htaccess files.
148     # It can be "All", "None", or any combination of the keywords:
149     #   Options FileInfo AuthConfig Limit
150     #
151     AllowOverride None
152 
153     #
154     # Controls who can get stuff from this server.
155     #
156 	Require all granted
157 
158  Order allow,deny
159     Allow from all
160      <IfModule mod_php5.c>
161          php_value max_execution_time 300
162          php_value memory_limit 128M
163          php_value post_max_size 16M
164          php_value upload_max_filesize 2M
165          php_value max_input_time 300
166          php_value max_input_vars 10000
167          php_value always_populate_raw_post_data -1
168          php_value date.timezone Asia/Shanghai
169      </IfModule>
170 </Directory>

3)拷貝zabbix-web的php文件到httpd的指定目錄

sudo mkdir /var/www/html/zabbix
sudo cp -a /opt/software/zabbix-4.2.8/frontends/php/* /var/www/html/zabbix/

2.2.2 安裝php5.6

(centos7 用戶也可以直接複製,或者是下載對應的依賴,不過我實測這些用下面的也沒問題
1)安裝yum源

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

sudo rpm -ivh epel-release-6-8.noarch.rpm remi-release-6.rpm

2)激活yum源

sudo yum-config-manager --enable remi-php56

3)安裝php及相關組件

sudo yum install -y php php-bcmath php-mbstring php-xmlwriter php-xmlreader php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo

2.3 Zabbix啓動

2.3.1 啓動Zabbix-Server

1)啓動

sudo systemctl start zabbix-server.service

2)開機自啓

sudo chkconfig --add zabbix-server
sudo systemctl enable zabbix-server.service

2.3.2 啓動Zabbix-Agent

1)啓動

sudo systemctl start zabbix-agent.service

2)開機自啓

sudo chkconfig --add zabbix-agent
sudo systemctl enable zabbix-agent.service

2.3.3 啓動Zabbix-Web(httpd)

1)啓動

sudo systemctl start httpd.service

2)開機自啓

sudo systemctl enable httpd.service

2.4 Zabbix登錄

1)瀏覽器訪問http://bigdata101/zabbix

2)檢查配置

3)配置數據庫

4)配置zabbix-server

5)下載配置文件,並上傳至指定路徑

6)登錄,用戶名:Admin,密碼zabbix

7)修改頁面爲中文

到這一步,如果能進入到zabbix,而且能看到下面這個頁面,就恭喜你完成了第一步。
在這裏插入圖片描述

3、其他機器部署agent節點

  1. 創建用戶
sudo groupadd --system zabbix
sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
  1. 編譯環境準備
sudo yum -y install gcc-c++ pcre-devel
  1. 解壓Zabbix安裝包
    將安裝包上傳至/opt/software路徑並解壓到當前路徑
tar -zxvf zabbix-4.2.8.tar.gz
  1. 編譯及安裝
    1)進入/opt/software/zabbix-4.2.8路徑,執行以下編譯安裝命令
./configure --enable-agent
sudo make install

2)修改zabbix-agent配置文件

sudo vim /usr/local/etc/zabbix_agentd.conf

LogFile=//zabbix_agentd.log(自己配)
Server=bigdata101
#ServerActive=127.0.0.1
#Hostname=Zabbix server
  1. 編輯系統服務腳本
    1)編輯zabbix-agent文件
sudo vim /etc/init.d/zabbix-agent

2)內容如下

#!/bin/sh
#
# chkconfig: - 86 14
# description: Zabbix agent daemon
# processname: zabbix_agentd
# config: /usr/local/etc/zabbix_agentd.conf
#

### BEGIN INIT INFO
# Provides: zabbix-agent
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Should-Start: zabbix zabbix-proxy
# Should-Stop: zabbix zabbix-proxy
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start and stop Zabbix agent
# Description: Zabbix agent
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -x /usr/local/sbin/zabbix_agentd ]; then
    exec=/usr/local/sbin/zabbix_agentd
else
    exit 5
fi

prog=zabbix_agentd
conf=/usr/local/etc/zabbix_agentd.conf
pidfile=/tmp/zabbix_agentd.pid
timeout=10

if [ -f /etc/sysconfig/zabbix-agent ]; then
    . /etc/sysconfig/zabbix-agent
fi

lockfile=/var/lock/subsys/zabbix-agent

start()
{
    echo -n $"Starting Zabbix agent: "
    daemon $exec -c $conf
    rv=$?
    echo
    [ $rv -eq 0 ] && touch $lockfile
    return $rv
}

stop()
{
    echo -n $"Shutting down Zabbix agent: "
    killproc -p $pidfile -d $timeout $prog
    rv=$?
    echo
    [ $rv -eq 0 ] && rm -f $lockfile
    return $rv
}

restart()
{
    stop
    start
}

case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    status)
        status -p $pidfile $prog 
        ;;
    try-restart|condrestart)
        if status $prog >/dev/null ; then
            restart
        fi
        ;;
    reload)
        action $"Service ${0##*/} does not support the reload action: " /bin/false
        exit 3
        ;;
    *)
	echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
	exit 2
	;;
esac

3)加執行權限

sudo chmod +x /etc/init.d/zabbix-agent
  1. 啓動Zabbix-Agent
    1)啓動
sudo service zabbix-agent start

2)開機自啓

sudo chkconfig --add zabbix-agent
sudo chkconfig zabbix-agent on

以上步驟,需要在其他的所有機器上都重複一遍,到此爲止,已經把zabbix安裝好了,恭喜你

接下來就是配置監控項,讓zabbix能夠正常監控

4、Zabbix使用

思路:要使用zabbix實現監控,首先要告訴zabbix,
我要監控哪臺機器
其次告訴他每臺機器需要哪些監控項
最後告訴它如果監控到什麼情況就要報警
那麼說到報警就提到一個問題,怎麼報警,給誰報警
也就是短信或者是郵件的收件人怎麼配置,同時發件人是誰,怎麼配置?

這些問題我們一個一個來解決,我們這裏做2個監控案例,幫助理解zabbix的監控操作過程
1、監控Hadoop中的Data進程,實現報警
2、監控flume進程(自定義監控)

至於zabbix的一些專業術語,大家把語言調成中文自己就懂了。下面來先做一些準備工作。

4.1 使用zabbix監控Hadoop中的DataNode進程

4.1.1 創建Host

1)點擊Configuration/Hosts/Create host(原來的這個host可以直接刪掉,直接創建新的)
在這裏插入圖片描述
2)配置Host
在這裏插入圖片描述

3)查看新增Host
在這裏插入圖片描述
現在已經有機器了,那麼監控什麼呢?我們接下來配置監控項。

4.1.2 創建Item

1)點擊Items
在這裏插入圖片描述

2)點擊右上角的創建Create item
在這裏插入圖片描述
3)配置監控項Item
在這裏插入圖片描述
4)查看創建的Item
在這裏插入圖片描述
5)查看Item最新數據
在這裏插入圖片描述
到目前爲止,已經實現了監控這個DataNode的進程數量,接下來,我們需要的是,如果這個進程掛掉的話給我報警,那麼我們就要設置觸發器,以及收件人和發件人。

4.1.3 創建Trigger

1)點擊Conguration/Hosts/Triggers
在這裏插入圖片描述
2)點擊Create Trigger
在這裏插入圖片描述
3)編輯Trigger
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
添加成功就是上面這樣
4)測試Trigger
關閉集羣中的HDFS,會有如下效果
在這裏插入圖片描述
那接下來我們來配置報警媒介,也就是收發件人

4.1.4 創建Media type

1)點擊右上角的用戶
在這裏插入圖片描述
2)編輯Email
在這裏插入圖片描述
**加粗樣式**
問題來了,我們剛只是配了收件人,那誰來給你發郵件呢?
3)點擊Administration/Media types/Email
在這裏插入圖片描述
在這裏插入圖片描述
4)測試Email
在這裏插入圖片描述
現在我們基本都配置好了,還差最後一步,就是需要配置動作,也就是配置發郵件這個動作

4.1.5 創建Action

1)點擊Configuration/Actions/Create action
在這裏插入圖片描述
2)編輯Action
在這裏插入圖片描述
在這裏插入圖片描述
接下來還要配置操作,也就是配置郵件內容模板,我們這裏都是默認的
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這個時候就都配置好了。接下來測試一下
3)測試
重新啓動HDFS,再關閉HDFS時,即可收到郵件通知
在這裏插入圖片描述

其實到現在大家已經能夠基本瞭解熟悉zabbix的使用邏輯了,那我們再來使用一下zabbix監控集羣資源,畢竟這個是大數據裏面必須要做的。

這次我們先創建一個應用集,把所有的監控項加進去,然後爲每臺機器指定這個應用集,這樣的話就不需要我們在每臺機器都添加一遍重複的監控項了。

4.2 修改zabbix字體

在這裏插入圖片描述
在這裏插入圖片描述
那接下來給大家說怎麼修改?

cd /var/www/html/zabbix/assets/fonts

**加粗樣式**
大家去網上下載自己喜歡的字體,要ttf格式,上傳到這裏,把名字替換爲這個

//舉例子
mv STHUPO.ttf DejaVuSans.ttf

這個時候刷新zabbix頁面,就發現有字體顯示啦。

4.3 使用zabbix實現自定義監控Flume

**這塊內容可能寫的不是特別特別詳細,因爲涉及到了flume框架的配置是因人而異的,我只講一下流程。**flume的搭建就不說了,大家先自行百度安裝部署,後續的話我可能也會寫關於flume的文章。

之前的flume監控,一般都是用的Ganglia,但我們現在已經搭建了Zabbix,自然不希望有2套監控系統,所以我們來用zabbix實現監控Flume

這就體現出有的時候zabbix提供的監控項目,不能滿足我們生產環境下的監控需求,此時我們就要按照zabbix的規範自定義監控項目,達到監控的目的

4.3.1 啓動一個Flume採集數據到kafka的進程

nohup /opt/module/apache-flume-1.9.0-bin/bin/flume-ng agent --conf-file /opt/module/apache-flume-1.9.0-bin/job/file-flume-kafka.conf --name a1 -Dflume.monitoring.type=http -Dflume.monitoring.port=11201 -Dflume.root.logger=INFO,LOGFILE >/opt/module/apache-flume-1.9.0-bin/test1 2>&1

注意,這裏面的http和監控的端口是新增的,也就是之前啓動的時候我們是不需要指定的,現在我們要監控flume,那還是需要通過監控端口來實現。

這個時候,我們

4.3.2 使用jq工具來看一下flume自身的監控項

jq工具需要安裝

# 安裝EPEL源:
yum install epel-release

# 安裝完EPEL源後,可以查看下jq包是否存在:
yum list jq

# 安裝jq:
yum install jq

安裝完jq後,使用下面的命令,來查看

[later@bigdata101 bin]$ curl 192.168.1.110:11201/metrics | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1096    0  1096    0     0   356k      0 --:--:-- --:--:-- --:--:--  356k
{
  "CHANNEL.c2": {
    "KafkaEventGetTimer": "0",
    "ChannelSize": "0",
    "EventTakeAttemptCount": "0",
    "StartTime": "1588910637651",
    "ChannelCapacity": "0",
    "ChannelFillPercentage": "1.7976931348623157E308",
    "KafkaCommitTimer": "0",
    "Type": "CHANNEL",
    "EventTakeSuccessCount": "0",
    "RollbackCount": "0",
    "KafkaEventSendTimer": "853",
    "EventPutAttemptCount": "5000",
    "EventPutSuccessCount": "5000",
    "StopTime": "0"
  },
  "CHANNEL.c1": {
    "KafkaEventGetTimer": "0",
    "ChannelSize": "0",
    "EventTakeAttemptCount": "0",
    "StartTime": "1588910637652",
    "ChannelCapacity": "0",
    "ChannelFillPercentage": "1.7976931348623157E308",
    "KafkaCommitTimer": "0",
    "Type": "CHANNEL",
    "EventTakeSuccessCount": "0",
    "RollbackCount": "0",
    "KafkaEventSendTimer": "1019",
    "EventPutAttemptCount": "5000",
    "EventPutSuccessCount": "5000",
    "StopTime": "0"
  },
  "SOURCE.r1": {
    "AppendBatchAcceptedCount": "55",
    "GenericProcessingFail": "0",
    "EventAcceptedCount": "5276",
    "AppendReceivedCount": "0",
    "StartTime": "1588910637989",
    "AppendBatchReceivedCount": "55",
    "ChannelWriteFail": "0",
    "EventReceivedCount": "5276",
    "EventReadFail": "0",
    "Type": "SOURCE",
    "AppendAcceptedCount": "0",
    "OpenConnectionCount": "0",
    "StopTime": "0"
  }
}
[later@bigdata101 bin]$ 

我們先使用sed工具把這些監控項格式化處理一下

[later@bigdata101 bin]$ curl 192.168.1.110:11201/metrics  2>/dev/null |sed  -e 's/\([,]\)\s*/\1\n/g' -e  's/[{}]/\n/g' -e 's/[",]//g'

CHANNEL.c2:
KafkaEventGetTimer:0
ChannelSize:0
EventTakeAttemptCount:0
StartTime:1588910637651
ChannelCapacity:0
ChannelFillPercentage:1.7976931348623157E308
KafkaCommitTimer:0
Type:CHANNEL
EventTakeSuccessCount:0
RollbackCount:0
KafkaEventSendTimer:853
EventPutAttemptCount:5000
EventPutSuccessCount:5000
StopTime:0

CHANNEL.c1:
KafkaEventGetTimer:0
ChannelSize:0
EventTakeAttemptCount:0
StartTime:1588910637652
ChannelCapacity:0
ChannelFillPercentage:1.7976931348623157E308
KafkaCommitTimer:0
Type:CHANNEL
EventTakeSuccessCount:0
RollbackCount:0
KafkaEventSendTimer:1019
EventPutAttemptCount:5000
EventPutSuccessCount:5000
StopTime:0

SOURCE.r1:
AppendBatchAcceptedCount:55
GenericProcessingFail:0
EventAcceptedCount:5276
AppendReceivedCount:0
StartTime:1588910637989
AppendBatchReceivedCount:55
ChannelWriteFail:0
EventReceivedCount:5276
EventReadFail:0
Type:SOURCE
AppendAcceptedCount:0
OpenConnectionCount:0
StopTime:0

還可以使用awk獲取某個參數的值

[later@bigdata101 bin]$ curl 192.168.1.110:11201/metrics  2>/dev/null |sed  -e 's/\([,]\)\s*/\1\n/g' -e  's/[{}]/\n/g' -e 's/[",]//g' | grep EventAcceptedCount

EventAcceptedCount:5276

那麼這麼多監控項,我們到底要監控哪一個呢?這個表格是來源於網上的鏈接https://www.cnblogs.com/fengzzi/p/10033739.html

objectName(會隨實際情況而變化) 指標項 說明
org.apache.flume.source:type=r1 OpenConnectionCount 目前與客戶端或sink保持連接的總數量
org.apache.flume.source:type=r1 AppendBatchAcceptedCount 成功提交到channel的批次的總數量
org.apache.flume.source:type=r1 AppendBatchReceivedCount 接收到事件批次的總數量
org.apache.flume.source:type=r1 AppendAcceptedCount 逐條錄入的次數
org.apache.flume.source:type=r1 AppendReceivedCount 每批只有一個事件的事件總數量
org.apache.flume.source:type=r1 EventAcceptedCount 成功寫出到channel的事件總數量
org.apache.flume.source:type=r1 EventReceivedCount 目前爲止source已經接收到的事件總數量
org.apache.flume.source:type=r1 StartTime source啓動時的毫秒值時間
org.apache.flume.source:type=r1 StopTime source停止時的毫秒值時間,爲0表示一直在運行

channel監控項

objectName(會隨實際情況而變化) 指標項 說明
org.apache.flume.channel:type=c1 EventPutAttemptCount Source嘗試寫入Channe的事件總次數
org.apache.flume.channel:type=c1 EventPutSuccessCount 成功寫入channel且提交的事件總次數
org.apache.flume.channel:type=c1 EventTakeAttemptCount sink嘗試從channel拉取事件的總次數。
org.apache.flume.channel:type=c1 EventTakeSuccessCount sink成功從channel讀取事件的總數量
org.apache.flume.channel:type=c1 ChannelSize 目前channel中事件的總數量
org.apache.flume.channel:type=c1 ChannelCapacity channel的容量
org.apache.flume.channel:type=c1 ChannelFillPercentage channel已填入的百分比
org.apache.flume.channel:type=c1 StartTime channel啓動時的毫秒值時間
org.apache.flume.channel:type=c1 StopTime channel停止時的毫秒值時間,爲0表示一直在運行

sink監控項

objectName(會隨實際情況而變化) 指標項 說明
org.apache.flume.sink:type=k1 ConnectionCreatedCount 創建的連接數量
org.apache.flume.sink:type=k1 ConnectionClosedCount 關閉的連接數量
org.apache.flume.sink:type=k1 ConnectionFailedCount 由於錯誤關閉的連接數量
org.apache.flume.sink:type=k1 BatchEmptyCount 批量處理event的個數爲0的數量-表示source寫入數據的速度比sink處理數據的速度慢
org.apache.flume.sink:type=k1 BatchUnderflowCount 批量處理event的個數小於批處理大小的數量
org.apache.flume.sink:type=k1 BatchCompleteCount 批量處理event的個數等於批處理大小的數量
org.apache.flume.sink:type=k1 EventDrainAttemptCount sink嘗試寫出到存儲的事件總數量
org.apache.flume.sink:type=k1 EventDrainSuccessCount sink成功寫出到存儲的事件總數量
org.apache.flume.sink:type=k1 StartTime channel啓動時的毫秒值時間
org.apache.flume.sink:type=k1 StopTime channel停止時的毫秒值時間,爲0表示一直在運行

4.3.3 zabbix agent端配置

cd /usr/local/etc/zabbix_agentd.conf.d/
vim flume_monitor.sh 

#!/bin/bash

FLUME_PORT=$1
METRIC_VALUE=$2

curl 127.0.0.1:"$FLUME_PORT"/metrics 2>/dev/null |sed -e 's/\([,]\)\s*/\1\n/g' -e 's/[{}]/\n/g' -e 's/[",]//g' | grep "$METRIC_VALUE" | awk -F ':' '{print $2}'

chmod u+x flume_monitor.sh //添加執行權限

/usr/local/etc/zabbix_agentd.conf.d/flume_monitor.sh 11201 EventReceivedCount //測試腳本是不是可用

接下來寫監控配置

vim /usr/local/etc/zabbix_agentd.conf

做以下修改
UnsafeUserParameters=1 # 默認爲0,表示不允許自定義key
# 監控*進程是否存在,[*]是server端傳遞參數,是服務名稱
UserParameter=FLUME_STATUS[*],/etc/zabbix/zabbix_agentd.d/flume_monitor.sh $1 $2

在這裏插入圖片描述

4.3.4 重啓zabbix agent服務

systemctl restart zabbix-agent
systemctl status zabbix-agent

4.3.5 在zabbix server端進行取值

1) 創建模板
在這裏插入圖片描述
2) 編輯模板
在這裏插入圖片描述
3) 創建應用集
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
4) 創建監控項
在這裏插入圖片描述
最後點擊添加在這裏插入圖片描述

4.3.6 在主機中添加應用集

在這裏插入圖片描述
選中以後啓用
在這裏插入圖片描述

這個時候大家看下是不是已經監控到你的數據了呢?
在這裏插入圖片描述
在這裏插入圖片描述
好了,到此,關於flume的單個服務的監控已經搞定了,剩下的大家舉一反三,在監控項表格中,找到自己關心的監控項關鍵詞,然後部署就可以了。

這也是zabbix自定義監控的大致流程。所有的細節不可能全部展現給大家,這也就是需要我們提高自己的學習能力。

如果這篇文章有幫助到你,希望你能不吝嗇的點贊、轉發、收藏,你的鼓勵是我更文最大的動力,關注我的公衆號:後來X。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章