大家好,我是后来,我会分享我在学习和工作中遇到的点滴,希望有机会我的某篇文章能够帮助你解决你遇到的问题,所有的文章都会在公众号首发,欢迎大家关注我的公众号" 后来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
确认关闭防火墙(已关闭)
1systemctl stop firewalld.service #停止firewall
2systemctl disable firewalld.service #禁止firewall开机启动
关闭SELinux(这玩意儿就是 Linux 的一个安全子系统,太安全了,我们用起来实在是很麻烦,所以直接关掉),修改配置文件/etc/selinux/config
1sudo vim /etc/selinux/config
2
3# This file controls the state of SELinux on the system.
4# SELINUX= can take one of these three values:
5# enforcing - SELinux security policy is enforced.
6# permissive - SELinux prints warnings instead of enforcing.
7# disabled - No SELinux policy is loaded.
8SELINUX=disabled
9# SELINUXTYPE= can take one of these two values:
10# targeted - Targeted processes are protected,
11# mls - Multi Level Security protection.
12SELINUXTYPE=targeted
重启服务器
1sudo reboot
2.1.2 101节点Zabbix-server/Zabbix-agent编译及安装
创建用户
1sudo groupadd --system zabbix
2sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
上传zabbix安装包并解压,将安装包上传至/opt/software路径并解压到当前路径
1tar -zxvf zabbix-4.2.8.tar.gz
创建zabbix数据库和表
1## 1)进入/opt/software/zabbix-4.2.8/database/mysql路径
2cd /opt/software/zabbix-4.2.8/database/mysql
3
4## 2)进入MySQL客户端执行建表语句,并导入zabbix提供的sql脚本
5mysql>
6create database zabbix default character set utf8 collate utf8_bin;
7use zabbix;
8source schema.sql;
9source data.sql;
10source images.sql;
编译环境准备,建议大家直接复制,不用管centos6或者7,因为我试了把这些rpm包改为了centos7的,结果报错了,改为centos6后可以了,具体原因也没仔细研究。
1sudo rpm -ivh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm
2
3sudo yum-config-manager --enable city-fan.org
4
5sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/l/libnghttp2-1.6.0-1.el6.1.x86_64.rpm
6
7sudo rpm -e --nodeps libxml2-python-2.7.6-21.el6.x86_64
8
9sudo 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路径
2cd /opt/software/zabbix-4.2.8
3## 2)编译安装
4./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
如果顺利编译成功了,执行
1sudo make install
也可以看我的报错有没有你的问题。解决完问题后重新执行编译语句。
注意:编译报错踩坑
1、报错1
如果这时候出现
1Protected multilib versions: libxml2-2.9.10-4.0.cf.rhel7.x86_64 != libxml2-2.9.1-6.el7.4.i686
这种情况是依赖冲突了,所以卸载掉这个关于python的rpm包,路径是系统默认的,不需要改
1./configure --with-libxml2=/usr/local/bin/xml2-config
2、报错2
Centos7 在这一步可能会出现
1configure: error: libcurl library not found

这个时候,再执行任何yum相关的命令,都不能执行,会报以下异常:
1/lib64/libcurl.so.4: undefined symbol: nghttp2_session_callbacks_set_error_callback
解决办法: 这是因为更新导致的,执行以下命令
1rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libnghttp2-1.31.1-2.el7.x86_64.rpm
如果以上都没问题,那就说明bigdata101节点的服务已经装好了,只需要修改配置就可以了。
修改配置文件
11)修改zabbix-server配置文件
2sudo vim /usr/local/etc/zabbix_server.conf
3# 这里设置的是zabbix连接数据库的信息
4DBHost=bigdata101
5DBName=zabbix
6DBUser=root
7DBPassword=123456
8
92)修改zabbix-agent配置文件,这是指定该101节点为server节点
10sudo vim /usr/local/etc/zabbix_agentd.conf
11
12Server=bigdata101
13#ServerActive=127.0.0.1
14#Hostname=Zabbix server
编写系统服务脚本
1)编辑zabbix-server文件
1sudo vim /etc/init.d/zabbix-server
2)内容如下
1#!/bin/sh
2#
3# chkconfig: - 85 15
4# description: Zabbix server daemon
5# config: /usr/local/etc/zabbix_server.conf
6#
7
8### BEGIN INIT INFO
9# Provides: zabbix
10# Required-Start: $local_fs $network
11# Required-Stop: $local_fs $network
12# Default-Start:
13# Default-Stop: 0 1 2 3 4 5 6
14# Short-Description: Start and stop Zabbix server
15# Description: Zabbix server
16### END INIT INFO
17
18# Source function library.
19. /etc/rc.d/init.d/functions
20
21if [ -x /usr/local/sbin/zabbix_server ]; then
22 exec=/usr/local/sbin/zabbix_server
23else
24 exit 5
25fi
26
27prog=zabbix_server
28conf=/usr/local/etc/zabbix_server.conf
29pidfile=/tmp/zabbix_server.pid
30timeout=10
31
32if [ -f /etc/sysconfig/zabbix-server ]; then
33 . /etc/sysconfig/zabbix-server
34fi
35
36lockfile=/var/lock/subsys/zabbix-server
37
38start()
39{
40 echo -n $"Starting Zabbix server: "
41 daemon $exec -c $conf
42 rv=$?
43 echo
44 [ $rv -eq 0 ] && touch $lockfile
45 return $rv
46}
47
48stop()
49{
50 echo -n $"Shutting down Zabbix server: "
51 killproc -p $pidfile -d $timeout $prog
52 rv=$?
53 echo
54 [ $rv -eq 0 ] && rm -f $lockfile
55 return $rv
56}
57
58restart()
59{
60 stop
61 start
62}
63
64case "$1" in
65 start|stop|restart)
66 $1
67 ;;
68 force-reload)
69 restart
70 ;;
71 status)
72 status -p $pidfile $prog
73 ;;
74 try-restart|condrestart)
75 if status $prog >/dev/null ; then
76 restart
77 fi
78 ;;
79 reload)
80 action $"Service ${0##*/} does not support the reload action: " /bin/false
81 exit 3
82 ;;
83 *)
84 echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
85 exit 2
86 ;;
87esac
3) 加执行权限
1sudo chmod u+x /etc/init.d/zabbix-server
4)编辑zabbix-agent文件
1sudo vim /etc/init.d/zabbix-agent
5)内容如下
-指的是任何状态下都不开机自启 86指的是启动级别,越大越后启动,14是关闭级别,越大越先关闭
1#!/bin/sh
2#
3# chkconfig: - 86 14
4# description: Zabbix agent daemon
5# processname: zabbix_agentd
6# config: /usr/local/etc/zabbix_agentd.conf
7#
8
9### BEGIN INIT INFO
10# Provides: zabbix-agent
11# Required-Start: $local_fs $network
12# Required-Stop: $local_fs $network
13# Should-Start: zabbix zabbix-proxy
14# Should-Stop: zabbix zabbix-proxy
15# Default-Start:
16# Default-Stop: 0 1 2 3 4 5 6
17# Short-Description: Start and stop Zabbix agent
18# Description: Zabbix agent
19### END INIT INFO
20
21# Source function library.
22. /etc/rc.d/init.d/functions
23
24if [ -x /usr/local/sbin/zabbix_agentd ]; then
25 exec=/usr/local/sbin/zabbix_agentd
26else
27 exit 5
28fi
29
30prog=zabbix_agentd
31conf=/usr/local/etc/zabbix_agentd.conf
32pidfile=/tmp/zabbix_agentd.pid
33timeout=10
34
35if [ -f /etc/sysconfig/zabbix-agent ]; then
36 . /etc/sysconfig/zabbix-agent
37fi
38
39lockfile=/var/lock/subsys/zabbix-agent
40
41start()
42{
43 echo -n $"Starting Zabbix agent: "
44 daemon $exec -c $conf
45 rv=$?
46 echo
47 [ $rv -eq 0 ] && touch $lockfile
48 return $rv
49}
50
51stop()
52{
53 echo -n $"Shutting down Zabbix agent: "
54 killproc -p $pidfile -d $timeout $prog
55 rv=$?
56 echo
57 [ $rv -eq 0 ] && rm -f $lockfile
58 return $rv
59}
60
61restart()
62{
63 stop
64 start
65}
66
67case "$1" in
68 start|stop|restart)
69 $1
70 ;;
71 force-reload)
72 restart
73 ;;
74 status)
75 status -p $pidfile $prog
76 ;;
77 try-restart|condrestart)
78 if status $prog >/dev/null ; then
79 restart
80 fi
81 ;;
82 reload)
83 action $"Service ${0##*/} does not support the reload action: " /bin/false
84 exit 3
85 ;;
86 *)
87 echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
88 exit 2
89 ;;
90esac
6)加执行权限
1sudo chmod u+x /etc/init.d/zabbix-agent
2.2 101节点部署Zabbix-web
2.2.1 部署httpd
1)安装httpd
1sudo yum -y install httpd
2)修改httpd配置文件
1sudo vim /etc/httpd/conf/httpd.conf
将以下红色部分放至改配置文件的对应位置
1131 <Directory "/var/www/html">
2132 #
3133 # Possible values for the Options directive are "None", "All",
4134 # or any combination of:
5135 # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
6136 #
7137 # Note that "MultiViews" must be named *explicitly* --- "Options All"
8138 # doesn't give it to you.
9139 #
10140 # The Options directive is both complicated and important. Please see
11141 # http://httpd.apache.org/docs/2.4/mod/core.html#options
12142 # for more information.
13143 #
14144 Options Indexes FollowSymLinks
15145
16146 #
17147 # AllowOverride controls what directives may be placed in .htaccess files.
18148 # It can be "All", "None", or any combination of the keywords:
19149 # Options FileInfo AuthConfig Limit
20150 #
21151 AllowOverride None
22152
23153 #
24154 # Controls who can get stuff from this server.
25155 #
26156 Require all granted
27157
28158 Order allow,deny
29159 Allow from all
30160 <IfModule mod_php5.c>
31161 php_value max_execution_time 300
32162 php_value memory_limit 128M
33163 php_value post_max_size 16M
34164 php_value upload_max_filesize 2M
35165 php_value max_input_time 300
36166 php_value max_input_vars 10000
37167 php_value always_populate_raw_post_data -1
38168 php_value date.timezone Asia/Shanghai
39169 </IfModule>
40170 </Directory>
3)拷贝zabbix-web的php文件到httpd的指定目录
1sudo mkdir /var/www/html/zabbix
2sudo cp -a /opt/software/zabbix-4.2.8/frontends/php/* /var/www/html/zabbix/
2.2.2 安装php5.6
(centos7 用户也可以直接复制,或者是下载对应的依赖,不过我实测这些用下面的也没问题)
1)安装yum源
1wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2
3wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
4
5sudo rpm -ivh epel-release-6-8.noarch.rpm remi-release-6.rpm
2)激活yum源
1sudo yum-config-manager --enable remi-php56
3)安装php及相关组件
1sudo 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)启动
1sudo systemctl start zabbix-server.service
2)开机自启
1sudo chkconfig --add zabbix-server
2sudo systemctl enable zabbix-server.service
2.3.2 启动Zabbix-Agent
1)启动
1sudo systemctl start zabbix-agent.service
2)开机自启
1sudo chkconfig --add zabbix-agent
2sudo systemctl enable zabbix-agent.service
2.3.3 启动Zabbix-Web(httpd)
1)启动
1sudo systemctl start httpd.service
2)开机自启
1sudo 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) 创建用户
1sudo groupadd --system zabbix
2sudo useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
2) 编译环境准备
1sudo yum -y install gcc-c++ pcre-devel
3) 解压Zabbix安装包
将安装包上传至/opt/software路径并解压到当前路径
1tar -zxvf zabbix-4.2.8.tar.gz
4) 编译及安装
1)进入/opt/software/zabbix-4.2.8路径,执行以下编译安装命令
1./configure --enable-agent
2sudo make install
2)修改zabbix-agent配置文件
1sudo vim /usr/local/etc/zabbix_agentd.conf
2
3LogFile=//zabbix_agentd.log(自己配)
4Server=bigdata101
5#ServerActive=127.0.0.1
6#Hostname=Zabbix server
5) 编辑系统服务脚本
1)编辑zabbix-agent文件
1sudo vim /etc/init.d/zabbix-agent
2)内容如下
1#!/bin/sh
2#
3# chkconfig: - 86 14
4# description: Zabbix agent daemon
5# processname: zabbix_agentd
6# config: /usr/local/etc/zabbix_agentd.conf
7#
8
9### BEGIN INIT INFO
10# Provides: zabbix-agent
11# Required-Start: $local_fs $network
12# Required-Stop: $local_fs $network
13# Should-Start: zabbix zabbix-proxy
14# Should-Stop: zabbix zabbix-proxy
15# Default-Start:
16# Default-Stop: 0 1 2 3 4 5 6
17# Short-Description: Start and stop Zabbix agent
18# Description: Zabbix agent
19### END INIT INFO
20
21# Source function library.
22. /etc/rc.d/init.d/functions
23
24if [ -x /usr/local/sbin/zabbix_agentd ]; then
25 exec=/usr/local/sbin/zabbix_agentd
26else
27 exit 5
28fi
29
30prog=zabbix_agentd
31conf=/usr/local/etc/zabbix_agentd.conf
32pidfile=/tmp/zabbix_agentd.pid
33timeout=10
34
35if [ -f /etc/sysconfig/zabbix-agent ]; then
36 . /etc/sysconfig/zabbix-agent
37fi
38
39lockfile=/var/lock/subsys/zabbix-agent
40
41start()
42{
43 echo -n $"Starting Zabbix agent: "
44 daemon $exec -c $conf
45 rv=$?
46 echo
47 [ $rv -eq 0 ] && touch $lockfile
48 return $rv
49}
50
51stop()
52{
53 echo -n $"Shutting down Zabbix agent: "
54 killproc -p $pidfile -d $timeout $prog
55 rv=$?
56 echo
57 [ $rv -eq 0 ] && rm -f $lockfile
58 return $rv
59}
60
61restart()
62{
63 stop
64 start
65}
66
67case "$1" in
68 start|stop|restart)
69 $1
70 ;;
71 force-reload)
72 restart
73 ;;
74 status)
75 status -p $pidfile $prog
76 ;;
77 try-restart|condrestart)
78 if status $prog >/dev/null ; then
79 restart
80 fi
81 ;;
82 reload)
83 action $"Service ${0##*/} does not support the reload action: " /bin/false
84 exit 3
85 ;;
86 *)
87 echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
88 exit 2
89 ;;
90esac
3)加执行权限
1sudo chmod +x /etc/init.d/zabbix-agent
6) 启动Zabbix-Agent
1)启动
1sudo service zabbix-agent start
2)开机自启
1sudo chkconfig --add zabbix-agent
2sudo 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字体


那接下来给大家说怎么修改?
1cd /var/www/html/zabbix/assets/fonts

大家去网上下载自己喜欢的字体,要ttf格式,上传到这里,把名字替换为这个
1//举例子
2mv 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的进程
1nohup /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工具需要安装
1# 安装EPEL源:
2yum install epel-release
3
4# 安装完EPEL源后,可以查看下jq包是否存在:
5yum list jq
6
7# 安装jq:
8yum install jq
安装完jq后,使用下面的命令,来查看
1[later@bigdata101 bin]$ curl 192.168.1.110:11201/metrics | jq
2 % Total % Received % Xferd Average Speed Time Time Time Current
3 Dload Upload Total Spent Left Speed
4100 1096 0 1096 0 0 356k 0 --:--:-- --:--:-- --:--:-- 356k
5{
6 "CHANNEL.c2": {
7 "KafkaEventGetTimer": "0",
8 "ChannelSize": "0",
9 "EventTakeAttemptCount": "0",
10 "StartTime": "1588910637651",
11 "ChannelCapacity": "0",
12 "ChannelFillPercentage": "1.7976931348623157E308",
13 "KafkaCommitTimer": "0",
14 "Type": "CHANNEL",
15 "EventTakeSuccessCount": "0",
16 "RollbackCount": "0",
17 "KafkaEventSendTimer": "853",
18 "EventPutAttemptCount": "5000",
19 "EventPutSuccessCount": "5000",
20 "StopTime": "0"
21 },
22 "CHANNEL.c1": {
23 "KafkaEventGetTimer": "0",
24 "ChannelSize": "0",
25 "EventTakeAttemptCount": "0",
26 "StartTime": "1588910637652",
27 "ChannelCapacity": "0",
28 "ChannelFillPercentage": "1.7976931348623157E308",
29 "KafkaCommitTimer": "0",
30 "Type": "CHANNEL",
31 "EventTakeSuccessCount": "0",
32 "RollbackCount": "0",
33 "KafkaEventSendTimer": "1019",
34 "EventPutAttemptCount": "5000",
35 "EventPutSuccessCount": "5000",
36 "StopTime": "0"
37 },
38 "SOURCE.r1": {
39 "AppendBatchAcceptedCount": "55",
40 "GenericProcessingFail": "0",
41 "EventAcceptedCount": "5276",
42 "AppendReceivedCount": "0",
43 "StartTime": "1588910637989",
44 "AppendBatchReceivedCount": "55",
45 "ChannelWriteFail": "0",
46 "EventReceivedCount": "5276",
47 "EventReadFail": "0",
48 "Type": "SOURCE",
49 "AppendAcceptedCount": "0",
50 "OpenConnectionCount": "0",
51 "StopTime": "0"
52 }
53}
54[later@bigdata101 bin]$
我们先使用sed工具把这些监控项格式化处理一下
1[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'
2
3CHANNEL.c2:
4KafkaEventGetTimer:0
5ChannelSize:0
6EventTakeAttemptCount:0
7StartTime:1588910637651
8ChannelCapacity:0
9ChannelFillPercentage:1.7976931348623157E308
10KafkaCommitTimer:0
11Type:CHANNEL
12EventTakeSuccessCount:0
13RollbackCount:0
14KafkaEventSendTimer:853
15EventPutAttemptCount:5000
16EventPutSuccessCount:5000
17StopTime:0
18
19CHANNEL.c1:
20KafkaEventGetTimer:0
21ChannelSize:0
22EventTakeAttemptCount:0
23StartTime:1588910637652
24ChannelCapacity:0
25ChannelFillPercentage:1.7976931348623157E308
26KafkaCommitTimer:0
27Type:CHANNEL
28EventTakeSuccessCount:0
29RollbackCount:0
30KafkaEventSendTimer:1019
31EventPutAttemptCount:5000
32EventPutSuccessCount:5000
33StopTime:0
34
35SOURCE.r1:
36AppendBatchAcceptedCount:55
37GenericProcessingFail:0
38EventAcceptedCount:5276
39AppendReceivedCount:0
40StartTime:1588910637989
41AppendBatchReceivedCount:55
42ChannelWriteFail:0
43EventReceivedCount:5276
44EventReadFail:0
45Type:SOURCE
46AppendAcceptedCount:0
47OpenConnectionCount:0
48StopTime:0
还可以使用awk获取某个参数的值
1[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
2
3EventAcceptedCount:5276
那么这么多监控项,我们到底要监控哪一个呢?这个表格是来源于网上的链接https://www.cnblogs.com/fengzzi/p/10033739.html
source监控项
| 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端配置
1cd /usr/local/etc/zabbix_agentd.conf.d/
2vim flume_monitor.sh
3
4#!/bin/bash
5
6FLUME_PORT=$1
7METRIC_VALUE=$2
8
9curl 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}'
10
11chmod u+x flume_monitor.sh //添加执行权限
12
13/usr/local/etc/zabbix_agentd.conf.d/flume_monitor.sh 11201 EventReceivedCount //测试脚本是不是可用
接下来写监控配置
1vim /usr/local/etc/zabbix_agentd.conf
2
3做以下修改
4UnsafeUserParameters=1 # 默认为0,表示不允许自定义key
5# 监控*进程是否存在,[*]是server端传递参数,是服务名称
6UserParameter=FLUME_STATUS[*],/etc/zabbix/zabbix_agentd.d/flume_monitor.sh $1 $2

4.3.4 重启zabbix agent服务
1systemctl restart zabbix-agent
2systemctl status zabbix-agent
4.3.5 在zabbix server端进行取值
1) 创建模板

2) 编辑模板

3) 创建应用集



4) 创建监控项

最后点击添加

4.3.6 在主机中添加应用集

选中以后启用

这个时候大家看下是不是已经监控到你的数据了呢?


好了,到此,关于flume的单个服务的监控已经搞定了,剩下的大家举一反三,在监控项表格中,找到自己关心的监控项关键词,然后部署就可以了。
这也是zabbix自定义监控的大致流程。所有的细节不可能全部展现给大家,这也就是需要我们提高自己的学习能力。




