返回

10分钟搞定!Prometheus全家桶部署教程

后端

Prometheus 全家桶:监控 Kubernetes 集群的终极指南

简介

Kubernetes(k8s)是容器编排的领先平台,它极大地简化了管理和部署复杂应用程序的过程。然而,k8s 本身并不包含内置的监控工具,因此市场上出现了许多监控工具来填补这一空白。在这些工具中,没有一款能与 Prometheus 全家桶相媲美。

什么是 Prometheus 全家桶?

Prometheus 全家桶是一个由多个组件组成的监控系统,由 CNCF 维护,已成为监控 k8s 集群的事实标准。它的组件包括:

  • Prometheus 服务器: 负责收集和存储数据的核心组件。
  • Prometheus-node-exporter: 导出节点指标的工具。
  • Prometheus-cadvisor: 导出容器指标的工具。
  • Prometheus-alertmanager: 负责告警的组件。
  • Prometheus-grafana: 用于数据可视化的工具。

Prometheus 全家桶的优势

Prometheus 全家桶的优势包括:

  • 全面监控: 它监控 k8s 集群的各个方面,包括节点、容器、应用程序和网络。
  • 高可用性: 它具有内置冗余,确保在组件故障的情况下保持监控。
  • 可扩展性: 它可以轻松扩展以监控大型和复杂的 k8s 集群。
  • 易于使用: 它提供了一个直观且易于使用的界面,便于设置和管理。

如何部署 Prometheus 全家桶

在 k8s 集群中部署 Prometheus 全家桶的过程涉及以下步骤:

1. 部署 Prometheus 服务器

部署 Prometheus 服务器包括创建 Service 和 Deployment,如下所示:

# 服务
apiVersion: v1
kind: Service
metadata:
  name: prometheus-server
  namespace: monitoring
spec:
  selector:
    app: prometheus-server
  ports:
  - port: 9090
    targetPort: 9090
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-server
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-server
  template:
    metadata:
      labels:
        app: prometheus-server
    spec:
      containers:
      - name: prometheus-server
        image: prom/prometheus:v2.36.1
        args:
        - --config.file=/etc/prometheus/prometheus.yml
        - --storage.tsdb.path=/prometheus
        volumeMounts:
        - mountPath: /prometheus
          name: prometheus-data
        - mountPath: /etc/prometheus
          name: prometheus-config
      volumes:
      - name: prometheus-data
        emptyDir: {}
      - name: prometheus-config
        configMap:
          name: prometheus-config

2. 部署 Prometheus-node-exporter

Prometheus-node-exporter 用于导出节点指标。部署过程类似于 Prometheus 服务器。

# 服务
apiVersion: v1
kind: Service
metadata:
  name: prometheus-node-exporter
  namespace: monitoring
spec:
  selector:
    app: prometheus-node-exporter
  ports:
  - port: 9100
    targetPort: 9100
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-node-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-node-exporter
  template:
    metadata:
      labels:
        app: prometheus-node-exporter
    spec:
      containers:
      - name: prometheus-node-exporter
        image: prom/node-exporter:v1.3.1
        args:
        - --path.procfs=/host/proc
        - --path.rootfs=/host/sys
        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+)($|/)
        volumeMounts:
        - mountPath: /host/proc
          name: host-proc
        - mountPath: /host/sys
          name: host-sys
      volumes:
      - name: host-proc
        hostPath:
          path: /proc
      - name: host-sys
        hostPath:
          path: /sys

3. 部署 Prometheus-cadvisor

Prometheus-cadvisor 用于导出容器指标。它的部署过程与前两个组件类似。

# 服务
apiVersion: v1
kind: Service
metadata:
  name: prometheus-cadvisor
  namespace: monitoring
spec:
  selector:
    app: prometheus-cadvisor
  ports:
  - port: 8080
    targetPort: 8080
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-cadvisor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-cadvisor
  template:
    metadata:
      labels:
        app: prometheus-cadvisor
    spec:
      containers:
      - name: prometheus-cadvisor
        image: google/cadvisor:v0.44.0
        args:
        - --storage_driver=prometheus
        - --prometheus_endpoint=http://prometheus-server:9090

4. 部署 Prometheus-alertmanager

Prometheus-alertmanager 用于告警。其部署过程如下:

# 服务
apiVersion: v1
kind: Service
metadata:
  name: prometheus-alertmanager
  namespace: monitoring
spec:
  selector:
    app: prometheus-alertmanager
  ports:
  - port: 9093
    targetPort: 9093
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-alertmanager
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-alertmanager
  template:
    metadata:
      labels:
        app: prometheus-alertmanager
    spec:
      containers:
      - name: prometheus-alertmanager
        image: prom/alertmanager:v0.26.0
        args:
        - --config.file=/etc/alertmanager/alertmanager.yml
        volumeMounts:
        - mountPath: /etc/alertmanager
          name: alertmanager-config
      volumes:
      - name: alertmanager-config
        configMap:
          name: alertmanager-config

5. 部署 Prometheus-grafana

Prometheus-grafana 用于数据可视化。其部署过程如下:

# 服务
apiVersion: v1
kind: Service
metadata:
  name: prometheus-grafana
  namespace: monitoring
spec:
  selector:
    app: prometheus-grafana
  ports:
  - port: 3000
    targetPort: 3000
# 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-grafana
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: prometheus-grafana
  template:
    metadata:
      labels:
        app: prometheus-grafana
    spec:
      containers:
      - name: prometheus-grafana
        image: grafana/grafana:9.2.5
        args:
        - -config=/etc/grafana/grafana.ini
        volumeMounts:
        - mountPath: /etc/grafana
          name: grafana-config
      volumes:
      - name: grafana-config
        configMap:
          name: grafana-config

验证部署

部署完成后,可以使用以下命令验证部署结果:

kubectl get pods -n monitoring

如果所有 pod 的状态都是 Running,则表示部署成功。

常见问题解答

1. Prometheus 全家桶的成本是多少?

Prometheus 全家桶是免费且开源的。

2. Prometheus 全家桶是否支持 Kubernetes 集群以外的监控?

是的,Prometheus 全家桶可以监控任何类型的基础设施,包括虚拟机、物理服务器和应用程序。

3. Prometheus 全家桶有多复杂?

Prometheus 全家桶的安装和管理相对简单,但要充分利用它的功能,需要一些技术知识。

4. 我需要哪些工具才能使用 Prometheus 全家桶?

除了 Prometheus 全家桶组件之外,您还需要一个文本编辑器来创建配置文件以及一个命令行界面来管理组件。

5. Prometheus 全家桶与其他监控工具有何不同?

Prometheus 全家桶专注于指标监控,而其他工具可能