监控系统-prometheus
本文最后更新于:9 个月前
1. Prometheus介绍
Prometheus是一个开源的系统监控和警报工具包。自2012年启动以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。Prometheus于2016年加入云原生计算基金会,成为继Kubernetes之后的第二个托管项目。
2. Prometheus 特点
Prometheus是一个开源的完整的监控解决方案,基于的是中央化的规则计算、统一分析和告警的新模型。相对于传统监控系统,Prometheus有以下优点。
2.1 主要功能
- 多维 数据模型(时序由 metric 名字和 k/v 的 labels 构成)。
- 灵活的查询语句(PromQL)。
- 无依赖存储,支持 local 和 remote 不同模型。
- 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
- 监控目标,可以采用服务发现或静态配置的方式。
- 支持多种统计数据模型,图形化友好。
- 复杂环境,支持手动push模式,通过pushgateway组件收集,server拉取pushgateway
2.2 主要组件
Prometheus Server:主服务器,负责收集和存储时间序列数据
Client libraries:应用程序代码插桩,将监控指标嵌入到被监控应用程序中
Pushgateway:推送网关,为支持short-lived作业提供一个推送网关
Exporter:专门为一些应用开发的数据摄取组件-exporter,例如:HAProxy、StatsD、Graphite等等 exporter
Altermanager:专门用于处理alert的组件 altermanager
2.3 原理图
从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等
它大致使用逻辑是这样:
- Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。 (pull 模式 + pushgateway)
- 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
- Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
- Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
- 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。
注意事项
- Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
- Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个 Prometheus 无法满足,可能需要采用专门的审计系统。
静态配置和动态配置
静态配置
Prometheus通过static_configs来设定静态方式的监控对象,比如如下Node Exporter的监控数据抓取的配置,其特点是Node Exporter提供的监控数据的/metrics的HTTP服务的IP和端口号都是固定的,在这种情况下可以使用静态配置
1 |
|
动态配置-服务自发现
动态配置是相较于静态配置的说法,在Prometheus中则是结合服务发现来实现的,将服务发现的这个功能和机制分离出去,直接利用现有的服务发现的功能框架比如consul来确认可能会动态变化的监控对象,这样就做到了所谓的动态配置。
常见的动态配置的使用方式如上图所示:
- 各种服务直接在SD(服务发现能力提供者:比如consule)上进行服务注册
- Prometheus不直接管理哪些对象需要监控,它直接向SD去获取需要监控的对象的列表
- SD会返回给Prometheus需要监控的对象列表
- Prometheus根据返回的监控对象列表使用Pull的方式进行监控数据的收集
基于consul服务发现
Consul提供了服务发现和注册的功能,而Prometheus也支持通过Consul的方式来进行动态配置
1 |
|
基本etcd+confd
根据服务注册metrics到etcd,confd 拉取etcd的配置,自动生成配置文件到promethoues,然后热加载来提供自动的指标监控。 github
- 启动confd
设置 confd 读取的配置和模版的文件夹,并监听 etcd 的变化。
1 |
|
启动 prometheus
覆盖 /etc/prometheus/prometheus.yml 的文件, 并在 prometheus 的 bin 下面启动:
1
2
3
4>> mkdir /prometheus
>> prometheus --web.enable-lifecycle \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheusPrometheus 配置文件
1
2
3
4
5
6
7
8
9
10global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
scrape_configs:
- job_name: 'test'
file_sd_configs:
- files:
- /tmp/prometheus/targets/target_*.json其他配置
更多有效配置示例
1
2
3
4
5
6#Prometheus数据源的配置主要分为静态配置和动态发现, 常用的为以下几类
1)static_configs: #静态服务发现
2)file_sd_configs: #文件服务发现
3)dns_sd_configs: DNS #服务发现
4)kubernetes_sd_configs: #Kubernetes 服务发现
5)consul_sd_configs: Consul #服务发现
本站点所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!