如何在 CentOS 7 上安装和配置 Zabbix 以安全监控远程服务器

作者选择了 开源倡议作为 写给捐赠计划的一部分接受捐赠。

介绍

Zabbix是网络和应用程序的开源监控软件,它提供来自服务器,虚拟机,网络设备和Web应用程序收集的数千个指标的实时监控,这些指标可以帮助您确定您的IT基础设施的当前状况,并在客户投诉之前检测硬件或软件组件的问题。

Zabbix 使用多种选项来收集指标,包括无代理用户服务监控和客户端服务器架构。 为了收集服务器指标,它使用被监控的客户端上的一个小代理来收集数据并将其发送到 Zabbix 服务器。

Zabbix 服务器将其数据存储在由 MySQL, PostgreSQLOracle提供的关系数据库中,您还可以将历史数据存储在 nosql 数据库中,例如 ElasticsearchTimescaleDB

在本教程中,您将配置两个机器. 一个将被配置为服务器,另一个将被配置为客户端,您将监控。

前提条件

要遵循本教程,您将需要:

  • 两个 CentOS 7 服务器根据 初始服务器设置与 CentOS 7设置,包括一个具有 sudo 特权的非根用户和一个 防火墙。在一个服务器上,您将安装 Zabbix;本教程将称此为 Zabbix 服务器 。它将监控您的第二个服务器;这个第二个服务器将被称为 第二个 CentOS 服务器
  • Zabbix 服务器需要安装 Apache、MySQL 和 PHP。

<$>[注] : CentOS 使用 MariaDB 代替 MySQL,但在遵循本教程时不会引起任何问题。

此外,由于您将使用 Zabbix 服务器访问有关您的基础设施的宝贵信息,您不希望未经授权的用户访问,因此通过安装 TLS/SSL 证书来保护您的服务器很重要。

第1步:安装Zabbix服务器

首先,您需要在您安装 MySQL、Apache 和 PHP 的服务器上安装 Zabbix。

1[environment local]
2ssh sammy@zabbix_server_ip_address

Zabbix 默认情况下在包管理器中不可用,所以使用 CentOS 的 官方 Zabbix 存储 安装一个存储库配置包。

1sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

您将看到以下结果:

1[secondary_label Output]
2Retrieving https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
3warning: /var/tmp/rpm-tmp.WXsYNB: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
4Preparing...                          ################################# [100%]
5Updating / installing...
6   1:zabbix-release-4.2-1.el7         ################################# [100%]

从缓存中清除当前启用的存储库的所有条目:

1sudo yum clean all

然后安装具有MySQL数据库支持的Zabbix服务器和Web前端:

1sudo yum install zabbix-server-mysql zabbix-web-mysql

在安装过程中,您将被要求导入 GPG 密钥. 此密钥将验证您正在安装的软件包的真实性. 若要允许安装完成,请通过键入y并按ENTER来接受 GPG 密钥。

此外,安装 Zabbix 代理,这将允许您收集有关 Zabbix 服务器状态的数据。

1sudo yum install zabbix-agent

在您可以使用 Zabbix 之前,您必须设置一个数据库来存储 Zabbix 服务器将从其代理人那里收集的数据。

第 2 步:为 Zabbix 配置 MySQL 数据库

您需要创建一个新的MySQL数据库,并填充一些基本信息,以使其适合Zabbix。

登录 MySQL 作为 root 用户,使用您在 MySQL 服务器安装过程中设置的 ** root** 密码:

1mysql -uroot -p

创建具有 UTF-8 字符支持的 Zabbix 数据库:

1create database zabbix character set utf8 collate utf8_bin;

然后创建一个用户,Zabbix服务器将使用,给它访问新数据库,并为用户设置密码:

1grant all privileges on zabbix.* to zabbix@localhost identified by 'your_zabbix_mysql_password';

然后应用这些新许可:

1flush privileges;

这将关心用户和数据库. 退出数据库控制台:

1quit;

接下来,导入初始方案和数据. Zabbix 安装为您提供了设置此功能的文件。

运行以下命令来设置方案并将数据导入到zabbix数据库中. 使用zcat,因为文件中的数据已被压缩。

1zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

输入您被提示时配置的zabbix MySQL 用户的密码。

如果您看到错误 ERROR 1045 (28000):用户 zabbix@'localhost 的访问被拒绝(使用密码:YES),请确保您使用了 zabbix 用户的密码,而不是 ** root** 用户。

为了让 Zabbix 服务器使用此数据库,您需要在 Zabbix 服务器配置文件中设置数据库密码。

1sudo vi /etc/zabbix/zabbix_server.conf

<$>[注] 注: 有关文本编辑器 vi 及其继任者 vim 的更多信息,请参阅我们的 在云服务器上安装和使用 Vim 文本编辑器教程。

查找文件的以下部分:

 1[label /etc/zabbix/zabbix_server.conf]
 2...
 3### Option: DBPassword                           
 4#       Database password. Ignored for SQLite.   
 5#       Comment this line if no password is used.
 6#                                                
 7# Mandatory: no                                  
 8# Default:                                       
 9# DBPassword=
10...

文件中的这些评论解释了如何连接到数据库. 您需要将文件中的DBPassword值设置为您的数据库用户的密码。 通过按i来输入插入模式,并添加您的密码来配置数据库:

1[label /etc/zabbix/zabbix_server.conf]
2...
3# Mandatory: no                                  
4# Default
5DBPassword=your_zabbix_mysql_password
6...

当你完成时,按ESC离开插入模式,然后按:wqENTER保存和退出文件。

接下来,您将对您的 PHP 设置进行一些修改,以便 Zabbix 网页接口正常工作。

第3步:为Zabbix配置PHP

Zabbix Web 接口是用 PHP 编写的,需要一些特殊的 PHP 服务器设置。 Zabbix 安装过程创建了一个包含这些设置的 Apache 配置文件。

1sudo vi /etc/httpd/conf.d/zabbix.conf

该文件包含满足 Zabbix Web 界面所需的 PHP 设置,但默认情况下,时区设置被评论。 为了确保 Zabbix 使用正确的时间,您需要设置适当的时区。

 1[label /etc/httpd/conf.d/zabbix.conf]
 2...
 3<IfModule mod_php5.c>
 4    php_value max_execution_time 300
 5    php_value memory_limit 128M
 6    php_value post_max_size 16M
 7    php_value upload_max_filesize 2M
 8    php_value max_input_time 300
 9    php_value max_input_vars 10000
10    php_value always_populate_raw_post_data -1
11    # php_value date.timezone Europe/Riga
12</IfModule>

删除在上一代码块中突出的时区行,并将其更改为您的时区。 您可以使用此 支持的时区列表来找到适合您的时区。

现在重新启动 Apache 以应用这些新设置:

1sudo systemctl restart httpd

<$>[注] 注: 如果 SELinux 运行在执行模式中,您需要使用 sudo setenforce 0 命令将其放入允许模式,以便 Zabbix 代理能够自由操作。

您现在可以启动 Zabbix 服务器和代理:

1sudo systemctl start zabbix-server 
2sudo systemctl start zabbix-agent

然后检查 Zabbix 服务器是否正常运行:

1sudo systemctl status zabbix-server

您将看到以下状态:

1[secondary_label Output]
2 zabbix-server.service - Zabbix Server
3   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
4   Active: active (running) since Fri 2019-05-03 05:57:29 UTC; 2s ago
5  Process: 4461 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
6  ...

最后,允许服务器和代理在启动时启动:

1sudo systemctl enable zabbix-server
2sudo systemctl enable zabbix-agent

服务器设置并连接到数据库. 接下来,设置 Web 前端。

<$>[注] 注: 正如前提部分所述,建议您在您的服务器上启用SSL/TLS。 您可以遵循 本教程现在获得免费的SSL证书为Apache在CentOS 7. 获得SSL/TLS证书后,您可以回来完成本教程。

步骤 4 — 配置 Zabbix Web 接口的设置

网页界面允许您查看报告并添加您想要监控的主机,但它需要一些初始设置才能使用它。 启动浏览器并前往地址 http://zabbix_server_name/zabbix/。 在第一个屏幕上,您将看到一个欢迎消息。 点击 下一步 继续。

在下一个屏幕上,您将看到列出运行Zabbix的所有前提条件的表。

Prerequisites

此表中的所有值都必须是 OK ,所以请确认它们是否存在. 请务必向下滚动并查看所有前提条件。

下一个屏幕要求数据库连接信息。

DB Connection

您告诉 Zabbix 服务器您的数据库,但 Zabbix 网页接口还需要访问数据库以管理主机和读取数据。

在下一个屏幕上,您可以将选项留在其默认值。

Zabbix Server Details

Name 是可选的;它用于在 Web 界面中将一个服务器与另一个服务器区分开来,如果您有多个监控服务器。

下一个屏幕将显示预安装总结,这样你就可以确认一切都是正确的。

Summary

点击下一步继续到最后的屏幕。

网页界面设置已完成. 此过程创建了配置文件 /etc/zabbix/web/zabbix.conf.php,您可以在未来备份并使用。 点击 Finish 进入登录屏幕。 默认用户是 ** Admin**,密码是 ** zabbix**。

在登录之前,在第二个 CentOS 服务器上设置 Zabbix 代理。

第 5 步:安装和配置 Zabbix 代理

现在您需要配置将监控数据发送到 Zabbix 服务器的代理软件。

登录到第二个 CentOS 服务器:

1[environment local]
2ssh sammy@second_centos_server_ip_address

然后,就像在 Zabbix 服务器上一样,运行以下命令来安装存储库配置包:

1[environment second]
2sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm

接下来,清除 yum 缓存:

1[environment second]
2sudo yum clean all

然后安装 Zabbix 代理:

1[environment second]
2sudo yum install zabbix-agent

在安装过程中,您将被要求导入 GPG 密钥,以便完成安装。

虽然 Zabbix 支持基于证书的加密,但设置证书权限超出本教程的范围,而本教程将使用 pre-shared keys(PSK)来确保服务器和代理之间的连接。

首先,创建一个PSK:

1[environment second]
2sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

显示密钥,以便您可以在某个地方复制它. 您将需要它来配置主机。

1[environment second]
2cat /etc/zabbix/zabbix_agentd.psk

钥匙将看起来像这样:

1[environment second]
2[secondary_label Output]
3a4374c8c3b55de472225dbf96aa7cd3ce6a34abc95d0eb2a601d954ee0cd4410

现在,编辑 Zabbix 代理设置以建立与 Zabbix 服务器的安全连接。

1[environment second]
2sudo vi /etc/zabbix/zabbix_agentd.conf

该文件中的每个设置都通过信息性评论记录在整个文件中,但您只需要编辑其中一些。

首先,您需要编辑 Zabbix 服务器的 IP 地址。

 1[label /etc/zabbix/zabbix_agentd.conf]
 2...
 3### Option: Server
 4#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
 5#       Incoming connections will be accepted only from the hosts listed here.
 6#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
 7#
 8# Mandatory: no
 9# Default:
10# Server=
11
12Server=127.0.0.1
13...

将默认值更改为您的 Zabbix 服务器的 IP:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3# Mandatory: no
4# Default:
5# Server=
6
7Server=zabbix_server_ip_address
8...

接下来,找到配置与 Zabbix 服务器安全连接的部分,并启用预共享密钥支持。

 1[label /etc/zabbix/zabbix_agentd.conf]
 2...
 3### Option: TLSConnect
 4#       How the agent should connect to server or proxy. Used for active checks.
 5#       Only one value can be specified:
 6#               unencrypted - connect without encryption
 7#               psk         - connect using TLS and a pre-shared key
 8#               cert        - connect using TLS and a certificate
 9#
10# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
11# Default:
12# TLSConnect=unencrypted
13...

然后,不评论TLSConnect=,并用psk代替unencrypted,以配置预共享密钥支持:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3TLSConnect=psk
4...

接下来,找到TLSAccept部分,它看起来像这样:

 1[label /etc/zabbix/zabbix_agentd.conf]
 2...
 3### Option: TLSAccept
 4#       What incoming connections to accept.
 5#       Multiple values can be specified, separated by comma:
 6#               unencrypted - accept connections without encryption
 7#               psk         - accept connections secured with TLS and a pre-shared key
 8#               cert        - accept connections secured with TLS and a certificate
 9#
10# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
11# Default:
12# TLSAccept=unencrypted
13...

通过不评论TLSAccept=并添加psk来配置接入连接以支持预共享密钥:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3TLSAccept=psk
4...

接下来,找到TLSPSKIidentity部分,它看起来像这样:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3### Option: TLSPSKIdentity
4#       Unique, case sensitive string used to identify the pre-shared key.
5#
6# Mandatory: no
7# Default:
8# TLSPSKIdentity=
9...

选择一个独特的名称来识别您的预共享密钥,不评论TLSPSKIidentity=并添加突出的代码:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3TLSPSKIdentity=PSK 001
4...

当您通过 Zabbix Web 界面添加主机时,您将使用此作为 PSK ID

然后设置指向您先前创建的预共享密钥的选项. 查找TLSPSKFile选项:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3### Option: TLSPSKFile
4#       Full pathname of a file containing the pre-shared key.
5#
6# Mandatory: no
7# Default:
8# TLSPSKFile=
9...

Uncomment TLSPSKFile= 并添加此文本,将 Zabbix 代理指向您创建的 PSK 文件:

1[label /etc/zabbix/zabbix_agentd.conf]
2...
3TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
4...

现在您可以启动 Zabbix 代理,并将其设置为在启动时启动:

1[environment second]
2sudo systemctl start zabbix-agent
3sudo systemctl enable zabbix-agent

要得到良好的测量,请检查 Zabbix 代理是否正常运行:

1[environment second]
2sudo systemctl status zabbix-agent

您将看到以下状态,表示代理正在运行:

1[environment second]
2[secondary_label Output]
3 zabbix-agent.service - Zabbix Agent
4   Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
5   Active: active (running) since Fri 2019-05-03 06:25:06 UTC; 28s ago
6  ...

代理将在端口10050上听取来自服务器的连接。为了配置来自特定 IP 地址或子网的访问,请使用firewalldrich rule功能:

1[environment second]
2sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="zabbix_server_ip_address/32" port protocol="tcp" port="10050" accept'

丰富的规则允许您创建更复杂和可自定义的防火墙规则,以获得对防火墙的更大控制权. 在此命令中,您正在添加一个规则,该规则将从源中接受ipv4的流量,您将其设置为Zabbix服务器的IP地址,并将第二个CentOS服务器的端口添加到10050

接下来,重新加载firewalld以激活新规则:

1[environment second]
2sudo firewall-cmd --reload

您的代理现在已经准备好接受连接并将数据发送到 Zabbix 服务器,但要使用它,您必须从服务器的 Web 控制台连接到它。

步骤 6 — 将新主机添加到 Zabbix 服务器

您想要监控的服务器上安装一个代理只是半个过程,您想要监控的每个主机都需要在 Zabbix 服务器上注册,您可以通过 Web 界面进行注册。

登录到 Zabbix 服务器的 Web 界面,通过导航到地址 http://zabbix_server_name/zabbix/

The Zabbix login screen

登录后,点击配置,然后点击主机在顶部导航栏中,然后点击屏幕右上角的创建主机按钮。

Creating a host

调整 主机名称 和 ** IP 地址** ,以反映您第二个 CentOS 服务器的主机名称和 IP 地址,然后将主机添加到一个组中. 您可以选择一个现有组,例如 ** Linux 服务器** ,或创建自己的组。

添加组后,单击 ** 模板** 选项卡。

Adding a template to the host

搜索字段中输入Linux 模板,然后在搜索栏下立即点击添加以将此模板添加到主机中。

接下来,导航到加密选项卡。选择连接到主机连接到主机PSK,然后解除没有加密选项连接到主机。然后将PSK ID设置为PSK 001,这是您先前配置的Zabbix代理人的TLSPSKIidentity设置的值。

Setting up the encryption

最后,点击表单底部的添加按钮来创建主机。

您将在列表中看到您的新主机. 等待一分钟,然后重新加载页面,以查看绿色标签,表明一切正常运行,连接是加密的。

Zabbix shows your new host

如果你有额外的服务器,你需要监控,登录每个主机,安装Zabbix代理,生成PSK,配置代理,并将主机添加到Web界面,按照您添加第一个主机的相同步骤。

Zabbix 服务器现在正在监控您的第二个 CentOS 服务器. 现在,设置电子邮件通知以通知您有关问题。

步骤 7 – 配置电子邮件通知

Zabbix 自动支持多种类型的通知:电子邮件、Jabber(https://www.jabber.org/),SMS等您还可以使用替代的通知方法,如Telegram或Slack。

最简单的通信方法是电子邮件,本教程将为此类型的媒体配置通知。

点击 管理 ,然后点击 媒体类型 在顶部的导航栏中. 您将看到所有媒体类型的列表。

根据您的电子邮件服务提供的设置调整 SMTP 选项. 本教程使用 Gmail 的 SMTP 功能来设置电子邮件通知;如果您想了解有关此设置的更多信息,请参阅 如何使用 Google 的 SMTP 服务器

<$>[注] 注: 如果您使用Gmail的2步验证,则需要为Zabbix生成应用密码.您不需要记住它,您只需要在设置过程中输入应用密码一次。

您还可以选择消息格式 - HTML 或简单文本. 最后,点击表单底部的 Update 按钮来更新电子邮件参数。

Setting up email

现在,创建一个新用户. 点击 Administration ,然后点击 Users 在顶部导航栏中. 您将看到用户列表. 然后点击屏幕右上角的 Create user 按钮。

Creating a user

Alias字段中输入新的用户名,然后设置一个新的密码,然后将用户添加到管理员组中,在Groups字段中输入Zabbix administrators,然后从建议列表中选择。

一旦你添加了组,点击 ** 媒体** 选项卡,然后点击 ** 添加 ** 突出链接。

Adding an email

发送到**字段中输入您的电子邮件地址. 您可以将其余选项留在默认值中。 点击底部的添加** 按钮来提交。

现在导航到允许选项卡,从用户类型滚动菜单中选择Zabbix Super Admin选项卡。

最后,点击表单底部的添加按钮来创建用户。

现在你需要启用通知. 点击 ** 配置** 选项卡,然后在顶部导航栏中的 ** 行动** . 您将看到一个预先配置的操作,负责向所有 Zabbix 管理员发送通知。 您可以通过点击其名称来审查和更改设置。 对于本教程的目的,使用默认参数。 要启用该操作,请点击红色 ** 禁用** 链接在 ** 状态** 列中。

现在你已经准备好接收警报了,下一步,你将生成一个来测试你的通知设置。

步骤 8 – 生成测试警报

在此步骤中,您将生成测试警报,以确保一切都连接。默认情况下,Zabbix会跟踪您服务器上空缺的磁盘空间。它会自动检测所有磁盘安装,并添加相应的检查。

创建一个足够大的临时文件来触发 Zabbix 文件系统使用警告. 若您尚未连接,请登录您的第二个 CentOS 服务器。

1[environment local]
2ssh sammy@second_centos_server_ip_address

接下来,确定你在服务器上有多少可用空间. 你可以使用df命令来找出:

1[environment second]
2df -h

命令df将报告您的文件系统的磁盘空间使用量,而-h将使输出可人读。

1[environment second]
2[secondary_label Output]
3Filesystem Size Used Avail Use% Mounted on
4/dev/vda1 25G 958M 25G 4% /

在这种情况下,自由空间为25GB

使用fallocate命令,允许您预分配或不分配文件空间,以创建占用可用的磁盘空间超过80%的文件。

1[environment second]
2fallocate -l 20G /tmp/temp.img

大约一个小时后,Zabbix 会发出关于可用磁盘空间的通知,并将执行您配置的操作,发送通知消息。

1Problem started at 10:49:25 on 2019.05.03
2Problem name: Free disk space is less than 20% on volume /
3Host: Second Centos Server
4Severity: Warning
5
6Original problem ID: 34

您还可以导航到 ** 监控** 选项卡,然后导航到 ** 仪表板** 以查看通知及其细节。

Main dashboard

现在你知道警报正在工作,删除你创建的临时文件,这样你就可以恢复你的磁盘空间:

1[environment second]
2rm -f /tmp/temp.img

一分钟后,Zabbix会发送恢复消息,警报将从主仪表板中消失。

结论

在本教程中,您设置了一个简单而安全的监控解决方案,可以帮助您监控服务器的状态,现在它可以提醒您出现问题,您有机会分析 IT 基础设施中发生的流程。

有关设置监控基础设施的更多信息,请参阅 如何在 CentOS 7 上安装 Elasticsearch、Logstash 和 Kibana (Elastic Stack)如何在 CentOS 7 上使用 Metricbeat 收集基础设施指标

Published At
Categories with 技术
comments powered by Disqus