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

news2024/9/20 15:52:58

小阿轩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环境构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

662. 二叉树最大宽度 BFS 力扣

662. 二叉树最大宽度 已解答 中等 相关标签 相关企业 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长…

【工具变量】数字乡村试点区县DID(2000-2023)

数据简介&#xff1a;数字乡村试点政策是中国政府为了推动乡村数字化转型、促进乡村振兴而实施的一项重要战略。根据2020年7月18日中国政府网发布的《关于开展国家数字乡村试点工作的通知》&#xff0c;试点工作的目标是到2021年底&#xff0c;试点地区数字乡村建设取得明显成效…

自动泊车系统中的YOLOv8 pose关键点车位线检测

自动泊车系统中的YOLOv8关键点车位线检测技术解析 引言 随着智能驾驶技术的快速发展&#xff0c;自动泊车功能成为了现代汽车的重要组成部分。它不仅能够提高驾驶的安全性&#xff0c;还能在一定程度上解决城市停车难的问题。在自动泊车系统中&#xff0c;准确识别停车位的位置…

微信 SDK、NCF 、CO2NET、Senparc.AI 近期重大更新,欢迎解锁

◾️更新基础库&#xff0c;包括缓存、APM、CO2NET 核心模块等全面升级&#xff1b; ◾️更新支付接口调用过程中的 SM&#xff08;国密&#xff09;和 RSA 判断方式&#xff1b; ◾️更新微信 SDK 接口 Senparc.Weixin SDK ✍️v2024.9.10 更新基础库&#xff0c;包括缓…

解决nginx代理SSE接口的响应没有流式返回

目录 现象原来的nginx配置解决 现象 前后端分离的项目&#xff0c;前端访问被nginx反向代理的后端SSE接口&#xff0c;预期是流式返回&#xff0c;但经常是很久不响应&#xff0c;一响应全部结果一下子都返回了。查看后端项目的日志&#xff0c;响应其实是流式产生的。推测是n…

Python 课程16-OpenCV

前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个广泛使用的开源计算机视觉库&#xff0c;旨在为实时图像处理提供高效的计算工具。它提供了数百种算法和函数&#xff0c;用于处理图像和视频。OpenCV 在工业、学术研究和个人项目中应用广泛&…

鸿蒙开发之ArkUI 界面篇 十二 背景属性

backgroundColor背景色(纯颜色&#xff0c;没法实现立体感之类高级效果)、 backgroundImage背景图(一般是设计师设计好的图)、 backgroundImageSize背景图尺寸(用于调整背景图的尺寸)、 backgroundImagePosition背景图位置(用于调整背景图的位置)。 背景图的添加是属性backgrou…

在家找不到手机?除了语音助手,还可以用远程控制!

总说手机有定位功能&#xff0c;但手机定位一般只能用于室外较大范围&#xff0c;例如在某个街角交叉位置、某个公园位置&#xff0c;某幢楼的某层位置。如果是在室内&#xff0c;例如自己家&#xff0c;手机定位就显得没那么好用了。 在家里怎么找突然“失踪”的手机&#xff…

Android RecycleView 深度解析与面试题梳理

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 引言 在 Android 开发中&#xff0c;列表和网格布局是非常常见的界面元素&#xff0c;它们用于展示大量数据集合。RecyclerView 是 Android 提…

Leetcode 470. 用 Rand7() 实现 Rand10()

Leetcode 470. 用 Rand7() 实现 Rand10() 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数&#xff0c;试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。 不要使用系统的 Math.random() 方法。 示例 1: 输入: 1 输出: [7] 示例 2: 输入: 2 输出: [8,4] 示例 3…

OTA升级

方式1: 方式2: 服务器与mcu通讯机制

LeetCode[简单] 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 思路&#xff1a;类似与二分查找 唯一需要注意的是&#xff0c;搜索…

vulnhub靶机:Fristileaks 详细过程

下载 下载地址&#xff1a;https://www.vulnhub.com/entry/fristileaks-13,133/ 修改网卡 网卡设置为nat模式&#xff0c;并修改mac地址为 08:00:27:A5:A6:76 信息收集 主机发现 arp-scan -l 发现靶机 IP 是 192.168.109.178 端口扫描 nmap -p- -A 192.168.109.178 目录…

AI基础 L27 Introduction to Automated Planning - III

Complexity Analysis • Complexity analyses are done on decision problems or language-recognition problems — Problems that have yes-or-no answers • A language is a set L of strings over some alphabet A — Recognition procedure for L ◦ A procedure R(x) th…

情感识别系统源码分享

情感识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

人工智能开发实战常用分类算法归纳与解析

内容导读 决策树贝叶斯分类器最近邻分类器支持向量机神经网络 一、决策树 决策树(Decision Tree)是用于决策的一棵树&#xff0c;从根节点出发&#xff0c;通过决策节点对样本的不同特征属性进行划分&#xff0c;按照结果进入不同的分支&#xff0c;最终达到某一叶子节点&am…

基于yolov8的肉鸡健康状态检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的肉鸡健康状态检测系统是一个先进的目标检测应用&#xff0c;旨在通过图像分析实现对肉鸡健康状态的快速、准确评估。该系统利用了YOLOv8模型的尖端技术&#xff0c;该模型由Ultralytics公司开发&#xff0c;具有卓越的检测精度和速度。 YOLOv8模型采…

新书出版,大陆首本NestJS图书《NestJS全栈开发解析:快速上手与实践》

新书全栈实战项目&#xff1a;数字门店管理平台开源啦&#x1f389;&#x1f389;&#x1f389; GitHub地址&#xff08;持续更新NestJS企业级实践&#xff09;&#xff1a;欢迎star⭐️⭐️⭐️ 前端ReactTypeScriptVite 后端NestMySQLRedisDocker 前言 对&#xff0c;你没看…

教程 | ArcGIS Pro如何自动保存数据编辑内容

目录 1、工程自动保存 2、数据编辑自动保存 世界上最痛苦的事情就是&#xff1a; 软件崩溃&#xff0c;我没保存&#xff01;&#xff01;&#xff01; 电脑死机&#xff0c;我没保存&#xff01;&#xff01;&#xff01; 突然断电&#xff0c;我没保存&#xff01;&…

星云股份战略运营副总裁袁智勇︱如何培养“能打胜仗”的项目经理

全国项目经理专业人士年度盛会 福建星云电子股份有限公司总裁办战略运营副总裁袁智勇先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“如何培养“能打胜仗”的项目经理”。大会将于10月26-27日在北京举办&…