小阿轩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.140
clusterIPs:
- 10.107.64.140
externalTrafficPolicy: cluster
internalTrafficPolicy: cluster
ipFamilies:
- IPV4
ipFamilyPolicy: singlestack
ports:
- name: http
nodePort: 32082
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
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: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.32.1
name: prometheus-k8s
namespace: monitoring
resourceVersion: "4615"
uid: 9bdba2d2-a7e6-4bf2-9e3d-355d5e3de646
spec:
clusterIp: 10.100.14.27
clusterIPs:
- 10.100.14.27
externalTrafficPolicy: cluster
internalTrafficPolicy: cluster
ipFamilies:
- IPV4
ipFamilyPolicy: singlestack
ports:
- name: web
nodePort: 32370
port: 9090
protocol: TCP
targetPort: web
- name: reloader-web
nodePort: 31480
port: 8080
protocol: TCP
targetPort: reloader-web
selector:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of:kube-prometheus
sessionAffinity: clientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
type: 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-prom
name: etcd-prom
namespace: kube-system
subsets:
- addresses:
- ip: 192.168.10.101
- ip: 192.168.10.102
- ip: 192.168.10.103
ports:
- name: https-metrics
port: 2379 # etcd端口
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: etcd-prom
name: etcd-prom
namespace: kube-system
spec:
ports:
- name: https-metrics
port: 2379
protocol: TCP
targetPort: 2379
type: 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: etcd
tier: control-plane
name: etcd-k8s
namespace: kube-system
resourceVersion: "4730'
uid: 223d93f1-908c-47c2-9423-64a4e306c0a2
spec:
clusterIp: 10.106.142.218
clusterIPs:
- 10.106.142.218
internalTrafficPolicy: Cluster
ipFamilies:
- IPV4
ipFamilyPolicy: singlestack
ports:
- port: 2379
protocol: TCP
targetPort: 2379
name: api
selector:
component: etcd
tier: control-plane
sessionAffinity:None
type: 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-k8s
namespace: monitoring
labels:
k8s-app: etcd-k8s
spec:
jobLabel: k8s-app
endpoints:
- port: api
interval: 30s
scheme: https
tlsConfig:
caFile: /etc/prometheus/secrets/etcd-certs/ca.crt
certFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.crt
keyFile: /etc/prometheus/secrets/etcd-certs/healthcheck-client.key
insecureSkipVerify: true
selector:
matchLabels:
component: etcd
namespaceSelector:
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-exporter
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
k8s-app: mysql-exporter
template:
metadata:
labels:
k8s-app: mysql-exporter
spec:
containers:
- name: mysql-exporter
image: registry.cn-beijing.aliyuncs.com/dotbalo/mysqld-exporter
env:
- name: DATA_SOURCE_NAME
value: "exporter:exporter@(mysql.default:3306)/"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9104
---
apiVersion: v1
kind: Service
metadata:
name: mysql-exporter
namespace: monitoring
labels:
k8s-app: mysql-exporter
spec:
type: ClusterIP
selector:
k8s-app: mysql-exporter
ports:
- name: api
port: 9104
protocol: 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 Current
Dload 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-exporter
namespace: monitoring
labels:
k8s-app: mysql-exporter
namespace: monitoring
spec:
jobLabel: k8s-app
endpoints:
- port: api
interval: 30s
scheme: http
selector:
matchLabels:
k8s-app: mysql-exporter
namespaceSelector:
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.yaml
name: additional-configs
optional: 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-configs
namespace: monitoring
resourceVersion: "16897"
uid: 6d7a4c50-2a15-46d3-bfab-505b8fd74fcb
type: opaque
查看 prometheus 监控目标
在 grafana 中添加监控模板
- 模板 ID:12566
- 此模板是针对 windows 服务器的。
- 用户也可以选择其他对应的模板进行创建。
- 12633:针对 Linux 的节点进行监控的模板
- 14694:针对 windows 的节点进行监控的模板
小阿轩yx-案例:Prometheus监控kubernetes环境构建