https://blog.youkuaiyun.com/u011230692(集群监控系统相关介绍)
信息搜集:kube-state-metrics/Prometheus/cAdvisor
其中cAdvisor是k8s原生的集群监控软件
信息展示:Grafana
.
.
.
docker stats命令查看内存使用情况
该命令从下面的路径中的文件进行内存信息读取
/sys/fs/cgroup/memory/docker/
其中./memory.stat中存放了一下信息
这种信息获取方式时docker原生的,其缺点是:只能统计当前宿主机的所有容器,数据是实时的,没有存储,没有报警,没有可视化。
默认时stats命令会每隔1秒钟刷新一次,如果只看当前状态:docker stats --no-stream
cAdvisor
为了解决docker stats的存储和展示的相关问题,谷歌提出了开源项目cadvisor,cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况
利用Linux的cgroups获取容器的资源使用信息,
在K8S中集成在Kubelet里作为默认启动项,官方标配。
kube-state-mestrics
功能:(将prometheus中可以用PromQL查询到的指标数据转换成k8s对应的数,也就是将prometheus的metrics数据格式转换成k8s API接口能识别的格式)
kube-state-mestrics可以实现的新功能:
- 调度了多少个replicas,当前可用的有几个
- 各个pod的状态(running/stopped/terminated)
- pod重启的次数
- 有多少个job在运行
kube-state-mestrics将k8s的运行状况在内存中做了一个快照,并获取新的指标,但没有能力导出这些指标。
kube-state-mestrics可以作为metric-server的一种数据来源
pormetheus对集群的监控就可以通过kube-state-metrics来实现
prometheus
prometheus采集到的metrics并不能直接给k8s用,因为**两者数据格式不兼容**,因此需要kube-state-mestrics来将prometheus采集到的metrics数据格式转化成k8s API接口能识别的格式,转换以后,因为是自定义API,所以还需要用Kubernetes aggregator在主API服务器中注册,以便直接通过/apis/来访问。
Core metrics(核心指标): 从 Kubelet、cAdvisor 等获取度量数据,再由metrics-server提供给 Dashboard、HPA 控制器等使用。 核心指标只包含node和pod的cpu、内存等。
Custom Metrics(自定义指标): 由Prometheus Adapter提供API custom.metrics.k8s.io,由此可支持任意Prometheus采集到的指标。
目前k8s中的自定义指标(Custom Metrics)一般由prometheus提供,再通过k8s-prometheus-adpater聚合到APIserver,来实现和核心指标(Core metrics)同样的效果
Prometheus的一些组件:
-
Prometheus Server: 从Exporter拉去和存储监控数据,并提供一套灵活的查询语言(PromQL)
-
Exporters/jobs 负责收集目标对象的性能数据,并通过HTTP接口供Prometheus Server获取。
Prometheus工作流程:
- Prometheus server获取metrics,有三种方式或者说数据来源
(①.从配置好的jobs/exporters中拉取metrics
(②. 接收来自Pushgateway发过来的metrics,、
其中pushgateway使用的一个例子:对于瞬时任务,可能Prometheus server还没来得pull,任务就已经结束,所以对于瞬时任务,客户端推送的数据先push到pushgateway中缓存一下,然后再由Prometheus server使用pull方式获取这些数据,可以这样理解,使用push方式的数据推送,会被存在pushgateway中
(③. 从其他的Prometheus server中拉取metrics) - Prometheus server 在本地存储收集到的metrics,并运行已定义好的alert.rules,记录新的时间序列或者向Alertmanager推送警报
- Alertmanager根据配置文件,对接收到的的警报进行处理。
- 在图形界面中可视化采集的数据
关于Prometheus中的模块介绍
Retrieval: 负责定时去暴露的目标页面上抓取采样指标数据
Storage:时负责将采样数据写到磁盘中
PromQL: 是Prometheus提供的查询语言模块。
Prometheus Server:负责采集监控数据,并且对外提供PromQL实现监控数据的查询以及聚合分析
Exporters:用于向Prometheus Server暴露数据采集的endpoint,Prometheus轮训这些Exporter采集并且保存数据;