前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Prometheus Operator Blackbox(黑盒)监控

Prometheus Operator Blackbox(黑盒)监控

作者头像
SRE运维手记
发布2024-12-27 20:16:45
发布2024-12-27 20:16:45
22200
代码可运行
举报
文章被收录于专栏:SRE运维手记
运行总次数:0
代码可运行

Prometheus Operator 为k8s而生,解决了Prometheus的多个痛点,实现了简易部署、高可用和高效管理,如今已成为炙手可热的主流开源监控工具。本文将介绍在实际的运维工作中,如何使用Prometheus Operator来落地黑盒监控。

01、什么是黑/白盒监控?

黑盒监控和白盒监控,是在运维监控中常用的两种方法,黑盒主外,白盒主内,二者主要区别和应用场景为:

  • 黑盒监控:用户视角,以故障为导向,侧重监控应用的外部服务是否正常。当故障发生时,黑盒监控能快速发现故障,常见的黑盒监控包括 HTTP 探针、TCP 探针、DNS 探针、ICMP 探针、gRPC 探针等,可以用于检测站点或者服务的可访问性,以及访问效率等。
  • 白盒监控:应用视角,侧重监控应用的内部运行情况,并以此预测潜在的问题,常见的监控方式有指标监控、日志监控和链路监控。

02、效果展示

  • 服务探测,检查和监控k8s服务状态是否正常。
  • 站点拨测,根据监控的站点数量自动生成监控视图,包含站点状态、SSL证书状态、SSL证书到期时间,和访问效率等。
  • 站点监控聚合展示,适合大屏展示。

03、Blackbox安装

blackbox可通过helm快速完成部署,具体实现步骤如下:

  • 添加helm仓库
代码语言:javascript
代码运行次数:0
复制
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  • 安装blackbox,指定helm chart版本为9.1.0,观察日志无异常则安装完成
代码语言:javascript
代码运行次数:0
复制
helm install kube prometheus-community/prometheus-blackbox-exporter -n blackbox --create-namespace --version 9.1.0

如果服务器无法添加仓库和拉取国外镜像,请使用下面的方法:

  • 直接下载helm chart包放到服务器上
代码语言:javascript
代码运行次数:0
复制
wget https://github.com/prometheus-community/helm-charts/releases/download/prometheus-blackbox-exporter-9.1.0/prometheus-blackbox-exporter-9.1.0.tgz
  • 在解压后,修改values.yaml中的`registry`、`repository`、`tag`三个key,修改为国内镜像仓库地址
代码语言:javascript
代码运行次数:0
复制
image:
  registry: registry.cn-hangzhou.aliyuncs.com
  repository: yilingyi/blackbox-exporter
  # Overrides the image tag whose default is {{ printf "v%s" .Chart.AppVersion }}
  tag: "0.25.0"
  pullPolicy: IfNotPresent
  digest: ""
  • 安装blackbox,观察日志无异常则安装完成
代码语言:javascript
代码运行次数:0
复制
helm install kube . -n blackbox --create-namespace -f ./values.yaml

04

Blackbox配置

blackbox安装后需要在blackbox.yaml中定义模块配置,如下示例分别定义了service_http_prober用于http探测,tcp_prober用于tcp探测,还有site_http_prober用于站点探测。

  • 编辑配置
代码语言:javascript
代码运行次数:0
复制
kubectl edit configmap kube-prometheus-blackbox-exporter -n blackbox
  • 添加modules配置
代码语言:javascript
代码运行次数:0
复制
apiVersion: v1
data:
  blackbox.yaml: |-
    modules:
      service_http_prober:
        http:
          follow_redirects: true
          preferred_ip_protocol: ip4
          valid_http_versions:
          - HTTP/1.1
          - HTTP/2.0
        prober: http
        timeout: 5s
      tcp_prober:
        prober: tcp
        tcp:
          ip_protocol_fallback: false
          preferred_ip_protocol: ip4
      site_http_prober:
        http:
          follow_redirects: true
          preferred_ip_protocol: ip4
          tls_config:
            insecure_skip_verify: false
          valid_http_versions:
          - HTTP/1.1
          - HTTP/2.0
        prober: http
        timeout: 10s

完成配置后重启一下blackbox,别急,下面还要继续配置

05、服务自动发现配置

在Prometheus Operator所在的命名空间下创建ServiceMonitor CRD,如下示例用的是kubesphere自带的监控组件,所以我们在命名空间kubesphere-monitoring-system下进行创建。

  • 将下面内容保存为serviceMonitor.yaml
代码语言:javascript
代码运行次数:0
复制
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: blackbox-exporter
  namespace: kubesphere-monitoring-system
spec:
  endpoints:
    - interval: 1m
      params:
        module:
          - service_tcp_prober
      path: /probe
      port: java-http
      relabelings:
        - action: replace
          sourceLabels:
            - __address__
          targetLabel: __param_target
        - action: replace
          # blackbox service地址
          replacement: 'kube-prometheus-blackbox-exporter.blackbox:9115'
          targetLabel: __address__
        - action: replace
          sourceLabels:
            - __param_target
          targetLabel: instance
        - action: replace
          regex: (.*)
          replacement: $1
          sourceLabels:
            - __param_module
          targetLabel: module
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
      scrapeTimeout: 10s
    - interval: 1m
      params:
        module:
          - service_http_prober
      path: /probe
      port: java-http
      relabelings:
        - action: replace
          sourceLabels:
            - __address__
          targetLabel: __param_target
        - action: replace
          replacement: 'kube-prometheus-blackbox-exporter.blackbox:9115'
          targetLabel: __address__
        - action: replace
          sourceLabels:
            - __param_target
          targetLabel: instance
        - action: replace
          regex: (.*)
          # 服务http健康检查uri
          replacement: '${1}/api/healthcheck'
          sourceLabels:
            - __address__
          targetLabel: __param_target
        - action: replace
          regex: (.*)
          replacement: $1
          sourceLabels:
            - __param_module
          targetLabel: module
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
      scrapeTimeout: 10s
  jobLabel: blackbox-exporter
  # 指定命名空间,不指定则包含所有命名空间
  namespaceSelector:
    matchNames:
      - prod
  # 改成实际的Service Label
  selector:
    matchLabels:
      app: yilingyi
  • 创建serviceMonitor CRD配置
代码语言:javascript
代码运行次数:0
复制
kubectl apply -f serviceMonitor.yaml

06

站点拨测配置

在Prometheus Operator中,Prometheus服务的实例和配置是通过Prometheus CRD进行管理的,我们想通过scrape configs的方式管理站点拨测配置,需要执行如下步骤:

  • 编辑Prometheus CRD,不能直接修改prometheus.yml了哈:
代码语言:javascript
代码运行次数:0
复制
kubectl edit prometheuses k8s -n kubesphere-monitoring-system
  • 添加配置,保存后不需要重启
代码语言:javascript
代码运行次数:0
复制
spec:
  additionalScrapeConfigs:
    key: prometheus-additional.yaml
    name: additional-scrape-configs
  • 然后将下面的站点拨测配置保存为prometheus-additional.yaml(温馨提醒:如果是Kubesphere用户可在界面进行创建和配置,无需执行后面的步骤哈)
代码语言:javascript
代码运行次数:0
复制
- job_name: 'blackbox'
  metrics_path: /probe
  params:
    module: [site_http_prober]
  static_configs:
    - targets: ['https://xxxxxxx']
      labels:
        remark: "SRE运维手记"
    - targets: ['https://xxxxxxx']
      labels:
        remark: "SRE运维手记商城"
  • 接着将prometheus-additional.yaml的内容进行base64编码,保存为config_encoded.yaml
代码语言:javascript
代码运行次数:0
复制
cat prometheus-additional.yaml | base64 | tr -d '\n' > config_encoded.yamlcat prometheus-additional.yaml | base64 | tr -d '\n' > config_encoded.yaml
  • 将config_encoded.yaml的内容粘贴到<新的Base64编码值>位置,保存为secret.yaml
代码语言:javascript
代码运行次数:0
复制
apiVersion: v1
data:
  prometheus-additional.yaml: <新的Base64编码值>
kind: Secret
metadata:
  name: additional-scrape-configs
  namespace: kubesphere-monitoring-system
type: Opaque
  • 最后应用更新后的secret,也就完成了所有配置
代码语言:javascript
代码运行次数:0
复制
kubectl apply -f secret.yaml
  • 后续配置变更,则先将当前的prometheus-additional.yaml配置导出,修改后再进行base64编码和应用更新:
代码语言:javascript
代码运行次数:0
复制
kubectl get secret additional-scrape-configs -n kubesphere-monitoring-system -o jsonpath="{.data.prometheus-additional\.yaml}" | base64 --decode > prometheus-additional.yaml

07、结 语

完成上述配置后,可通过Prometheus UI查看是否能够正常采集数据,如果需要对核心接口进行拨测,blackbox exporter还支持Request Method进行请求,如get、post等,本期就介绍到这里,谢谢!

  • 文章使用到的grafana看板ID

服务探测:9965

站点拨测:14928

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档