zabbix部署监控集群,自定义监控Flume(图片多,步骤详细)

大家好,我是后来,我会分享我在学习和工作中遇到的点滴,希望有机会我的某篇文章能够帮助你解决你遇到的问题,所有的文章都会在公众号首发,欢迎大家关注我的公众号**" 后来X "**,感谢你的关注。

1、Zabbix的介绍

1.1 Zabbix是干啥的?

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的框架。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件短信或者是电话的告警。还可以自定义开发基于公众号提醒等,这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。
和zabbix类似的还有小米的开源监控框架open-falcon等,但各有千秋吧,毕竟哪个技术也不是万能的。今天我来复盘一下我在测试集群部署Zabbix的全过程。首先说我的版本号。

框架版本号
zabbix4.2.8
Flume1.9.0
Hadoop3.1.3

1.2 Zabbix 基础架构

在这里插入图片描述

2、开始安装Zabbix

在安装之前我们先做好集群规划,我这里是测试集群,只有3台机器,所以我的规划是这样的。

节点服务
bigdata101zabbix-server、zabbix-agent、MySQL、zabbix-web
bigdata102zabbix-agent
bigdata103zabbix-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=r1OpenConnectionCount目前与客户端或sink保持连接的总数量
org.apache.flume.source:type=r1AppendBatchAcceptedCount成功提交到channel的批次的总数量
org.apache.flume.source:type=r1AppendBatchReceivedCount接收到事件批次的总数量
org.apache.flume.source:type=r1AppendAcceptedCount逐条录入的次数
org.apache.flume.source:type=r1AppendReceivedCount每批只有一个事件的事件总数量
org.apache.flume.source:type=r1EventAcceptedCount成功写出到channel的事件总数量
org.apache.flume.source:type=r1EventReceivedCount目前为止source已经接收到的事件总数量
org.apache.flume.source:type=r1StartTimesource启动时的毫秒值时间
org.apache.flume.source:type=r1StopTimesource停止时的毫秒值时间,为0表示一直在运行

channel监控项

objectName(会随实际情况而变化)指标项说明
org.apache.flume.channel:type=c1EventPutAttemptCountSource尝试写入Channe的事件总次数
org.apache.flume.channel:type=c1EventPutSuccessCount成功写入channel且提交的事件总次数
org.apache.flume.channel:type=c1EventTakeAttemptCountsink尝试从channel拉取事件的总次数。
org.apache.flume.channel:type=c1EventTakeSuccessCountsink成功从channel读取事件的总数量
org.apache.flume.channel:type=c1ChannelSize目前channel中事件的总数量
org.apache.flume.channel:type=c1ChannelCapacitychannel的容量
org.apache.flume.channel:type=c1ChannelFillPercentagechannel已填入的百分比
org.apache.flume.channel:type=c1StartTimechannel启动时的毫秒值时间
org.apache.flume.channel:type=c1StopTimechannel停止时的毫秒值时间,为0表示一直在运行

sink监控项

objectName(会随实际情况而变化)指标项说明
org.apache.flume.sink:type=k1ConnectionCreatedCount创建的连接数量
org.apache.flume.sink:type=k1ConnectionClosedCount关闭的连接数量
org.apache.flume.sink:type=k1ConnectionFailedCount由于错误关闭的连接数量
org.apache.flume.sink:type=k1BatchEmptyCount批量处理event的个数为0的数量-表示source写入数据的速度比sink处理数据的速度慢
org.apache.flume.sink:type=k1BatchUnderflowCount批量处理event的个数小于批处理大小的数量
org.apache.flume.sink:type=k1BatchCompleteCount批量处理event的个数等于批处理大小的数量
org.apache.flume.sink:type=k1EventDrainAttemptCountsink尝试写出到存储的事件总数量
org.apache.flume.sink:type=k1EventDrainSuccessCountsink成功写出到存储的事件总数量
org.apache.flume.sink:type=k1StartTimechannel启动时的毫秒值时间
org.apache.flume.sink:type=k1StopTimechannel停止时的毫秒值时间,为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。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Docker是一种容器化技术,可以方便地部署和管理应用程序。Zabbix是一种流行的开源监控系统,可以监控服务器、网络设备和应用程序等。在Docker中部署Zabbix监控集群可以提高系统的可靠性和可扩展性。 要部署Zabbix监控集群,需要先创建一个Docker镜像,其中包含Zabbix Server和Zabbix Agent。可以使用Dockerfile文件来定义镜像的构建过程。然后,可以使用Docker Compose来定义和管理多个容器的部署和运行。 在Docker Compose文件中,需要定义Zabbix Server和Zabbix Agent的容器,并指定它们的网络配置和环境变量。可以使用Docker Swarm来管理多个Docker节点,以实现高可用性和负载均衡。 最后,可以使用Zabbix Web界面来配置和管理监控项、触发器和报警等。通过Docker部署Zabbix监控集群,可以简化部署和管理过程,提高系统的可靠性和可扩展性。 ### 回答2: Docker和Zabbix都是开源软件,可在各种操作系统上部署和使用。Docker可以帮助我们简化部署和管理多个容器的过程,而Zabbix则是一种开源监控解决方案,能够对各种设备和应用程序进行监控、报警和分析。在Docker中,我们可以利用容器来部署Zabbix监控集群,达到扩展和分布式监控的目的。 1. 首先,我们需要安装Docker和Docker Compose。安装完成后,我们可以创建一个新的Zabbix监控服务的Docker镜像。为此,我们可以使用类似以下命令的Dockerfile: FROM zabbix/zabbix-server-pgsql:alpine-3.2-latest # Install additional packages RUN apk add --update \ supervisor \ nginx \ php7-fpm \ php7-json \ php7-mysqli \ php7-session \ php7-simplexml \ php7-xml \ php7-xmlrpc \ && rm -rf /var/cache/apk/* # Configure services COPY nginx.conf /etc/nginx/nginx.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY php-fpm.ini /etc/php7/php-fpm.d/www.conf RUN ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log COPY entrypoint.sh / EXPOSE 80 EXPOSE 10051/TCP ENTRYPOINT ["/entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"] 其中entrypoint.sh是一个脚本,用于检查是否已经创建数据库和zabbix配置文件,并自动执行启动脚本。该脚本如下: #!/bin/sh set -e if [ ! -d "/var/lib/zabbix/alertscripts" ]; then mkdir -p /var/lib/zabbix/alertscripts cp /usr/share/zabbix/alertscripts/* /var/lib/zabbix/alertscripts/ -r chown -R zabbix.zabbix /var/lib/zabbix/alertscripts fi if [ ! -d "/var/lib/zabbix/modules" ]; then mkdir -p /var/lib/zabbix/modules chown -R zabbix.zabbix /var/lib/zabbix/modules fi if [ ! -d "/etc/zabbix/web" ]; then mkdir -p /etc/zabbix/web cp /usr/share/zabbix/conf/* /etc/zabbix/web/ chown -R zabbix.zabbix /etc/zabbix/web fi if [ ! -f "/etc/zabbix/zabbix_server.conf" ]; then cp /usr/share/zabbix/conf/zabbix_server.conf /etc/zabbix/ chown -R zabbix.zabbix /etc/zabbix fi if [ ! -f "/var/lib/postgresql/data/zabbix.sql" ]; then chown postgres.postgres /var/lib/postgresql/data su -c "/usr/bin/pg_ctl -D /var/lib/postgresql/data start" postgres su -c "psql -c \"CREATE USER zabbix WITH PASSWORD 'zbxpass';\"" postgres su -c "createdb -O zabbix zabbix" postgres su -c "/usr/bin/pg_ctl -D /var/lib/postgresql/data stop" postgres fi exec "$@" 2. 然后,我们可以使用Docker Compose创建一个Zabbix监控集群。我们将使用Zabbix Server、Zabbix Agent以及PostgreSQL数据库容器。可以使用以下配置文件: version: '3' services: db: image: postgres:9.6 volumes: - db_data:/var/lib/postgresql/data environment: - POSTGRES_USER=zabbix - POSTGRES_PASSWORD=zbxpass - POSTGRES_DB=zabbix ports: - "5432:5432" networks: - zbx_net zabbix_server: build: . volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./supervisord.conf:/etc/supervisor/conf.d/supervisord.conf - ./php-fpm.ini:/etc/php7/php-fpm.d/www.conf - zabbix_data:/var/lib/zabbix environment: - DB_SERVER_HOST=db - DB_SERVER_PORT=5432 - POSTGRES_USER=zabbix - POSTGRES_PASSWORD=zbxpass - POSTGRES_DB=zabbix ports: - "80:80" - "10051:10051" depends_on: - db networks: - zbx_net zabbix_agent: image: zabbix/zabbix-agent2:alpine-3.13-latest environment: - ZBX_HOSTNAME=zabbix-agent networks: - zbx_net volumes: db_data: driver: local zabbix_data: driver: local networks: zbx_net: 3. 在保存Docker Compose配置文件后,您可以通过以下命令创建并启动Zabbix监控集群: docker-compose up -d 4. 容器启动后,可以访问Zabbix Web界面并使用默认凭据登录。默认用户名和密码分别为Admin和zabbix。接下来,您可以开始监控您的设备和应用程序。 综上所述,我们可以使用Docker和Docker Compose来部署Zabbix监控集群。这种方法方便、可扩展和易于管理,能够让我们快速构建和部署一个强大的监控系统。 ### 回答3: Docker是一个开源的容器化应用平台,它可以帮助我们将应用程序和服务打包成一个容器,这样就可以更快速、更有效地部署和运行它们。而Zabbix是一款功能强大的监控软件,它可以帮助我们监测网络通信、服务器性能等。通过将Zabbix部署在Docker容器中,可以实现快速部署和升级。 在部署Zabbix集群之前,我们需要准备好Docker环境。首先,我们需要在主机上安装Docker Engine和Docker Compose。然后,我们需要创建一个Docker镜像,包含Zabbix Server和Zabbix Agent。可以使用Dockerfile文件来定义该镜像的构建过程。例如,我们可以通过以下方式构建Zabbix镜像: ```dockerfile FROM ubuntu:20.04 RUN apt-get update && apt-get -y install wget \ && wget https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.2-1+ubuntu20.04_all.deb \ && dpkg -i zabbix-release_5.2-1+ubuntu20.04_all.deb \ && rm -f zabbix-release_5.2-1+ubuntu20.04_all.deb \ && apt-get update \ && apt-get -y install zabbix-server-mysql zabbix-frontend-php zabbix-agent mysql-client \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* EXPOSE 80 10050 CMD ["/bin/bash"] ``` 在这个Dockerfile中,我们首先从Ubuntu官方镜像开始构建。然后,我们下载最新的Zabbix Release,并安装Zabbix Server、Zabbix Agent、Zabbix Web等软件包。最后,我们暴露了80和10050两个端口,并在容器启动时启动Bash shell。 接下来,我们需要使用Docker Compose来编排这个镜像的部署。以下是一个简单的docker-compose.yml文件的示例: ```yml version: '3.2' services: zabbix-db: image: mysql:5.7 volumes: - ./data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: zabbix MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix zabbix-server: build: . volumes: - ./zabbix-server.conf:/etc/zabbix/zabbix_server.conf environment: DB_SERVER_HOST: zabbix-db MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix MYSQL_DATABASE: zabbix ports: - 80:80 zabbix-agent: image: zabbix/zabbix-agent:latest environment: ZBX_SERVER_HOST: zabbix-server ZBX_SERVER_PORT: 10051 ZBX_HOSTNAME: zabbix-agent ports: - 10050:10050 ``` 在这个docker-compose.yml文件中,我们定义了3个容器服务,分别是: 1. zabbix-db:MySQL数据库容器服务,用于存储Zabbix Server的监控数据。 2. zabbix-server:Zabbix Server容器服务,包含Zabbix Server和Zabbix Web等组件。 3. zabbix-agent:Zabbix Agent容器服务,用于监控其他容器的性能指标。 在这个文件中,我们还定义了一些环境变量和卷,以保证容器之间的数据共享。最后,我们将Zabbix Web的端口暴露给主机,以方便用户访问Zabbix监控界面。 在完成docker-compose.yml文件的编写后,我们可以使用以下命令来启动Zabbix集群: ```bash docker-compose up -d ``` 总之,使用Docker可以轻松地部署Zabbix监控集群,以帮助我们更好地监控和管理我们的应用程序和服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值