写点什么

使用 Prometheus 监控 Cloudflare 的全球网络

2017 年 11 月 02 日

Matt Bostock 在 SRECON 2017 欧洲大会的演讲中,介绍了如何使用Prometheus 实现对 CloudFlare 分布于全球的架构和网络的监控。Prometheus 是一种基于度量进行监控的工具,CloudFlare 是一家CDN、DNS 和DDoS 防御(Mitigation)服务提供商。

基于度量的开源监控项目 Prometheus 最早推出于 2012 年,它是 CNCF (原生云计算基金会,Cloud Native Computing Foundation)的成员。Prometheus 的动态配置和查询语言 PromQL 支持用户编写对告警的复杂查询。CloudFlare 提供 CDN(内容分发网络,Content Delivery Network)、分布式 DNS 和 DDoS 防御服务,这意味着其架构已扩展到全球范围。监控这样的架构及网络无疑是一件复杂的工作。在演讲中,Bostock 介绍了 Prometheus 在其中发挥的作用。在 CloudFlare,前期部署的 Nagios 的职能已有 87% 被 Prometheus 所替代。

CloudFlare 提供类似于 Anycast 所提供的 CDN 服务。 Anycast DNS 使得 DNS 查询可以被最接近用户的服务器所处理, Anycast HTTP 使得内容可以从距离用户最近的服务提供。作为原始 Web 站点和用户之间的中介,CloudFlare 还检查访问者的流量中是否存在有威胁的模式。它提供了跨 150 个国家的 116 个数据中心,每秒处理 500 万次 HTTP 请求,120 万次 DNS 请求,占全球因特网请求的 10%。每个入网点(PoP,Point-Of-Presence)提供 HTTP、DNS、DDoS 防御和键值存储服务。截至演讲时,有 188 台运行在生产环境中的 Prometheus 服务器需要监控。

图片来源: https://promcon.io/2017-munich/talks/monitoring-cloudflares-planet-scale-edge-network-with-prometheus/

Prometheus 是基于度量的,也就是说它采集时序度量,并基于度量构建其余的特性。它工作于 Pull 模式下,每台监控服务器运行一个称作“exporter”的进程,通过 HTTP 发布所采集的度量。CloudFlare 为每个服务域部署了一个 exporter,使用它们采集系统(例如 CPU、内存、TCP、磁盘等)、网络(例如 HTTP、Ping 等)、本地匹配(错误信息)和容器 / 命名空间的度量。其中,exporter 使用了 Google 的开源项目 cadvisor 采集容器 / 命名空间的度量。Prometheus 并不会永久地保存所有数据,因为它更侧重于“此时此地”(here-and-now)的监控情况。数据不做下采样,并在CloudFlare 配置中保存15 天。

在CloudFlare 的核心数据中心,服务包括日志访问、分析业务,以及使用Marathon、Mesos、Chronos、Docker、Sentry、Ceph(用于存储)、Kafka、Spark、Elasticsearch 和Kibana 等技术栈构建的API。Prometheus 在每个PoP 通过exporter 查询服务器和服务获取度量。每个PoP 的高可用性是由使用多个Prometheus 服务提供的。

Prometheus 的报警管理称为“Alertmanager”。CloudFlare 的部署中包括一个 Alermanager,由每个 Prometheus 服务器推送事件,并考虑了配置的高可用性。报警基于历史数据做测试,确保服务的正确执行的。 Bosun 等新兴监控工具也包括类似的特性。为提供更好的报警服务,其它的一些特性还包括了描述性的名称、简单易用性和一些可使接收者立刻采取行动的信息。

CloudFlare 团队使用 jiralerts 实现 JIRA 工单系统与 Alertmanager 的集成。JIRA 可以用户定制工作流,使得报警监控中可以包括一些监控工作流特定的用户定制状态。另一个称为 alertmanagere2s 的工具接收报警,并将报警信息集成到 Elasticsearch 索引中,用于进一步的检索和分析。CloudFlare 已为 Alertmanger 构建了自己的仪表盘,称为“ unsee ”。

那么 Prometheus 是如何监控自身情况的?这有两种实现方法。一种是混合方法,即在同一数据中心中,由一个 Prometheus 去监控另一个 Prometheus。另一种方法是自顶向下的方法,由顶层 Prometheus 服务器监控位于数据中心层面的 Prometheus 服务器。

CloudFlare SRE 团队的经验是,尽早对环境和集群等的标签和组身份做标准化;其它一些经验是关于如何创建可视化,以及从同行和利益相关者生成买入。经验指出,团队的尽早参与将有助于服务与监控系统的更快整合。而报警本身则需要多次迭代进行调整和改进,这是一个开展中的过程。

查看英文原文: Monitoring Cloudflare’s Global Network Using Prometheus

2017 年 11 月 02 日 19:005576
用户头像

发布了 367 篇内容, 共 88.9 次阅读, 收获喜欢 164 次。

关注

评论

发布
暂无评论
发现更多内容

Libra教程之:Libra协议的关键概念

程序那些事

区块链 libra blockchain 协议

互金总结系列(1)--开篇

互金从业者X

SpringMVC中Http请求方式转换(post转换为put/delete等方式)

知春秋

springmvc post post到put方式请求 post到delete方式请求

Zookeeper 序列化

CoderLi

Java zookeeper 源码分析 后端

做产品少走弯路:上帝视角(2)

我是IT民工

产品 方法 路径 知识体系

机器学习算法评估指标—2D语义分割

做技术BP的文案Gou

学习 2D 评估标准 语义分割

ZooKeeper 数据模型:节点的特性与应用

CoderLi

zookeeper 源码分析 数据模型 节点

Zookeeper Watcher 流程分析(结合源码)

CoderLi

Java zookeeper 源码分析 后端 Watcher

Zookeeper-Access Control List(ACL)

CoderLi

Java zookeeper 源码分析 后端

如何用日记提升写作能力?

石云升

学习 方法 写作

Java 序列化

CoderLi

Java 程序员 后端 序列化

原创下载 | TDD工具集原创开源代码免费下载!

编程道与术

Java 开源 TDD 下载 代码

食堂就餐卡系统架构设计文档

dony.zhang

小师妹学JavaIO之:NIO中那些奇怪的Buffer

程序那些事

io nio Java 25 周年 小师妹 buffer

2w字长文!手撸一套 Java 基础面试题

cxuan

Java 后端 Java25周年

迄今为止讲解最详细的Tomcat架构解析与JVM、GC详解及调优文档

周老师

Java tomcat 程序员 Web

如何基于 OAM 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

大中台模式下如何构建复杂业务核心状态机组件

奈学教育

中台

副业月赚 10 万的程序员是如何做销售的?

非著名程序员

程序员 独立开发者 程序人生 提升认知 程序员成长

游戏夜读 | 如何制作游戏?

game1night

面向对象的三个基本特征(要素)

彭阿三

三要素 三个基本特征 封装、继承、多态

架构师训练营作业(第二周)

王海

极客大学架构师训练营

由一次管理后台定时推送功能引发的对RabbitMQ延迟队列的思考(一)

LSJ

Java RabbitMQ 延迟队列

拙见/ 什么是自驱力?

ZoomQuiet大妈

自我提升 大妈 是也乎 IMHO 蟒营®

2020年5月云主机性能评测报告

BonreeAPM

云计算 服务器 公有云 机房 云主机

Libra白皮书解读

程序那些事

区块链 facebook 数字货币 libra

大中台模式下如何构建复杂业务核心状态机组件

古月木易

自由是不是随心所欲?

Neco.W

个人成长 自由 控制

Kafka零数据丢失的配置方案

奈学教育

kafka

[架构师训练营] Week01 - 食堂就餐卡系统设计

谭方敏

学习

游戏夜读 | 如何面对前景渺茫?

game1night

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

使用Prometheus监控Cloudflare的全球网络-InfoQ