k8s中使用prometheus operator监控外部服务器部署的windows exporter

文档说明

(1)Prometheus Operator是一个流行的k8s集群监控套件,项目地址:https://github.com/prometheus-operator/kube-prometheus,在参考文档部署前,请先确保在k8s环境中已经部署成功Prometheus Operator组件

(2)本文档通过 ServiceMonitor 方式部署监控信息,至于其他方式的部署,这里不做说明

(3)在k8s中监控外部资源,并不仅限于windows exporter,可以是k8s外部任意类型的服务对应的exporter,例如Node、Mysql、Redis、etcd等。本文档中部署的10.1.121.157为非集群节点

(4)Windows Exporter 由 Prometheus Community 维护的一个采集 Windows 机器指标的采集器,支持 Windows Server 2008R2 以上版本或者 Windows 7 以上版本,官方地址是:https://github.com/prometheus-community/windows_exporter,当前版本是 v0.20.0。

(5)在参考本文档之前,请先确保外部服务器已经安装成功 windows exporter,关于windows exporter的安装,这里不再说明,windows exporter的下载地址如下:https://github.com/prometheus-community/windows_exporter/releases

(6)版本说明

资源名称

版本信息

说明

Kubernetes

v1.23.7

k8s服务器

Kuboard

v3.5.2.0

k8s连接管理工具

windows exporter

v0.20.0

windows exporter版本

prometheus operator

v0.43.2

prometheus operator版本

Grafana

v9.0.2

Grafana版本

1、部署操作步骤

1.1、外部服务器安装windows exporter

(1)Windows Exporter 在发布的时候提供了两种格式的文件,即 *.exe 和 *.msi 。MSI (Microsoft Installers)是 Windows 的包管理器,类似于 Linux 的 rpm。Windows Exporter 每个版本都提供一个 .msi 安装程序。安装程序将 windows_exporter 设置为 Windows 服务,并在 Windows 防火墙中创建一个异常。我们在使用的时候可以选择任意一种格式来进行安装。下载地址如下:https://github.com/prometheus-community/windows_exporter/releases

(2)关于windows exporter的安装,这里不再对此说明,可以参考如下安装:https://help.aliyun.com/document_detail/463494.html

1.2、在k8s中创建Service

在k8s容器中需要为外部服务器上安装的windows exporter定义一个不需要Pod的Service,从而将k8s与外界服务器建立联系。外部服务器的服务定义与k8s中普通服务定义非常相似,对应的yml文件如下:

apiVersion: v1
kind: Service
metadata:
  name: windows-exporter-157
  namespace: prometheus-exporter
  labels:
    app: windows-exporter-157
    app.kubernetes.io/name: windows-exporter-157
spec:
  clusterIP: None
  ports:
  - name: metrics
    port: 9182
    protocol: TCP
    targetPort: 9182

说明:

(1)windows_exporter默认端口是9182,这里配置的端口号和外部服务器安装的windows exporter保持一致

(2)这里部署的Service下没有关联pod,仅是一个单独的service,需要建立endpoints将其外部服务与service建立关联

1.3、为创建的Service建立endpoints
apiVersion: v1
kind: Endpoints
metadata:
    name: windows-exporter-157
    namespace: prometheus-exporter
    labels:
      app: windows-exporter-157
      app.kubernetes.io/name: windows-exporter-157
subsets:
- addresses:
  # 这里是外部资源列表
  - ip: 10.1.121.157
  ports:
  - name: metrics
    port: 9182

说明:

(1)Service名称必须和Endpoints名称一致才能使Service指向对应的资源

(2)通过采用IP指定的方式,将endpoints与外部资源关联起来

1.4、在k8s中创建ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: windows-exporter-157
  namespace: prometheus-exporter
  labels:
    app: windows-exporter-157
    release: prometheus
spec:
  selector:
    matchLabels:
      app: windows-exporter-157
  namespaceSelector:
    matchNames:
      - prometheus-exporter
  endpoints:
    - port: metrics
      interval: 1m
      path: /metrics
      scheme: http

说明:

(1)服务创建完成需要配置一个ServiceMonitor来监控服务监控采集地址,默认情况下监控采集地址为 /metrics

(2)Service Monitor中endpoints配置部分的port名称与之前部署的endpoints保持一致

1.5、在k8s中查看监控数据
1.5.1、Prometheus Targets
1.5.2、Grafana dashboard

Grafana dashboard中导入的看板ID为:10467,grafana模板地址如下:https://grafana.com/grafana/dashboards/,windows exporter对应的监控指标以官方文档为准,因为在导入模板进行数据展示的时候,发现有些监控指标已经更改了名称,当然监控指标也可以在上述内容部署成功之后,通过prometheus的可视化界面查询得到当前监控的指标数据(官方文档地址:https://github.com/prometheus-community/windows_exporter/blob/master/docs/README.md),所以针对监控指标表示的意思这里不再进行说明,感兴趣的小伙伴可以参考官方说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建命名空间 首先我们需要创建一个命名空间,用于部署prometheus和其他相关组件。 ``` kubectl create namespace monitoring ``` 2. 创建configmap 接下来我们需要创建一个configmap,用于存储prometheus的配置文件。在这个例子,我们将使用以下配置文件: ``` global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] - job_name: node-exporter static_configs: - targets: ['localhost:9100'] ``` 我们将这个配置文件保存为prometheus.yaml,并使用以下命令创建configmap。 ``` kubectl create configmap prometheus-config --namespace=monitoring --from-file=prometheus.yaml ``` 3. 创建RBAC 我们需要为prometheus创建一些RBAC规则,以便它可以在Kubernetes集群获取监控数据。 首先,我们需要创建一个ServiceAccount: ``` kubectl create serviceaccount prometheus --namespace=monitoring ``` 接下来,我们需要创建一个ClusterRole和一个ClusterRoleBinding: ``` kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/example/rbac/prometheus-cluster-role.yaml kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/example/rbac/prometheus-cluster-role-binding.yaml ``` 最后,我们需要创建一个Role和一个RoleBinding: ``` kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/example/rbac/prometheus-role.yaml kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/example/rbac/prometheus-role-binding.yaml ``` 4. 部署prometheus-operator 现在我们可以开始部署prometheus-operator了。prometheus-operator是一个自动化部署prometheus的工具。 kubectl apply -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml 5. 部署prometheus 接下来我们需要部署prometheus本身。我们将使用prometheus-operator来完成自动化部署。 首先,我们需要创建一个Prometheus对象,它将自动创建一个Deployment和Service。 ``` apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus labels: prometheus: prometheus spec: replicas: 1 serviceAccountName: prometheus serviceMonitorSelector: matchLabels: app: prometheus ruleSelector: matchLabels: prometheus: prometheus alerting: alertmanagers: - namespace: monitoring name: alertmanager port: web ``` 将上面的配置保存为prometheus.yaml,并使用以下命令创建Prometheus对象。 ``` kubectl apply -f prometheus.yaml ``` 6. 部署alertmanager 现在我们需要部署alertmanager,它将用于发送警报通知。 首先,我们需要创建一个configmap,用于存储alertmanager的配置文件。在这个例子,我们将使用以下配置文件: ``` global: resolve_timeout: 5m route: receiver: 'default-receiver' group_by: - alertname receivers: - name: 'default-receiver' email_configs: - to: '[email protected]' from: 'alertmanager@example.com' smarthost: smtp.gmail.com:587 auth_username: '[email protected]' auth_identity: '[email protected]' auth_password: 'your-password' ``` 我们将这个配置文件保存为alertmanager.yaml,并使用以下命令创建configmap。 ``` kubectl create configmap alertmanager-config --namespace=monitoring --from-file=alertmanager.yaml ``` 接下来,我们需要创建一个alertmanager对象,它将自动创建一个Deployment和Service。 ``` apiVersion: monitoring.coreos.com/v1 kind: Alertmanager metadata: name: alertmanager labels: alertmanager: alertmanager spec: replicas: 1 serviceAccountName: prometheus configSecret: name: alertmanager-config ``` 将上面的配置保存为alertmanager.yaml,并使用以下命令创建alertmanager对象。 ``` kubectl apply -f alertmanager.yaml ``` 7. 部署node-exporter 最后,我们需要部署node-exporter,它将用于收集节点的监控数据。 首先,我们需要创建一个DaemonSet,它将自动在每个节点上部署一个node-exporter。 ``` apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter labels: app: node-exporter spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter spec: containers: - name: node-exporter image: prom/node-exporter:v1.0.1 ports: - containerPort: 9100 name: http resources: limits: cpu: 200m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: proc mountPath: /host/proc readOnly: true - name: sys mountPath: /host/sys readOnly: true - name: docker mountPath: /host/var/lib/docker readOnly: true hostNetwork: true hostPID: true volumes: - name: proc hostPath: path: /proc - name: sys hostPath: path: /sys - name: docker hostPath: path: /var/lib/docker ``` 将上面的配置保存为node-exporter.yaml,并使用以下命令创建DaemonSet。 ``` kubectl apply -f node-exporter.yaml ``` 现在,您已经成功部署了prometheus、alertmanager和node-exporter。您可以使用以下命令查看它们的状态: ``` kubectl get all -n monitoring ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值