介绍
Zabbix是用于网络和应用程序的开源监控软件。它提供对从服务器,虚拟机和任何其他类型的网络设备收集的数千个指标的实时监控。这些指标可帮助您确定IT基础架构当前的运行状况,并在客户投诉之前检测硬件或软件组件的问题。有用的信息会被存储在数据库中,因此您可以随时分析数据并提高所提供服务的质量,或计划设备的升级。
Zabbix使用客户端 - 服务器体系结构,并在受监视的客户端上使用小代理来收集数据并将其发送到Zabbix服务器。Zabbix版本3支持服务器和连接的客户端之间的加密通信,因此您的数据在不安全的网络上传输时受到保护。
Zabbix服务器将其数据存储在由MySQL,PostgreSQL或Oracle提供支持的关系数据库中。它还提供Web界面,以便您可以查看数据和配置系统设置。
在本教程中,我们将配置两台计算机。一个将配置为服务器,另一个将配置为您将监视的客户端。服务器将使用MySQL数据库记录监控数据,并使用Apache为Web界面提供服务。
教程准备
要学习本教程,您需要:
- 两个带有sudo非root用户的CentOS 7服务器,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
- 其中一个CentOS 7服务器需要安装Apache,MySQL和PHP。如果你没有安装的话,我建议你可以使用云关系型数据库,腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。
注意:CentOS使用MariaDB而不是MySQL,但是在遵循本教程时这并不会引起任何问题。
第1步 - 安装Zabbix服务器
首先,我们需要在MySQL,Apache和PHP的服务器上安装Zabbix Server。我们将这台机器称为Zabbix服务器。以非root用户身份登录此计算机:
代码语言:javascript复制ssh sammy@your_zabbix_server_ip_address
默认情况下,Zabbix在我们的软件包管理器中不可用,因此我们将使用CentOS的官方Zabbix存储库安装存储库配置包,
代码语言:javascript复制sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
您将看到以下输出:
代码语言:javascript复制Retrieving http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.qLbOPP: Header V4 DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-3.0-1.el7 ################################# [100%]
现在,您可以运行以下命令来安装具有MySQL数据库支持的Zabbix服务器和Web前端:
代码语言:javascript复制sudo yum install zabbix-server-mysql zabbix-web-mysql
在安装过程中,系统将询问您是否导入GPG密钥。确认,以便安装完成。
我们还安装Zabbix代理,它将让我们收集有关Zabbix服务器本身的数据。
代码语言:javascript复制sudo yum install zabbix-agent
在我们使用Zabbix之前,我们必须设置一个数据库来保存Zabbix服务器将从其代理收集的数据。
第2步 - 为Zabbix配置MySQL数据库
我们需要创建一个新的MySQL数据库,并用一些基本信息填充它,以使其适用于Zabbix。我们还将为此数据库创建一个特定用户,因此Zabbix不会使用该root
帐户登录MySQL 。
使用您在MySQL服务器安装期间设置的root密码以root用户身份登录MySQL:
代码语言:javascript复制mysql -uroot -p
首先,创建具有UTF-8字符支持的Zabbix数据库:
代码语言:javascript复制create database zabbix character set utf8;
接下来,创建Zabbix服务器将使用的用户,授予其访问新数据库的权限,并设置密码:
代码语言:javascript复制grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';
然后应用这些新权限:
代码语言:javascript复制flush privileges;
这会照顾用户和数据库。退出数据库控制台。
代码语言:javascript复制quit;
接下来,我们必须导入初始架构和数据。Zabbix安装为我们提供了一个文件,为我们设置了这个。我们只需要导入它。导航到目录:
代码语言:javascript复制cd /usr/share/doc/zabbix-server-mysql-3.0.4/
运行以下命令以设置架构并将数据导入zabbix
数据库。我们将使用zcat
,因为文件中的数据是压缩的。
zcat create.sql.gz | mysql -uzabbix -p zabbix
输入您在提示时配置的zabbix用户的密码。
如果成功,此命令将不会输出任何错误。如果您看到错误该ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' (using password: YES)
,请确保您使用的是zabbix
用户密码而不是root
用户密码。
为了使Zabbix服务器使用此数据库,您需要在Zabbix服务器配置文件中设置数据库密码。
代码语言:javascript复制sudo vi /etc/zabbix/zabbix_server.conf
查找文件的以下部分:
代码语言:javascript复制### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
文件中的这些注释说明了如何连接到数据库。我们需要将文件中的DBPassword
值设置为数据库用户的密码。在这些注释下面添加以下行以配置数据库:
DBPassword=your_zabbix_mysql_password
这需要处理Zabbix服务器配置,但我们必须对PHP设置进行一些修改才能使Zabbix Web界面正常工作。
第3步 - 为Zabbix配置PHP
Zabbix Web界面是用PHP编写的,需要一些特殊的PHP服务器设置。Zabbix安装过程创建了一个包含这些设置的Apache配置文件。它位于目录/etc/httpd/conf.d/
中,由Apache自动加载。我们需要对此文件进行一些小改动,然后将其打开。
sudo vi /etc/httpd/conf.d/zabbix.conf
该文件包含满足Zabbix Web界面必要要求的PHP设置。您需要做的唯一更改是设置适当的时区,默认情况下会将其注释掉。
代码语言:javascript复制<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 always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>
取消注释上面突出显示的时区线,并将其更改为您的时区。您可以使用此受支持时区列表为您找到合适的时区。然后保存并关闭该文件。
现在重新启动Apache以应用这些新设置。
代码语言:javascript复制sudo systemctl restart httpd
您现在可以启动Zabbix服务器了。
代码语言:javascript复制sudo systemctl start zabbix-server
然后检查Zabbix服务器是否正常运行:
代码语言:javascript复制sudo systemctl status zabbix-server
您将看到以下状态:
代码语言:javascript复制● zabbix-server.service - Zabbix Server
Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
Active: :active (running) since Fri 2016-08-05 07:16:35 UTC; 2s ago
Process: 10033 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
...
最后,启用Zabbix服务器以在启动时启动:
代码语言:javascript复制sudo systemctl enable zabbix-server
服务器已设置并连接到数据库。现在让我们设置网络前端。
步骤4 - 配置Zabbix Web界面的设置
Web界面让我们可以查看报告并添加我们要监控的主机,但在我们使用它之前需要进行一些初始设置。启动浏览器并转到该http://your_zabbix_server_ip_address/zabbix/
地址。在第一个屏幕上,您将看到欢迎消息。单击下一步继续。
在下一个屏幕上,您将看到列出运行Zabbix的所有先决条件的表。
此表中的所有值都必须显示OK,因此请验证它们是否正确。请务必向下滚动并查看所有先决条件。确认一切准备就绪后,请单击“下一步”继续。
下一个屏幕要求提供数据库连接信息。
我们告诉Zabbix服务器我们的数据库,但Zabbix Web界面还需要访问数据库来管理主机和读取数据,以便它可以显示给我们。输入您在步骤2中配置的MySQL凭据,然后单击下一步继续。
在下一个屏幕上,您可以将选项保留为默认值。
该名称是可选的; 如果您有多个监视服务器,它将在Web界面中用于区分一台服务器与另一台服务器。单击下一步继续。
下一个屏幕将显示安装前摘要,以便您确认一切正确。
单击下一步以继续进入最终屏幕。
Web界面设置完成!此过程将创建您可以备份并在将来使用的配置文件/etc/zabbix/web/zabbix.conf.php
。单击“ 完成”以进入登录屏幕。默认用户是admin,密码是zabbix。
在我们登录之前,让我们在其他服务器上设置Zabbix代理。
步骤5 - 安装和配置Zabbix代理
现在我们需要配置将监控数据发送到Zabbix服务器的代理软件。
登录到第二台服务器,我们将其称为“受监控服务器”。
代码语言:javascript复制ssh sammy@your_monitored_server_ip_address
然后,就像在Zabbix服务器上一样,运行以下命令来安装存储库配置包:
代码语言:javascript复制sudo rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
您将看到以下输出:
代码语言:javascript复制Retrieving http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.jnLROO: Header V4 DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-release-3.0-1.el7 ################################# [100%]
然后安装Zabbix代理:
代码语言:javascript复制sudo yum install zabbix-agent
在询问时确认您要导入GPG密钥。
虽然Zabbix支持基于证书的加密,但设置证书颁发机构超出了本教程的范围,但我们可以使用预共享密钥(PSK)来保护服务器和代理之间的连接。
首先,生成一个PSK:
代码语言:javascript复制sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"
显示密钥,以便您可以将其复制到某个位置。您将需要它来配置主机。
代码语言:javascript复制cat /etc/zabbix/zabbix_agentd.psk
密钥看起来像这样:
代码语言:javascript复制bd7ebdc1ae80fb66e8102d6016671a4feabf489cf2692ee473512771c4903ed8
现在,您必须编辑Zabbix代理设置以设置与Zabbix服务器的安全连接。打开代理配置文件:
代码语言:javascript复制sudo vi /etc/zabbix/zabbix_agentd.conf
此文件中的每个设置都通过整个文件中的信息性注释进行记录,但您只需编辑其中一些。
首先,您必须编辑Zabbix服务器的IP地址。找到以下部分:
代码语言:javascript复制### Option: Server
# List of comma delimited IP addresses (or hostnames) of Zabbix servers.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
# Mandatory: no
# Default:
# Server=
Server=127.0.0.1
将默认值更改为Zabbix服务器的IP:
代码语言:javascript复制Server=your_zabbix_server_ip_address
接下来,找到配置与Zabbix服务器的安全连接的部分,并启用预共享密钥支持。找到如下所示的 TSLConnect
部分:
### Option: TLSConnect
# How the agent should connect to server or proxy. Used for active checks.
# Only one value can be specified:
# unencrypted - connect without encryption
# psk - connect using TLS and a pre-shared key
# cert - connect using TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSConnect=unencrypted
然后添加此行以配置预共享密钥支持:
代码语言:javascript复制TLSConnect=psk
接下来,找到如下所示的TLSAccept
部分:
### Option: TLSAccept
# What incoming connections to accept.
# Multiple values can be specified, separated by comma:
# unencrypted - accept connections without encryption
# psk - accept connections secured with TLS and a pre-shared key
# cert - accept connections secured with TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSAccept=unencrypted
通过添加以下行来配置传入连接以支持预共享密钥:
代码语言:javascript复制TLSAccept=psk
接下来,找到如下所示的TLSPSKIdentity
部分:
### Option: TLSPSKIdentity
# Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=
选择一个唯一名称,通过添加以下行来标识您的预共享密钥:
代码语言:javascript复制TLSPSKIdentity=PSK 001
当您通过Zabbix Web界面添加主机时,您将使用它作为PSK ID。
然后设置指向先前创建的预共享密钥的选项。找到TLSPSKFile
选项:
### Option: TLSPSKFile
# Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=
添加此行以将Zabbix代理指向您创建的PSK文件:
代码语言:javascript复制TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
保存并关闭文件。现在,您可以启动Zabbix代理并将其设置为在引导时启动:
代码语言:javascript复制sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent
为了更好地衡量,请检查Zabbix代理是否正常运行:
代码语言:javascript复制sudo systemctl status zabbix-agent
您将看到以下状态,指示代理正在运行:
代码语言:javascript复制● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2016-08-05 08:17:07 UTC; 5s ago
Process: 9507 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
...
我们的代理现在已准备好将数据发送到Zabbix服务器。但是为了使用它,我们必须从服务器的Web控制台链接到它。
步骤6 - 将新主机添加到Zabbix服务器
在我们要监视的服务器上安装代理只是整个过程的一半。我们要监控的每个主机都需要在Zabbix服务器上注册,我们可以通过Web界面进行注册。
通过导航到该http://your_zabbix_server_ip_address/zabbix/
地址登录Zabbix Server Web界面。
登录后,单击配置,然后单击顶部导航栏中的主机。然后单击屏幕右上角的“ 创建主机”按钮。这将打开主机配置页面。
调整主机名和IP地址以反映客户端计算机的主机名和IP地址。然后通过从列表中选择一个组或通过创建自己的组将主机添加到组中。主机可以是多个组。在Linux服务器组是一个不错的缺省选择。添加组后,单击“ 模板”选项卡。
在“ 搜索”字段中键入Template OS Linux
,然后单击“ 添加”以将此模板添加到主机。
接下来,导航到“ 加密”选项卡。同时将PSK选择为连接到主机和从主机连接。然后将PSK标识设置为PSK 001
,这是我们之前配置的Zabbix代理的TLSPSKIdentity设置的值。然后将 PSK值设置为您为Zabbix代理生成的密钥。它是存储在代理机器上的/etc/zabbix/zabbix_agentd.psk
文件中的那个。
最后,单击表单底部的“ 添加”按钮以创建主机。
您将看到带有绿色标签的新主机,表明一切正常,连接已加密。
几秒钟后,您可以导航到Monitoring,然后导航到Latest data以查看代理的数据。
为确保工作正常,请关闭受监控的服务器,以便了解Zabbix如何提醒您出现问题。受监控的服务器脱机后,您将在主仪表板上看到警告:
如果您需要监视其他服务器,请登录到每个主机,安装Zabbix代理,生成PSK,配置代理,然后按照添加第一个主机所遵循的相同步骤将主机添加到Web界面。
结论
在本教程中,您将设置一个简单安全的解决方案,该解决方案将帮助您监控服务器的状态。它现在可以警告您出现问题,并且您有机会根据获得的数据绘制一些图表,以便您可以对其进行分析并进行相应的计划。
更多CentOS教程请前往腾讯云 社区学习更多知识。
参考文献:《How To Install and Configure Zabbix to Securely Monitor Remote Servers on CentOS 7》