订阅以接收新文章的通知:

通过将 Cloudflare 的 Analytics 数据集成到 Prometheus 和 Grafana 中来改进您的监控设置

2021-05-20

3 分钟阅读时间
这篇博文也有 English 版本。

以下是 Labyrinth Labs 的 DevOps 工程师 Martin Hauskrecht 的客帖。

在 Labyrinth Labs,我们非常重视监控。拥有有效的监控设置是我们为客户所做工作的关键部分。

Cloudflare 的 Analytics 仪表板为我们的客户 Pixel Federation 提供了许多用于调试和分析目的的有用信息。但是,它不会自动与现有的监控工具(例如 Grafana 和 Prometheus)集成,我们的 DevOps 工程师每天都使用它们来监控我们的基础结构。

Cloudflare 提供了一个日志 API,但我们需要分析的日志数量非常庞大,这样做效率低下且成本太高。幸运的是,Cloudflare 已经完成了每秒聚合数千个事件并将它们公开在易于使用的 API 中的艰巨工作。

将来自我们区域的 Cloudflare 数据与其他系统的指标相结合将使我们更好地了解我们的系统,并能够关联指标并创建更有用的警报,从而使我们的第 2 天操作(例如调试事件或分析我们系统的使用情况) 更高效。

由于我们的监控堆栈主要基于 Prometheus 和 Grafana,因此我们决定实施我们自己的 Prometheus 导出器,从 Cloudflare 的 GraphQL Analytics API 中提取数据。

设计

根据当前的云趋势以及我们在 Kubernetes 中使用导出器的意图,用 Go 编写代码是显而易见的选择。Cloudflare 为 Golang 提供了一个 API SDK,因此可以轻松开始常见的 API 任务。

我们利用 Cloudflare 的 GraphQL API 来获取有关我们每个区域的 Analytics 数据,并将它们转换为 Prometheus 指标,然后在指标端点上公开。

我们能够获取有关请求总数和速率、带宽、Cache 利用率、威胁、SSL 使用情况和 HTTP 响应代码的数据。此外,我们还能够监控正在传输的内容类型以及请求来自哪些国家和地区。

所有这些信息都是通过 Cloudflare 的 GraphQL API 中的 http1mGroups 节点提供的。如果您想查看哪些数据集可用,可以在https://developers.cloudflare.com/analytics/graphql-api/features/data-sets 中找到简要说明

除此之外,我们还可以获得 Cloudflare 数据中心的数据。我们的图表可以轻松显示它们之间的流量分布,进一步帮助我们进行评估。数据是从GraphQL 的 httpRequestsAdaptiveGroups 中的节点获取的。

在针对 GraphQL API 运行查询后,我们只需将结果格式化为遵循 Prometheus 指标格式并将它们公开在 /metrics 端点上。为了使事情更快,我们使用 Goroutines 并并行发出请求。

部署

我们的首选目的是在 Kubernetes 中使用导出器。因此,它带有一个Docker 镜像Helm 图表,这使部署更容易。您可能需要调整服务注释以匹配您的 Prometheus 配置。

导出器本身在 /metrics 端点上公开收集的指标。因此,在 pod 或 Kubernetes 服务上设置 Prometheus 注释将完成这项工作。

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/path: /metrics
    prometheus.io/scrape: "true"

我们计划在 Helm 图表中添加一个 Prometheus ServiceMonitor,让那些在 Kubernetes 中使用 Prometheus operator 的人更容易抓取导出器。

配置非常简单,您只需提供您的 API 电子邮件和密钥。您可以将抓取仅限于选定的区域。请参阅我们在GitHub 存储库中的文档或查看下面的示例。

 env:
   - name: CF_API_EMAIL
     value: <YOUR_API_EMAIL>
   - name: CF_API_KEY
     value: <YOUR_API_KEY>

  # Optionally, you can filter zones by adding IDs following the example below.
  # - name: ZONE_XYZ
  #   value: <zone_id>

要使用 Helm 部署导出器,您只需运行:

helm repo add lablabs-cloudflare-exporter https://lablabs.github.io/cloudflare-exporter
helm repo update

helm install cloudflare-exporter lablabs-cloudflare-exporter/cloudflare-exporter \
--set env[0].CF_API_EMAIL=<API_EMAIL> \
--set env[1].CF_API_KEY=<API_KEY>

我们还在我们的 repo 中提供了一个 Helmfile 以使部署更容易,您只需要添加您的凭据即可使其工作。

可视化数据

我已经解释了导出器的工作原理以及如何让它运行。正如我之前提到的,我们使用 Grafana 来可视化来自 Prometheus 的指标。我们创建了一个仪表板,可以从 Prometheus 获取数据并将其投入使用。

仪表板分为几行,将各个面板分组以便于导航。它允许您针对指标可视化的各个区域。

为了让运营团队更加受益,您可以使用收集的指标来创建警报。这些可以直接在 Grafana 中创建,也可以使用 Prometheus 警报规则创建。

此外,如果您将 ThanosCortex 集成到您的监控设置中,您可以无限期地存储这些指标。

未来的工作

我们希望将更多的 Analytics 数据集成到我们的导出器中,最终达到 Cloudflare 的 GraphQL 可以提供的每一个指标。我们计划很快为 Firewall Analytics、DoS Analytics 和网络Analytics 创建新的指标。

如果您有任何疑问、问题或建议,请随时创建 GitHub 问题。非常感谢任何拉取请求。

关于我们

Labyrinth Labs 通过采用正确的技术和原则,帮助公司构建、运行、部署和扩展软件和基础结构。Analytics 顾客 Prometheus Grafana 监控

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
AnalyticsCustomersPrometheusGrafanaMonitoring

在 X 上关注

Cloudflare|@cloudflare

相关帖子

2024年3月08日 14:05

Log Explorer: monitor security events without third-party storage

With the combined power of Security Analytics + Log Explorer, security teams can analyze, investigate, and monitor for security attacks natively within Cloudflare, reducing time to resolution and overall cost of ownership for customers by eliminating the need to forward logs to third-party SIEMs...