Prometheus+Grafana构建云原生分布式监控系统(六)

Prometheus+Grafana构建云原生分布式监控系统(五)https://blog.csdn.net/xiaochenXIHUA/article/details/157213976

一、prometheus的黑盒监控

1.1、prometheus的黑盒监控是什么?有啥用?

在一些情况下,想要去监听服务器的某个端口是否存在,监听http的请求是否正确等情况;这个时候就可以使用【blackbox_exporter】来实现。blackbox_exporter是prometheus官方提供的exporter之一,可以提供【http】【dns】【tcp】【icmp】的监控数据采集。

|--------|--------------------------------|-----------------------------------------------------------------------|
| 序号 | blackbox_exporter 应用场景 | 说明 |
| 1 | HTTP测试 | 定义Request Header信息,判断【Http status】【Http Respones Header】【Http Body】内容 |
| 2 | TCP测试 | 业务组件端口状态监听;应用层协议定义域监听。 |
| 3 | ICMP测试 | 主机探活机制 |
| 4 | POST测试 | 接口连通性 |
| 5 | SSL证书过期时间 | |
| 6 | HTTPS测试 | |
| 7 | DNS测试 | |
| 8 | gRPC测试 | |
[blackbox_exporter应用场景]

1.2、blackbox_exporter的安装部署

bash 复制代码
#【blackbox_exporter】的安装部署

#1-下载【blackbox_exporter】
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.28.0/blackbox_exporter-0.28.0.linux-amd64.tar.gz -c -P /data

#2-解压下载好的【blackbox_exporter】
cd /data
tar -zxvf blackbox_exporter-0.28.0.linux-amd64.tar.gz -C /usr/local
cd /usr/local/
mv blackbox_exporter-0.28.0.linux-amd64 blackbox_exporter-0.28.0
cd blackbox_exporter-0.28.0/
ls

#3-编写【blackbox_exporter】的服务
vi /usr/lib/systemd/system/blackbox_exporter.service

#【/usr/lib/systemd/system/blackbox_exporter.service】文件的完整内容
[Unit]
Description=blackbox_exporter
Documentation=https://github.com/prometheus/blackbox_exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/blackbox_exporter-0.28.0/blackbox_exporter \
    --config.file=/usr/local/blackbox_exporter-0.28.0/blackbox.yml \
    --web.listen-address=:9115
Restart=on-failure

[Install]
WantedBy=multi-user.target

#4-启动blackbox_exporter后并设置开机自启
systemctl daemon-reload
systemctl start blackbox_exporter.service
systemctl status blackbox_exporter.service
ps -ef | grep blackbox_exporter
netstat -antlp | grep blackbox
systemctl enable blackbox_exporter.service

#5-打开浏览器访问【IP:9115】查看(注意:若是没法在浏览器打开访问则需要检查防火墙放开9115端口)
ip a
bash 复制代码
#【blackbox.yml】文件的完整内容如下【该文件内容无需修改,直接使用即可】
modules:
  http_2xx:    #这个名字是定义模块名称,可随便写,但是在prometheus.yml配置文件中配置时必须与该文件这里的名称对应起来。保持默认即可不用修改
    prober: http    #进行探测的协议,可以是 http、tcp、grpc、dns、icmp等
    http:
      preferred_ip_protocol: "ip4"
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  grpc:
    prober: grpc
    grpc:
      tls: true
      preferred_ip_protocol: "ip4"
  grpc_plain:
    prober: grpc
    grpc:
      tls: false
      service: "service1"
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
      - send: "SSH-2.0-blackbox-ssh-check"
  ssh_banner_extract:
    prober: tcp
    timeout: 5s
    tcp:
      query_response:
      - expect: "^SSH-2.0-([^ -]+)(?: (.*))?$"
        labels:
        - name: ssh_version
          value: "${1}"
        - name: ssh_comments
          value: "${2}"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
      - send: "NICK prober"
      - send: "USER prober prober prober :prober"
      - expect: "PING :([^ ]+)"
        send: "PONG ${1}"
      - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp
  icmp_ttl5:
    prober: icmp
    timeout: 5s
    icmp:
      ttl: 5
  http_3xx:
    prober: http
    http:
      preferred_ip_protocol: "ip4"
      enable_http3: true
      enable_http2: false
      valid_http_versions: ["HTTP/3.0"]
  postgresql:
    prober: tcp
    tcp:
      query_response:
      - send: !!binary AAAACATSFi8= # 0x00, 0x00, 0x00, 0x08, 0x04, 0xD2, 0x16, 0x2F - PostgreSQL SSLRequest
      - expect_bytes: S # 0x53 - Reply will be 'S' if SSL is enabled, and 'N' if it is not.
      - starttls: true

二、在prometheus中添加blackbox_exporter监控

bash 复制代码
#在prometheus中添加blackbox_exporter监控
#1-
cd /usr/local/prometheus-3.5.0/
vi prometheus.yml
#【prometheus.yml】的最后【scrape_configs】下添加多个不同黑盒类型的【job_name】

  #下面这个是配置get请求检测
  - job_name: 'blackbox_http_2xx'
    scrape_interval: 30s
    metrics_path: /probe
    params:
    #这里的http_2xx要跟blackbox.yml文件中的定义对应起来。
      module: [http_2xx]
    static_configs:
    #下面这个targets是通过http get请求的地址,可以写多个,探测是否正常
      - targets:
        - 192.168.1.37:80
        - http://192.168.1.37:8088/nginx-status
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
      #这里的replacement是指定访问blackbox-exporter服务所在的机器和端口
        replacement: 127.0.0.1:9115
  - job_name: 'blackbox_http_post_2xx'
    scrape_interval: 30s
    metrics_path: /probe
    params:
    #这里定义通过http post方式探测
      module: [http_post_2xx]
    static_configs:
    #这里定义通过http post方式探测的地址和端口
      - targets:
        - 192.168.1.39:9100
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
      #这里的replacement是指定访问blackbox-exporter服务所在的机器和端口
        replacement: 127.0.0.1:9115
  - job_name: 'blackbox_http_ping'
    scrape_interval: 30s
    metrics_path: /probe
    params:
    #这里是定义通过imcp方式进行探测
      module: [icmp]
    static_configs:
    #这里定义通过icmp方式探测的地址
      - targets:
        - coffeemilk.blog.csdn.net
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115
  - job_name: 'blackbox_tcp_connect'
    scrape_interval: 30s
    metrics_path: /probe
    params:
    #这里定义通过tcp方式进行服务或端口的探测
      module: [tcp_connect]
    static_configs:
    #这里定义通过tcp进行探测的服务和端口
      - targets:
        - 192.168.1.37:80
        - 192.168.1.39:22
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115

#验证修改后的prometheus.yml文件的语法是否正确(结果显示SUCCESS则表示正确)
./promtool check config prometheus.yml
 
#验证prometheus.yml文件中的语法正确后热重载让配置生效
curl -XPOST localhost:9090/-/reload
 
#然后打开浏览器进入Prometheus Server的Web界面【IP:9090】查看【Status-->Target health】即可看到添加的【blackbox_http_2xx】【blackbox_http_ping】【blackbox_http_post_2xx】【blackbox_tcp_connect】节点及其状态【up】表示在线【down】表示离线。

三、Grafana中配置prometheus的blackbox_exporter数据可视化

(若已经添加过数据源了则不用重复这个操作)登录到Grafana中(IP:3000)选择【连接】-->【添加新连接】-->【搜索Prometheus】后点击Prometheus-->点击右上角的【添加新数据源】则进入设置界面,在设置界面可以填写名称、与prometheus server的URL地址后点击最底部的【保存并测试】。

然后配置仪表盘(到【Grafana dashboards | Grafana Labs】官网获取更多的仪表盘模板。在Grafana的仪表盘界面中间输入框输入blackbox_exporter即可列出所有blackbox_exporter相关模板(如:我们选择【Blackbox_Exporter Overview】模板进入后,获取到该模板的编号是【11175】【18896】【18538】【16292】【13659】)然后在浏览器上进入我们服务器上部署好的Grafana界面的【仪表盘】-->【新建】-->【导入】界面输入模板的编号或者JSON文件内容后点击【加载】后弹出的界面上可以修改模板名称、数据源为prometheus后点击【Import】)如下图所示:

相关推荐
Justin_192 小时前
K8s常见问题(5)
云原生·容器·kubernetes
与遨游于天地2 小时前
智能云原生时代:当云学会思考
云原生
徐先生 @_@|||3 小时前
大数据技术栈演进:从MapReduce到云原生计算的全面对比(2026年)
大数据·hadoop·云原生·spark·mapreduce
ProgrammerPulse3 小时前
从零构建云原生“试验田”:超融合的自我修养
云原生
Kendra91916 小时前
K8s集群组件启动不成功排查
云原生·容器·kubernetes
努力搬砖的咸鱼16 小时前
用 Minikube 或 Kind 在本地跑起 Kubernetes
微服务·云原生·容器·架构·kubernetes·kind
噎住佩奇16 小时前
单节点K8s集群中安装StorageClass(SC)
云原生·容器·kubernetes
不想画图17 小时前
Kubernetes(八)——PV和PVC
云原生·容器·kubernetes
Serverless社区17 小时前
探秘 AgentRun|基于 Serverless 的 AI Agent 沙箱工程化之路
运维·阿里云·云原生·serverless·函数计算