构建Prometheus和grafana智能监控系统

知识点:

一、Prometheus 理论知识

1、Prometheus 介绍?

Prometheus 是一个开源的系统监控和报警系统,现在已经加入到 CNCF 基金会,成为继

k8s 之后第二个在 CNCF 托管的项目,在 kubernetes 容器管理系统中,通常会搭配

prometheus 进行监控,同时也支持多种 exporter 采集数据,还支持 pushgateway 进行数

据上报,Prometheus 性能足够支撑上万台规模的集群。

Prometheus 配置:

https://prometheus.io/docs/prometheus/latest/configuration/configuration

Prometheus 监控组件对应的 exporter 部署地址:

https://prometheus.io/docs/instrumenting/exporters

Prometheus 基于 k8s 服务发现参考:

https://github.com/prometheus/prometheus/blob/release-

2.31/documentation/examples/prometheus-kubernetes.yml

2、Prometheus 特点?

2.1 多维度数据模型:Prometheus 监控系统在收集和存储监控数据时,采用了多维度的时

间序列数据模型,这种模型不仅记录每个监控指标的数据,还会使用标签(labels)为每

个数据点附加额外的信息,使得同一个指标可以有多个维度,便于进行更加细粒度的查询

和分析。

这种结构使得同一个指标可以根据不同的标签维度(如不同的机器、不同的服务、不

同的时间段等)生成不同的时间序列数据。

cpu_usage{instance=”server1″}

avg(cpu_usage) by (instance)

这种多维度的查询使得你不仅能够看到整体的资源使用情况,还可以深入到每个细节,

分析不同维度(如不同节点、不同服务、不同时间等)的表现。

举个例子:

假设你监控了一个 Web 服务,收集了 CPU 和内存的使用情况。通过 Prometheus,你不

仅能看到整体的 CPU 和内存使用情况,还能按每个节点(如 node=”server1″ 和

node=”server2″)或者每个服务(如 service=”frontend”)来查看数据,从而获得更细致

的分析。这种多维度模型,使得监控更加灵活、精准,帮助你快速定位问题和优化资源。

2.2 灵活的数据采集方式:Prometheus 提供了多种方法来采集监控数据,能够适应各种

不同的监控需求,同时确保数据采集的高效性和可靠性。

2.3 强大的查询语言:Prometheus 提供了一种名为 PromQL 的查询语言,它非常强大且

灵活,能够让用户在 Prometheus 中存储的监控数据进行实时查询和复杂的分析操作。官网

->https://prometheus.ac.cn/docs/prometheus/latest/querying/basics/

具体功能如下:

cpu_usage[1h]

avg(cpu_usage) by (instance) [1h]

memory_usage / cpu_usage

http_requests_total{status=”200″} * up

2.4 动态监控和自动发现:Prometheus 支持动态监控和自动发现机制。它可以自动探测和

监控新加入集群的目标,例如新部署的应用实例或新增的节点。通过定义合适的自动发现

规则,Prometheus 能够及时识别和监控新的目标,实现动态的监控配置和管理。

2.5 灵活的告警机制:Prometheus 具备强大的告警功能,用户可以定义灵活的警报规则,

并根据阈值、表达式和持续时间等条件触发警报。它能够及时发送通知,如电子邮件、短

信或调用 API,以便运维人员能够快速响应和解决潜在的问题。

2.6 生态系统和集成:Prometheus 拥有丰富的生态系统和广泛的集成能力。它可以与其他

工具和服务集成,如 Grafana 用于可视化、Alertmanager 用于告警通知、Exporter 用于采

集非 Prometheus 格式的指标数据等。这种集成能力使得用户能够构建全面和强大的监控解

决方案。

2.7 样本

1.时间序列中的每一个点称为一个样本:

在 Prometheus 中,时间序列是一个由多个数据点组成的数据集合,每个数据点代表一个

样本。每个样本包含三部分信息:

• 指标(metric):指明了你监控的对象或事件的名称。例如,你监控的 HTTP 请求

的总数,指标名称可能是 api_http_requests_total。

• 时间戳(timestamp):每个样本都有一个时间戳,标识该数据点记录的具体时间。

时间戳通常精确到毫秒,表示数据采集的时刻。

• 样本值(value):每个样本都有一个值,通常是一个浮动的数值(float64),表示

当前时刻的监控指标值。例如,某个时刻 api_http_requests_total 可能值为 1000,

表示当前时间点 API 请求的总数。

2. 样本的表示方式:

为了表示监控数据,Prometheus 使用特定的格式来展示指标、标签和对应的值。具体格式

为:

<metric name>{<label name>=<label value>, …}

3. 举个例子:

假设你监控的是 API 的 HTTP 请求总数,指标名称为 api_http_requests_total。为了更具体

地标识每个请求,还可以用标签来描述:

• method=”POST”:表示请求方法是 POST。

• handler=”/messages”:表示请求的路径是 /messages。

那么,你的时间序列就可以这样表示:

api_http_requests_total{method=”POST”, handler=”/messages”}

这个表示的是:所有方法为 POST,路径为/messages 的 HTTP 请求的总数。

1.Prometheus Server:

• 作用:Prometheus Server 是整个监控系统的核心,负责收集和存储监控数据。

• 比喻:就像一个中央服务器,收集各个设备或应用程序发送的数据。

Prometheus Server 主要由三个部分组成:

1)Retrieval:

• 作用:负责定期从配置的目标主机(比如你的服务器、应用)抓取监控指标数据。

• 比喻:像是“收集员”,它定时去各个目标地方收集数据。

2)Storage:

• 作用:负责把从目标主机抓取到的数据保存到磁盘中,以便后续查询。

• 比喻:它是一个“数据库”,专门存储所有采集到的监控数据。

3)PromQL:

• 作用:PromQL 是 Prometheus 提供的查询语言,用来从存储的数据中提取有用的

信息。

• 比喻:它像 SQL,帮助用户从 Prometheus 存储的数据中进行查询,获取到具体的

监控指标。

2. Client Library:

• 作用:客户端库用于在应用程序代码中嵌入监控功能。当 Prometheus 想要获取监

控数据时,客户端库会把当前应用程序的指标数据(比如 CPU 使用率、内存消耗

等)发送到 Prometheus Server。

• 比喻:类似于每个应用程序内部嵌入的一个“监控代理”,它负责采集应用内部的

数据并传送到 Prometheus。

3. Exporters:

• 作用:Exporters 是一些外部工具或程序,帮助 Prometheus 从不同的系统或应用

中获取监控数据。不同的服务会有不同的 Exporter 适配器,比如数据库、操作系

统、网络设备等。

• 比喻:就像是各种“插件”,它们帮助 Prometheus 从不同地方抓取监控数据。

4. Alertmanager:

• 作用:Alertmanager 是一个报警管理组件。它从 Prometheus Server 收到报警

(比如 CPU 使用率超过阈值)后,会进行去重、分组,并将报警通知发送到相应

的接收方(比如邮箱、微信群、钉钉群等)。

• 比喻:它就像是报警中心,负责接收、整理和转发警报。

5. Grafana:

• 作用:Grafana 是一个可视化工具,用来创建监控仪表盘,帮助用户以图表的形式

展示 Prometheus 收集到的数据。

• 比喻:就像一个“仪表盘”显示器,帮助你通过图形化的方式查看你的数据和监控

情况。

6. Pushgateway:

• 作用:Pushgateway 允许某些无法主动向 Prometheus Server 推送数据的设备

(比如短暂运行的批处理任务)通过 Pushgateway 上报数据,Prometheus Server

再从 Pushgateway 拉取数据。

• 比喻:如果某些任务不能持续运行,Pushgateway 就是它们的临时存储位置,任务

完成后,它们将数据推送到这里,Prometheus 会定期从中拉取。

Prometheus 工作流程

1.Prometheus Server 数据采集

• Prometheus Server 负责从监控目标(通常是运行着应用程序的服务器或者容器)

上定期拉取监控指标数据。默认采用 pull 方式:

o 静态 Job 配置:通过配置文件指定固定的监控目标,Prometheus 将定期从

这些目标上拉取数据。

o 服务发现:通过服务发现(例如 Kubernetes、Consul 等)动态识别并拉取

监控目标的数据。服务发现的好处是能够自动识别目标,而不需要手动指

定。

o Pushgateway:对于一些无法直接提供 HTTP 接口的服务(如批处理作业、

离线任务等),可以将数据推送到 Pushgateway,然后 Prometheus 再拉取

这些数据。

o Exporter:Prometheus 生态系统中有许多专门的 exporter,用于采集特定

系统或应用程序的数据,如 Node Exporter(采集主机的 CPU、内存等资源

数据)和 MySQL Exporter(采集 MySQL 数据库的数据)。这些 exporter 通

过 HTTP 接口提供监控数据,Prometheus 拉取数据时会查询这些接口。

2. 数据存储

• Prometheus 会把采集到的监控数据按时间序列存储,通常存储在本地磁盘中。每

条数据会包含时间戳、度量指标(metric)、**标签(labels)**等信息。

• 数据是时序化存储的,每次拉取到的新数据都会在原有的基础上形成一个新的时间

点,从而形成连续的监控数据流。

3. 时间序列存储与报警规则

• Prometheus 把采集的数据按时间序列存储,每一项数据都会根据其时间戳分配存

储。

• 用户可以在 Prometheus 配置报警规则(alert rules),这些规则基于数据的阈值或

者特定的条件。若条件触发(例如 CPU 使用率超过 80%),Prometheus 会发出报警。

• 这些报警会被 Prometheus 发送给 Alertmanager 进行进一步的处理。

4. Alertmanager 处理报警

• Alertmanager 负责接收 Prometheus 发出的报警信息并处理。它支持多种报警接收

方式,包括:

o 邮件:将报警信息通过邮件发送给相关人员。

o 微信、钉钉:可以集成到企业的即时通讯工具中,实时通知相关人员。

o 其他接收方:Alertmanager 还支持 HTTP 请求、Slack 等其他通知方式。

5. Prometheus Web UI 与 PromQL 查询

• Prometheus 提供一个自带的 Web UI 界面,可以用来查看数据、配置、查询和管理

监控任务。

 在 Web UI 中,用户可以使用 PromQL(Prometheus Query Language)进行查询。

PromQL 是专门为 Prometheus 设计的查询语言,可以帮助用户对监控数据进行灵

活的检索和分析,例如求平均值、最大值、最小值,或进行各种聚合操作。

6. Grafana 图形化展示

• Grafana 是一个强大的开源数据可视化工具,可以与 Prometheus 集成作为数据源,

将 Prometheus 采集到的监控数据以图表的形式展示。

• 用户可以在 Grafana 中创建各种仪表盘(Dashboard)并展示实时监控数据。

Grafana 提供了丰富的可视化选项,支持折线图、饼图、柱状图等多种样式,使得

监控数据更加直观易懂。

一、实验环境:

还原到单节点集群:master1\node1\node2,开机

zabbix是监控虚拟机IP;Prometheus是监控pod,进程,pod IP会变。

二、master1上创建监控命名空间monitor-sa;所有节点master1 \node1\node2 都上传node-exporter镜像、并导入运行node-exporter镜像

[root@master1 \node1\node2 ~]# kubectl create ns monitor-sa 创建监控命名空间monitor-sa
namespace/monitor-sa created
[root@master1 \node1\node2~]# ctr -n k8s.io images import node-exporter.tar.gz
unpacking docker.io/prom/node-exporter:v0.965eabe03865ab1595705f4f847009)...done
[root@master1 ~]#

三、创建普罗米修斯目录、上传节点的配置文件到prometheus-k8s目录下

[root@master1 ~]# mkdir prometheus-k8s		创建普罗米修斯目录
[root@master1 ~]#
[root@master1 prometheus-k8s]# cd
[root@master1 ~]# ls
anaconda-ks.cfg  calico.yaml   node_exporter-1.5.0.linux-amd64.tar.gz  node-export.yaml
calico.tar.gz    kubeadm.yaml  node-exporter.tar.gz                    prometheus-k8s
[root@master1 ~]# cd prometheus-k8s/
[root@master1 prometheus-k8s]# cp /root/node-export.yaml .		上传节点的配置文件到prometheus-k8s目录下
[root@master1 prometheus-k8s]# ls
node-export.yaml
[root@master1 prometheus-k8s]# kubectl apply -f node-export.yaml		应用节点的配置文件
daemonset.apps/node-exporter created

四、查看监控命名空间的pod信息、查看监控命名空间的pod详细信息

[root@master1 prometheus-k8s]# kubectl get pods -n monitor-sa	查看监控命名空间的pod信息
NAME                  READY   STATUS    RESTARTS   AGE
node-exporter-g49bj   1/1     Running   0          22s
node-exporter-hffgm   1/1     Running   0          22s
node-exporter-xflj5   1/1     Running   0          22s
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl get pods -n monitor-sa -o wide		查看监控命名空间的pod详细信息
NAME                  READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
node-exporter-g49bj   1/1     Running   0          44s   192.168.7.180   master1   <none>           <none>
node-exporter-hffgm   1/1     Running   0          44s   192.168.7.183   node1     <none>           <none>
node-exporter-xflj5   1/1     Running   0          44s   192.168.7.184   node2     <none>           <none>
[root@master1 prometheus-k8s]#

五、查看node节点端口号及字符界面访问node节点的度量值

[root@master1 prometheus-k8s]# netstat -tunlp | grep :9100		查看node节点端口号
tcp6       0      0 :::9100                 :::*                    LISTEN      25942/node_exporter		如果有25942 代表node节点起来了
[root@master1 prometheus-k8s]# curl http://192.168.7.180:9100/metircs	字符界面访问node节点的度量值
<html>
                        <head><title>Node Exporter</title></head>
                        <body>
                        <h1>Node Exporter</h1>
                        <p><a href="/metrics">Metrics</a></p>
                        </body>
                        </html>[root@master1 prometheus-k8s]#

六、在监控空间创建sa(服务)的账号、将监控命名空间的sa账号通过clusterrolebinding绑定到集群角色中

[root@master1 prometheus-k8s]# kubectl create serviceaccount monitor -n monitor-sa		在监控空间创建sa(服务)的账号
serviceaccount/monitor created
[root@master1 prometheus-k8s]# kubectl create clusterrolebinding monitor-clusterrolebindi                                                                              ng -n monitor-sa --clusterrole=cluster-admin --serviceaccount=monitor-sa:monitor
clusterrolebinding.rbac.authorization.k8s.io/monitor-clusterrolebinding created		将监控命名空间的sa账号通过clusterrolebinding绑定到集群角色中
[root@master1 prometheus-k8s]#

七、在Node1\node2节点创建数据存储目录/data、将data目录添加777权限

[root@node1 ~]# mkdir /data		在Node1\node2节点创建数据存储目录/data
[root@node1 ~]# chmod 777 /data		将data目录添加777权限
[root@node1 ~]#
[root@node2 ~]# mkdir /data		
[root@node2 ~]#  chmod 777 /data
[root@node2 ~]#

八、master1节点上传Prometheus-cfgl普罗米修斯存储卷(主要用来存放配置文件)的配置文件

[root@master1 /]# cd
[root@master1 ~]# cd prometheus-k8s/
[root@master1 prometheus-k8s]# cp /root/prometheus-cfg.yaml .
[root@master1 prometheus-k8s]# ls
node-export.yaml  prometheus-cfg.yaml
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl apply -f prometheus-cfg.yaml		应用普罗米修斯存储卷的配置文件(主要用来存放配置文件)
configmap/prometheus-config created
[root@master1 prometheus-k8s]# kubectl get cm -n monitor-sa		查看监控命名空间,用来获取监控命名空间下的ConfigMap资源
NAME                DATA   AGE
kube-root-ca.crt    1      53m
prometheus-config   1      20s
[root@master1 prometheus-k8s]#

九、Node1\node2上传prometheus-2.2.1.tar(普罗米修斯的镜像文件)、并运行prometheus-2.2.1.tar的镜像文件

[root@node1 ~]# ls
anaconda-ks.cfg      calico.tar.gz         prometheus-2-2-1.tar.gz
busybox-1-28.tar.gz  node-exporter.tar.gz  prometheus-cfg.yaml
[root@node1 ~]# ctr -n k8s.io images import prometheus-2-2-1.tar.gz		node1\node2节点导入普罗米修斯的镜像文件
unpacking docker.io/prom/prometheus:v2.2.1 (sha256:9b21b0369c9816ebd0bb41237def3de7e28c36cdc7a3e35e877c6475ef982d4a)...done
[root@node1 ~]#
[root@node1 ~]#
[root@node2 ~]# ctr -n k8s.io images import prometheus-2-2-1.tar.gz
unpacking docker.io/prom/prometheus:v2.2.1 (sha256:9b21b0369c9816ebd0bb41237def3de7e28c36cdc7a3e35e877c6475ef982d4a)...done
[root@node2 ~]#

十、将Prometheus的配置部署文件放到prometheus-k8s目录下

[root@master1 ~]# ls
anaconda-ks.cfg  node_exporter-1.5.0.linux-amd64.tar.gz  prometheus-deploy.yaml
calico.tar.gz    node-exporter.tar.gz                    prometheus-k8s
calico.yaml      node-export.yaml
kubeadm.yaml     prometheus-cfg.yaml
[root@master1 ~]# cd prometheus-k8s/
[root@master1 prometheus-k8s]# cp /root/prometheus-deploy.yaml .	将Prometheus的配置部署文件放到prometheus-k8s目录下
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# vim prometheus-deploy.yaml		编辑普罗米修斯无状态的配置文件
 25     spec:
 26       nodeName: node1	添加node1\node2节点信息(有多少节点添加多少个节点名称,需注意对齐)
 27       nodeName: node2
[root@master1 prometheus-k8s]# kubectl apply -f prometheus-deploy.yaml		应用普罗米修斯无状态的配置文件
deployment.apps/prometheus-server created
[root@master1 prometheus-k8s]# kubectl get pods -n monitor-sa		查看监控命名空间的pod信息
NAME                                 READY   STATUS    RESTARTS   AGE
node-exporter-g49bj                  1/1     Running   0          56m
node-exporter-hffgm                  1/1     Running   0          56m
node-exporter-xflj5                  1/1     Running   0          56m
prometheus-server-6fc5b6f457-sp48r 看这个  1/1     Running   0          16s
[root@master1 prometheus-k8s]#

十一、创建prometheus-svc普罗米修斯服务的配置文件

[root@master1 prometheus-k8s]# vim prometheus-svc.yaml	创建普罗米修斯服务的配置文件
apiVersion: v1	api版本为1
kind: Service	类型:服务
metadata:	元数据
  name: prometheus	名称为:普罗米修斯
  namespace: monitor-sa	命名空间:监控monitor-sa
  labels:		卷标的名称为:普罗米修斯
    app: prometheus		
spec:
  type: NodePort		类型为:nodeport
  ports:
    - port: 9090		源端口:9090
      targetPort: 9090	目标端口:9090
      protocol: TCP	协议:tcp协议
  selector:			调度器
    app: prometheus	使用:普罗米修斯
    component: server	组成部分为:服务器
~
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl apply -f prometheus-svc.yaml
service/prometheus created
[root@master1 prometheus-k8s]# kubectl get svc -n monitor-sa
NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
prometheus   NodePort   10.110.208.180   <none>        9090:31087/TCP   15s
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl get pods -n kube-system -o wide
NAME                                       READY   STATUS    RESTARTS      AGE   IP              NODE      NOMINATED NODE   READINESS GATES
calico-kube-controllers-7dc5458bc6-5jztl   1/1     Running   2 (89m ago)   11d   10.244.137.72   master1   <none>           <none>
calico-node-clzfg                          1/1     Running   2 (89m ago)   11d   192.168.7.183   node1     <none>           <none>
calico-node-kbqjt                          1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
calico-node-ng6b2                          1/1     Running   2 (89m ago)   11d   192.168.7.184   node2     <none>           <none>
coredns-7c445c467-kff9r                    1/1     Running   2 (89m ago)   11d   10.244.137.71   master1   <none>           <none>
coredns-7c445c467-mmcg7                    1/1     Running   2 (89m ago)   11d   10.244.137.73   master1   <none>           <none>
etcd-master1                               1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
kube-apiserver-master1                     1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
kube-controller-manager-master1            1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
kube-proxy-6kdb8                           1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
kube-proxy-gq9js                           1/1     Running   2 (89m ago)   11d   192.168.7.184   node2     <none>           <none>
kube-proxy-vjm2p                           1/1     Running   2 (89m ago)   11d   192.168.7.183   node1     <none>           <none>
kube-scheduler-master1                     1/1     Running   2 (89m ago)   11d   192.168.7.180   master1   <none>           <none>
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]#

十二、浏览器上访问配置好的Prometheus监控k8s的服务器

十三、node1\node2上传grafana8.45.tar,运行此镜像

[root@node1 ~]# ls
anaconda-ks.cfg      calico.tar.gz         node-exporter.tar.gz     prometheus-cfg.yaml
busybox-1-28.tar.gz  grafana_8.4.5.tar.gz  prometheus-2-2-1.tar.gz
[root@node1 ~]# ctr -n k8s.io images import grafana_8.4.5.tar.gz     node1\node2导入grafana的镜像文件
unpacking docker.io/grafana/grafana:8.4.5 (sha256:b862eb2a74c35f1dedea901ec93f8303f8ea6f1125b5005ff719912ae31267b8)...done
[root@node1 ~]#
[root@node2 ~]# ctr -n k8s.io images import grafana_8.4.5.tar.gz
unpacking docker.io/grafana/grafana:8.4.5 (sha256:b862eb2a74c35f1dedea901ec93f8303f8ea6f1125b5005ff719912ae31267b8)...done
[root@node2 ~]#

十四、master1节点上上传grafana配置文件及编辑此配置文件:

[root@master1 prometheus-k8s]# vim grafana.yaml     编辑grafana配置文件
 17     spec:
 18       nodeName: node1            添加节点名称为node1和node2
 19       nodeName: node2
[root@master1 prometheus-k8s]#
apiVersion: apps/v1
kind: Deployment
metadata:
  name: monitoring-grafana
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      task: monitoring
      k8s-app: grafana
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: grafana
    spec:
      nodeName: xianchaonode1
      containers:
      - name: grafana
        image: grafana/grafana:8.4.5
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/ssl/certs
          name: ca-certificates
          readOnly: true
        - mountPath: /var
          name: grafana-storage
        - mountPath: /var/lib/grafana/
          name: lib
        env:
        - name: INFLUXDB_HOST
          value: monitoring-influxdb
        - name: GF_SERVER_HTTP_PORT
          value: "3000"
          # The following env variables are required to make Grafana accessible via
          # the kubernetes api-server proxy. On production clusters, we recommend
          # removing these env variables, setup auth for grafana, and expose the grafana
          # service using a LoadBalancer or a public IP.
        - name: GF_AUTH_BASIC_ENABLED
          value: "false"
        - name: GF_AUTH_ANONYMOUS_ENABLED
          value: "true"
        - name: GF_AUTH_ANONYMOUS_ORG_ROLE
          value: Admin
        - name: GF_SERVER_ROOT_URL
          # If you're only using the API Server proxy, set this value instead:
          # value: /api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
          value: /
      volumes:
      - name: ca-certificates
        hostPath:
          path: /etc/ssl/certs
      - name: grafana-storage
        emptyDir: {}
      - name: lib
        hostPath:
         path: /var/lib/grafana/
         type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
  labels:
    # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
    # If you are NOT using this as an addon, you should comment out this line.
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: monitoring-grafana
  name: monitoring-grafana
  namespace: kube-system
spec:
  # In a production setup, we recommend accessing Grafana through an external Loadbalancer
  # or through a public IP.
  # type: LoadBalancer
  # You could also use NodePort to expose the service at a randomly-generated port
  # type: NodePort
  ports:
  - port: 80
    targetPort: 3000
  selector:
    k8s-app: grafana
  type: NodePort

十五、node1\node2创建grafana目录并添加777权限:

[root@node1 ~]# mkdir -p /var/lib/grafana     在node1、node2节点创建grafana的目录
[root@node1 ~]#
[root@node1 ~]# chmod 777 /var/lib/grafana    给grafana添加777权限
[root@node1 ~]#
[root@node2 ~]#  mkdir -p /var/lib/grafana
[root@node2 ~]#
[root@node2 ~]#
[root@node2 ~]# chmod 777 /var/lib/grafana
[root@node2 ~]#

十六、master1应用grafana的配置文件并查看grafana监控 的状态:

[root@master1 prometheus-k8s]# kubectl apply -f grafana.yaml     应用grafana的配置文件
deployment.apps/monitoring-grafana created
service/monitoring-grafana created
[root@master1 prometheus-k8s]# kubectl get pods -n kube-system | grep monitor   查看grafana的pod信息
monitoring-grafana-5b6798596c-lw25h        1/1     Running   0              22s
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl get svc -n kube-system | grep grafana
monitoring-grafana   NodePort    10.107.63.241   <none>        80:32424/TCP             4m37s
[root@master1 prometheus-k8s]#

十七、查看grafana的监控平台:

十八、安装kube-state-metrics组件

kube-state-metrics 是什么?

kube-state-metrics 通过监听 API Server 生成有关资源对象的状态指标,比如 Node、

Pod,需要注意的是 kube-state-metrics 只是简单的提供一个 metrics 数据,并不会

存储这些指标数据,所以我们可以使用 Prometheus 来抓取这些数据然后存储,主要关

注的是业务相关的一些元数据,比如 Pod 副本状态等;调度了多少个 replicas?现在

可用的有几个?多少个 Pod 是 running/stopped/terminated 状态?Pod 重启了多少次?

我有多少 job 在运行中。

十九、node1\node2节点上上传kube-state-metrics_1_9_0.tar镜像并运行此镜像

[root@node1 ~]# ctr -n k8s.io images import kube-state-metrics_1_9_0.tar.gz     node1导入kube-state-metrics的镜像
unpacking quay.io/coreos/kube-state-metrics:v1.9.0 (sha256:bf40aa1452dcefe34680c595995af1f4a72b7a480b3597fe863a3a5c4e8dde42)...done
[root@node1 ~]#
[root@node2 ~]# ctr -n k8s.io images import kube-state-metrics_1_9_0.tar.gz     node2导入kube-state-metrics的镜像
unpacking quay.io/coreos/kube-state-metrics:v1.9.0 (sha256:bf40aa1452dcefe34680c595995af1f4a72b7a480b3597fe863a3a5c4e8dde42)...done
[root@node2 ~]#

二十、master1 prometheus-k8s上传kube-state-metrics-rbac、prometheus-deploy配置文件

[root@master1 prometheus-k8s]# ls
grafana.yaml                  node-export.yaml     prometheus-deploy.yaml
kube-state-metrics-rbac.yaml  prometheus-cfg.yaml  prometheus-svc.yaml
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl apply -f kube-state-metrics-rbac.yaml     #应用kube-state-metrics-rbac配置文件
#kube-state-metrics-rbac 配置文件的目的:创建sa,并对sa进行授权
serviceaccount/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created

应用kube-state-metrics无状态的配置文件

[root@master1 prometheus-k8s]# kubectl apply -f kube-state-metrics-deploy.yaml
deployment.apps/kube-state-metrics created
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# ls
grafana.yaml  kube-state-metrics-deploy.yaml 看这个  kube-state-metrics-rbac.yaml  node-export.yaml  prometheus-cfg.yaml  prometheus-deploy.yaml  prometheus-svc.yaml
[root@master1 prometheus-k8s]# 

二十一、查看kube-state-metrics的状态

[root@master1 prometheus-k8s]# kubectl get pods -n kube-system -l app=kube-state-metrics 查看kube-state-metrics pod信息                                                                       NAME                                  READY   STATUS    RESTARTS   AGE
kube-state-metrics-66b85747b7-f6c95   1/1     Running   0          2m22s
[root@master1 prometheus-k8s]#

二十二、master1 prometheus-k8s上传kube-state-metrics-svc配置文件

[root@master1 prometheus-k8s]# kubectl apply -f kube-state-metrics-svc.yaml     应用kube-state-metrics服务的配置文件
service/kube-state-metrics created
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]# kubectl get svc -n kube-system -l app=kube-state-met           查看kube-state-metrics的服务                                                                  rics                                             查看kube-state-metrics的pod
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kube-state-metrics   ClusterIP   10.110.158.228   <none>        8080/TCP   74s
[root@master1 prometheus-k8s]#
[root@master1 prometheus-k8s]#

二十三、grafana上上传k8s集群的配置文件

二十四、grafana上传集群监控的配置文件

十二五、master1、node1、node2关机做快照,快照名称:

Prometheus和grafana配置完成

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇