升级到Prometheus 2.0
2017-11-17
Prometheus是一个基于时序数据的开源监控系统。 被Prometheus监控的服务需要公开一个Prometheus的endpoint,这个endpoint通过http接口暴露了度量(metrics)的列表和当前的值。很多服务都内置了Prometheus的endpoint直接暴露metrics,另外一些服务需要再为它们部署一个sidecar进程,通过side car暴露metrics。 这个sidecar或直接暴露metrics的服务自带的endpoint,就是Prometheus架构中的Exporter,Prometheus从Exporter中拉去监控数据。
Prometheus 2.0新特性 #
十天前Prometheus 2.0版本发布:Announcing Prometheus 2.0,官方声明2.0的性能得到了巨大的提升。一起来看一下Prometheus 2.0的新特性:
- 2.0的性能得到了巨大的提升
- 与Prometheus 1.8对比,CPU使用率降低了20%~40%
- 与Prometheus 1.8对比,磁盘空间占用降低了33%~50%
- 低负载查询的磁盘I/O平均小于1%
- Prometheus 2.0内置了数据库快照备份功能
- 告警规则从自定义格式迁移到yaml格式,使用2.0的promtool工具可以完成格式的转换
升级到Prometheus 2.0 #
从Prometheus 1.8升级2.0需要事先阅读一遍官方的升级指南PROMETHEUS 2.0 MIGRATION GUIDE。2.0有很多不兼容1.8的地方。
从2.0开始Prometheus的命令行参数要求必须是--
,而不再支持-
。例如--web.listen-address
。
Prometheus 2.0废弃了命令行参数-alertmanager.url
,而要求AlertManager必须经过服务发现的形式配置。
如果仍然是一个固定地址的alertmanager,可以通过在Prometheus配置文件中配置如下:
1alerting:
2 alertmanagers:
3 - static_configs:
4 - targets:
5 - alertmanager:9093
- 其中alertmanager为alertmanger的hostname
告警规则从自定义格式迁移到yaml格式,需要使用2.0版本的promtool工具升级告警规则的格式:
1./promtool update rules alert.rules
转换完的yaml格式的告警规则文件为alert.rules.yml。
在数据存储层的格式上2.0版本与1.8版本的完全不兼容。
新的存储层废弃了-storage.local.*
和-storage.remote.*
等命令行参数。
对于本地存储可以更改为下面的形式:
1--storage.tsdb.path=/var/lib/prometheus
2--storage.tsdb.retention=45d
如果需要保留历史的监控数据的话,需要启动一个1.8.1版本的Prometheus实例,该实例不要去拉取监控数据,而只作为2.0版本的remote data,在2.0的实例中配置:
1remote_read:
2 - url: "http://localhost:9094/api/v1/read"