侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 191 篇文章
  • 累计创建 74 个标签
  • 累计收到 112 条评论

Prometheus 常见问题回答

汪洋
2022-12-06 / 2 评论 / 9 点赞 / 1,498 阅读 / 3,934 字

一、一般问题

1、Prometheus是什么?

Prometheus是一款高活跃生态系统的开源系统监控和警告工具包。详见概览

2、Prometheus与其他的监控系统比较

官方详细说明文档:https://prometheus.io/docs/introduction/comparison/

3、Prometheus有什么依赖?

Prometheus服务独立运行,没有其他依赖

4、Prometheus有高可用的保证吗?

是的,在多台服务器上运行相同的 Prometheus 服务,相同的报警会由警告管理器删除
警告管理器当前不能保证高可用,但高可用是目标

5、我被告知 Prometheus ”不能水平扩展”

事实上,有许多方式可以扩展Prometheus。比如分片管理。

6、Prometheus是什么语言写的?

大多数 Prometheus 组件是由 Go 语言写的。还有一些是由 Java,Python 和 Ruby 写的

7、Prometheus的特性、存储格式和 APIs 有多稳定?

Prometheus从v1.0.0版本开始就非常稳定了,我们现在有一些版本功能规划,详见路线图

8、为什么是使用的是 pull 而不是 push?
  • 基于 Http 方式的拉模型提供了一下优点:

    • 当开发变化时,你可以在笔记本上运行你的监控。如果目标实例挂掉,你可以很容易地知道。你可以手动指定一个目标,并通过浏览器检查该目标实例的监控状况。总体来说,我们相信拉模式比推模式要好一地啊你,但是当考虑一个监控系统时,它不是主要的考虑点、
    • 通过 pull 的方式避免了洪峰的存在
  • 如果你必须要用Push模式,我们提供Pushgateway、

8、怎么样把日志推送到 Prometheus 系统中?

简单地回答:千万别这样做,你可以使用 ELK 栈去实现。比较详细的回答:Prometheus 是一款收集和处理度量指标的系统,并非事件日志系统。

如果你想要从应用日志中提取Prometheus度量指标中。 谷歌的mtail可能会更有帮助

9、谁写的Prometheus?

Prometheus 项目发起人是 Matt T. Proud 和 Julius Volz。 一开始大部分的开发是由 SoundCloud 赞助的
现在它由许多公司和个人维护和扩展

10、当前 Prometheus 的许可证是用的哪个?

Apache 2.0

11、Prometheus单词的复数是什么?

Prometheis

12、我能够动态地加载 Prometheus 的配置吗?

是的,通过发送 SIGHUP 信号量给 Prometheus 进行,将会重载配置文件。不同的组件会优雅地处理失败的更改

13、我能发送告警吗?

是的,通过警告管理器。当前,下面列表的外部系统都是被支持的

14、我能创建 Dashboard 吗?

是的,但是在生产使用中,我们推荐用 Grafana。PromDash 和 Console templates 也可以

15、我能改变 timezone 和 UTC 吗?

不行。为了避免任何时区的困惑和混乱,我们用了 UTC 这个通用单位。新版本中图形化界面可以选择查看时显示的时区。

二、工具库

1、哪些语言有工具库?

这里有很多客户端库,用Prometheus的度量指标度量你的服务。详见客户库如果你对功能工具库非常感兴趣,详见

2、我能监控机器吗?

是的。Node Exporter

3、我能监控网络数据吗?

是的。SNMP Exporter

4、我能监控批量任务吗?

是的,通过Pushgateway最佳实践详见

5、Prometheus 的第三方工具有哪些?

详见exporters for third-party systems

6、我能通过 JMX 监控 JVM 应用程序吗?

是的。不能直接使用 Java 客户端进行测试的应用程序,你可以将JMX Exporter

7、工具对性能的影响是什么?

客户端和语言的性能可能不同。对于 Java,基准表明使用 Java 客户端递增计数器需要 12~17ns,具体依赖于竞争。最关键的延迟关键代码之外的所有代码都是可以忽略的。

三、故障排除

1. 当服务崩溃恢复后,我的服务需要很多时间启动和清理垃圾日志。

你的服务可能遭到了不干净的关闭。Prometheus 必须在 SIGTERM 后彻底关闭,特别地对于一些重量级服务可能需要比较长的时间去。如果服务器崩溃或者司机(如:在等待 Prometheus 关闭时,内核的 OOM 杀死你的 Prometheus 服务),必须执行崩溃恢复,这在正常情况下需要不到一分钟。详见崩溃恢复

2、我在 Linux 上使用 ZFS,单元测试 TestPersistLoadDropChunks 失败。尽管测试失败,我运行 Prometheus 服务,奇怪的事情会发生。

你在 Linux 上有 bug 的 ZFS 文件系统运行 Prometheus 服务。详见Issue #484

四、实现

1、为什么所有样品值都是 float64 数据类型?我想要 integer 数据类型。

我们限制了 float64 以简化设计,IEEE 754 双精度二进制浮点格式支持高达 253 的值的整数精度。如果您需要高于 253 但低于 263 的整数精度,支持本地 64 位整数将有帮助。原则上,支持不同的样本值类型 (包括某种大整数,支持甚至超过 64 位)可以实现,但它现在不是一个优先级。 注意,一个计数器,即使每秒增加 100 万次,只有在超过 285 年后才会出现精度问题。

2、为什么 Prometheus 使用自定义的存储后端,而不是使用其他的存储方法?是不是“一个时间序列一个文件”会大大地伤害性能?

一开始,Prometheus 是在 LevelDB 上存储事件序列数据,但不能达到比较好的性能,我们必须改变大量时间序列的存储方式。我们评估了当时可用的许多存储系统,但是没有得到满意的结果。所以我们实现了我们需要的部分。同时保持 LevelDB 的索引和大量使用文件系统功能。我们最重要的要求是对于常见查询的可接受查询速度,以及每秒数千个样本的可持续速率。后者取决于样本数据的可压缩性和样本所属的时间序列数,但是给你一个想法,这里有一些基准的结果:

  • 在具有 Intel Core i7 CPU,8GiB RAM 和两个旋转磁盘(三星 HD753LJ )的老式 8 核机器上,Prometheus 在每个 RAID-1 设置中的吞吐速率为34k样本,属于 170k 时间序列, 600 个目标。
  • 在具有 64GiB RAM,32 个CPU 内核和 SSD 的现代服务器上,Prometheus 的每秒吞吐率为 525k 样本,属于 1.4M 时间序列,从 1650 个目标中剔除。

在这两种情况下,没有明显的瓶颈。在相同的流入速度下,各个阶段的处理管道或多或少都会达到他们的限度。在通常的设置中,不可能使用 inode。 有一个可能的缺点:如果你想删除 Prometheus 的存储目录,你会注意到,一些文件系统在删除文件时非常慢。

3、为什么 Prometheus 服务器组件不支持 TLS 或身份验证? 我可以添加这些吗?

虽然 TLS 和身份验证是经常请求的功能,但我们有意不在 Prometheus 的任何服务器端组件中实现它们。 有这么多不同的选项和参数(仅限 TLS 的 10 多个选项),我们决定专注于建立最佳的监控系统,而不是在每个服务器组件中支持完全通用的 TLS 和身份验证解决方案。

如果您需要 TLS 或身份验证,我们建议将反向代理放在 Prometheus 前面。 参见例如使用 Nginx 添加对 Prometheus 的基本认证。

请注意,这仅适用于入站连接。 Prometheus 确实支持删除 TLS- 和 auth 启用的目标,以及其他创建出站连接的 Prometheus 组件具有类似的支持。

0

评论区