监控告警平台

Zabbix、Prometheus

CI/CD平台

Jenkins+gitlab+sq+argoCD+tekton

自动化运维平台

监控告警是个非常重要的平台

Prometheus

Kubernetes安装Prometheus,云原生监控项添加方式_monitor

prometheus有很多组件组成

上图中间部分Prometheus server 就是我们所安装运行的Prometheus服务,这个Prometheus本身需要后端的存储:TSDB

Prometheus本身是一种数据库,TSDB就是一种数据库类型,这种数据库叫时序数据库,它本身就是一个横轴和数轴,xy轴。采集的数据存储在TSDB数据库里面 TSDB是Prometheus底层使用的数据的机制,叫TSDB,数据最终还是存储在对应Prometheus server对应的 硬盘上面,只是读取的方式是数据库读取,和文件系统读取不大一样,不是一个可读的文件方式 prometheus除了TSDB以外还给提供了 HTTP Server 有个UI界面 Prometheus只能负责采集数据和存储数据,本身没有报警和展示的功能,提供的HTTP Server不是展示ui界面,只是提供了查询界面,本身没有告警功能,没有生成绚丽的图形化的功能,针对这俩功能,有另外两个组件,上图右上,Alert manager:能够发报警的,短信微信钉钉,发送报警的组件 上图右下 Grafana 提供绚丽的ui,展示的组件,Grafana展示的数据是通过 Prometheus内部的查询语言叫Prom QL (Prom就是Prometheus,QL就是查询语言的意思,比如之前的SQL,S就是结构化的意思,QL是查询语言,SQL结构化查询语言) Prom QL 就是prometheus 创造的,之后还有很多应用采用了这种语言 整个Prometheus最主要的三个组件就是:Prometheus server 和Alert manager 还有 Grafana 还有一些服务发现组件,上图中上 Service discovery 服务发现组件,这个服务发现组件事实上我们呢可以基于文件系统级别的,可能就弄个文件, 什么叫服务发现:比如我们要监控主机,k8s集群有master节点和node节点,在我们这怎么知道集群有多少node节点,有多少master节点呢?我们是把节点加到集群上来,不管是master节点还是node节点,都是通过etcd存储,通过apiserver通信,所有的添加的组件都是添加剂etcd数据库里面的,etcd就类似一个服务发现,它能够通过注册到etcd服务里面来,知道你有多少个node,多少个pod,多少个kubelet kubeproxy 组件 prometheus 未来加监控,我们要动态知道有那些节点要加入到 prometheus server 里面来,我们可以通过服务发现的组件,服务发现的组件可以是我们的k8s集群,我们待会就基于k8s集群来做服务发现,也就是基于etcd的,第二种还有基于file_sd 一个文件系统的,整个文件的,就是我从文件里面定义好我把那些东西加进来,他就可以自动的去监控文件的变化。通过监控一个静态的文件的变化来实现服务的发现,除了这个以外还有很多。 我们这次基于k8s环境来做服务发现 上图中间和右面是常用的组件 上图左面 Pushgateway 就是我们prometheus server默认情况下怎么发现服务的呢?他是主动的方式,prometheus自己主动去发现那些监控的各种各样的角色,这叫主动模式,还有一些情况比较特殊,比如我现在有一个节点需要监控但是节点本身和prometheus主机本身网络不通,不在一个网络下,那prometheus无法主动去发现它,获取不到数据,然后就有这个Phshgatway的组件,这个组件是去发现node节点,或者node节点把想要监控的数据传给pushgateway 然后由pushgateway主动的把数据传给prometheus ,push方式 上传 ,就是pushgateway 主动的把采集的主机传给prometheusserver 这是被动的方式

prometheus 最主要的还是主动的方式,

上图左下 Jobs就是添加的各种各样的监控项,比如监控pod是否运行。jobs是通过exporters来去采集数据 如果想去自己写exporters 就需要自己懂开发的内容,但是现在不需要去写,都有对应的写好的

这就是prometheus的架构模型

➢ Prometheus Server:Prometheus 生态最重要的组件, 主要用于抓取和存储时间序 列数据, 同时
提供数据的查询和告警策略的配置管理;

➢ Alertmanager:Prometheus 生态用于告警的组件,Prometheus Server 会将告警发 送给

Alertmanager ,Alertmanager 根据路由配置,将告警信息发送给指定的人或 组。Alertmanager 支持邮件、Webhook、微信、钉钉、短信等媒介进行告警通知;

➢ Grafana:用于展示数据, 便于数据的查询和观测;

➢ Push Gateway:Prometheus 本身是通过 Pull 的方式拉取数据, 但是有些监控数据 可能是短期的, 如果没有采集数据可能会出现丢失。Push Gateway 可以用来解决 此类问题,它可以用来接收数据,也就是客户端可以通过 Push 的方式将数据推送 到 Push Gateway,之后 Prometheus 可以通过 Pull拉取该数据;

➢ Exporter:主要用来采集监控数据, 比如主机的监控数据可以通过 node_exporter 采集, MySQL的监控数据可以通过 mysql_exporter 采集,之后 Exporter 暴露一个 接口,比如/metrics ,Prometheus 可以通过该接口采集到数据;

➢ PromQL:PromQL 其实不算 Prometheus 的组件, 它是用来查询数据的一种语法, 比如查询数据库的数据,可以通过 SQL 语句,查询 Loki 的数据,可以通过 LogQL, 查询 Prometheus 数据的叫做

PromQL;

➢ Service Discovery:用来发现监控目标的自动发现,常用的有基于 Kubernetes、 Consul 、Eureka 、文件的自动发现等。

Prometheus安装

https://github.com/prometheus-operator

我们用的k8s集群是1.21的,我们使用prometheus最低版本是0.8

operator是一种包

如果是虚拟机安装那么更简单了,直接下载二进制包就行,都不需要安装

二进制官网下载地址

https://prometheus.io/download/

k8s安装方法

https://github.com/prometheus-operator/kube-prometheus

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_02

要根据k8s版本来下载

我们的是1.21.5 的 这没有了 我们下载0.8的 0.8和0.9都支持1.21


Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_03

目前最新的是0.13

我们下载0.8的

git clone -b release-0.8 https://github.com/prometheus-operator/kube-prometheus.git
#-b 指定分支
cd kube-prometheus/manifests
root@k8s-master1:/apps/kube-prometheus# ll
total 224
drwxr-xr-x 12 root root  4096 Sep 25 09:45 ./
drwxr-xr-x 11 root root  4096 Sep 24 14:17 ../
-rwxr-xr-x  1 root root   679 Sep 24 14:17 build.sh*
-rw-r--r--  1 root root  3039 Sep 24 14:17 code-of-conduct.md
-rw-r--r--  1 root root  1422 Sep 24 14:17 DCO
drwxr-xr-x  2 root root  4096 Sep 24 14:17 docs/
-rw-r--r--  1 root root  2051 Sep 24 14:17 example.jsonnet
drwxr-xr-x  7 root root  4096 Sep 24 14:17 examples/
drwxr-xr-x  3 root root  4096 Sep 24 14:17 experimental/
drwxr-xr-x  8 root root  4096 Sep 24 14:17 .git/
drwxr-xr-x  4 root root  4096 Sep 24 14:17 .github/
-rw-r--r--  1 root root    57 Sep 24 14:17 .gitignore
-rw-r--r--  1 root root   709 Sep 24 14:17 .gitpod.yml
-rw-r--r--  1 root root   237 Sep 24 14:17 go.mod
-rw-r--r--  1 root root 59996 Sep 24 14:17 go.sum
drwxr-xr-x  3 root root  4096 Sep 24 14:17 hack/
drwxr-xr-x  3 root root  4096 Sep 24 14:17 jsonnet/
-rw-r--r--  1 root root   206 Sep 24 14:17 jsonnetfile.json
-rw-r--r--  1 root root  4857 Sep 24 14:17 jsonnetfile.lock.json
-rw-r--r--  1 root root  4495 Sep 24 14:17 kustomization.yaml
-rw-r--r--  1 root root 11325 Sep 24 14:17 LICENSE
-rw-r--r--  1 root root  2153 Sep 24 14:17 Makefile
drwxr-xr-x  3 root root  4096 Sep 24 14:17 manifests/
-rw-r--r--  1 root root   126 Sep 24 14:17 NOTICE
-rw-r--r--  1 root root 38246 Sep 24 14:17 README.md
drwxr-xr-x  2 root root  4096 Sep 24 14:17 scripts/
-rw-r--r--  1 root root   928 Sep 24 14:17 sync-to-internal-registry.jsonnet
drwxr-xr-x  3 root root  4096 Sep 24 14:17 tests/
-rwxr-xr-x  1 root root   808 Sep 24 14:17 test.sh*

进入manifests 里面都是yaml文件

root@k8s-master1:/apps/kube-prometheus# cd manifests/
root@k8s-master1:/apps/kube-prometheus/manifests# ll
total 1840
drwxr-xr-x  3 root root    4096 Sep 24 14:17 ./
drwxr-xr-x 12 root root    4096 Sep 25 09:45 ../
-rw-r--r--  1 root root     875 Sep 24 14:17 alertmanager-alertmanager.yaml
-rw-r--r--  1 root root     515 Sep 24 14:17 alertmanager-podDisruptionBudget.yaml
-rw-r--r--  1 root root    6831 Sep 24 14:17 alertmanager-prometheusRule.yaml
-rw-r--r--  1 root root    1169 Sep 24 14:17 alertmanager-secret.yaml
-rw-r--r--  1 root root     301 Sep 24 14:17 alertmanager-serviceAccount.yaml
-rw-r--r--  1 root root     540 Sep 24 14:17 alertmanager-serviceMonitor.yaml
-rw-r--r--  1 root root     577 Sep 24 14:17 alertmanager-service.yaml
-rw-r--r--  1 root root     278 Sep 24 14:17 blackbox-exporter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     287 Sep 24 14:17 blackbox-exporter-clusterRole.yaml
-rw-r--r--  1 root root    1392 Sep 24 14:17 blackbox-exporter-configuration.yaml
-rw-r--r--  1 root root    3080 Sep 24 14:17 blackbox-exporter-deployment.yaml
-rw-r--r--  1 root root      96 Sep 24 14:17 blackbox-exporter-serviceAccount.yaml
-rw-r--r--  1 root root     680 Sep 24 14:17 blackbox-exporter-serviceMonitor.yaml
-rw-r--r--  1 root root     540 Sep 24 14:17 blackbox-exporter-service.yaml
-rw-r--r--  1 root root     721 Sep 24 14:17 grafana-dashboardDatasources.yaml
-rw-r--r--  1 root root 1480474 Sep 24 14:17 grafana-dashboardDefinitions.yaml
-rw-r--r--  1 root root     625 Sep 24 14:17 grafana-dashboardSources.yaml
-rw-r--r--  1 root root    8063 Sep 24 14:17 grafana-deployment.yaml
-rw-r--r--  1 root root      86 Sep 24 14:17 grafana-serviceAccount.yaml
-rw-r--r--  1 root root     398 Sep 24 14:17 grafana-serviceMonitor.yaml
-rw-r--r--  1 root root     452 Sep 24 14:17 grafana-service.yaml
-rw-r--r--  1 root root    3319 Sep 24 14:17 kube-prometheus-prometheusRule.yaml
-rw-r--r--  1 root root   63977 Sep 24 14:17 kubernetes-prometheusRule.yaml
-rw-r--r--  1 root root    6898 Sep 24 14:17 kubernetes-serviceMonitorApiserver.yaml
-rw-r--r--  1 root root     440 Sep 24 14:17 kubernetes-serviceMonitorCoreDNS.yaml
-rw-r--r--  1 root root    6417 Sep 24 14:17 kubernetes-serviceMonitorKubeControllerManager.yaml
-rw-r--r--  1 root root    7539 Sep 24 14:17 kubernetes-serviceMonitorKubelet.yaml
-rw-r--r--  1 root root     530 Sep 24 14:17 kubernetes-serviceMonitorKubeScheduler.yaml
-rw-r--r--  1 root root     464 Sep 24 14:17 kube-state-metrics-clusterRoleBinding.yaml
-rw-r--r--  1 root root    1712 Sep 24 14:17 kube-state-metrics-clusterRole.yaml
-rw-r--r--  1 root root    2957 Sep 24 14:17 kube-state-metrics-deployment.yaml
-rw-r--r--  1 root root    1864 Sep 24 14:17 kube-state-metrics-prometheusRule.yaml
-rw-r--r--  1 root root     280 Sep 24 14:17 kube-state-metrics-serviceAccount.yaml
-rw-r--r--  1 root root    1011 Sep 24 14:17 kube-state-metrics-serviceMonitor.yaml
-rw-r--r--  1 root root     580 Sep 24 14:17 kube-state-metrics-service.yaml
-rw-r--r--  1 root root     444 Sep 24 14:17 node-exporter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     461 Sep 24 14:17 node-exporter-clusterRole.yaml
-rw-r--r--  1 root root    3046 Sep 24 14:17 node-exporter-daemonset.yaml
-rw-r--r--  1 root root   12975 Sep 24 14:17 node-exporter-prometheusRule.yaml
-rw-r--r--  1 root root     270 Sep 24 14:17 node-exporter-serviceAccount.yaml
-rw-r--r--  1 root root     850 Sep 24 14:17 node-exporter-serviceMonitor.yaml
-rw-r--r--  1 root root     492 Sep 24 14:17 node-exporter-service.yaml
-rw-r--r--  1 root root     482 Sep 24 14:17 prometheus-adapter-apiService.yaml
-rw-r--r--  1 root root     576 Sep 24 14:17 prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
-rw-r--r--  1 root root     494 Sep 24 14:17 prometheus-adapter-clusterRoleBindingDelegator.yaml
-rw-r--r--  1 root root     471 Sep 24 14:17 prometheus-adapter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     378 Sep 24 14:17 prometheus-adapter-clusterRoleServerResources.yaml
-rw-r--r--  1 root root     409 Sep 24 14:17 prometheus-adapter-clusterRole.yaml
-rw-r--r--  1 root root    1836 Sep 24 14:17 prometheus-adapter-configMap.yaml
-rw-r--r--  1 root root    1804 Sep 24 14:17 prometheus-adapter-deployment.yaml
-rw-r--r--  1 root root     506 Sep 24 14:17 prometheus-adapter-podDisruptionBudget.yaml
-rw-r--r--  1 root root     515 Sep 24 14:17 prometheus-adapter-roleBindingAuthReader.yaml
-rw-r--r--  1 root root     287 Sep 24 14:17 prometheus-adapter-serviceAccount.yaml
-rw-r--r--  1 root root     677 Sep 24 14:17 prometheus-adapter-serviceMonitor.yaml
-rw-r--r--  1 root root     501 Sep 24 14:17 prometheus-adapter-service.yaml
-rw-r--r--  1 root root     447 Sep 24 14:17 prometheus-clusterRoleBinding.yaml
-rw-r--r--  1 root root     394 Sep 24 14:17 prometheus-clusterRole.yaml
-rw-r--r--  1 root root    4930 Sep 24 14:17 prometheus-operator-prometheusRule.yaml
-rw-r--r--  1 root root     715 Sep 24 14:17 prometheus-operator-serviceMonitor.yaml
-rw-r--r--  1 root root     499 Sep 24 14:17 prometheus-podDisruptionBudget.yaml
-rw-r--r--  1 root root   12732 Sep 24 14:17 prometheus-prometheusRule.yaml
-rw-r--r--  1 root root    1195 Sep 24 14:17 prometheus-prometheus.yaml
-rw-r--r--  1 root root     471 Sep 24 14:17 prometheus-roleBindingConfig.yaml
-rw-r--r--  1 root root    1547 Sep 24 14:17 prometheus-roleBindingSpecificNamespaces.yaml
-rw-r--r--  1 root root     366 Sep 24 14:17 prometheus-roleConfig.yaml
-rw-r--r--  1 root root    2047 Sep 24 14:17 prometheus-roleSpecificNamespaces.yaml
-rw-r--r--  1 root root     271 Sep 24 14:17 prometheus-serviceAccount.yaml
-rw-r--r--  1 root root     531 Sep 24 14:17 prometheus-serviceMonitor.yaml
-rw-r--r--  1 root root     558 Sep 24 14:17 prometheus-service.yaml
drwxr-xr-x  2 root root    4096 Sep 24 14:17 setup/

进入setup目录 这些是安装的yaml文件 在k8s执行直接运行的

root@k8s-master1:/apps/kube-prometheus/manifests# cd setup/
root@k8s-master1:/apps/kube-prometheus/manifests/setup# ll
total 1036
drwxr-xr-x 2 root root   4096 Sep 24 14:17 ./
drwxr-xr-x 3 root root   4096 Sep 24 14:17 ../
-rw-r--r-- 1 root root     60 Sep 24 14:17 0namespace-namespace.yaml #看下这个ns
-rw-r--r-- 1 root root 122054 Sep 24 14:17 prometheus-operator-0alertmanagerConfigCustomResourceDefinition.yaml
-rw-r--r-- 1 root root 247084 Sep 24 14:17 prometheus-operator-0alertmanagerCustomResourceDefinition.yaml
-rw-r--r-- 1 root root  20907 Sep 24 14:17 prometheus-operator-0podmonitorCustomResourceDefinition.yaml
-rw-r--r-- 1 root root  20077 Sep 24 14:17 prometheus-operator-0probeCustomResourceDefinition.yaml
-rw-r--r-- 1 root root 327667 Sep 24 14:17 prometheus-operator-0prometheusCustomResourceDefinition.yaml
-rw-r--r-- 1 root root   3618 Sep 24 14:17 prometheus-operator-0prometheusruleCustomResourceDefinition.yaml
-rw-r--r-- 1 root root  21941 Sep 24 14:17 prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
-rw-r--r-- 1 root root 253551 Sep 24 14:17 prometheus-operator-0thanosrulerCustomResourceDefinition.yaml
-rw-r--r-- 1 root root    471 Sep 24 14:17 prometheus-operator-clusterRoleBinding.yaml
-rw-r--r-- 1 root root   1377 Sep 24 14:17 prometheus-operator-clusterRole.yaml
-rw-r--r-- 1 root root   2261 Sep 24 14:17 prometheus-operator-deployment.yaml
-rw-r--r-- 1 root root    285 Sep 24 14:17 prometheus-operator-serviceAccount.yaml
-rw-r--r-- 1 root root    515 Sep 24 14:17 prometheus-operator-service.yaml
root@k8s-master1:/apps/kube-prometheus/manifests/setup# cat 0namespace-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
#这就是创建一个名为montroring 的ns  所有的资源对象都是运行这个ns里面的

把大师兄提供的包传上来使用大师兄给的执行

root@k8s-master1:/apps/test/kube-prometheus/manifests/setup# kubectl apply -f .
namespace/monitoring created
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created
clusterrole.rbac.authorization.k8s.io/prometheus-operator created
clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created
deployment.apps/prometheus-operator created
service/prometheus-operator created
serviceaccount/prometheus-operator created
root@k8s-master1:/apps/test/kube-prometheus/manifests/setup# kubectl get pods -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
prometheus-operator-7775c66ccf-q7fpk   2/2     Running   0          98s
#这个pod是prometheus的 Operator

operator安装完成了,然后去安装prometheus的技术栈

root@k8s-master1:/apps/test/kube-prometheus/manifests/setup# cd ..
root@k8s-master1:/apps/test/kube-prometheus/manifests# ll
total 1840
drwxr-xr-x  3 root root    4096 May 24 15:35 ./
drwxr-xr-x 12 root root    4096 May 24 15:19 ../
-rw-r--r--  1 root root     875 May 24 15:19 alertmanager-alertmanager.yaml  #alertmanager 发报警的组件
-rw-r--r--  1 root root     515 May 24 15:19 alertmanager-podDisruptionBudget.yaml #
-rw-r--r--  1 root root    6831 May 24 15:19 alertmanager-prometheusRule.yaml #
-rw-r--r--  1 root root    1169 May 24 15:19 alertmanager-secret.yaml # 配置的密钥  发什么报警发给谁 就靠这个文件定义
-rw-r--r--  1 root root     301 May 24 15:19 alertmanager-serviceAccount.yaml # 提供权限的 加入k8s集群权限的
-rw-r--r--  1 root root     540 May 24 15:19 alertmanager-serviceMonitor.yaml # 提供权限的 加入k8s集群权限的
-rw-r--r--  1 root root     577 May 24 15:19 alertmanager-service.yaml # 
-rw-r--r--  1 root root     278 May 24 15:19 blackbox-exporter-clusterRoleBinding.yaml # blackbox 黑盒监控 ,最主要的功能就是做http监控 就是web监控 它可以监控 只要网络通就可以 可以监控在不同地方 访问一个web服务 他的时间 比较访问一个界面经过多少时间 响应时间
-rw-r--r--  1 root root     287 May 24 15:19 blackbox-exporter-clusterRole.yaml # 
-rw-r--r--  1 root root    1392 May 24 15:19 blackbox-exporter-configuration.yaml# 
-rw-r--r--  1 root root    3080 May 24 15:19 blackbox-exporter-deployment.yaml# 
-rw-r--r--  1 root root      96 May 24 15:19 blackbox-exporter-serviceAccount.yaml# 
-rw-r--r--  1 root root     680 May 24 15:19 blackbox-exporter-serviceMonitor.yaml#
-rw-r--r--  1 root root     540 May 24 15:19 blackbox-exporter-service.yaml #
-rw-r--r--  1 root root     721 May 24 15:19 grafana-dashboardDatasources.yaml
-rw-r--r--  1 root root 1480474 May 24 15:19 grafana-dashboardDefinitions.yaml
-rw-r--r--  1 root root     625 May 24 15:19 grafana-dashboardSources.yaml
-rw-r--r--  1 root root    8063 May 24 15:19 grafana-deployment.yaml
-rw-r--r--  1 root root      86 May 24 15:19 grafana-serviceAccount.yaml
-rw-r--r--  1 root root     398 May 24 15:19 grafana-serviceMonitor.yaml
-rw-r--r--  1 root root     452 May 24 15:19 grafana-service.yaml
-rw-r--r--  1 root root    3319 May 24 15:19 kube-prometheus-prometheusRule.yaml #Prometheus server 的安装包
-rw-r--r--  1 root root   63977 May 24 15:19 kubernetes-prometheusRule.yaml
-rw-r--r--  1 root root    6898 May 24 15:19 kubernetes-serviceMonitorApiserver.yaml
-rw-r--r--  1 root root     440 May 24 15:19 kubernetes-serviceMonitorCoreDNS.yaml
-rw-r--r--  1 root root    6417 May 24 15:19 kubernetes-serviceMonitorKubeControllerManager.yaml
-rw-r--r--  1 root root    7539 May 24 15:19 kubernetes-serviceMonitorKubelet.yaml
-rw-r--r--  1 root root     530 May 24 15:19 kubernetes-serviceMonitorKubeScheduler.yaml
-rw-r--r--  1 root root     464 May 24 15:19 kube-state-metrics-clusterRoleBinding.yaml #metrics 是 后面讲的所有的 不管暴漏的 任何export  事实上都是通过 metrics 接口  给暴漏出来 才能收集到数据的
-rw-r--r--  1 root root    1712 May 24 15:19 kube-state-metrics-clusterRole.yaml
-rw-r--r--  1 root root    2958 May 24 15:35 kube-state-metrics-deployment.yaml
-rw-r--r--  1 root root    1864 May 24 15:19 kube-state-metrics-prometheusRule.yaml
-rw-r--r--  1 root root     280 May 24 15:19 kube-state-metrics-serviceAccount.yaml
-rw-r--r--  1 root root    1011 May 24 15:19 kube-state-metrics-serviceMonitor.yaml
-rw-r--r--  1 root root     580 May 24 15:19 kube-state-metrics-service.yaml
-rw-r--r--  1 root root     444 May 24 15:19 node-exporter-clusterRoleBinding.yaml #这不是prometheus 架构里面的 这个是采集数据的  他就负责负载采集整个k8s 集群node 节点的数据的  集群node数量 多少master  内存 cpu 网卡 io读写的 
-rw-r--r--  1 root root     461 May 24 15:19 node-exporter-clusterRole.yaml
-rw-r--r--  1 root root    3046 May 24 15:19 node-exporter-daemonset.yaml
-rw-r--r--  1 root root   12975 May 24 15:19 node-exporter-prometheusRule.yaml
-rw-r--r--  1 root root     270 May 24 15:19 node-exporter-serviceAccount.yaml
-rw-r--r--  1 root root     850 May 24 15:19 node-exporter-serviceMonitor.yaml
-rw-r--r--  1 root root     492 May 24 15:19 node-exporter-service.yaml
-rw-r--r--  1 root root     482 May 24 15:19 prometheus-adapter-apiService.yaml
-rw-r--r--  1 root root     576 May 24 15:19 prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
-rw-r--r--  1 root root     494 May 24 15:19 prometheus-adapter-clusterRoleBindingDelegator.yaml
-rw-r--r--  1 root root     471 May 24 15:19 prometheus-adapter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     378 May 24 15:19 prometheus-adapter-clusterRoleServerResources.yaml
-rw-r--r--  1 root root     409 May 24 15:19 prometheus-adapter-clusterRole.yaml
-rw-r--r--  1 root root    1836 May 24 15:19 prometheus-adapter-configMap.yaml
-rw-r--r--  1 root root    1804 May 24 15:19 prometheus-adapter-deployment.yaml
-rw-r--r--  1 root root     506 May 24 15:19 prometheus-adapter-podDisruptionBudget.yaml
-rw-r--r--  1 root root     515 May 24 15:19 prometheus-adapter-roleBindingAuthReader.yaml
-rw-r--r--  1 root root     287 May 24 15:19 prometheus-adapter-serviceAccount.yaml
-rw-r--r--  1 root root     677 May 24 15:19 prometheus-adapter-serviceMonitor.yaml
-rw-r--r--  1 root root     501 May 24 15:19 prometheus-adapter-service.yaml
-rw-r--r--  1 root root     447 May 24 15:19 prometheus-clusterRoleBinding.yaml
-rw-r--r--  1 root root     394 May 24 15:19 prometheus-clusterRole.yaml
-rw-r--r--  1 root root    4930 May 24 15:19 prometheus-operator-prometheusRule.yaml
-rw-r--r--  1 root root     715 May 24 15:19 prometheus-operator-serviceMonitor.yaml
-rw-r--r--  1 root root     499 May 24 15:19 prometheus-podDisruptionBudget.yaml
-rw-r--r--  1 root root   12732 May 24 15:19 prometheus-prometheusRule.yaml
-rw-r--r--  1 root root    1195 May 24 15:19 prometheus-prometheus.yaml
-rw-r--r--  1 root root     471 May 24 15:19 prometheus-roleBindingConfig.yaml
-rw-r--r--  1 root root    1547 May 24 15:19 prometheus-roleBindingSpecificNamespaces.yaml
-rw-r--r--  1 root root     366 May 24 15:19 prometheus-roleConfig.yaml
-rw-r--r--  1 root root    2047 May 24 15:19 prometheus-roleSpecificNamespaces.yaml
-rw-r--r--  1 root root     271 May 24 15:19 prometheus-serviceAccount.yaml
-rw-r--r--  1 root root     531 May 24 15:19 prometheus-serviceMonitor.yaml
-rw-r--r--  1 root root     558 May 24 15:19 prometheus-service.yaml
drwxr-xr-x  2 root root    4096 May 24 15:20 setup/

这个是大师兄改过的,不能运行这个 还得运行我们之前下载的

root@k8s-master1:/apps/kube-prometheus/manifests# ll
total 1840
drwxr-xr-x  3 root root    4096 Sep 24 14:17 ./
drwxr-xr-x 12 root root    4096 Sep 25 09:45 ../
-rw-r--r--  1 root root     875 Sep 24 14:17 alertmanager-alertmanager.yaml
-rw-r--r--  1 root root     515 Sep 24 14:17 alertmanager-podDisruptionBudget.yaml
-rw-r--r--  1 root root    6831 Sep 24 14:17 alertmanager-prometheusRule.yaml
-rw-r--r--  1 root root    1169 Sep 24 14:17 alertmanager-secret.yaml
-rw-r--r--  1 root root     301 Sep 24 14:17 alertmanager-serviceAccount.yaml
-rw-r--r--  1 root root     540 Sep 24 14:17 alertmanager-serviceMonitor.yaml
-rw-r--r--  1 root root     577 Sep 24 14:17 alertmanager-service.yaml
-rw-r--r--  1 root root     278 Sep 24 14:17 blackbox-exporter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     287 Sep 24 14:17 blackbox-exporter-clusterRole.yaml
-rw-r--r--  1 root root    1392 Sep 24 14:17 blackbox-exporter-configuration.yaml
-rw-r--r--  1 root root    3080 Sep 24 14:17 blackbox-exporter-deployment.yaml
-rw-r--r--  1 root root      96 Sep 24 14:17 blackbox-exporter-serviceAccount.yaml
-rw-r--r--  1 root root     680 Sep 24 14:17 blackbox-exporter-serviceMonitor.yaml
-rw-r--r--  1 root root     540 Sep 24 14:17 blackbox-exporter-service.yaml
-rw-r--r--  1 root root     721 Sep 24 14:17 grafana-dashboardDatasources.yaml
-rw-r--r--  1 root root 1480474 Sep 24 14:17 grafana-dashboardDefinitions.yaml
-rw-r--r--  1 root root     625 Sep 24 14:17 grafana-dashboardSources.yaml
-rw-r--r--  1 root root    8063 Sep 24 14:17 grafana-deployment.yaml
-rw-r--r--  1 root root      86 Sep 24 14:17 grafana-serviceAccount.yaml
-rw-r--r--  1 root root     398 Sep 24 14:17 grafana-serviceMonitor.yaml
-rw-r--r--  1 root root     452 Sep 24 14:17 grafana-service.yaml
-rw-r--r--  1 root root    3319 Sep 24 14:17 kube-prometheus-prometheusRule.yaml
-rw-r--r--  1 root root   63977 Sep 24 14:17 kubernetes-prometheusRule.yaml
-rw-r--r--  1 root root    6898 Sep 24 14:17 kubernetes-serviceMonitorApiserver.yaml
-rw-r--r--  1 root root     440 Sep 24 14:17 kubernetes-serviceMonitorCoreDNS.yaml
-rw-r--r--  1 root root    6417 Sep 24 14:17 kubernetes-serviceMonitorKubeControllerManager.yaml
-rw-r--r--  1 root root    7539 Sep 24 14:17 kubernetes-serviceMonitorKubelet.yaml
-rw-r--r--  1 root root     530 Sep 24 14:17 kubernetes-serviceMonitorKubeScheduler.yaml
-rw-r--r--  1 root root     464 Sep 24 14:17 kube-state-metrics-clusterRoleBinding.yaml
-rw-r--r--  1 root root    1712 Sep 24 14:17 kube-state-metrics-clusterRole.yaml
-rw-r--r--  1 root root    2957 Sep 24 14:17 kube-state-metrics-deployment.yaml
-rw-r--r--  1 root root    1864 Sep 24 14:17 kube-state-metrics-prometheusRule.yaml
-rw-r--r--  1 root root     280 Sep 24 14:17 kube-state-metrics-serviceAccount.yaml
-rw-r--r--  1 root root    1011 Sep 24 14:17 kube-state-metrics-serviceMonitor.yaml
-rw-r--r--  1 root root     580 Sep 24 14:17 kube-state-metrics-service.yaml
-rw-r--r--  1 root root     444 Sep 24 14:17 node-exporter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     461 Sep 24 14:17 node-exporter-clusterRole.yaml
-rw-r--r--  1 root root    3046 Sep 24 14:17 node-exporter-daemonset.yaml
-rw-r--r--  1 root root   12975 Sep 24 14:17 node-exporter-prometheusRule.yaml
-rw-r--r--  1 root root     270 Sep 24 14:17 node-exporter-serviceAccount.yaml
-rw-r--r--  1 root root     850 Sep 24 14:17 node-exporter-serviceMonitor.yaml
-rw-r--r--  1 root root     492 Sep 24 14:17 node-exporter-service.yaml
-rw-r--r--  1 root root     482 Sep 24 14:17 prometheus-adapter-apiService.yaml
-rw-r--r--  1 root root     576 Sep 24 14:17 prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml
-rw-r--r--  1 root root     494 Sep 24 14:17 prometheus-adapter-clusterRoleBindingDelegator.yaml
-rw-r--r--  1 root root     471 Sep 24 14:17 prometheus-adapter-clusterRoleBinding.yaml
-rw-r--r--  1 root root     378 Sep 24 14:17 prometheus-adapter-clusterRoleServerResources.yaml
-rw-r--r--  1 root root     409 Sep 24 14:17 prometheus-adapter-clusterRole.yaml
-rw-r--r--  1 root root    1836 Sep 24 14:17 prometheus-adapter-configMap.yaml
-rw-r--r--  1 root root    1804 Sep 24 14:17 prometheus-adapter-deployment.yaml
-rw-r--r--  1 root root     506 Sep 24 14:17 prometheus-adapter-podDisruptionBudget.yaml
-rw-r--r--  1 root root     515 Sep 24 14:17 prometheus-adapter-roleBindingAuthReader.yaml
-rw-r--r--  1 root root     287 Sep 24 14:17 prometheus-adapter-serviceAccount.yaml
-rw-r--r--  1 root root     677 Sep 24 14:17 prometheus-adapter-serviceMonitor.yaml
-rw-r--r--  1 root root     501 Sep 24 14:17 prometheus-adapter-service.yaml
-rw-r--r--  1 root root     447 Sep 24 14:17 prometheus-clusterRoleBinding.yaml
-rw-r--r--  1 root root     394 Sep 24 14:17 prometheus-clusterRole.yaml
-rw-r--r--  1 root root    4930 Sep 24 14:17 prometheus-operator-prometheusRule.yaml
-rw-r--r--  1 root root     715 Sep 24 14:17 prometheus-operator-serviceMonitor.yaml
-rw-r--r--  1 root root     499 Sep 24 14:17 prometheus-podDisruptionBudget.yaml
-rw-r--r--  1 root root   12732 Sep 24 14:17 prometheus-prometheusRule.yaml
-rw-r--r--  1 root root    1195 Sep 24 14:17 prometheus-prometheus.yaml
-rw-r--r--  1 root root     471 Sep 24 14:17 prometheus-roleBindingConfig.yaml
-rw-r--r--  1 root root    1547 Sep 24 14:17 prometheus-roleBindingSpecificNamespaces.yaml
-rw-r--r--  1 root root     366 Sep 24 14:17 prometheus-roleConfig.yaml
-rw-r--r--  1 root root    2047 Sep 24 14:17 prometheus-roleSpecificNamespaces.yaml
-rw-r--r--  1 root root     271 Sep 24 14:17 prometheus-serviceAccount.yaml
-rw-r--r--  1 root root     531 Sep 24 14:17 prometheus-serviceMonitor.yaml
-rw-r--r--  1 root root     558 Sep 24 14:17 prometheus-service.yaml
drwxr-xr-x  2 root root    4096 Sep 25 10:09 setup/

开始安装

root@k8s-master1:/apps/kube-prometheus/manifests# kubectl apply -f .

这个过程会慢点

国内无法直接获取 gcr.io 镜像,我们还可以将 gcr.io/<repo-name>/<image-name>:<version> 替换为 gcr.azk8s.cn/<repo-name>/<image-name>:<version>

docker pull gcr.io/google_containers/hyperkube-amd64:v1.9.2
docker pull gcr.azk8s.cn/google_containers/hyperkube-amd64:v1.9.2

如拉取k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0, 我们可以这么做

docker pull quay.io/coreos/kube-state-metrics:v2.0.0-rc.0
docker tag quay.io/coreos/kube-state-metrics:v2.0.0-rc.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0

这样就安装完了,prometheus server给我们提供一个ui界面 grafana也给提供了一个ui界面

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get pods -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   0          3h6m
alertmanager-main-1                    2/2     Running   0          3h6m
alertmanager-main-2                    2/2     Running   0          3h6m
blackbox-exporter-55c457d5fb-jw82p     3/3     Running   0          3h6m
grafana-6dd5b5f65-64nrk                1/1     Running   0          3h6m
kube-state-metrics-76f6cb7996-4jxlm    3/3     Running   0          3h6m
node-exporter-h44tf                    2/2     Running   0          3h6m
node-exporter-jhl2d                    2/2     Running   0          3h6m
node-exporter-rlrhh                    2/2     Running   0          3h6m
node-exporter-w9jzh                    2/2     Running   0          3h6m
prometheus-adapter-59df95d9f5-kkpwf    1/1     Running   0          3h6m
prometheus-adapter-59df95d9f5-ztwm7    1/1     Running   0          3h6m
prometheus-k8s-0                       2/2     Running   1          3h5m
prometheus-k8s-1                       2/2     Running   1          3h5m
prometheus-operator-7775c66ccf-q7fpk   2/2     Running   0          3h29m

grafana提供的ui界面

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get svc -n monitoring
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
alertmanager-main       ClusterIP   10.104.152.237   <none>        9093/TCP                     3h10m
alertmanager-operated   ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   3h10m
blackbox-exporter       ClusterIP   10.110.78.66     <none>        9115/TCP,19115/TCP           3h10m
grafana                 ClusterIP   10.105.79.56     <none>        3000/TCP                     3h10m
#grafana 提供的UI界面  但是使用的Cluster IP 我们想访问要么使用ingress-nginx 要么使用NodePort方式
kube-state-metrics      ClusterIP   None             <none>        8443/TCP,9443/TCP            3h10m
node-exporter           ClusterIP   None             <none>        9100/TCP                     3h10m
prometheus-adapter      ClusterIP   10.98.113.230    <none>        443/TCP                      3h10m
prometheus-k8s          ClusterIP   10.104.78.168    <none>        9090/TCP                     3h10m
prometheus-operated     ClusterIP   None             <none>        9090/TCP                     3h10m
prometheus-operator     ClusterIP   None             <none>        8443/TCP                     3h33m

修改

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl edit svc -n monitoring grafana
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"grafana","app.kubernetes.io/name":"grafana","app.kubernetes.io/part-of":"kube-prometheus","app.kubernetes.io/version":"7.5.4"},"name":"grafana","namespace":"monitoring"},"spec":{"ports":[{"name":"http","port":3000,"targetPort":"http"}],"selector":{"app.kubernetes.io/component":"grafana","app.kubernetes.io/name":"grafana","app.kubernetes.io/part-of":"kube-prometheus"}}}
  creationTimestamp: "2023-09-25T02:39:46Z"
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 7.5.4
  name: grafana
  namespace: monitoring
  resourceVersion: "185875"
  uid: 7378b7c2-2119-4949-bf5d-4c44007562ce
spec:
  clusterIP: 10.105.79.56
  clusterIPs:
  - 10.105.79.56
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    port: 3000
    protocol: TCP
    targetPort: http
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: None
  type: NodePort  #把这里改为NodePort
status:
  loadBalancer: {}

查询一下

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get svc -n monitoring grafana
NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
grafana   NodePort   10.105.79.56   <none>        3000:32281/TCP   3h14m

通过ip+端口号进去

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_04

用户名和口令都是admin

输入后会让你修改密码

给我们装了很多node-exporter

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get pod -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   0          3h18m
alertmanager-main-1                    2/2     Running   0          3h18m
alertmanager-main-2                    2/2     Running   0          3h18m
blackbox-exporter-55c457d5fb-jw82p     3/3     Running   0          3h18m
grafana-6dd5b5f65-64nrk                1/1     Running   0          3h18m
kube-state-metrics-76f6cb7996-4jxlm    3/3     Running   0          3h18m
node-exporter-h44tf                    2/2     Running   0          3h18m
#这些是监控我们集群的
node-exporter-jhl2d                    2/2     Running   0          3h18m
#监控master和node节点的
node-exporter-rlrhh                    2/2     Running   0          3h18m
#
node-exporter-w9jzh                    2/2     Running   0          3h18m
prometheus-adapter-59df95d9f5-kkpwf    1/1     Running   0          3h18m
prometheus-adapter-59df95d9f5-ztwm7    1/1     Running   0          3h18m
prometheus-k8s-0                       2/2     Running   1          3h18m
prometheus-k8s-1                       2/2     Running   1          3h18m
prometheus-operator-7775c66ccf-q7fpk   2/2     Running   0          3h41m

除了这个界面还有prometheus 自带的界面

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get svc -n monitoring
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
alertmanager-main       ClusterIP   10.104.152.237   <none>        9093/TCP                     3h13m
alertmanager-operated   ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   3h13m
blackbox-exporter       ClusterIP   10.110.78.66     <none>        9115/TCP,19115/TCP           3h13m
grafana                 NodePort    10.105.79.56     <none>        3000:32281/TCP               3h13m
kube-state-metrics      ClusterIP   None             <none>        8443/TCP,9443/TCP            3h13m
node-exporter           ClusterIP   None             <none>        9100/TCP                     3h13m
prometheus-adapter      ClusterIP   10.98.113.230    <none>        443/TCP                      3h13m
prometheus-k8s          ClusterIP   10.104.78.168    <none>        9090/TCP                     3h13m
#                                                               默认端口号是9090
prometheus-operated     ClusterIP   None             <none>        9090/TCP                     3h13m
prometheus-operator     ClusterIP   None             <none>        8443/TCP                     3h37m

我们也把这个改为nodeport类型的

root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl edit svc -n monitoring prometheus-k8s
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"prometheus","app.kubernetes.io/name":"prometheus","app.kubernetes.io/part-of":"kube-prometheus","app.kubernetes.io/version":"2.26.0","prometheus":"k8s"},"name":"prometheus-k8s","namespace":"monitoring"},"spec":{"ports":[{"name":"web","port":9090,"targetPort":"web"}],"selector":{"app":"prometheus","app.kubernetes.io/component":"prometheus","app.kubernetes.io/name":"prometheus","app.kubernetes.io/part-of":"kube-prometheus","prometheus":"k8s"},"sessionAffinity":"ClientIP"}}
  creationTimestamp: "2023-09-25T02:39:48Z"
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.26.0
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
  resourceVersion: "186058"
  uid: d7eaeb30-0882-474a-9be2-54e9c6904062
spec:
  clusterIP: 10.104.78.168
  clusterIPs:
  - 10.104.78.168
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: web
    port: 9090
    protocol: TCP
    targetPort: web
  selector:
    app: prometheus
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    prometheus: k8s
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  type: NodePort
status:
  loadBalancer: {}
root@k8s-master1:/apps/kube-prometheus/manifests/setup# kubectl get svc -n monitoring prometheus-k8s
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus-k8s   NodePort   10.104.78.168   <none>        9090:32742/TCP   3h23m

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_05

这个就是prometheus提供的接口


Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_06

Alerts的监控的

这里面是默认生成的各种各样的告警插件,这些事因为装了node-exports产生的,不装是没这些的



Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_07

Status 看状态

Runtiume & Build Information 运行时和构建信息

TSDB Status TSDB状态

Command-Line Flags  命令行标记

Congifuration  配置

Rules 规则

Targets 目标

Service Discovery 服务发现

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_08

想查询东西就可以在里面输入

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_09

切换到grafana的IU

里面其实啥也没有,能够采集到,prometheus里面的各种各样的监控组件,比如监控node-exports的方式,但是没有展示出来,我们要去寻找符合要求的dashboard

gragana给我们提供了一个网站

https://grafana.com/

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_10

最下面有个dashboards 点进去,里面有各种各样的dashboards

https://grafana.com/grafana/dashboards/?plcmt=footer

刚才安装了个node-export的监控插件 监控k8s集群的

直接搜索 想搜啥搜啥 比如node

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_11

用那个UI都可以 看自己习惯 比如我们点这个

https://grafana.com/grafana/dashboards/11074-node-exporter-for-prometheus-dashboard-en-v20201010/

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_12

住他的ID号 11074

或者复制这个链接

切换grafana

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_13

点击加号 inport 导入

或者把url地址粘贴到这个搜索框里 一样

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_14

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_15

上面这个页面有集群所有node的状态

cpu 内存 磁盘 读写 各种各种

还可以选择时间

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_16

选择5分钟

这里面横竖轴 里面的线 时序序列 时间指定的时间 某一个节点

默认的采集时间是三十秒钟采集一次,几百个三十秒 点成线

这个node export是我们采集集群的 资源使用率的 组件 叫node export

node节点 一个节点收集的组件 这是自带的

这是kube-prometheus所自带的

目前比较常用的exporter

类型


Exporter

数据库

MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter

硬件

Apcupsd Exporter ,IoT Edison Exporter , IPMI Exporter, Node Exporter

消息队列

Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter

存储

Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter

HTTP服务

Apache Exporter, HAProxy Exporter, Nginx Exporter

API服务

AWS ECS Exporter , Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter

日志

Fluentd Exporter, Grok Exporter

监控系统

Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter

其他

Blackbox Exporter, JIRA Exporter, Jenkins Exporter , Confluence Exporter

以上这些从github上下载

prometheus官方

https://prometheus.io/download/

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_17

里面各种各样的export mysql 的 memcached的 node的

这些都是二进制的 我们这次用的k8s 下载的都是镜像

node export是我们通过下载下来的prometheus自带的安装的,如果是其他的监控项,怎么安装,然后倒入到grafana里面

监控集群的etcd

我们先去找一个etcd的export 来去使用

etcd通信是用的tls key 所以我们需要提供 tls key tls就是ssl 需要把这个key提供给prometheus 才行 不然连接不了

必须保证 通过这个key 能访问etcd集群 才能够通过k8s 集群里面的prometheus 去获取etcd去监控它才行

curl -s --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://172.17.18.1:2379/metrics -k
# 使用 curl 工具从 etcd 集群的指定地址获取监控指标。这个命令的含义如下:

# -s:表示静默模式,curl 不会输出下载进度或错误消息,只返回响应的内容。
# --cert /etc/kubernetes/pki/etcd/server.crt:指定客户端证书,用于进行安全的 TLS 通信。
# --key /etc/kubernetes/pki/etcd/server.key:指定客户端私钥,与客户端证书一起使用进行身份验证和加密通信。
# https://172.17.18.1:2379/metrics:指定 etcd 的监控指标地址。这是一个 HTTPS 地址,使用指定的证书和密钥进行安全通信。
#etcd 端口号是2379  编写的时候 给我们提供了一个接口 叫metrics
# -k:表示忽略 SSL 证书验证,这是一个不安全的做法,仅在测试或特定环境下使用。
# 该命令的目的是从 etcd 集群中获取监控指标,以便进行性能分析和故障排除。请确保您具有正确的证书和密钥文件,并且已配置正确的 etcd 监控端点地址(https://172.17.18.1:2379/metrics)。如果一切正确,运行此命令应该返回 etcd 的监控指标数据。

输出的内容太多了 省略

为什么prometheus能够监控它,node export 也是 能够获取数据 监控到 就是因为 服务本身提供了 接口 都是以metrics 结尾的接口

上面那条命令输出的每一行就是各种各样的监控项 我们取一部分看下

curl -s --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://172.17.18.1:2379/metrics -k | tail
# TYPE process_virtual_memory_max_bytes gauge #
process_virtual_memory_max_bytes -1 #表示进程的虚拟内存最大字节数。在此示例中,值为 -1,表示未设置虚拟内存的限制。
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1 #表示当前处理的 scrape 请求数量,这是一个仪表盘上的实时监控。
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 1 #状态码为200 的两个
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0 #状态码为503 的 0个

#表示总的 scrape 请求数量,按 HTTP 状态代码分类。在这里,code="200" 表示成功的请求次数为 1,而 code="500" 和 code="503" 分别表示 500 和 503 HTTP 状态代码的请求次数为 0。

这里面就是我们去看下etcd里面产生的数据,我们怎么把这些数据拿到prometheus里面呢?

首先我们需要去创建 给etcd服务本身提供监控的一个组件

暴漏个端口号给prometheus端口号,通过service暴漏,目前prometheus访问不了etcd,之前说k8s只有apiServer能够访问etcd,所以我们需要给etcd本身暴露个访问接口出来通过service

Endpoints

写一个

service 要把某个集群外服务发布到k8s集群里面里面来 需要通过externalname的方式

定义一个endpoint 然后把endpoints和一个service名称关联 因为默认情况 我们直接创建一个service 他就直接自动创建endpoint 组件 、

把集群外的资源发布到k8s进来 首先用endpoint的方式做成资源对象 有多少个节点就写多少个ip

如果etcd不是跑在k8s集群里面的,如果prometheus想监控集群之外的其他服务,比如mysql,就可以通过做一个service 给映射进来,把集群之外的某一个服务映射到集群里面来,因为prometheus访问不到集群外面的组件,需要把集群之外的服务暴漏到集群之内来,第一件事就要运行一个service 把集群之外的服务映射到集群之内来

apiVersion: v1
kind: Endpoints
metadata:
  name: etcd-prom
  namespace: kube-system  #和下面的svc名字必须一样
  labels:  #标签选择器  后面要引用
    app: etcd-prom 
subsets:
- addresses:
  - ip:  172.17.18.1
  ports:
    - port: 2379
      name: https-metrics  #需要定义pod名字 这里定义了name svc也得需要定义  后面需要引用  
      protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: etcd-prom
  labels: #标签 没必要 写不写无所谓
    app: etcd-prom #标签选择器  后面要引用
spec:
  type: ClusterIP
  ports:
  - port: 2379
    name: https-metrics
    protocol: TCP
    targetPort: 2379 
    #不能写selector 标签选择器 是因为  没有deployment给我们 关联的deployment 所以不用写 写了就不对了

这样写是因为 etcd在生产上是把etcd运行在k8s集群之外的

我们现在通过cluster ip 去访问ETCD

root@k8s-master1:/apps/prometheus# kubectl get svc -n kube-system etcd-prom
NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
etcd-prom   ClusterIP   10.104.25.120   <none>        2379/TCP   4m21s

我们访问一下 通过curl

root@k8s-master1:/apps/prometheus# curl -s --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://10.104.25.120:2379/metrics -k

输出

# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes -1
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 4
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
#取末尾  有这种输出就代表成功了

然后我们需要把这两个证书和私钥做成tls 类型的secret 给映射到k8s集群里面来 我们必须需要证书和私钥才能够去访问到etcd


root@k8s-master1:~# cd /etc/kubernetes/pki/etcd
root@k8s-master1:/etc/kubernetes/pki/etcd# kubectl create secret generic etcd-ssl --from-file=./ca.crt --from-file=./server.crt --from-file=./server.key -n monitoring
secret/etcd-ssl created
#类型通用 generic 名字为 etcd-ssl 名称空间为monitoring

查看一下

root@k8s-master1:/etc/kubernetes/pki/etcd# kubectl get secrets -n monitoring etcd-ssl
NAME       TYPE     DATA   AGE
etcd-ssl   Opaque   2      72s

然后去将证书挂载prometheus容器,因为prometheus是operator部署的 只需要修改prometheus的资源即可

就是把上面创建的secrets 加到prometheus里面去

有个资源对象就叫prometheus 直接去修改prometheus就行

这个类型 prometheus之前是没有的 之前讲k8s 默认是没有的 这个prometheus 是通过operator创建的时候 最初创建了 operator运行的pod 这个pod 本身是crd 自定义 资源对象 它在k8s集群里面给我们创建了一个prometheus的类型 产生了个k8s的资源对象

然后产生的资源对象就叫k8s

root@k8s-master1:~# kubectl edit prometheus -n monitoring k8s

我们去查看怎么加

root@k8s-master1:/apps/prometheus# kubectl explain prometheus.spec.secrets  #他的位置就在spec下面
KIND:     Prometheus
VERSION:  monitoring.coreos.com/v1

FIELD:    secrets <[]string>  #是个列表

DESCRIPTION:
     Secrets is a list of Secrets in the same namespace as the Prometheus
     object, which shall be mounted into the Prometheus Pods. The Secrets are
     mounted into /etc/prometheus/secrets/<secret-name>.

所以我们只有在spec下面加 secrets就可以 了

root@k8s-master1:~# kubectl edit prometheus -n monitoring k8s
  generation: 1
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.26.0
    prometheus: k8s
  name: k8s
  namespace: monitoring
  resourceVersion: "186041"
  uid: e2c820be-d704-44aa-a56b-37e009a1f079
spec:
  secrets:  #加到spec下面就像
  - etcd-ssl  # #### ## 
  alerting:
    alertmanagers:

查询一下

root@k8s-master1:~# kubectl get pods -n monitoring -l app=prometheus
NAME               READY   STATUS    RESTARTS   AGE
prometheus-k8s-0   2/2     Running   1          11s
prometheus-k8s-1   2/2     Running   1          25s

看一下证书挂载的位置

root@k8s-master1:~# kubectl exec -n monitoring prometheus-k8s-0 -- ls /etc/prometheus/secrets/etcd-ssl
Defaulted container "prometheus" out of: prometheus, config-reloader
server.crt
server.key

这样证书和私钥就挂载好了

第一步我们把集群之外的某个服务给映射进来集群里面来了,把etcd通过service的方式 endpoint 的方式映射到集群里来

第二步 我们访问etcd本身的时候需要用到证书 把原有的证书做成secrets的方式 映射到集群里面去

secrets映射进来后需要把secret给我们prometheus 让prometheus有这个证书

上面这个路径我们需要知道,因为我们监控etcd的时候需要让prometheus去读这个证书

下面开始创建etcd 的service Monitor 的监控组件

从集群里面添加service Monitor Monitor是监控的意思 就是个service 监控

就是个pod

创建

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd #名字
  namespace: monitoring
  labels: #标签
    app: etcd
spec:
  jobLabel: k8s-app  #这个是任务标签
  endpoints:  #我们刚才给etcd创建的endpoint
  - interval: 30s # 监控间隔时间 30秒  每隔30秒去获取一次数据
    port: https-metrics # 这个 port 对应 Service.spec.ports.name  这个是上面定义的pod名称  也就是上面写的svc和endpoint一样
    scheme: https  #协议 
    tlsConfig: #打进来的etcd证书
      caFile: /etc/prometheus/secrets/etcd-ssl/ca.crt #目录
      certFile: /etc/prometheus/secrets/etcd-ssl/server.crt
      keyFile: /etc/prometheus/secrets/etcd-ssl/server.key
      insecureSkipVerify: true #关闭证书校验
  selector: #标签选择器  和service 的labels 也就是上面写的svc和endpoint一样
    matchLabels:
      app: etcd-prom # 跟 svc 的 lables 保持一致  才能关联上 他并不是通过ip去寻找的  他是通过名称 去关联到对应service来的 
  namespaceSelector: #名称空间选择器
    matchNames:
    - kube-system  #名称空间

创建

root@k8s-master1:/apps/prometheus# kubectl apply -f service-monitor.yaml
servicemonitor.monitoring.coreos.com/etcd created



Kubernetes安装Prometheus,云原生监控项添加方式_monitor_18

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_19

再看web界面就有了 etcd 为up 就说明监控项添加到prometheus里面了

切换grafana里面 加个etcd的dashboard

流程都是一样的在k8s里面监控

服务本身提供了 /metrics ,Prometheus 可以通过该接口采集到数据;

这是云原生服务提供的

如果非云原生服务 就比如 虚拟机安装的nginx 他没有/metrics接口

云原生:

软件应用在开发的时候就支持云环境的的软件,通常叫云原生,云原生有很多特性,它的组件可以运行在k8s里面,除了这种方式以外还公布了/metrics接口

还是去这个里面去找

https://grafana.com/

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_20

最下面有个dashboards 点进去,里面有各种各样的dashboards

https://grafana.com/grafana/dashboards/?plcmt=footer

刚才安装了个node-export的监控插件 监控k8s集群的

直接搜索 etcd


Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_21

上次用的是 ID的方式 这次我们复制链接

https://grafana.com/grafana/dashboards/3070-etcd/

Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_22

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_23

然后切换 grafana 的ui 添加就可以


Kubernetes安装Prometheus,云原生监控项添加方式_Prometheus_24

Kubernetes安装Prometheus,云原生监控项添加方式_monitor_25

这里的name 可以自定义


Kubernetes安装Prometheus,云原生监控项添加方式_monitor_26

就成功了

service-monitor 方式就创建好了

这个很重要!!

编写方式通常和上面类似,https的就提供证书,如果不是https的就不需要提供证书,只需要提供service证书就可以了

不过一般来说 都是htts 的

下章节写非云原生的服务监控