当前位置: 首页 > news >正文

小阿轩yx-案例:Prometheus监控kubernetes环境构建

小阿轩yx-案例:Prometheus监控kubernetes环境构建

前言

  • 传统架构中比较流行的监控工具有 Zabbix、Nagios 等,这些监控工具对于 Kubernetes 这类云平台的监控不是很友好,特别是当 Kubernetes 集群中有了成千上万的容器后更是如此

基于 kubernetes 的 Prometheus 介绍

环境简介

  • node-exporter + prometheus + grafana 是一套非常流行的 Kubernetes 监控方案。

它们的功能

  • node-exporter:节点级指标导出工具,可以监控节点的 CPU、内存、磁盘、网络等指标,并暴露 Metrics 接口。
  • Prometheus:时间序列数据库和监控报警工具,可以抓取 Cadvisor 和 node-exporter 暴露的Metrics 接口,存储时序数据,并提供 PromQL 查询语言进行监控分析和报警。
  • Grafana:图表和 Dashboard 工具,可以査询 Prometheus 中的数据,并通过图表的方式直观展示 Kubernetes 集群的运行指标和状态。

监控流程

  • 在 Kubernetes 集群的每个节点安装 Cadvisor 和 node-exporter,用于采集容器和节点级指标数据。
  • 部署 Prometheus,配置抓取 Cadvisor 和 node-exporter 的 Metrics 接口,存储 containers 和nodes 的时序数据。
  • 使用 Grafana 构建监控仪表盘,选择 Prometheus 作为数据源,编写 PromQL 查询语句,展示K8S 集群的 CPU 使用率、内存使用率、网络流量等监控指标。
  • 根据监控结果,可以设置 Prometheus 的报警规则,当监控指标超过阈值时发送报警信息。这套方案能够全面监控 Kubernetes 集群的容器和节点,通过 Metrics 指标和仪表盘直观反映集群状态,并实现自动报警,非常适合 K8S 环境下微服务应用的稳定运行。

具体实现方案

  • node-exporter:在每个节点也作为 Daemonset 运行,采集节点 Metrics。
  • Prometheus:部署 Prometheus operator 实现,作为 Deployment 运行,用于抓取 Metrics 和报警。
  • Grafana:部署 Grafana Operator 实现,用于仪表盘展示。

Kubernetes 监控指标

K8S 本身的监控指标

  • CPU 利用率:包括节点 CPU 利用率、Pod CPU 利用率、容器 CPU 利用率等,用于监控 CPU 资源使用情况。
  • 内存利用率:包括节点内存利用率、Pod 内存利用率、容器内存利用率等,用于监控内存资源使用情况。
  • 网络流量:节点网络流量、Pod 网络流量、容器网络流量,用于监控网络收发包大小和带宽利用率。
  • 磁盘使用率:节点磁盘使用率,用于监控节点磁盘空间使用情况。
  • Pod 状态:Pod 的 Running、Waiting、succeeded、Failed 等状态数量,用于监控 Pod 运行状态。
  • 节点状态:节点的 Ready、NotReady 和 Unreachable 状态数量,用于监控节点运行状态。
  • 容器重启次数:单个容器或Pod 内所有容器的重启次数,用于监控容器稳定性。
  • API 服务指标:Kubernetes API Server 的请求 LATENCY、请求 QPS、错误码数量等,用于监控API Server 性能。
  • 集群组件指标:etcd、kubelet、kube-proxy 等组件的运行指标,用于监控组件运行状态。
  • 这些都是 Kubernetes集群运行状态的关键指标,通过Prometheus 等工具可以进行收集和存储,然后在 Grafana 中设计相应的 Dashboard 进行可视化展示。

当这些指标超出正常范围时,也可以根据阈值设置报警,保证 Kubernetes 集群和服务的稳定运行。

  • CPU 利用率超过 80%报警
  • 内存利用率超过 90%报警
  • 网络流量/磁盘空间突增报警
  • Pod/节点 NotReady 状态超过 10%报警
  • API Server 请求 LATENCY 超过 200ms 报警
  • etcd 节点 Down 报警等等

这些报警规则的设置需要根据集群大小和服务负载进行评估。

Prometheus 的安装

从 Github 克隆项目分支

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

  • release-0.10
root@k8s-master ~]# git clone -b release-0.10 https://github.com/prometheus-operator/kube-prometheus

安装 Prometheus Operator

  • Prometheus Operator 是 CoreOS 开源的项目,它提供了一种Kubernetes-native 的方式来运行和管理 Prometheus。
  • Prometheus operator 可以自动创建、配置和管理 Prometheus 实例,并将其与 Kubernetes 中的服务发现机制集成在一起,从而实现对 Kubernetes 集群的自动监控。

Prometheus 和 Prometheus Operator 的区别

  • Prometheus 是一种开源的监控系统,用于记录各种指标,并提供査询接口和告警机制。
  • PrometheusOperator 则是一种用于在 Kubernetes 上运行和管理 Prometheus 的解决方案。

相比于传统方式手动部署 Prometheus,Prometheus operator 可以自动创建、配置和管理 Prometheus 实例,并将其与Kubernetes 中的服务发现机制集成在一起,大幅简化了我们的工作量。

将镜像文件通过 Xftp 上传至 master、node01、node02三个节点(101、102、103)

将 kube-prometheus 文件单独上传至 master主节点(101)

开启会话同步

三台主机导入镜像

主机一(101)

[root@master ~]# cd images/
[root@master images]# bash imp_docker_img.sh

主机二(102)

[root@node01 ~]# cd images/
[root@node01 images]# bash imp_docker_img.sh

主机三(103)

[root@node02 ~]# cd images/
[root@node02 images]# bash imp_docker_img.sh

取消会话同步

进入 kube-prometheus 目录(在 master 节点)

[root@master ~]# cd kube-prometheus/

安装并应用服务

[root@master kube-prometheus]# kubectl apply --server-side -f manifests/setup

--server-side

  • 这个特性主要目标是把逻辑从 kubectl apply 移动到 kube-apiserver 中,这可以修复当前遇到的很多有关所有权冲突的问题。
  • 可以直接通过 API 完成声明式配置的操作,而无需依赖于特定的 kubectl apply 命令

如果要删除Prometheus Operator,可以使用下面的命令

kubectl delete --ignore-not-found=true -f manifests/setup

prometheus-operator 的作用主要是用来创建 prometheus 的相关资源以及监视与管理它创建出来的资源对象。

Operator 容器启动起来后安装 Prometheus Stack

[root@master kube-prometheus]# kubectl apply --server-side -f manifests/

删除 Prometheus stack

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
  • kube-prometheus-stack 是一个全家桶,提供监控告警组件 alert-manager、grafana 等子组件。

查看 Prometheus 容器的状态

[root@master kube-prometheus]# kubectl get pod -n monitoring
NAME                                  READY    STATUS    RESTARTS   AGE
alertmanager-main-0                   2/2      Running   0          79m
alertmanager-main-1                   2/2      Running   0          79m
alertmanager-main-2                   2/2      Running   0          79m
blackbox-exporter-746c64fd88-prn61    3/3      Running   0          87m
grafana-5fc7f9f55d-x4gv4              1/1      Running   0          87m
kube-state-metrics-6c8846558c-c6k55   3/3      Running   0          87m
node-exporter-hsr28                   2/2      Running   0          87m
node-exporter-tq7vv                   2/2      Running   0          87m
node-exporter-znsll                   2/2      Running   0          87m
prometheus-adapter-6455646bdc-99lgh   1/1      Running   0          87m
prometheus-adapter-6455646bdc-nxh5z   1/1      Running   0          87m
prometheus-k8s-0                      2/2      Running   0          79m
prometheus-k8s-1                      2/2      Running   0          79m
prometheus-operator-f59c8b954-hmtx8   2/2      Running   0          87m

查看servicemonitors

  • servicemonitors 定义了如何监控一组动态的服务,使用标签选择来定义哪些 Service 被选择进行监控。
  • 这可以让团队制定一个如何暴露监控指标的规范,然后按照这些规范自动发现新的服务,无需重新配置。
  • 为了让 Prometheus 监控 Kubernetes 内的任何应用,需要存在一个 Endpoints 对象,Endpoints 对象本质上是 IP 地址的列表,通常 Endpoints 对象是由 Service 对象来自动填充的,Service 对象通过标签选择器匹配 Pod,并将其添加到 Endpoints 对象中。
  • 一个 Service 可以暴露一个或多个端口,这些端口由多个 Endpoints 列表支持,这些端点一般情况下都是指向一个 Pod。
  • Prometheus operator 引入的这个 ServiceMonitor 对象就会发现这些 Endpoints 对象,并配置 Prometheus 监控这些 Pod,ServiceMonitorspec 的 endpoints 部分就是用于配置这些Endpoints的哪些端口将被 scrape 指标的。
  • Prometheus Operator 使用 ServiceMonitor 管理监控配置。

ServiceMonitor 的创建方法

[root@master kube-prometheus]# kubectl get servicemonitors
monitors    alertmanager-main          2m6s
monitors    blackbox-exporter          2m6s
monitors    coredns                    2m6s
monitors    grafana                    2m6s
monitors    kube-apiserver             2m6s
monitors    kube-controller-manager    2m6s
monitors    kube-scheduler             2m6s
monitors    kube-state-metrics         2m7s
monitors    kubelet                    2m6s
monitors    node-exporter              2m6s
monitors    prometheus-adapter         2m5s
monitors    prometheus-k8s             2m6s
monitors    prometheus-operator        2m5s

修改 grafana 的 service 的类型为 NodePort

默认的 type 为 ClusterIP 的类型

[root@master kube-prometheus]# kubectl edit svc grafana -n monitoring
spec:clusterIp: 10.107.64.140clusterIPs:- 10.107.64.140externalTrafficPolicy: clusterinternalTrafficPolicy: clusteripFamilies:- IPV4ipFamilyPolicy: singlestackports:- name: httpnodePort: 32082port: 3000protocol: TCPtargetPort: httpselector:app.kubernetes.io/component:grafanaapp.kubernetes.io/name:grafanaapp.kubernetes.io/part-of: kube-prometheussessionAffinity: Nonetype: NodePort
status :loadBalancer: {}
  • nodePort: 32082
  • type: NodePort

获取服务信息

[root@master kube-prometheus]# kubectl get svc grafana -n monitoring
NAME        TYPE        CLUSTER-IP     EXTERNAL-IP    PORT(S)            AGE
grafana     NodePort    10.99.26.98    <none>         3000:32082/TCP     28m

访问 grafana

  • http://192.168.10.101:32082

  • 默认的登录账号密码为 admin/admin,第一次登陆会提示修改密码,不想修改可以点击 skip 跳过

修改 Prometheus 的 Service 类型

  • 将 type 类型修改为 NodePort,默认的是 ClusterIP
[root@master kube-prometheus]# kubectl edit svc prometheus-k8s -n monitoring
apiVersion: v1
kind: Service
metadata:creationTimestamp: "2023-04-05T03:49:40Z'labels :app.kubernetes.io/component: prometheusapp.kubernetes.io/instance: k8sapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 2.32.1name: prometheus-k8snamespace: monitoringresourceVersion: "4615"uid: 9bdba2d2-a7e6-4bf2-9e3d-355d5e3de646
spec:clusterIp: 10.100.14.27clusterIPs:- 10.100.14.27externalTrafficPolicy: clusterinternalTrafficPolicy: clusteripFamilies:- IPV4ipFamilyPolicy: singlestackports:- name: webnodePort: 32370port: 9090protocol: TCPtargetPort: web- name: reloader-webnodePort: 31480port: 8080protocol: TCPtargetPort: reloader-webselector:app.kubernetes.io/component: prometheusapp.kubernetes.io/instance: k8sapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of:kube-prometheussessionAffinity: clientIPsessionAffinityConfig:clientIP:timeoutSeconds: 10800type: NodePort
status :loadBalancer: {}
  • nodePort: 32370
  • type: NodePort

获取 服务信息

[root@master kube-prometheus]# kubectl get svc grafana -n monitoring
NAME               TYPE        CLUSTER-IP       EXTERNAL-IP    PORT(S)            AGE
prometheus-k8s     NodePort    10.105.187.25    <none>         9090:32370/TCP     28m

访问 Prometheus

  • http://192.168.10.101:32370

查看监控目标

在 Prometheus 中一条告警规则有三个状态

  • inactive:还未被触发;
  • pending:已经触发,但是还未达到for 设定的时间;
  • firing:触发且达到设定时间。

配置 Grafana Dashboard

添加数据源

本案例中,grafana 已经有了 Prometheus 的数据源(1)(2)(3)步骤可以省去

添加数据源

  • 单击 Dashboards 按钮(四方块图标),选择 “Add your first data source”

数据源选择 Prometheus

  • 鼠标放到 Prometheus 上,选择最右侧的 “Select” 按钮

配置数据源

  • HTTP 配置项下的 URL 填写 “http://prometheus-k8s:9090”,这里的 prometheus 是 K8s 集群内的 Service 名,也可以使用 IP 地址代替
  • 然后点击页面底部的 “Save & Test” 按钮,保存并确定测试通过

通过 Node id 导入监控模板

  • 单击首页左侧搜索框下面的+的按钮
  • 选择 import 按钮,输入监控模板 id:13105
  • 单击 Load 按钮加载即可,最后单击 Import 按钮导入

  • 完成上述步骤后,可以査看到 Node 节点在 Dashbord 监控页面展示情况

其它模板

  • 可以去官网查找更丰富的模板

https://grafana.com/grafana/dashboards/

常见的模板有

Kubernetes cluster

  • 7249

Docker Registry

  • 9621

Docker and system monitoring

  • 893

K8S for Prometheus Dashboard 20211018中文版

  • 13105

Kubernetes Pods

  • 4686

Linux stats with Node Exporter

  • 14731

添加云原生监控项

  • 前面对 Prometheus 相关知识做了一定的了解,也理解了云原生和非云原生应用的监控流程。
  • 但是,在安装Prometheus 的时候,并没有对 ETCD 集群进行监控,ETCD 集群时 kubernetes的数据库,掌握着 kubernetes 最核心的数据,ETCD 的状态和性能直接影响 kubernetes 集群的状态,所以对 ETCD 集群的监控时非常重要的。
  • kubernetes 有一个Metrics 接口,可以直接获取内部的运行信息
  • 比如 ETCD 的内部数据可以通过 2379 的 Metrics 端口得到,和之前的 kubelet 类似。

不同的是,ETCD 对外的接口必须通过 HTTPS 访问,所以在请求时需要加上对应的证书。

创建 ETCD Service

[root@k8s-master kube-prometheus]# cat etcd-svc.yaml
apiVersion: v1
kind: Endpoints
metadata:labels:app: etcd-promname: etcd-promnamespace: kube-system
subsets:
- addresses: - ip: 192.168.10.101- ip: 192.168.10.102- ip: 192.168.10.103ports:- name: https-metricsport: 2379   # etcd端口protocol: TCP
---apiVersion: v1
kind: Service 
metadata:labels:app: etcd-promname: etcd-promnamespace: kube-system
spec:ports:- name: https-metricsport: 2379protocol: TCPtargetPort: 2379type: ClusterIP
  • kubeadm 安装的 k8s 只有master节点上安装了 etcd。

创建 ETCD Service

[root@k8s-master kube-prometheus]# kubectl create -f etcd-svc.yaml

查看创建的 ETCD Service

[root@k8s-master kube-prometheus]# kubectl get svc n kube-system etcd-prom
NAME        TYPE        CLUSTER-IP        EXTERNAL-IP    PORT(S)    AGE
etcd-prom   ClusterIP   10.109.39.124     <none>         2379/TCP   36s

通过 ClusterIP 访问测试

[root@k8s-master kube-prometheus]# curl --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.keyhttps://192.168.10.101:2379/metrics
  • ServiceMonitor 需要配置证书才能请求 ETCD的Metrics 接口。

创建 ETCD 证书的 Secret

[root@k8s-master kube-prometheus]# kubectl -n monitoring create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/ca.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key
  • Secret 是Kubernetes 中的一种资源对象类型,用来保护感信息
  • 例如密码、令牌等信息,将这些信息放在 Secret 中是比较安全的做法。

修改 prometheus 资源,应用上一步创建的 secret

[root@k8s-master ~]# kubectl edit prometheus k8s -n monitoring
#添加内容(在末尾添加红色的两行)
serviceMonitorSelector: {}
version: 2.32.1
secrets:
- etcd-certs
  • secrets:
  • - etcd-certs

kubectl edit prometheus k8s -n monitoring

prometheus:资源对象类型

k8s资源对象名称

查看证书

[root@k8s-master kube-prometheus]# kubectl -n monitoring exec -it prometheus-k8s-0 -c prometheus -- sh
[root@k8s-master kube-prometheus]# ls /etc/prometheus/secrets/etcd-certs/
ca.crt    healthcheck-client.crt healthcheck-client.key
  • 需要等一小会才会看见这三个证书文件

创建 ETCD ServiceMonitor

[root@k8s-master kube-prometheus]# kubectl get pod -Agrep etcd
kube-system    etcd-k8s-master    1/1    Running    2(19m ago)    15d
[root@k8s-master kube-prometheus]# kubectl expose pod -n kube-systemetcd-k8s-master --name=etcd-k8s --port=2379 --target-port=2379

创建 service,并给 port 添加 name

  • 给名为 etcd-k8s 的 svc,添加 name 的声明
[root@k8s-master kube-prometheus]# kubectl -n kube-system edit svc etcd-k8s
apiVersion:v1
kind:Service
metadata :creationTimestamp: "2023-04-08T08:47:51Z"labels:component: etcdtier: control-planename: etcd-k8snamespace: kube-systemresourceVersion: "4730'uid: 223d93f1-908c-47c2-9423-64a4e306c0a2
spec:clusterIp: 10.106.142.218clusterIPs:- 10.106.142.218internalTrafficPolicy: ClusteripFamilies:- IPV4ipFamilyPolicy: singlestackports:- port: 2379protocol: TCPtargetPort: 2379name: apiselector:component: etcdtier: control-planesessionAffinity:Nonetype: clusterIP
status:loadBalancer: {}
  • name: api

创建 Etcd-ServiceMonitor.yaml

[root@k8s-master kube-prometheus]# vim Etcd-ServiceMonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: etcd-k8snamespace: monitoringlabels:k8s-app: etcd-k8s
spec:jobLabel: k8s-appendpoints:- port: apiinterval: 30sscheme: httpstlsConfig:caFile: /etc/prometheus/secrets/etcd-certs/ca.crtcertFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.crtkeyFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.keyinsecureSkipVerify: trueselector:matchLabels:component: etcdnamespaceSelector:matchNames:- kube-system

应用 Etcd-ServiceMonitor.yaml

[root@k8s-master kube-prometheus]# kubectl apply -f Etcd-serviceMonitor.yaml

查看监控目标

  • 多了一个 ETCD

在 grafana 中添加 ETCD 监控模板

  • 模板 ID:9618

添加非云原生监控项

  • 非云原生应用(如 MySQL、Redis、Kafka 等)没有暴露 Metrics 接口,所以可以使用对应的 Exporter 采集数据,并暴露Metrics 接口。
  • 本案例使用 MySQL 作为一个测试用例,使用 Exporter 监控非云原生应用。

在 Kubernetes 中安装一个 mysql

[root@k8s-master ~]# kubectl create deploy mysql --image=mysql:5.7.23

设置 mysql 密码

[root@k8s-master ~]# kubectl set env deploy/mysql MYSOL_ROOT_PASSWORD=pwd123
  • 需要先设置密码,mysql 的 pod 状态才能正常

查看 pod

[root@k8s-master ~]# kubectl get pod
NAME                      READY    STATUS     RESTARTS   AGE
mysql-58dd9c4df4-17fgd    1/1      Running    6          2m53s

创建 service,暴露 mysql 端口

[root@k8s-master ~l# kubectl expose deployment mysql --type NodePort --port=3306

获取信息

[root@k8s-master ~]# kubectl get svc -l app=mysql
NAME        TYPE        CLUSTER-IP        EXTERNAL-IP    PORT(S)        AGE
mysql       NodePort    10.96.116.184     <none>         3306:31152/TCP 37S

安装 mysql

[root@k8s-master ~]# yum -y install mysql

访问测试

[root@k8s-master ~]# mysql -u root -ppwd123 -h 192.168.10.101 -P 31152

设置权限

[root@k8s-master ~]# grant all on *.* to exporter@'%' identified by 'exporter';

配置 mysql exporter 采集 mysql 监控文件

[root@k8s-master ~]# cat mysql-exporter.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-exporternamespace: monitoring
spec:replicas: 1selector:matchLabels:k8s-app: mysql-exportertemplate:metadata:labels:k8s-app: mysql-exporterspec:containers:- name: mysql-exporterimage: registry.cn-beijing.aliyuncs.com/dotbalo/mysqld-exporter env:- name: DATA_SOURCE_NAMEvalue: "exporter:exporter@(mysql.default:3306)/"imagePullPolicy: IfNotPresentports:- containerPort: 9104
---
apiVersion: v1
kind: Service
metadata:name: mysql-exporternamespace: monitoringlabels:k8s-app: mysql-exporter
spec:type: ClusterIPselector:k8s-app: mysql-exporterports:- name: apiport: 9104protocol: TCP

将文件创建出来

[root@k8s-master ~]# kubectl create -f mysql-exporter.yaml

获取文件信息

[root@k8s-master ~]# kubectl get -f mysql-exporter.yaml
NAME                              READY    UP-TO-DATE    AVAILABLE    AGE
deployment.apps/mysql-exporter      1/1      1             1            84s
NAME                              READY        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/mysql-exporter            ClusterIp    10.109.16.46  <none>        9104/TCP   84s

测试能否获取 metrics 数据

[root@k8s-master ~]# curl 10.109.16.46:9104/metricstail -1
% Total    % Received %Xferd Average Speed Time    Time CurrentDload Upload    Total    Spent    Left Speed
100    130k    0 130k    0    0 2923k    0 --:--:-- --:--:-- --:--:-- 2973k
promhttp metric_handler_requests_total{code="503"} 0

配置 ServiceMonitor

[root@k8s-master ~]# cat mysql-sm.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: mysql-exporternamespace: monitoringlabels:k8s-app: mysql-exporternamespace: monitoring
spec:jobLabel: k8s-appendpoints:- port: apiinterval: 30sscheme: httpselector:matchLabels:k8s-app: mysql-exporternamespaceSelector:matchNames:- monitoring

创建这个 ServiceMonitor

[root@k8s-master ~]# kubectl create -f mysql-sm.yaml

在 prometheus 查看监控目标中是否出现了 mysql

在 grafana 中添加 mysql 监控模板

  • 模板 ID:6239

添加外部主机

https://github.com/prometheus-community

  • 下载 windows 版 exporter 监控程序并安装
  • 安装后会自动开启 9182 的端口给 prometheus

Linux 被监控端安装 node_exporter

将所需的源码包上传至主机 master(101)

解压

[root@k8s-master ~]# tar zxvf node exporter-1.7.0.linux-amd64.tar.gz

移动文件到指定目录下

[root@k8s-master ~]# mv node exporter-1.7.0.linux-amd64 /usr/local/node exporter

添加服务为系统服务

[root@k8s-master ~]# vim /usr/lib/systemd/system/node exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/usr/local/node exporter/node exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务

[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl start node_exporter
[root@k8s-master ~]# systemctl enable node_exporter

查看端口

[root@k8s-master ~]# netstat -anpt grep 9100
tcp6    0    0 :::9100    :::*    LISTEN    6352/node_exporter

windows 被监控端安装 windows_exporter

打开一个 windows 系统(以 win10 系统演示)

将所需的程序包复制或上传至 win10 系统

只需鼠标双击运行就OK

创建一个 Prometheus 的静态配置,用来指定外部主机

[root@k8s-master ~]# vim prometheus-additional.yaml
- job_name: 'WindowsServerMonitor'static_configs:- targets:- "192.168.10.50:9182"labels:server_type: "windows"relabel_configs:- source_labels: [__address__]target_label: instance
  •  - "192.168.10.50:9182"
  • Linux 主机的 exporter 进程监听的是TCP 9100 端口
  • windows 主机的exporter 进程监听的TCP 9182 端口

通过上面的文件创建一个 secret,作为 prometheus 的静态配置

[root@k8s-master ~]# kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring

查看是否创建成功

[root@k8s-master ~]# kubectl get secret additional-configs -n monitoring
NAME                    TYPE        DATA    AGE
additional-configs      Opaque      1       16m

修改 prometheus 的配置

[root@k8s-master ~]# kubectl edit prometheus-n monitoring
添加红色部分到末尾即可:runAsUser: 1000
serviceAccountName: prometheus-k8s
serviceMonitorNamespaceselector: {}
serviceMonitorSelector: {}
version: 2.32.1
additionalscrapeConfigs:key: prometheus-additional.yamlname: additional-configsoptional: true
  • additionalscrapeConfigs:
  •   key: prometheus-additional.yaml
  •   name: additional-configs
  •   optional: true

查看是否自动加载成功

[root@k8s-master ~]# kubectl get secret -n monitoring

查看创建出来的 secret

[root@k8s-master ~]# kubectl get secret additional-configs -n monitoring -oyaml
apiVersion:v1
data:prometheus-additional.yaml:
LSBgb2JfbmFtzTogJ1dpbmRvd3NTZXJ2ZXJNb25pdG9yJWogIHNYXRpY19jb25maWdzOgOgICAgLSBOYX]nZXRZOgOgICAgICAtICIXOTIUMTY4LjEWLjUxOjkxODIiCiAgICAgIGxhYmVSCZOKICAgICAgICBzZXJ2ZXJfdHlwZTogIndpbmRvd3MiciAgcmVsYW]1bF9jb25maWdz0gogICAgLSBzb3VyY2VfbGFiZWxz0iBbX19hZGRyZXNzX19dCiAgICAgIHRhcmdldF9sYWJlbDogaW5zdGFuY2UK
kind: Secret
metadata:creationTimestamp: "2022-10-19T13:01:30Z'name: additional-configsnamespace: monitoringresourceVersion: "16897"uid: 6d7a4c50-2a15-46d3-bfab-505b8fd74fcb
type: opaque

查看 prometheus 监控目标

在 grafana 中添加监控模板

  • 模板 ID:12566
  • 此模板是针对 windows 服务器的。
  • 用户也可以选择其他对应的模板进行创建。
  • 12633:针对 Linux 的节点进行监控的模板
  • 14694:针对 windows 的节点进行监控的模板

小阿轩yx-案例:Prometheus监控kubernetes环境构建

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • R树(R-tree索引)
  • 数据结构与算法学习day21-回溯法
  • 好用的网页翻译插件
  • 01 Vim 编辑器的简单使用
  • 【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显示网格与隐式网格(中)
  • uni-data-select 使用 localdata 传入数据出现 不回显 | 下拉显示错误的 解决方法
  • 什么是多模态大模型?
  • LNMP的简单安装(ubuntu)
  • 08 Shell Script条件判断
  • Vue3 Day1Day2-Vue3优势ref、reactive函数
  • vue 给循环列表的选中项加样式
  • 《仙境传说RO:新启航》游戏攻略,VMOS云手机辅助高效挂机助攻!
  • 【Elasticsearch系列十二】聚合-电视案例
  • 大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略
  • 【计算机网络】UDP 协议详解及其网络编程应用
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Docker容器管理
  • ES6核心特性
  • js正则,这点儿就够用了
  • maven工程打包jar以及java jar命令的classpath使用
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • WePY 在小程序性能调优上做出的探究
  • Windows Containers 大冒险: 容器网络
  • 构建二叉树进行数值数组的去重及优化
  • 将回调地狱按在地上摩擦的Promise
  • 力扣(LeetCode)965
  • 排序算法学习笔记
  • 判断客户端类型,Android,iOS,PC
  • 硬币翻转问题,区间操作
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (2)STM32单片机上位机
  • (2015)JS ES6 必知的十个 特性
  • (javascript)再说document.body.scrollTop的使用问题
  • (八十八)VFL语言初步 - 实现布局
  • (层次遍历)104. 二叉树的最大深度
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .aanva
  • .NET 使用 XPath 来读写 XML 文件
  • .net 受管制代码
  • .net 怎么循环得到数组里的值_关于js数组
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • @AliasFor注解
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [100天算法】-目标和(day 79)
  • [Android]一个简单使用Handler做Timer的例子
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [Asp.net MVC]Bundle合并,压缩js、css文件