大家好,我是後來,我會分享我在學習和工作中遇到的點滴,希望有機會我的某篇文章能夠幫助你解決你遇到的問題,所有的文章都會在公衆號首發,歡迎大家關注我的公衆號**" 後來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 準備工作
- List item
確認關閉防火牆(已關閉)
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
- 關閉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
- 重啓服務器
sudo reboot
2.1.2 101節點Zabbix-server/Zabbix-agent編譯及安裝
/agent
- 創建用戶
sudo groupadd --system zabbix
sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
- 上傳zabbix安裝包並解壓,將安裝包上傳至/opt/software路徑並解壓到當前路徑
tar -zxvf zabbix-4.2.8.tar.gz
- 創建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;
- 編譯環境準備,建議大家直接複製,不用管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)進入/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)修改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)編輯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節點
- 創建用戶
sudo groupadd --system zabbix
sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
- 編譯環境準備
sudo yum -y install gcc-c++ pcre-devel
- 解壓Zabbix安裝包
將安裝包上傳至/opt/software路徑並解壓到當前路徑
tar -zxvf zabbix-4.2.8.tar.gz
- 編譯及安裝
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)編輯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
- 啓動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自定義監控的大致流程。所有的細節不可能全部展現給大家,這也就是需要我們提高自己的學習能力。