Kubernetes学习之Prometheus监控

一、自定义指标
  除了资源指标之外,用户和管理员需要了解的指标数据还有很多,如Kubernetes指标、更全面的容器指标、更全面的节点资源指标及应用程序指标等等。自定义指标API运行请求任意指标,其指标API的实现要特定于相应的后端监视系统。Prometheus是第一个开发了相应适配器的监控系统,毕竟它是监控Kubernetes的第一选择。这个适用于Prometheus的Kubernetes Custom Metrics Adapter由托管在Github上的k8s-prometheus-adapter项目提供。
  在这里插入图片描述
  自定义指标API的目的是提供最终用户和Kubernetes系统组件可以依赖的稳定的、版本化的API,但其可用的实现及可用指标则有赖于第三方或用户的自行实现,目前基于Prometheus收集和存储指标数据,并借助于k8s-prometheus-adapter将这些指标数据查询接口转换为标准的Kubernetes自定义指标是较为流行的解决方案之一。

二、认识Prometheus
  Prometheus是一个开源的服务监控系统和时序数据库,由社交音乐平台SoundCloud在2012年开发,也是CNCF除Kubernetes之外收录的第二款产品,目前已经成为Kubernetes的生态圈中的核心监控系统,而且越来越多的项目(如etcd等等)都提供了对Prometheus的原生支持,这足以证明社区对它的认可程度。
  Prometheus提供了通用的数据模型和便捷的数据采集、存储和查询接口。其核心组件Prometheus服务器定期从静态配置的监控目标(targets)或者基于服务发现(service discovery)自动配置的目标中拉取数据,新拉取到的数据大于配置内存缓存区时,数据将持久化到存储设备中,包括远程云端存储系统。Prometheus的生态组件如下图:
在这里插入图片描述
  上图中的所示各组件,每个被监控的目标(主机、应用程序等等)都可通过专用的exporter程序提供输出监控数据的接口,并等待Prometheus服务器周期性的数据抓取操作。若存在告警规则,则抓取到数据后会检查并根据规则进行计算,满足告警条件即会生成报警,并发送到Altermanager完成告警的汇总和分发等操作。被监控的目标有主动推送数据的需求时,可部署Pushgateway组件接收并临时存储数据,并等待Prometheus服务器完成数据采集。
  任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警及相关的展示等等,监控目标既可以通过配置信息以静态形式指定,也可以让Prometheus通过服务发现机制动态管理(增删等等),对于变动频繁的系统环境(如容器云环境)来说,这种动态管理机制尤为有用。在Kubernetes集群及相关的环境中,除了此前配置的从Pod对象中的容器应用获得资源指标数据以外,Promethues还支持通过多个监控目标采集Kubernetes监控架构中所谓的"非核心指标数据"。
  1)监控代理程序,如node_exporter,收集标准的主机指标数据,包括平均负载、CPU、Memory、Disk、Network及诸多其他维度的数据,独立的指标可能多达上千个。
  2)kubelet(cAdvisor):收集容器指标数据,它们也是所谓的Kubernetes"核心指标",每个容器的相关指标数据主要有CPU利用率(user和system)及限额、文件系统读/写限额、内存利用率及限额、网络报文发送/接收/丢弃速率等等。
  3)API Server:收集API Server的性能指标数据,包括控制工作队列的性能、请求速率与延迟时长、etcd缓存工作队列及缓存性能、普通进程状态(文件描述符、内存、CPU等等)、Golang状态(GC、内存和线程等等)。
  4)etcd:收集存储集群的相关指标数据,包括领导节点及领域变动速率、提交/应用/挂起/错误的提案次数、磁盘写入性能、网络与gRPC计数器等等。
  5)kube-state-metrics:此组件能够派生出Kubernetes相关的多个指标数据,主要是资源类型相关的计数器和元数据信息,包括指定类型的对象总数、资源限额、容器状态(ready/restart/running/terminared/waiting)以及Pod资源的标签系列等等。
  Prometheus能够直接把Kubernetes API Server作为服务发现系统使用进而动态发现和监控集群中的所有可被监控的对象。这里需要特别说明的是,Pod资源需要添加如下注解信息才能被Prometheus系统自动发现并抓取其内建的指标数据。
  1)prometheus.io/scrape:用于标识是否需要被采集指标数据,布尔型值,true或false。
  2)prometheus.io/path:抓取指标数据时使用的URL路径,一般为/metrics。
  3)prometheus.io/port:抓取指标数据时使用的套接字端口,如8080。
  另外,仅期望Prometheus为后端生成自定义指标时仅部署Prometheus服务器即可,它甚至也不需要数据持久功能。但若要配置完整功能的监控系统,管理员还需要在每个主机上部署node_exporter、按需部署其他特有的类型的exporter以及Altermanager。

三、部署Prometheus监控系统

1)克隆k8s-prom-hpa源码代码到本地

]# git clone https://github.com/stefanprodan/k8s-prom-hpa 
Cloning into 'k8s-prom-hpa'...
remote: Enumerating objects: 223, done.
remote: Total 223 (delta 0), reused 0 (delta 0), pack-reused 223
Receiving objects: 100% (223/223), 102.23 KiB | 0 bytes/s, done.
Resolving deltas: 100% (117/117), done.

2)创建monitoring名称空间

]# kubectl create namespace monitoring 
namespace/monitoring created

3)创建prometheus相关的Pod

]# cd k8s-prom-hpa/
]# kubectl create -f ./prometheus
configmap/prometheus-config created
deployment.apps/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
serviceaccount/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created

4)查看prometheus相关Pod资源信息与Service信息

]# kubectl get pod -n monitoring -o wide 
NAME                         READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
prometheus-666765667-w7fch   1/1     Running   0          36s   10.244.1.173   node1   <none>           <none>

]# kubectl  get svc -n monitoring
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus   NodePort   10.99.142.189   <none>        9090:31190/TCP   91s

5)访问prometheus
在这里插入图片描述

6)拉取kube-state-metric项目代码到本地

]# git clone https://github.com/kubernetes/kube-state-metrics.git -b v1.8.0
Cloning into 'kube-state-metrics'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 20619 (delta 0), reused 0 (delta 0), pack-reused 20618
Receiving objects: 100% (20619/20619), 17.18 MiB | 1.03 MiB/s, done.
Resolving deltas: 100% (13085/13085), done.
Note: checking out '6b7bb9390fd0f5202f10621282238281209c7547'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_nam

7)部署kube-state-metric资源

]# cd kube-state-metrics/kubernetes/
]# kubectl apply -f kube-state-metrics-service-account.yaml,kube-state-metrics-clusterrole.yaml,kube-state-metrics-cluster-role-binding.yaml,kube-state-metrics-deployment.yaml,kube-state-metrics-service.yaml
serviceaccount/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
deployment.apps/kube-state-metrics created
service/kube-state-metrics created

8)查看kube-state-metric资源状态

]# kubectl  get pod -n kube-system -o wide
kube-state-metrics-74bf65d9bb-vddvg   1/1     Running   0          15m    10.244.2.116   node2    <none>           <none>

9)检查kube-state-metric资源状态

]# curl --insecure https://10.244.2.116/healthz
ok

10)查看prometheus下的targets的状态
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页