如何在 Ubuntu 20.04 上使用 Zabbix 监控 Docker

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

Docker是一个流行的应用程序,简化了在容器中的应用程序流程的管理。容器类似于虚拟机,但由于它们更依赖主机操作系统,它们更便携式,资源友好。

在生产环境中使用集装箱时,您应该知道它们是否全部运行以及它们所消耗的资源。 Zabbix是一个监控系统,可以监控您的IT基础设施几乎任何元素的状态,如网络,服务器,虚拟机和应用程序。

Zabbix最近推出了具有先进功能的新代理(Zabbix agent 2)。新代理的主要优势之一是能够通过插件扩展功能。

在本教程中,您将使用 Ubuntu 20.04 的 Zabbix 代理 2 在 Zabbix 中设置 Docker 监控,您将探索指标并模拟崩溃以生成通知。

前提条件

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

  • 遵循Ubuntu 20.04初始服务器设置指南设置的两个Ubuntu 20.04服务器,包括一个拥有 " sudo " 权限的非根基用户和一个配置有 " ufw " 的防火墙。
  • 第一台服务器,您将在此安装 Zabbix,将是 ** Zabbix 服务器**. 安装以下组件: -Nginx,MySQL,和PHP,由教程步骤1至步骤3Ubuntu 20.04 LEMP Stack 向导所安装.
  • 第二台服务器将安装多克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 通过遵循 [如何在 Ubuntu 20.04 上安装和使用 Docker] 教程的第 1 步来安装 Docker (https://andsky.com/tech/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04) 。
  • 一个完全注册的域名. 此教程将在整个过程中以`你的域'为例。 您可以在 [Namecheap] (https://namecheap.com/ 上购买域名, 在 [Freenom] (http://www.freenom.com/en/index.html ) 上免费获取域名, 或者使用您选择的域名登记员 。
  • 一张有`你的域'的唱片,指向您Zabbix服务器的公开IP地址。 您可以跟随DigitalOcean DNS了解如何添加的详细信息. (英语)

步骤 1 — 安装和配置 Zabbix 代理 2

Zabbix 代理是一个非常小的应用程序,必须安装在您想要监控的每个服务器或虚拟机上。它会将监控数据发送到 Zabbix 服务器上。 Zabbich 建议使用两个代理之一: Zabbix 代理Zabbix 代理 2。 (您可以在 文档中了解它们的差异)。

开始安装代理软件. 登录到 Docker 服务器:

1[environment local]
2ssh sammy@docker_server_ip_address

运行以下命令来安装存储库配置包:

1wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
2sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

接下来,更新包索引:

1sudo apt update

然后安装 Zabbix 代理:

1sudo apt install zabbix-agent2

接下来,您需要编辑代理配置文件,其中包含所有代理的设置。这些设置指定将数据传输到地址,将使用的端口连接到和从服务器,是否使用安全连接,以及更多。

对于本教程,您需要编辑 Zabbix 代理设置以将其连接到 Zabbix 服务器

1sudo nano /etc/zabbix/zabbix_agent2.conf

默认情况下,代理人配置为将数据发送到与代理人相同的主机上的服务器,因此您需要添加 Zabbix 服务器的 IP 地址。

 1[label /etc/zabbix/zabbix_agent2.conf]
 2...
 3### Option: Server
 4#       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
 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#       and '::/0' will allow any IPv4 or IPv6 address.
 8#       '0.0.0.0/0' can be used to allow any IPv4 address.
 9#       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
10#
11# Mandatory: yes, if StartAgents is not explicitly set to 0
12# Default:
13# Server=
14
15Server=127.0.0.1
16...

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

1[label /etc/zabbix/zabbix_agent2.conf]
2...
3Server=zabbix_server_ip_address
4...

默认情况下,Zabbix 服务器会连接到代理程序,但对于某些检查(例如监控日志),需要进行反向连接。

查找配置活跃检查的部分,并如下所示更改默认值:

 1[label /etc/zabbix/zabbix_agent2.conf]
 2...
 3##### Active checks related
 4
 5### Option: ServerActive
 6#       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
 7#       If port is not specified, default port is used.
 8#       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
 9#       If port is not specified, square brackets for IPv6 addresses are optional.
10#       If this parameter is not specified, active checks are disabled.
11#       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
12#
13# Mandatory: no
14# Default:
15# ServerActive=
16
17ServerActive=zabbix_server_ip_address
18
19### Option: Hostname
20#       Unique, case sensitive hostname.
21#       Required for active checks and must match hostname as configured on the server.
22#       Value is acquired from HostnameItem if undefined.
23#
24# Mandatory: no
25# Default:
26# Hostname=
27
28Hostname=Docker server
29...

保存并关闭文件。

要让 Zabbix 代理监控 Docker,您需要将zabbix用户添加到docker组:

1sudo usermod -aG docker zabbix

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

1sudo systemctl restart zabbix-agent2
2sudo systemctl enable zabbix-agent2

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

1sudo systemctl status zabbix-agent2

输出将类似于此,表示代理正在运行:

1[secondary_label Output]
2 zabbix-agent2.service - Zabbix Agent 2
3     Loaded: loaded (/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: enabled)
4     Active: active (running) since Fri 2021-09-03 07:05:05 UTC; 1min 23s ago
5  ...

代理将在端口10050上听取来自服务器的连接. 配置 UFW 以允许连接到该端口:

1sudo ufw allow 10050/tcp

您可以了解有关 UFW 的更多信息,请参阅 如何在 Ubuntu 20.04 上设置使用 UFW 的防火墙

在此步骤中,您安装了 Zabbix 代理 2,将其配置为允许来自您的 Zabbix 服务器的连接,并准备监控 Docker。

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

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

您要监控的服务器上安装一个代理只需要一半的过程。您要监控的每个主机都需要在 **Zabbix 服务器上注册,您可以通过 Web 界面进行此操作。您还需要连接相应的模板。使用模板,您可以将相同的监控项目、触发器、图表和低级别发现规则应用到多个主机上。

登录到 Zabbix 服务器的 Web 接口,通过导航到地址 http://zabbix_server_namehttps://zabbix_server_name. (如在前提条件中链接的教程中提到的, 如何在 Ubuntu 20.04 上安裝和配置 Zabbix 以安全监控远程服务器,默认用户是 Admin,密码是 zabbix)。

Log in

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

Create host

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

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

Host templates

要启用必要的检查,你需要添加一个模板. 该模板包含所有必要的检查,触发器和图表. 主机可以有多个模板. 要做到这一点,请在 ** 搜索** 字段中输入模板的名称,并从建议列表中选择它。

对于本教程,键入 Template App Docker,然后从列表中选择它以将此模板添加到主机。

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

您将在列表中看到您的新主机. 等待一分钟,然后重新加载页面,以看到绿色标签,表示一切都很好。

Hosts

在此步骤中,您将新主机添加到服务器中,并使用现成的模板添加所需的检查。

现在,Zabbix 服务器正在监控您的Docker 服务器,在下一步,您将启动测试容器,并探索 Zabbix 可以收集哪些指标。

步骤 3 – 访问 Docker 指标

如果你在新环境中运行本教程,那么你没有运行容器,也没有什么可监控的。 在此步骤中,你将启动测试容器,并查看哪些指标可用。

在 **Docker 服务器上运行以下命令:

1sudo docker run --name test_container -it ubuntu bash

这将启动一个名为test_container的测试容器,使用ubuntu:latest图像。-it标志指示Docker分配与容器的 [标准输入](https://en.wikipedia.org/wiki/Standard_streams#Standard_input_(stdin)连接的假TTY,在容器中创建一个互动的bash壳。

结果将看起来像这样:

1[secondary_label Output]
2Unable to find image 'ubuntu:latest' locally
3latest: Pulling from library/ubuntu
435807b77a593: Pull complete
5Digest: sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31f
6Status: Downloaded newer image for ubuntu:latest

<$>[注] 注: 不要离开壳,因为您将在下一步需要它。

在启动容器几分钟后,Zabbix 会自动找到新的容器并添加相应的指标。

要查看所有指标的列表,请单击左导航栏中的 ** 监控**,然后单击 ** 主机**,然后单击相应行中的 ** 最新数据**。

Hosts

您将看到一个表格,其中包含 Zabbix 代理收集给定主机的所有指标. 对于每个项目,您可以看到名称、历史存储期、最后检查的时间和最后的值。

您可以浏览列表并查看与 test_container 相关的指标,您也可以在 Name 字段中输入容器的名称,然后点击 Apply 以找到所有相关的指标。

Metrics

若要查看特定指标的更改历史记录,请单击 ** 图表 ** (对于数字值) 或 ** 历史 ** (对于文本值)。

您也可以从列表中选择一个或多个指标,然后点击列表底部的显示图表按钮,以查看多个图表。

Select metrics

Graphs

在此步骤中,您启动了测试容器,并在 Zabbix 网页接口中查看了其指标。

步骤 4 – 生成测试警报

在此步骤中,您将看到监控如何通过模拟容器意外关闭,从而触发Zabbix的通知。

开始通过模拟集装箱故障,在集装箱壳中执行以下命令:

1exit 1

使用此命令,您用错误代码1终止了容器,此输出代码传递给docker run的调用器,并记录在测试容器的元数据中。

若要查看警告,请点击监控,然后点击控制台在Zabbix Web 接口的左侧导航栏中。

Global view

如果您之前已经配置了电子邮件或其他通知,您也将收到类似于此的消息:

1Problem started at 11:17:31 on 2021.09.03
2Problem name: Container /test_container: Container has been stopped with error code
3Host: Docker Server
4Severity: Average
5Operational data: 1
6Original problem ID: 103

检查通知后,您可以重新启动容器,问题将自动消失。

要重新启动容器,请在 **Docker 服务器上运行以下命令。

1sudo docker start test_container

您可以通过此命令检查容器是否正在运行:

1sudo docker ps

结果将看起来像这样:

1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c9b8a264c2e1 ubuntu    "bash"    23 minutes ago Up 7 seconds test_container

要查看 Zabbix 界面中的所有警报的历史,请单击 ** 监控**,然后单击 ** 问题**在左导航栏中. 您可以使用选项和过滤器查看特定时间段的事件,特定主机等。

Problems

在此步骤中,您模拟了容器故障并在 Zabbix 中收到通知。

结论

在本教程中,您了解如何设置一个简单的监控解决方案,以帮助您跟踪您的Docker容器的健康状况。

借助Zabbix,您不仅可以监控容器,还可以监控服务器、数据库、Web应用程序等等(使用准备好的Zabbix官方模板)。

有关监控基础设施的更多信息,请参阅我们的监控主题页面(https://andsky.com/tags/monitoring)。

Published At
Categories with 技术
comments powered by Disqus