Zabbix集群监控

Zabbix简介

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件(包括硬件和软件)。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警(过程繁杂)。这样可以快速反馈服务器的问题。基于已存储的数据(监控集群收集的数据),Zabbix提供了出色的报告和数据可视化功能。

Zabbix不仅用于大数据集群的监控,还可以用在运维机器监控上。

image-20210920164754352

简单来说,zabbix-agent监控部署所在机器的硬件和软件资源情况,并将数据汇报给zabbix-server,zabbix-server收集到对应数据后,进行判断,符合条件则执行触发器,执行相应操作。zabbix-server收集到的数据则存储在db中(mysql),一般包括监控的配置信息和监控汇报的数据信息。zabbix-web则是利用db存储的信息进行可视化的展示。

Zabbix部署

集群规划

进程 hadoop116节点 hadoop117节点 hadoop118节点
zabbix-agent 1 1 1
zabbix-server 1
mysql 1
zabbix-web 1

准备工作

关闭集群

如果集群开启,先关闭集群。因为安装Zabbix前,需要重启虚拟机。这里运行脚本停止集群,之前的文章中有该脚本hdp.sh可以查阅以前写的文章,亦可以手动停止集群。

注意:如果使用脚本停止集群发现集群仍然在运行,这是因为hadoop3的集群进程pid存在linux的pid路径下,而这个路径会定期删除pid。所以,当集群挂起时间太久,会存在pid被删除的情况,这样启动脚本去停止集群就会因为找不到集群pid而误认为集群已经停止。

这种情况下,如果集群没有运行任何任务,可以直接关机重启。

关闭防火墙

1
2
3
4
5
6
(base) [dw@hadoop116 bin]$ sudo service iptables stop
Redirecting to /bin/systemctl stop iptables.service
Failed to stop iptables.service: Unit iptables.service not loaded.

(base) [dw@hadoop116 bin]$ sudo chkconfig iptables off
error reading information on service iptables: No such file or directory

关闭主节点的selinux

修改配置文件/etc/selinux/config**

1
sudo vim /etc/selinux/config

修改如下内容:
image-20210920164858404
最后重启下服务器即可。

配置Zabbix yum源(3台节点)

安装yum源

从阿里云镜像中下载zabbix安装包,并执行安装命令。

1
2
3
4
5
6
7
8
9
10
11
(base) [dw@hadoop116 bin]$ sudo rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
Retrieving https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.LXisVb: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-4.4-1.el7 ################################# [100%]

[dw@hadoop117 ~]$ sudo rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm

[dw@hadoop118 ~]$ sudo rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm

这里是因为yum的仓库,也就是/etc/yum.repos.d路径下的仓库文件镜像源都无法找到zabbix安装包,所以需要配置一个zabbix的镜像仓库。这样通过yum安装就能找到zabbix安装包。

上面的命令就是在安装zabbix的仓库镜像源地址。

rpm -ivh安装一个软件

rpm -Uvh xxx.rpm 安装一个远程rpm包,只是安装一个仓库地址。

修改为阿里云镜像

因为上面安装的仓库镜像源是国外的,下载速度慢,所以这里替换成国内的镜像源

hadoop116、hadoop117、hadoop118三台节点,依次执行如下步骤。

  1. 查看原始zabbix.repo文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    (base) [dw@hadoop116 bin]$ sudo cat /etc/yum.repos.d/zabbix.repo
    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

    [zabbix-debuginfo]
    name=Zabbix Official Repository debuginfo - $basearch
    baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/debuginfo/
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
    gpgcheck=1

    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    gpgcheck=1

  2. 执行以下命令完成全局替换

    1
    (base) [dw@hadoop116 bin]$ sudo sed -i 's/http:\/\/repo.zabbix.com/https:\/\/mirrors.aliyun.com\/zabbix/g' /etc/yum.repos.d/zabbix.repo
  3. 查看修改之后的zabbix.repo文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    (base) [dw@hadoop116 bin]$ sudo sed -i 's/http:\/\/repo.zabbix.com/https:\/\/mirrors.aliyun.com\/zabbix/g' /etc/yum.repos.d/zabbix.repo
    (base) [dw@hadoop116 bin]$ sudo cat /etc/yum.repos.d/zabbix.repo
    [zabbix]
    name=Zabbix Official Repository - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

    [zabbix-debuginfo]
    name=Zabbix Official Repository debuginfo - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/debuginfo/
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
    gpgcheck=1

    [zabbix-non-supported]
    name=Zabbix Official Repository non-supported - $basearch
    baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
    gpgcheck=1

安装Zabbix

在hadoop116、hadoop117、hadoop118 三台节点分别执行以下安装命令:

1
2
3
4
5
(base) [dw@hadoop116 ~]$ sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

[dw@hadoop117 ~]$ sudo yum install zabbix-agent

[dw@hadoop118 ~]$ sudo yum install zabbix-agent

配置Zabbix

创建Zabbix数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(base) [dw@hadoop116 ~]$ mysql -uroot -p888888 -e"create database zabbix character set utf8 collate utf8_bin"
mysql: [Warning] Using a password on the command line interface can be insecure.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| azkaban |
| gmall |
| gmall_report |
| metastore |
| mysql |
| performance_schema |
| sys |
| zabbix |
+--------------------+

导入Zabbix建表语句

1
2
(base) [dw@hadoop116 ~]$ zcat /usr/share/doc/zabbix-server-mysql-4.4.10/create.sql.gz | mysql -uroot -p888888 zabbix

配置Zabbix_Server(hadoop116)

修改zabbix-server配置文件:

1
2
3
4
5
6
7
8
9
10
(base) [dw@hadoop116 ~]$ sudo vim /etc/zabbix/zabbix_server.conf



(base) [dw@hadoop116 ~]$ sudo vim /etc/zabbix/zabbix_server.conf

DBHost=hadoop116
DBName=zabbix
DBUser=root
DBPassword=888888

配置Zabbix_Agent(三台节点)

修改zabbix-agent配置文件:

1
(base) [dw@hadoop116 ~]$ sudo vim /etc/zabbix/zabbix_agentd.conf

按照以下内容进行注释新增等修改:
1
2
3
4
5
Server=hadoop102

#ServerActive=127.0.0.1

#Hostname=Zabbix server

配置Zabbix_Web时区

修改/etc/httpd/conf.d/zabbix.conf文件:

1
(base) [dw@hadoop116 ~]$ sudo vim /etc/httpd/conf.d/zabbix.conf

修改如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
           

# Zabbix monitoring system php web frontend

#

Alias /zabbix /usr/share/zabbix

<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted

<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
<!-- 修改时区 -->
hp_value date.timezone Asia/Shanghai
</IfModule>
</Directory>

启动停止Zabbix

启动Zabbix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(base) [dw@hadoop116 ~]$ sudo systemctl start zabbix-server zabbix-agent httpd

(base) [dw@hadoop116 ~]$ sudo systemctl enable zabbix-server zabbix-agent httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

[dw@hadoop117 ~]$ sudo systemctl start zabbix-agent
[dw@hadoop117 ~]$ sudo systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.


[dw@hadoop118 ~]$ sudo systemctl start zabbix-agent
[dw@hadoop118 ~]$ sudo systemctl enable zabbix-agent
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.

httpd是apache容器,用于装载web,zabbix的web端是用php写的。

停止Zabbix

1
2
3
4
5
6
7
8
9
10
11
(base) [dw@hadoop116 ~]$ sudo systemctl stop zabbix-server zabbix-agent httpd
(base) [dw@hadoop116 ~]$ sudo systemctl disable zabbix-server zabbix-agent httpd


[dw@hadoop117 ~]$ sudo systemctl stop zabbix-agent
[dw@hadoop117 ~]$ sudo systemctl disable zabbix-agent



[dw@hadoop118 ~]$ sudo systemctl stop zabbix-agent
[dw@hadoop118 ~]$ sudo systemctl disable zabbix-agent

连接Zabbix_Web数据库

  1. 浏览器访问http://hadoop116/zabbix:
    image-20210920164939972

    1. 检查配置
      image-20210920165008643

    2. 配置数据库
      image-20210920165023838

    3. 配置zabbix-server
      image-20210920165036148

    4. 完成
      image-20210920165053617

登陆Zababix

用户名:Admin 密码:zabbix

image-20210920165113100

image-20210920165317010

Zabbix使用

Zabbix术语

主机(Host)

一台你想监控的网络设备,用IP或域名表示。

监控项(Item)

你想要接收的主机的特定数据,一个度量数据。比如内存使用量,CPU资源使用率等。

触发器(Trigger)

一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式。

动作(Action)

一个对事件做出反应的预定义的操作,比如邮件通知。

Zabbix实践

创建Host

1.点击配置/主机/创建主机
image-20210920165334989

2.配置主机(Host)
image-20210920165352743
查看新增hosts,结果:
image-20210920165406710

可用性那一栏的四个方块代表监控的手段,ZBX是指通过zabbix-agent监控,灰色代表不清楚是否可用,红色代表不可用,绿色代表启用。

在配置了监控项后,如果zabbix-agent的数据能发送到zabbix-server,则可用性下的ZBX小方块会显示绿色。

最后一个主机配置的ZBX显示红色是因为ip地址配置的不对,我们对其进行修改更新后即可。

image-20210922005327673

修改后:

image-20210922005433749

配置完成后,要等一段时间。因为agent向server发送数据有时间间隔。

创建监控项(Items)

这里我们创建一个监控datanode的监控项。

1.点击监控项(Items)
image-20210920165420380
image-20210920165434495

  1. 配置监控项(Item)
    image-20210920165449541

    监控项中的键值可以去百度搜索zabbix-agent key属性列表参考配置。

    这里就是通过进程名去过滤所有进程然后对符合条件的进程进行计数

    image-20210922010033317

  1. 查看创建的监控项
    image-20210920165502512

  2. 查看监控项最新数据
    image-20210920165516207

创建触发器(Trigger)

  1. 点击配置/主机/触发器
    image-20210920165528477

2.创建触发器
image-20210920165540019

3.配置触发器
image-20210920165551169
image-20210920165603433

创建动作

  1. 点击配置/动作/创建动作
    image-20210920165618803

  2. 编辑动作(Action)
    image-20210920165629886
    image-20210920165641152
    image-20210920165658553
    image-20210920165711304
    image-20210920165723804
    image-20210920165736943

下面配置完报警媒介后,重新启动HDFS,再关闭HDFS时,即可收到邮件通知。

创建报警媒介类型(Media type)

  1. 点击管理/报警媒介类型/Email
    image-20210920165758631
    image-20210920165810518

  2. 测试email
    image-20210920165821577
    image-20210920165833562

  3. Email绑定收件人
    image-20210920165848186

    注意,添加用户邮件信息后要点击更新才能保留数据。

    image-20210920165900737

测试

  1. 关闭集群中的HDFS,会有如下效果
    1
    2
    3
    4
    (base) [dw@hadoop116 hadoop-3.1.3]$ sbin/stop-dfs.sh 
    Stopping namenodes on [hadoop116]
    Stopping datanodes
    Stopping secondary namenodes [hadoop118]
    image-20210920165917401

2.查看邮件,接受报错信息

image-20210922011419610

模版

为了简化监控配置的工作量,这里需要用到模版。这里通过创建一个虚拟主机,在这个虚拟主机里配置各种各样的监控项,每个监控项对应自己的触发器,这样就形成了一个模版,这样就能将这个模版应用到所有节点上。提高了配置效率,重复的配置只需要做一次即可。

  1. 创建模版

image-20210922011831472

image-20210922011928924

这里点击创建监控项。

image-20210922012007592

image-20210922012408573

然后创建触发器:

image-20210922012456335

image-20210922012556980

image-20210922012625125

接下来将模版应用到两个主机上:

image-20210922012700652

image-20210922012729155

image-20210922012739068

image-20210922012810059

整体测试

这里需要修改下动作,因为之前的触发器动作是严格匹配hadoop116的触发器,现在新增两个模版需要使得动作与这两个模版的触发器也匹配上才行。

image-20210922013141576

image-20210922013158728

之后点击更新,再次关闭dfs查看告警情况,成功收到三封告警邮件。

image-20210922013322932