Prometheus入门

背景

   最近项目打算将原有iaas指标采集方式由collectd客户端变更为prometheus,由于collectd会存在内存泄漏的问题,另外prometheus也是当前监控组件中的后起之秀,社区比较活跃,又是google开源出来的,大厂背书,比较值得信赖,这里做一下简单的了解。

简介

    Prometheus是由SoundCloud开发的监控告警系统并且带时序数据库,基于Go语言,是Google BorgMon监控系统的开源版本。2016年,由Google发起的Linux基金会旗下的原生云基金会将Prometheus纳入第二大开源项目。github上目前已有35k star

   随着kubernetes在容器调度和管理上确定领头羊的地位,Prometheus也成为容器监控的标配

优点

  1. 提供多维度数据模型和灵活的查询方式,通将监控指标关联多个tag,来将监控数据进行任意维度的组合,并且提供简单的PromQL查询方式,还提供HTTP查询接口,可以方便地结合Grafana等GUI组件展示数据。
  2. 在不依赖外部存储的情况下,支持服务节点的本地存储,通过Prometheus自带的时序数据库可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus可以对接第三方时序数据库如OpenTSDB、influxdb等。
  3. 定义了开放指标数据标准,以基于HTTP的pull方式采集时序数据,只有实现了Promethues监控格式的监控数据可以可以被Prometheus采集汇总,并支持以push方式向中间网关推送时序列数据,能更加灵活的应对多种监控场景。
  4. 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前已经支持Kubernets、etcd、Consule等多种服务发现机制,可以减少运维人员的手动配置环节,在容器运行环境中尤为重要。
  5. 易于维护,可以通过二进制文件直接启动,并且提供容器花部署镜像
  6. 支持数据的分区采样和联邦部署,支持大规模集群监控

架构

   Prometheus的基本原理是通过Http周期性的抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。下面未Prometheus的架构图

Prometheus architecture

    Prometheus Server负责定时在目标主机上抓取metrics(指标)数据,每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。这种调用被监控对象获取监控数据的方式被成为pull。pull方式体系了prometheus的独特设计哲学与大多数采用push方式的监控不同。

   pull方式的优势是能够自动进行上游监控和水平监控,配置更少更容易扩展,更灵活,更容易实现高可用。展开来说就是pull方式可以降低耦合。由于在推送系统中很容易出现因为向监控系统推送数据失败而导致被监控系统瘫痪的问题(例如项目上的collectd客户端内存泄漏导致被监控主机性能异常),所以通过pull方式,被采集端端无需感知监控系统的存在,完全独立于监控系统之外,这样的数据采集完全由监控系统控制,增强了系统的可控性。

   prometheus如果获取被被监控对象

   1)通过配置文件、文本文件进行静态配置

   2)通过Zookeeper、Consul、Kubernetes等方式进行动态发现,例如对于Kubernetes的动态发现,Prometheus使用Kubernetes的Api查询和监控容器信息的变化,动态更新监控对象,这样容器的创建和删除就可以被Prometheus感知

存储

Storage通过一定的规则清理和整理数据,并把得到的结果存储到新的时间序列中,这里有两种存储方式

一种是本地存储。通过Prometheus自带的时序数据库将数据保存到本地磁盘,为了性能考虑,建议使用SSD。但是本地存储的容量毕竟有限,建议不要存储超过一个月的数据。

另外一种是远端存储,适用于存储大量监控数据。通过中间层适配器的转化,目前Prometheus支持OpenTSDB、InfluxDB、Elasticsearch等存储,通过适配器实现prometheus存储的remote write和remote read接口,便可以接入Prometheus作为远程存储使用。

   Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持多种方式的图表可视化,例如Grafana、自带的PromDash及自身提供的模板引擎等。Prometheus还提供HTTP API查询方式,自定义所需的输出。

  Prometheus通过Pull方式拉去数据,但某些现有系统是通过Push方式实现的,为了接入这些系统,Prometheus提供了对PushGateway的支持。这些系统主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上定时抓取数据。

AlertManager是独立于Prometheus的一个组件,在触发了预先设置Prometheus中的高级规则后,Prometheus便会推送告警信息到AlertManager。AlertManager提供十分灵活的告警方式,可以通过 邮件、钉钉等途径推送。并且AlertManager支持高可用部署,为了解决多个AlertManager重复告警问题,引入Gossip,在多个AlertManager之间通过Gossip告警信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独步秋风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值