k8s 实战之部署 Prometheus+Grafana 可视化监控及模版配置

一、Prometheus架构

Prometheus 是什么

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

Prometheus+Grafana环境部署可以参考我这篇文章 【云原生】Prometheus+Grafana on K8s 环境部署

Prometheus 组成及架构
file

数据采集:
file

  • 通过cadvisor采集容器、Pod相关的性能指标数据,并通过暴露的/metrics接口用prometheus抓取。

  • 通过node-exporter采集主机的性能指标数据,并通过暴露的/metrics接口用prometheus抓取。

  • 通过kube-state-metrics采集k8s资源对象的状态指标数据,并通过暴露的/metrics接口用prometheus抓取。

  • 应用侧自己采集容器中进程主动暴露的指标数据(暴露指标的功能由应用自己实现,并添加平台侧约定的annotation,平台侧负责根据annotation实现通过Prometheus的抓取)。

  • 通过etcd、kubelet、kube-apiserver、kube-controller-manager、kube-scheduler自身暴露的/metrics获取节点上与k8s集群相关的一些特征指标数据。

2 K8S监控指标及实现思路

Kubernetes本身监控
Node资源利用率
Node数量
Pods数量(Node)
资源对象状态
Pod监控

Pod数量(项目)
容器资源利用率
应用程序
Prometheus监控K8S实现的架构

file

如果想监控node的资源,就可以放一个 node_exporter ,这是监控node资源的,node_exporter是Linux上的采集器,你放上去你就能采集到当前节点的CPU、内存、网络IO,等待都可以采集的。

如果想监控容器,k8s内部提供cAdvisor采集器,pod呀,容器都可以采集到这些指标,都是内置的,不需要单独部署,只知道怎么去访问这个Cadvisor就可以了。

如果想监控k8s资源对象,会部署一个kube-state-metrics这个服务,它会定时的API中获取到这些指标,帮你存取到Prometheus里,要是告警的话,通过Alertmanager发送给一些接收方,通过Grafana可视化展示。

file

服务发现:
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

模版

Promethus监控:采集组件exports,采集已有的第三方服务监控指标并暴露metrics
Grafana仪表盘: Dashboards | Grafana Labs

监控配置

file

监控Pod

我们使用prometheus对K8s的pod资源进行监控时,可以借助cAdvisor进行。cAdvisor是内置在kubelet中,负责对当前的节点实时进行性能的监控与采集,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。cAdvisor的指标数据接口是 /metrics/cadvisor 。具体可查看官方文档:https://kubernetes.io/zh/docs/concepts/cluster-administration/system-metrics/

file

Pod监控相关指标

对于Pod内存相关的指标,主要有两个数据源:

  • 1、基于kube-state-metrics,采集到的是内存Limits和Requests的设置情况。关键的指标如下:
    file

  • 2、基于kubelet上的CAdvisor,采集到的是内存使用情况。关键的指标如下:

    CAdvisor是Google开源用于收集容器资源和性能指标的一个工具,对于Kubernetes,其集成在kubelet里面,可以收集到每个节点上的Pod指标。

file

基于以上的指标,就可以计算Pod的内存使用率,当然,需要Pod有设置Limits才有意义

sum(container_memory_working_set_bytes{pod!="POD", container!=""}) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{}) by (pod)

Kubernetes Pod内存监控

Node节点资源监控

Grafana node节点监控模版配置

在 Grafana 模版平台找到 9276 模版(可以在路径搜索 https://grafana.com/grafana/dashboards/9276/ ),添加资源状态的监控模板,然后经过调整之后的监控界面如图所示,可以获取到各个node上的基本情况

1、使用模版:
https://grafana.com/grafana/dashboards/9276-1-cpu/ (9276)

file

2、导入模版到Grafana
file
file

3、极简模版展示

监控24小时:
file

监控一周:
file

监控Mysql

如果需要利用Prometheus来监控MySQL同样也很方便,只需选择相应的Exporter即可。具体地,选择MySQLD Exporter来采集MySQL的监控数据。

类似地对于可视化配置而言,在Grafana官网选择适用于监控MySQL的模板(过滤条件:name/description=mysql and data source=Prometheus),复制其ID——12826

file

导入后,效果如下所示:
file


相关文章
Kubernetes运维之使用Prometheus全方位监控K8S
【云原生】Prometheus+Grafana 监控 k8s 资源实战操作
k8s实战之部署Prometheus+Grafana可视化监控告警平台
Prometheus+Grafana普罗米修斯,搭建和使用
prometheus监控k8s集群组件资源
Kubernetes Pod内存监控
Grafana上监控kubernetes中Pod已用内存不准问题分析
Helm | 更新Kubernetes集群的Prometheus配置

为者常成,行者常至