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"

参考