大家好,我是后来,我会分享我在学习和工作中遇到的点滴,希望有机会我的某篇文章能够帮助你解决你遇到的问题,所有的文章都会在公众号首发,欢迎大家关注我的公众号**" 后来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自定义监控的大致流程。所有的细节不可能全部展现给大家,这也就是需要我们提高自己的学习能力。