|
通过将 Cloudflare 的 Analytics改进您的监控设置
楼主
来源:爱海滔滔@kn12508162 9/27/2021 10:48:00 AM
在 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: - name: CF_API_KEY value: # Optionally, you can filter zones by adding IDs following the example below. # - name: ZONE_XYZ # value: 要使用 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= --set env[1].CF_API_KEY= 我们还在我们的 repo 中提供了一个 Helmfile以使部署更容易,您只需要添加您的凭据即可使其工作。 可视化数据 我已经解释了导出器的工作原理以及如何让它运行。正如我之前提到的,我们使用 Grafana 来可视化来自 Prometheus 的指标。我们创建了一个仪表板,可以从 Prometheus 获取数据并将其投入使用。 仪表板分为几行,将各个面板分组以便于导航。它允许您针对指标可视化的各个区域。 为了让运营团队更加受益,您可以使用收集的指标来创建警报。这些可以直接在 Grafana 中创建,也可以使用 Prometheus 警报规则创建。 此外,如果您将 Thanos 或 Cortex 集成到您的监控设置中,您可以无限期地存储这些指标。 未来的工作 我们希望将更多的 Analytics 数据集成到我们的导出器中,最终达到 Cloudflare 的 GraphQL 可以提供的每一个指标。我们计划很快为 Firewall Analytics、DoS Analytics 和网络Analytics 创建新的指标。 如果您有任何疑问、问题或建议,请随时创建 GitHub 问题。非常感谢任何拉取请求。 关于我们 Labyrinth Labs通过采用正确的技术和原则,帮助公司构建、运行、部署和扩展软件和基础结构。Analytics 顾客Prometheus Grafana监控 |