容器监控-Prometheus:1. 适用于容器监控-Prometheus

容器监控-Prometheus:1. 适用于容器监控-Prometheus

起源

640?wx_fmt=png

曾几何时,kubernetes 监控体系繁杂,社区也很多方案。现在已经演变成以Prometheus为重要体系的方案。

  • 与kubernetes 同源

    kubernetes源自于Borg系统,Prometheus也是同时开发Borg系统的工程师而来。SoundCloud创建这个项目。

  • 2016 .5 加入CNCF

  • 2018.8从CNCF毕业

说明这个项目已经具备成熟和稳定性,可以放心的集成在商业平台中。跟kubernetes一样从CNCF毕业后投入生产的速度加快了不少。

Prometheus是什么

  • 一系列服务的组合

    并不是一个单独的服务,是一系列服务的组合

  • 系统和服务的监控报警平台

    监控系统和服务包括不限于kubernetes集群的监控和docker 监控,并且支持静态监控目标,同时也支持很多动态的服务发现,对spring-boot支持也很好,引入Prometheus的插件就可以让spring-boot项目自动纳入Prometheus的监控

Prometheus特征

  • metric名称和kv标识的多维度数据模型

http_response_total就是metric的名字,method和endpoint 就算具体的kv,每个名字加上不同的kv组合都是一条时间序列。

  • 灵活的查询语言(PromQL)

    类似于sql

    查询方式

  • 支持pull、push两种方式添加数据

  • 支持基于kubernetes服务发现的动态配置

架构

Prometheus有很多组件组成,其中很多组件都是可选的。核心组件的Prometheus Server,用pull的方式在各个地方拉去数据,过程就是Retrieval。把数据拉去过来存储Storage,数据会保存到tsb时间序列数据库里。通过PromQL对外提供数据的查询。其他的组件都是围绕这个核心展开的。

Job / Exporters 暴露指标,让Retrieval抓取。主要想法设法采集到数据,提供一个对外http接口,可以拿到采集的数据。我们前面说过NoExporters 就是其中的一种。

Pushgatewary通过push方式将数据推送到网关,比如定时任务,一次性执行任务,就可以采用这种主动pu sh方式。Prometheus Server也是通过push方式在garewary拉取数据。

Service Discovery 是Prometheus支持的服务发现。支持DNS、kubernetes、Consul…,深度对这些服务发现做了一些开发,深入到服务内部支持这些发现的机制。

Alertmanager当Prometheus定义的规则被触发之后,就会把报警的信息,push给Alertmanager,Alertmanager支持自定义的报警规则。对报警做过滤聚合,对报警频率做控制。最好实现报警通知,可以发送到邮箱、短信、微信、钉钉 、企业微信…也可以发送到http接口实现对报警的自定义处理。

Web UI 是Prometheus可以多种的UI展现。最常见的是Grafana。UI的实现是通过PromQL对Prometheus数据做查询。然后把数据做一个丰富漂亮的展现。

数据类型

Prometheus的key 是metric名称还有kv 的组成,那value 是一个lang类型的整型值。这个值一般放什么数据呢?

  • Counter

应用于记录累计的值,这个值会一直增加,不会减少,比如请求次数,异常增加的次数。

  • Gauge

    常规数值,可以变大变小,比如内存的变化磁盘变化,CPU负载变化。

  • Hostagram && Sunmary

    用于统计分析样本的分布情况。大多数情况下会使用某些量化指标的平均值比如CPU平均使用率,页面平均响应时间,但是这种方式有一个明显的问题。比如我有一个nginx服务大多数的请求都维持在了100毫秒以内,而有个别请求响应时间是5s,10s,就导致平均时间不能体现的问题。这种现象被称为“常维问题”。

    为了区分开是平均时间还是常维情况的时间,最简单的处理方式就是按照请求的延迟范围进行分组比如0~100毫秒请求有多少个。0~500毫秒请求有多少个,500毫秒~1s请求有多少个,1~5s请求有多少个,通过这种方式可以快速分析系统慢的原因。Hostagram && Sunmary就是为了解决这样的问题出现的。通过这两个指标快速了解样本的分布情况。区别Hostagram类似于子房图,就是刚才说的先定义好区间,统计每个区间的个数。Sunmary样本排序后分配情况跟99线类似。

数据来源

服务器基础指标

采集的数据说服务器的基础指标,Prometheus提供了NodeExporter 工具,一般实现方式是通过daemonSet 方式把它运行在每台主机上,抓取节点信息 比如负载CPU内存磁盘网络。内置http服务给Prometheus pull数据。

NodeExporter是Prometheus子项目

docker 容器指标

我们的服务都是通过docker 运行的所有我们要采集的是每个docker 容器的本身的数据。这个kubernetes帮我们准备好了,每个节点上都有一个kubelet服务,这个服务启动的时候内置一个cAdvisor,cAdvisor 负责采集容器的详细信息,容器CPU容器文件系统容器内存,容器网络。同样也会启动一个http服务给Prometheus pull数据。

kubernetes 组件指标

最后上集群之前各个组件的监控,比如etcd apiserver controller-manager scheduler kubelet,每个组件都自带了metric,让Prometheus定期抓取数据就可以。

kubernetes如何传递给Prometheus的大方向就是这样。异常报警和数据展现我们也知道是哪些组件,如何跟Prometheus对接,接下就是如何把这一整套服务给他部署起来。并且按照我们预期的方式提供服务,完成监控报警。具体怎么来做请听下回分解。

你可能感兴趣的:(容器监控Prometheus,监控类,kubernetes,docker)