Prometheus FAQ
翻译 原文链接
General
什么是prometheus
prometheus是一个开源的监控和报警系统。
prometheus有什么依赖
prometheus是单点服务,没有额外的依赖。
prometheus是否支持高可用
是的,方式:在两个或者多个隔离的机器上运行多个prometheus服务。相同的警报会被Alertmanager去重。
针对Alertmanager的高可用,可以在Mesh cluster运行多个实例,同时配置Prometheus给它们每个实例都发送通知。
prometheus能够扩缩容
可以。有很多方式可以扩容Prometheus或者使多个Prometheus结成联盟。Read Scaling and Federating Prometheus on the Robust Perception blog to get started.
为什么采用pull的方式
通过HTTP协议,通过pull的方式采集监控数据有以下优势:
- You can run your monitoring on your laptop when developing changes
- 更容易辨别一个目标是否出现故障
- 你可以在浏览器浏览特定目标的metrics(由于遵循HTTP)
总之,我们认为pull方式会比push方式稍微好一些。但是,当考虑一个监控系统时,这不应该是你的主要关注点。另外,当你需要push metrics时,可以使用我们提供的Pushgateway。
可以向Prometheus打日志么?
不要这么干。请使用像ELK stack这样的服务。
Prometheus是一个收集、处理metrics的系统,而不是事件日志系统。
如果你需要把日志转化为metrics,可以使用Google的mtail。
可以重新加载Prometheus的配置么?
可以。有两种方法:
- 向prometheus发送
SIGHUP
信号 - 通过HTTP向
/-/reload
发送POST请求(启动prometheus时,需要开启--web.enable-lifecycle
)
Can I send alerts?
Yes, with the Alertmanager.
Currently, the following external systems are supported:
能够创建dashboard么?
时间戳必须使用UTC时间么?
是的。为了避免时区的混乱,prometheus所有的组件内部都强制使用Unix时间,对外展示使用UTC时间。如果想改变时区,可以在UI改为合适的时区时间。
Instrumentation
怎么监控主机
怎么监控网络设备
怎么监控批量任务
使用Pushgateway. 请参看监控批量任务的最佳实践。
目前Prometheus支持的监控列表
See the list of exporters and integrations.
能够通过JMX监控JVM应用么?
可以。对那些无法直接与java客户端通信的java应用,你可以单独使用JMX Exporter,也可以把它作为一个Java Agent。
Troubleshooting
Prometheus 1.x服务启动花费了很长时间,and spams the log with copious information about crash recovery.
上述问题是由于Prometheus的非正常关闭造成的。正常情况下Prometheus会在接收SIGTERM
信号之后,开始服务停止之前的清理工作,这有可能需要花费一段时间。如果服务意外崩溃或者被强制杀死(因为OOM被内核杀死;或者由于“清理工作”过长),这种情况下“崩溃恢复”会被执行,正常情况,这可能会在一分钟之内完成;严重的花,可能会花费很长时间。See crash recovery for details.
Prometheus 1.x服务内存溢出
可以配置Prometheus,限制内存的使用。参看the section about memory usage。
Prometheus 1.x服务警告:to be in “rushed mode” or “storage needs throttling”
原因:存储负载过重。可以参看the section about configuring the local storage,修改配置,优化存储性能。
Implementation
为什么值都是64-bit floats类型?需要整型怎么办?
为了简化涉及,约定所有的数据都是64-bit floats类型。理论上,可以支持更加丰富的数据类型,但是这个优先级不高,目前不支持。当前64-bit floats类型能够满足一般的需求。
为什么Prometheus各个组件不支持TLS或者权限认证?能添加这个功能么?
从本质上说,TLS and authentication是请求方面的功能,我们故意不在任何Prometheus组件支持该功能。由于TLS and authentication可以通过很多其它的选择支持,而我们的重心是如何构建一个更好的监控系统,所以我们没有考虑要实现这个功能。
如果你需要TLS and authentication,我们推荐在Prometheus前面放一个反向代理。See, for example Adding Basic Auth to Prometheus with Nginx。这仅适用于入站链接。Prometheus does support scraping TLS- and auth-enabled targets, and other Prometheus components that create outbound connections have similar support.