使用 InfluxDB 可视化 HAProxy 指标

导航至

本文由 Jim O’Connell 撰写,最初于 2021 年 5 月 24 日发布在 HAProxy 博客上。经许可重新发布。

Visualize HAProxy with InfluxDB

HAProxy 生成超过一百个指标,让您几乎实时地了解负载均衡器及其代理服务的状态,但要充分利用这些数据,您需要一种可视化方法。

InfluxData 的 InfluxDB 应用套件将构成 HAProxy 指标的许多离散数据点转换为时间序列数据,然后进行收集和绘图,使您可以深入了解系统和服务的工作原理。

当您查询 HAProxy 的指标时,您检索到每个查询指标的单个数据点,没有历史记录或上下文。这些数据点很有价值,但要查看该指标随时间的变化情况,您需要收集历史数据。InfluxData 的 InfluxDB 工具套件提取这些指标,添加时间戳,传输、存储、聚合并显示它们。其基于 Web 的界面既复杂又直观,并允许进行临时数据分析。

在本文中,我们将逐步介绍将 HAProxy 指标显示在 InfluxDB 中所需的所有步骤。

InfluxDB 有多个版本,包括 InfluxDB、InfluxDB Cloud 和 InfluxDB Enterprise。在本文中,我们将使用 InfluxDB,他们的开源产品,但配置步骤和基本操作与其他产品几乎相同。

为了给 HAProxy 指标添加时间戳并将其发送到 InfluxDB,我们使用 InfluxData 的一个名为 Telegraf 的工具。Telegraf 是一个服务器代理,具有超过 200 个输入插件,以独立的 Go 二进制文件编写,内存占用极小。Telegraf HAProxy 输入插件直接连接到 HAProxy Runtime API,您只需在 HAProxy 配置文件中设置一行即可启用它。

HAProxy 配置

确保您已在 HAProxy 配置的 global 部分添加了 Runtime API,并重新加载 HAProxy 以启用它

global 
   stats socket /run/haproxy/api.sock mode 660 level admin

记下 /run/haproxy/api.sock 位置。配置 Telegraf 时您将需要它。

注意:我们的示例使用域套接字,但 Telegraf 的 HAProxy 输入文档 中概述了其他选项,例如抓取 HAProxy 统计信息页面。

访问 InfluxDB 2.0 入门 并安装适用于您操作系统的版本。登录后,单击左侧的“数据”菜单项和“存储桶”选项卡。创建一个名为 haproxy 的存储桶(如果不存在),并将数据保留期限设置为 30 天。

Create bucket in InfluxDB

单击“令牌”选项卡,如果您的用户没有令牌,则生成一个新令牌。这些令牌处理 Telegraf 和 InfluxDB 之间通信的身份验证。选择您生成的令牌,然后单击“复制到剪贴板”。将其粘贴到文本文件中并妥善保管。

Tokens in InfluxDB

如果您不想将此令牌硬编码到配置文件中,您可以将其存储为 Telegraf 运行服务器上的环境变量

$ export INFLUXDB_TOKEN="<在此处插入 InfluxDB 令牌>"

要使此变量持久化,请将其添加到系统的 /etc/environment 文件中,以便在启动时加载。

安装 Telegraf

安装 Telegraf 到与 HAProxy 安装在同一台服务器上。在文本编辑器中打开 /etc/telegraf/telegraf.conf 处的新空白配置。

我们将从 InfluxDB 和 HAProxy 收集几条信息以放入此文件中。

Telegraf 配置有两个基本组件:指向 InfluxDB 的输出部分和从 HAProxy 的 Runtime API 收集指标的输入部分。

创建一个新的空文件 /etc/telegraf/telegraf.conf 并添加以下内容

[[outputs.influxdb_v2]]
  ## The URLs of the InfluxDB cluster nodes.
  ## urls exp: http://127.0.0.1:9999
  urls = ["http://127.0.0.1:8086"]

  ## Token for authentication.
  # token = "$INFLUX_TOKEN" # Uncomment to use environment variable
  token = "Your InfluxDB token" # Plain text token
  ## Organization is the name of the organization you wish to write to; must exist.
  organization = "haproxy"

  ## Destination bucket to write into.
  bucket = "haproxy"  

[[inputs.haproxy]]
  servers = ["socket:/run/haproxy/api.sock"]

保存并关闭文件。

虽然您通常会将 Telegraf 作为 systemd 服务运行,但您可以先以交互方式运行它以测试错误

$ sudo systemctl stop telegraf
$ telegraf --config /etc/telegraf/telegraf.conf
2021-04-23T00:01:17Z I! Starting Telegraf 1.18.1
2021-04-23T00:01:17Z I! Loaded inputs: haproxy
2021-04-23T00:01:17Z I! Loaded aggregators:
2021-04-23T00:01:17Z I! Loaded processors:
2021-04-23T00:01:17Z I! Loaded outputs: influxdb_v2
2021-04-23T00:01:17Z I! Tags enabled: host=spion
2021-04-23T00:01:17Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"my-haproxy", Flush Interval:10s

等待 30 秒左右以检查输出是否有错误。如果没有错误,则 InfluxDB 正在接收您的 HAProxy 指标。停止上面的交互式命令并将其作为 systemd 服务启动。

$ sudo systemctl start telegraf

打开您的 InfluxDB 工作区并导航到“探索”部分。查找您创建的 haproxy 存储桶,然后向下钻取以查找您的 HAProxy 指标。从“过滤器”列中选择一个指标,然后单击“提交”。这将创建该指标在您选择的时间段内的基本折线图。

下图显示了基准测试期间请求的平均响应时间 rtime

Data Explorer benchmarking test

使用模板

InfluxData 创建了一个全面的 仪表板模板,可以轻松启动和运行。只需点击几下即可完成安装。

InfluxDB template<figcaption> 将 HAProxy 模板添加到 InfluxDB</figcaption>

从您的 InfluxDB 工作区中,导航到左侧的“设置”选项卡,单击“模板”并输入模板资源文件的 URL: https://raw.githubusercontent.com/influxdata/community-templates/master/haproxy/haproxy.yml 这将安装一个仪表板,该仪表板已预先填充了一系列图形和图表,以便信息丰富地查看您的指标

HAProxy Monitoring Template dashboard<figcaption> InfluxData 的 HAProxy 仪表板模板</figcaption>

结论

当您将 HAProxy 指标与 InfluxDB 结合使用时,您可以了解负载均衡器所看到的网络内部运作情况。您可以深入了解正在进行负载均衡的应用程序服务的性能。这使您可以进行数据分析,并使您能够智能地响应事件、评估新部署软件的效率并满足您的服务级别目标。