zoukankan      html  css  js  c++  java
  • blackbox

    一、简介
    1. 白盒监控:监控主机的资源用量、容器的运行状态、数据库中间件的运行数据、自动发现 Kubernetes 集群中的资源等等,这些都是支持业务和服务的基础设施,通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化
    2. 黑盒监控:以用户的身份测试服务的外部可见性,常见的黑盒监控包括HTTP 探针、TCP 探针 等用于检测站点或者服务的可访问性,以及访问效率等
    二、blackbox exporter
    1. Blackbox Exporter是prometheus社区提供的官方黑盒监控解决方案
    2. 允许用户通过:HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测
     
    三、实现监控
    注意事项:部署prometheus时切记开启配置的自动热更新,否则需要进行手动更新
    1、通过configmap提供配置文件,一起创建deployment、service、configmap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: blackbox-config
      namespace: kube-mon
    data:
      blackbox.yml: |-
        modules:
          http_2xx:  # http 检测模块  Blockbox-Exporter 中所有的探针均是以 Module 的信息进行配置
            prober: http
            timeout: 10s
            http:
              valid_http_versions: ["HTTP/1.1", "HTTP/2"]   
              valid_status_codes: [200]  # 这里最好作一个返回状态码,在grafana作图时,有明示---陈刚注释。
              method: GET
              preferred_ip_protocol: "ip4"
          http_post_2xx: # http post 监测模块
            prober: http
            timeout: 10s
            http:
              valid_http_versions: ["HTTP/1.1", "HTTP/2"]
              method: POST
              preferred_ip_protocol: "ip4"
          tcp_connect:  # TCP 检测模块
            prober: tcp
            timeout: 10s
          dns:  # DNS 检测模块
            prober: dns
            dns:
              transport_protocol: "tcp"  # 默认是 udp
              preferred_ip_protocol: "ip4"  # 默认是 ip6
              query_name: "kubernetes.default.svc.cluster.local"
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: blackbox
      namespace: kube-mon
    spec:
      selector:
        matchLabels:
          app: blackbox
      template:
        metadata:
          labels:
            app: blackbox
        spec:
          containers:
          - image: prom/blackbox-exporter:v0.16.0
            name: blackbox
            args:
            - --config.file=/etc/blackbox_exporter/blackbox.yml # ConfigMap 中的配置文件
            - --log.level=error  # 错误级别控制
            ports:
            - containerPort: 9115
            volumeMounts:
            - name: config
              mountPath: /etc/blackbox_exporter
          volumes:
          - name: config
            configMap:
              name: blackbox-config
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: blackbox
      namespace: kube-mon
    spec:
      selector:
        app: blackbox
      ports:
      - port: 9115
        targetPort: 9115
    2、添加blackbox的job配置:DNS探测配置
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prometheus-config
      namespace: kube-mon
    data:
      prometheus.yml: |
        global:
          scrape_interval: 15s
          scrape_timeout: 15s
        scrape_configs:
        - job_name: 'prometheus'
          static_configs:
          - targets: ['localhost:9090']
          
        - job_name: "kubernetes-service-dns"
          metrics_path: /probe # 不是 metrics,是 probe
          params:
            module: [dns] # 使用 DNS 模块
          static_configs:
          - targets:
            - kube-dns.kube-system:53  # 不要省略端口号
          relabel_configs:
          - source_labels: [__address__]
            target_label: __param_target
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: blackbox:9115  # 服务地址,和上面的 Service 定义保持一致
    3、添加blackbox的job配置:添加HTTP探测:可用于ingress及service的探测
    - job_name: 'kubernetes-http-services'
      metrics_path: /probe
      params:
        module: [http_2xx]  # 使用定义的http模块
      kubernetes_sd_configs:
      - role: service  # service 类型的服务发现
      relabel_configs:
      # 只有service的annotation中配置了 prometheus.io/http_probe=true 的才进行发现
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_http_probe]
        action: keep
        regex: true
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox:9115
      - source_labels: [__param_target]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        target_label: kubernetes_name
    
    
    - job_name: 'kubernetes-ingresses'
      metrics_path: /probe
      params:
        module: [http_2xx]  # 使用定义的http模块
      kubernetes_sd_configs:
      - role: ingress  # ingress 类型的服务发现
      relabel_configs:
      # 只有ingress的annotation中配置了 prometheus.io/http_probe=true的才进行发现
      - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_http_probe]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
        regex: (.+);(.+);(.+)
        replacement: ${1}://${2}${3}
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox:9115
      - source_labels: [__param_target]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_ingress_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_ingress_name]
        target_label: kubernetes_name
    4、如果需要对service的黑盒做自定义配置,可以参考一下案例
    - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_namespace, __meta_kubernetes_service_annotation_prometheus_io_http_probe_port, __meta_kubernetes_service_annotation_prometheus_io_http_probe_path]
      action: replace
      target_label: __param_target
      regex: (.+);(.+);(.+);(.+)
      replacement: $1.$2:$3$4
    5、对应的service的annotation部分需要添加如下配置
    annotation:
      prometheus.io/http-probe: "true"
      prometheus.io/http-probe-port: "8080"
      prometheus.io/http-probe-path: "/healthz"
    参考文件:
  • 相关阅读:
    UVA 10827 Maximum sum on a torus 最大矩阵和
    UVA 11100 The Trip, 2007 水题一枚
    编程之美2015测试赛 题目1 : 同构
    UVA 10801 Lift Hopping Floyd
    UVA 11389 The Bus Driver Problem 贪心水题
    UVA 11039 Building designing 贪心
    UVA 11636 Hello World! 水题
    poj 3070 Fibonacci 矩阵快速幂
    hdu 1757 A Simple Math Problem 矩阵快速幂
    了解常见的 Azure 灾难
  • 原文地址:https://www.cnblogs.com/jayce9102/p/12913062.html
Copyright © 2011-2022 走看看