vlambda博客
学习文章列表

实战 | 通过Helm使用Prometheus

在《SRE: Google运维解密》一书中指出,监控系统需要能够有效地支持白盒监控和黑盒监控。通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。而黑盒监控,常见的如HTTP探针,TCP探针等,可以在系统或者服务在发生故障时能够快速通知相关的人员进行处理。通过建立完善的监控体系,从而达到以下目的:

  • 长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们可以提前预测在未来什么时间节点上需要对资源进行扩容。
  • 对照分析:两个版本的系统运行资源使用情况的差异如何?在不同容量情况下系统的并发和负载变化如何?通过监控能够方便地对系统进行跟踪和比较。
  • 告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从而能够对问题进行快速的处理或者提前预防问题的发生,避免出现对业务的影响。
  • 故障分析与定位:当问题发生后,需要对问题进行调查和处理。通过对不同监控监控以及历史数据的分析,能够找到并解决根源问题。
  • 数据可视化:通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态等直观的信息。

目录

  • 一、单一模式

    • 2.1 安装

    • 2.2 blackbox

    • 2.3 grafana

    • 2.4 告警全家桶

  • 二、联邦模式


prometheus是目前人气较高的一款监控软件,活跃的社区吸引了无数的geeker。当然业内常用的监控系统还有nagios、zabbix。

大致原理是数据采集端(exporter)注册到prometheus后,由prometheus周期拉取暴露的metrics。

architecture

一、单一模式

基于kubernetes

实战 | 通过Helm使用Prometheus

single

2.1 安装

通过helm安装prometheus

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm search repo prometheus

# prometheus
helm show values prometheus-community/prometheus > prometheus.yaml-default

helm install prometheus prometheus-community/prometheus \
    -f prometheus.yaml \
    -n kube-server \
    --create-namespace \
    --version 15.8.0 --debug
    
helm upgrade --install prometheus prometheus-community/prometheus \
    -f prometheus.yaml \
    -n kube-server \
    --create-namespace \
    --version 15.8.0 --debug

helm -n kube-server uninstall prometheus 

常用配置

  • prometheus.yaml
    • alerting_rules.yml
    • recording_rules.yml
  • alertmanager.yml

推荐配置指导

awesone prometheus alerts

释放持久化卷

kubectl edit pv xxx
  finalizers:
  - kubernetes.io/pv-protection
  ...
  # upgraded
  finalizers: []

让master节点也部署node-exporter

...
nodeExporter:
  ...
  tolerations:
    - key: "node-role.kubernetes.io/master"
      operator: "Exists"

采集外部exporter的metrics

#helm中extraScrapeConfigs未成功
~ $ kubectl -n kube-server edit cm prometheus-server
...
    - job_name: node-instance
      honor_timestamps: true
      scrape_interval: 1m
      scrape_timeout: 10s
      metrics_path: /metrics
      scheme: http
      static_configs:
        - targets:
          - 10.101.11.168:19100
          - 10.101.11.188:19100
          - 10.101.11.197:19100
          - 10.101.11.209:19100
          - 10.101.11.236:19100
    - job_name: 'blackbox-instance'
      metrics_path: /probe
      scheme: http
      params:
        module: [http_2xx]
      static_configs:
        - targets:
          - http://blackbox-exporter-prometheus-blackbox-exporter:9115
      relabel_configs:
        - source_labels: [__address__]
          target_label: __param_target
        - source_labels: [__param_target]
          target_label: instance
        - target_label: __address__
          replacement: blackbox-exporter-prometheus-blackbox-exporter:9115
    alerting: # relative
...          

2.2 blackbox

blackbox-exporter 常用的一个黑盒

helm show values prometheus-community/prometheus-blackbox-exporter > blackbox-exporter.yaml-default

helm install blackbox-exporter prometheus-community/prometheus-blackbox-exporter \
    -f blackbox-exporter.yaml \
    -n kube-server \
    --create-namespace \
    --version 5.6.0 --debug
    
helm upgrade --install blackbox-exporter prometheus-community/prometheus-blackbox-exporter \
    -f blackbox-exporter.yaml \
    -n kube-server \
    --create-namespace \
    --version 5.6.0 --debug

helm -n kube-server uninstall blackbox-exporter 

2.3 grafana

官方模板

# templ

## kubernetes
Kubernetes Cluster 

Kubernetes cluster monitoring

Kubernetes / Node Exporter Full

Kubernetes Nodes

kube-state-metrics

## middleware
NGINX Ingress controller

MySQL Overview

Redis Dashboard for Prometheus Redis Exporter

效果集锦

实战 | 通过Helm使用Prometheus

kube-state-metrics

实战 | 通过Helm使用Prometheus

Kubernetes cluster monitoring

实战 | 通过Helm使用Prometheus

Kubernetes / Node Exporter Full

实战 | 通过Helm使用Prometheus

Kubernetes Nodes

实战 | 通过Helm使用Prometheus

Kubernetes Cluster

实战 | 通过Helm使用Prometheus

MySQL Overview

实战 | 通过Helm使用Prometheus

NGINX Ingress controller

Redis Dashboard for Prometheus Redis Exporter

2.4 告警全家桶

推荐prometheus-alert-center

以下是个人调试的笔记,可以忽视

#ARG IMAGE_TAG=3.15.4
#FROM hub.8ops.top/third/alpine:${IMAGE_TAG}
#FROM hub.8ops.top/build/golang:1.18-bullseye
FROM ubuntu:22.04

ENV TZ="Asia/Shanghai"
WORKDIR /opt
ADD . /opt

RUN set -ex && \
    chmod +x /opt/PrometheusAlert && \
    ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


ENTRYPOINT ["/opt/PrometheusAlert"]
# 官方镜像不能发群通知
docker run --rm -d \
 -p 8070:8080 \
 -v /opt/data/prometheusalert/conf:/app/conf \
 hub.8ops.top/prometheus/prometheus-alert:v4.8 

# 基于官方二进制可以发
docker build . -t hub.8ops.top/prometheus/prometheus-alert:v4.8-manual
docker run --rm -d \
 -p 8090:8080 \
 -v /opt/data/prometheusalert/conf:/app/conf \
 hub.8ops.top/prometheus/prometheus-alert:v4.8-manual

## debug
docker run --rm -w /opt \
 --entrypoint ls \
 hub.8ops.top/prometheus/prometheus-alert:v4.8-manual \
 "-lt"
docker run -d -w /opt \
 --entrypoint sleep \
 hub.8ops.top/prometheus/prometheus-alert:v4.8-manual \
 "3600"

docker run --rm -w /opt -it --entrypoint ls 

# 基于二进制直接运行

二、联邦模式

多业务集群下独立存在prometheus场景

integrate

意义

  • 集中查看数据
  • 备份采集数据