Prometheus监控实战之Blackbox_exporter黑盒监测

1 Blackbox_exporter应用场景

blackbox_exporter是Prometheus官方提供的exporter之一,可以提供HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。

1.1 HTTP 测试

定义 Request Header信息

判断 Http status / Http Respones Header / Http Body内容

1.2 TCP 测试

业务组件端口状态监听

应用层协议定义与监听

1.3 ICMP 测试

主机探活机制

1.4 POST 测试

接口联通性

1.5 SSL证书过期时间

2 Blackbox_exporter安装

下载地址:https://prometheus.io/download/

2.1 下载安装包

# wget ​ ​https://github.com/prometheus/blackbox_exporter/releases/download/v0.22.0/blackbox_exporter-0.22.0.linux-amd64.tar.gz​​

2.2 解压并重命名

# tar xf blackbox_exporter-0.22.0.linux-amd64.tar.gz

# mv blackbox_exporter-0.22.0.linux-amd64 /usr/local/blackbox_exporter

2.3 授权

# chown -R root.root /usr/local/blackbox_exporter

2.4 使用systemd进行管理blackbox_exporter服务

# cat >/etc/systemd/system/blackbox_exporter.service <<EOF

[Unit]

Description=Blackbox Exporter

Wants=network-online.target

After=network-online.target

[Service]

User=root

ExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.yml

Restart=on-failure

WantedBy=default.target

EOF

2.5 添加开机自启动

# systemctl daemon-reload

# systemctl enable blackbox_exporter

Created symlink from /etc/systemd/system/default.target.wants/blackbox_exporter.service to /etc/systemd/system/blackbox_exporter.service.

2.6 启动Blackbox_exporter

# systemctl start blackbox_exporter

3 blackbox.yml配置文件详解

官方解释: ​ ​https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

3.1 默认配置

运行blackbox exporter时,需要用户提供探针的配置信息,这些配置信息可能是以下几种信息:

  • 自定义的HTTP头信息
  • 探测时需要的一些 TSL(秘钥证书) 配置
  • 探针本身的验证行为

在 blackbox exporter每一个探针配置称为一个 module,并且以YAML配置文件的形式提供给blackbox exporter,每一个module主要包含以下配置内容:

  • 探针类型(prober)
  • 验证访问超时时间(timeout)
  • 当前探针的具体配置项

3.1.1 探针类型: http https tcp dns icmp

prober: <prober_string>

必选

3.1.2 超时时间

[timeout: <duration>]

默认单位:秒

3.1.3 探针的详细配置,最多只能配置其中一个

[ http: <http_probe> ]

[ tcp: <tcp_probe> ]

[ dns: <dns_probe> ]

[ icmp: <icmp_probe> ]

3.2 <http_probe>可配置参数

3.2.1 此探针接受的状态代码

[ valid_status_codes: <int>, ... | default = 2xx ]

默认为2xx。

3.2.2 此探针接受的HTTP版本

[ valid_http_versions: <string>, ... ]

3.2.3 探针将使用的HTTP方法

[ method: <string> | default = "GET" ]

3.2.4 为探针设置的HTTP标头

headers:
[ <string>: <string> ... ]

3.2.5 探针是否将遵循任何重定向

[ no_follow_redirects: <boolean> | default = false ]

3.2.6 如果存在SSL,则探测失败

[ fail_if_ssl: <boolean> | default = false ]

3.2.7 如果不存在SSL,则探测失败

[ fail_if_not_ssl: <boolean> | default = false ]

3.2.8 如果响应主体与正则表达式匹配,则探测失败

fail_if_body_matches_regexp:[ - <regex>, ... ]

3.2.9 如果响应主体与正则表达式不匹配,则探测失败

fail_if_body_not_matches_regexp:[ - <regex>, ... ]

3.2.10 如果响应头与正则表达式匹配,则探测失败。对于具有多个值的标头,如果*至少一个*匹配,则失败

fail_if_header_matches:

[ - <http_header_match_spec>, ... ]

3.2.11 如果响应头与正则表达式不匹配,则探测失败。对于具有多个值的标头,如果* none *不匹配,则失败

fail_if_header_not_matches:

[ - <http_header_match_spec>, ... ]

3.2.12 HTTP探针的TLS协议的配置

tls_config:

[ <tls_config> ]

3.2.13 目标的HTTP基本身份验证凭据

basic_auth:

[ username: <string> ]

[ password: <secret> ]

3.2.14 目标的承载令牌

[ bearer_token: <secret> ]

3.2.15 目标的承载令牌文件

[ bearer_token_file: <filename> ]

3.2.16 用于连接到目标的HTTP代理服务器。

[ proxy_url: <string> ]

3.2.17 HTTP探针的IP协议(ip4,ip6)

[ preferred_ip_protocol: <string> | default = "ip6" ]
[ ip_protocol_fallback: <boolean> | default = true ]

3.2.18 探针中使用的HTTP请求的主体。

body: [ <string> ]

<http_header_match_spec>

header: <string>,

regexp: <regex>,

[ allow_missing: <boolean> | default = false ]

4 常用几种应用场景

4.1 HTTP检测(监控网站状态)

4.1.1 blackbox配置

# vim http_code.yaml

modules:

  http_2xx:

    prober: http

    http:

      method: GET

  http_post_2xx:

    prober: http

    http:

      method: POST

4.1.2 Prometheus配置

  - job_name: 'blackbox_http_2xx'

    metrics_path: /probe

    params:

      module: [http_2xx]

    static_configs:

      - targets:

        - https://www.baidu.com

        - https://www.yangxingzhen.com

    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        #blackbox exporter 所在节点

        replacement: 10.10.50.24:9115

针对每1个探针服务(如http_2xx)定义一个采集任务,并且直接将任务的采集目标定义为我们需要探测的站点。在采集样本数据之前通过relabel_configs对采集任务进行动态设置。

  • 根据Target实例的地址,写入__param_target 标签中,__param_<name>形式的标签表示,在采集任务时会在请求目标地址中添加<name>参数,等同于params的设置;
  • 获取__param_target的值,并覆写到instance标签中;
  • 覆写Target实例的__address__标签值为BlockBox Exporter实例的访问地址。

4.1.3 Prometheus热加载配置文件

# curl -X POST http://10.10.50.24:9090/-/reload

4.1.4 访问blackbox_exporter

浏览器输入http://10.10.50.24:9115

4.1.5 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

 查询数据

4.1.6  定义HTTP请求

HTTP服务通常会以不同的形式对外展现,有些可能就是一些简单的网页,而有些则可能是一些基于REST的API服务。对于不同类型的HTTP的探测需要管理员能够对HTTP探针的行为进行更多的自定义设置,包括:HTTP请求方法、HTTP头信息、请求参数等。对于某些启用了安全认证的服务还需要能够对HTTP探测设置相应的Auth支持。对于HTTPS类型的服务还需要能够对证书进行自定义设置。

如下所示,这里通过method定义了探测时使用的请求方法,对于一些需要请求参数的服务,还可以通过headers定义相关的请求头信息,使用body定义请求内容:

1)blackbox.yaml

# vim /usr/local/blackbox_exporter/blackbox.yml

modules:

  http_2xx:

    prober: http

    http:

      method: GET

  http_post_2xx:

    prober: http

    timeout: 5s

    http:

      method: POST

      headers:

        Content-Type: application/json

      body: '{"user_login": "admin" "user_pass": "Aa123456"}'
# systemctl restart blackbox_exporter 

2)prometheus配置:

# 添加以下内容

  - job_name: 'blackbox_http_post_2xx'

    metrics_path: /probe

    params:

      module: [http_post_2xx]

    static_configs:

      - targets:

        - http://10.10.50.24:30080/wp-login.php

    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        #blackbox exporter 所在节点

        replacement: 10.10.50.24:9115

3)保存配置并热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4)访问Prometheus的UI查看下targets,浏览器输入http://10.10.50.24:9090

查询数据

5)如果HTTP服务启用了安全认证,Blockbox Exporter内置了对basic_auth的支持,可以直接设置相关的认证信息即可: 

http_basic_auth_example:

    prober: http

    timeout: 5s

    http:

        method: POST

        headers:

            Host: "login.example.com"

        basic_auth:

            username: "username"

            password: "mysecret"

 6)对于使用了Bear Token的服务也可以通过bearer_token配置项直接指定令牌字符串,或者通过bearer_token_file指定令牌文件。

7)对于一些启用了HTTPS的服务,但是需要自定义证书的服务,可以通过tls_config指定相关的证书信息:

http_custom_ca_example:

    prober: http

    http:

        method: GET

        tls_config:

            ca_file: "/certs/my_cert.crt"

8)自定义探针

在默认情况下HTTP探针只会对HTTP返回状态码进行校验,如果状态码为2XX(200 <= StatusCode < 300)则表示探测成功,并且探针返回的指标probe_success值为1。

如果用户需要指定HTTP返回状态码,或者对HTTP版本有特殊要求,如下所示,可以使用valid_http_versions和valid_status_codes进行定义:

http_2xx_example:

    prober: http

    timeout: 5s

    http:

        valid_http_versions: ["HTTP/1.1", "HTTP/2"]

        valid_status_codes: [200,301,302]

默认情况下,Blockbox返回的样本数据中也会包含指标probe_http_ssl,用于表明当前探针是否使用了SSL:

# HELP probe_http_ssl Indicates if SSL was used for the final redirect

# TYPE probe_http_ssl gauge

probe_http_ssl 0

而如果用户对于HTTP服务是否启用SSL有强制的标准。则可以使用fail_if_ssl和fail_if_not_ssl进行配置。fail_if_ssl为true时,表示如果站点启用了SSL则探针失败,反之成功。fail_if_not_ssl刚好相反。

http_2xx_example:

    prober: http

    timeout: 5s

    http:

        valid_status_codes: []

        method: GET

        no_follow_redirects: false

        fail_if_ssl: false

        fail_if_not_ssl: false

除了基于HTTP状态码,HTTP协议版本以及是否启用SSL作为控制探针探测行为成功与否的标准以外,还可以匹配HTTP服务的响应内容。使用fail_if_matches_regexp和fail_if_not_matches_regexp用户可以定义一组正则表达式,用于验证HTTP返回内容是否符合或者不符合正则表达式的内容。

http_2xx_example:

    prober: http

    timeout: 5s

    http:

        method: GET

        fail_if_matches_regexp:

            - "Could not connect to database"

        fail_if_not_matches_regexp:

            - "Download the latest version here"

4.2 TCP(监控主机端口存活状态)

4.2.1 检测端口是否存活,在blackbox.yml 配置文件中使用的配置是tcp_connect模块

# vim /usr/local/blackbox_exporter/blackbox.yml

# 添加以下内容

  tcp_connect:

    timeout: 5s

    prober: tcp

4.2.2 添加Prometheus配置

# vim /usr/local/prometheus/prometheus.yml

# 添加以下内容

  - job_name: 'blackbox_check_ports'

    metrics_path: /probe

    params:

      module: [tcp_connect]

    static_configs:

      - targets:

        - 10.10.50.24:9115

        - 10.10.50.24:9090

    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        #blackbox exporter 所在节点

        replacement: 10.10.50.24:9115

4.2.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.2.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.3 ICMP 测试(主机探活)

4.3.1 通过 ping(icmp) 检测服务器的存活,在blackbox.yml使用的配置是icmp模块

# vim /usr/local/blackbox_exporter/blackbox.yml

# 添加以下内容

  icmp:

    prober: icmp

    timeout: 5s

    icmp:

      ttl: 5

4.3.2 添加Prometheus配置 

# vim /usr/local/prometheus/prometheus.yml

# 添加以下内容

  - job_name: 'blackbox_check_hosts'

    metrics_path: /probe

    params:

      module: [icmp]

    static_configs:

      - targets:

        - 10.10.50.24

        - 10.10.50.23
    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        #blackbox exporter 所在节点

        replacement: 10.10.50.24:9115

4.3.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.3.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.4 检测SSL证书过期时间

4.4.1 检测SSL证书,在blackbox.yml配置文件中使用的配置是模块

# vim /usr/local/blackbox_exporter/blackbox.yml

# 添加以下内容

  http_2xx:

    prober: http

    http:

      method: GET

      preferred_ip_protocol: "ipv4"

      valid_http_versions: ["HTTP/1.1", "HTTP/2"]

      valid_status_codes: [200,301,302,303]

4.4.2 添加Prometheus配置

 vim /usr/local/prometheus/prometheus.yml

# 添加以下内容

  - job_name: 'blackbox_check_ssl'

    metrics_path: /probe

    params:

      module: [http_2xx]

    static_configs:

      - targets:

        - https://www.yangxingzhen.com

        - https://www.i7ti.cn
    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        #blackbox exporter 所在节点

        replacement: 10.10.50.24:9115

4.4.3 Prometheus热加载配置文件

# curl -X POST ​ ​http://10.10.50.24:9090/-/reload

4.4.4 访问Prometheus的UI查看下targets

浏览器输入http://10.10.50.24:9090

查询数据

4.4.5 时间戳转换

这里以yangxingzhen.com的SSL证书为例,证书过期时间为2023年10月15日

# date -d "@1697327999"

Sun Oct 15 07:59:59 CST 2023

4.5 相关告警规则

4.5.1 主机端口不通

probe_success{job="blackbox_check_ports"} == 0

4.5.2 主机ping不通

probe_success{job="blackbox_check_hosts"} == 0

4.5.3 非200HTTP状态码

probe_http_status_code{job="blackbox_http_2xx"} != 200

4.5.4 SSL证书还有30天过期

probe_ssl_earliest_cert_expiry{job="blackbox_check_ssl"} - time() < 86400 * 30
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/2421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第二十二章 opengl之高级OpenGL(几何着色器)

OpenGL使用几何着色器用点造物体爆破物体法向量可视化在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader)&#xff0c; 几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换…

基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)

摘要&#xff1a;基于YOLOv5的疲劳驾驶检测系统使用深度学习技术检测常见驾驶图片、视频和实时视频中的疲劳行为&#xff0c;识别其闭眼、打哈欠等结果并记录和保存&#xff0c;以防止交通事故发生。本文详细介绍疲劳驾驶检测系统实现原理的同时&#xff0c;给出Python的实现代…

第十四届蓝桥杯三月真题刷题训练——第 19 天

第 1 题&#xff1a;灌溉_BFS板子题 题目描述 小蓝负责花园的灌溉工作。 花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。 小蓝可以控制一个按钮同时打开所有的出水管&#xff0c;打开时&#xff0c;有出水管的位置可以被认为已经灌溉好。 每经过一分…

一文带你看懂电压放大器和功率放大器的区别

很多人对于电压放大器和功率放大器总是分不太清&#xff0c;在实际应用过程中&#xff0c;电压放大器和功率放大器所起到的作用都是相同的。对于功率放大器和电压放大器的区别&#xff0c;今天就让安泰电子来带我们一起看看。功率放大器和电压放大器的主要区别是&#xff1a;功…

花青染料Sulfo-Cyanine7 N3,Cy7 azide,Sulfo-Cy7 N3,用于点击化学的水溶NIR azide染料

●中文名&#xff1a;磺化花青素Cyanine7叠氮&#xff0c;磺化花青素Cy7叠氮●英文名&#xff1a;Sulfo-Cyanine7 azide&#xff0c;Sulfo-Cyanine7 N3&#xff0c;Sulfo-Cy7 azide&#xff0c;Sulfo-Cyanine7 N3【产品理化指标】&#xff1a;CAS号&#xff1a;N/A分子式&#…

应用层协议 HTTP HTTPS

目录 应用层 再谈 "协议" 序列化和反序列化 关于 json库 request序列化 request反序列化 response序列化 response反序列化 PS&#xff1a;命令宏 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求 HTTP响应 请求方法 ​编辑 HT…

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式&#xff08;regex&#xff09;&#xff0c;就是一种模式匹配&#xff0c;学会用正则匹配&#xff0c;就可以达到事半功倍的效果。 一、正则表达式在…

幸福的烦恼:显卡算力太高而pytorch版本太低不支持

NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.写在最前面项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&am…

Linux(网络基础---数据链接层)

文章目录0. 前言1. 以太网的帧格式2. 再谈局域网原理3. 汇总整体通信流程&#xff0c;补全细节3-1 理解MAC地址和IP地址3-2 MTU1. 认识MTU2. MTU对IP协议的影响3. MTU对UDP协议的影响4. MTU对于TCP协议的影响3-3 ARP协议1. 基本概念2. ARP协议的作用3. ARP数据报的格式4. 简述a…

ChatGPT能够改变时代吗?一点点思考

都知道ChatGPT的出现对整个世界产生了剧烈的影响&#xff0c;前不久出的ChatGPT4更是在ChatGPT3.5的基础上展现了更强的功能。比如说同一个问题&#xff0c;ChatGPT3.5还是乱答的&#xff0c;ChatGPT4已经能给出正确解了。当然这只能说明技术是进步的。 虽然如此&#xff0c;很…

图像识别模型

一、数据准备 首先要做一些数据准备方面的工作&#xff1a;一是把数据集切分为训练集和验证集&#xff0c; 二是转换为tfrecord 格式。在data_prepare&#xff0f;文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集&#xff0c;训练集用于训练模型…

内存泄漏定位工具之 valgrind

内存泄漏检测工具 文章目录内存泄漏检测工具一、valgrind介绍1. memcheck2. cachegrind3. helgrind二、源码下载三、命令操作1.memcheck 工具四、虚拟机下使用1. x86编译2. 正常程序测试3. 申请内存不释放测试4. 内存越界的测试5. 读写已经释放的内存五、ARM平台使用1.交叉编译…

【web前端开发】CSS背景相关内容

文章目录背景颜色背景图片背景平铺背景位置background(复合属性)背景颜色 属性名:background-color 取值:表示颜色的取值都可以填写,如:rgb注意点: 背景颜色默认是透明的背景颜色不影响盒子的大小 实用技巧:在平时使用一些盒子时,可以给盒子设置背景颜色,这样可以看清盒子的…

网络编程套接字( TCP )

目录 1、实现一个TCP网络程序&#xff08;单进程版&#xff09; 1.1、服务端serverTcp.cc文件 服务端创建套接字 服务端绑定 服务端监听 服务端获取连接 服务端提供服务 服务端main函数命令行参数 服务端serverTcp.cc总代码 1.2、客户端clientTcp.cc文件 客户端main函数命令行…

Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决

前言 惯例&#xff0c;收到兄弟求救&#xff0c;关于long类型丢失精度的问题&#xff1a; 存在一个初学者不会&#xff0c;就会有第二个初学者不会&#xff0c;所以我出手。 正文 不多说&#xff0c;开搞。 如题&#xff0c; 后端返回的数据 给到 前端&#xff0c; Long类型数…

Flutter内阴影

前言 在前几天的业务需求中&#xff0c;UI给出的页面中有新拟态的按钮&#xff0c;就是带内部阴影的按钮&#xff0c;如果是利用css中box-shadow的属性&#xff0c;那么实现起来很简单&#xff0c;但是奈何Flutter中的Container的BoxShadow不具备inset内部阴影的功能&#xff…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术&#xff0c;可以使得内网服务可以被外网访问。以下是内网穿透的一些应用&#xff1a; 远程控制&#xff1a;通过内…

【头歌实验】课外作业一:开通ECS及使用Linux命令

文章目录一、完成下列实验并截图二、简要回答“课堂考核”内容三、在头歌、华为云或阿里云官网上&#xff0c;找出自己的课外学习资源&#xff0c;制定小组的课程学习计划、专业学习计划。四、习题1.10一、完成下列实验并截图 1、实验《ECS云服务器新手上路》 https://develo…

【LeetCode】1022. 从根到叶的二进制数之和、563. 二叉树的坡度

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 1022. 从根到叶的二进制数之和 1022. 从根到叶的二进制数之和 题目描述&#xff1a; 给出一…

OpenCV入门(十八)快速学会OpenCV 17 直线检测

OpenCV入门&#xff08;十八&#xff09;快速学会OpenCV 17 直线检测1.霍夫直线变换概述2.霍夫变换原理3.操作实例3.1 HoughLines函数3.2 HoughLinesP函数作者&#xff1a;Xiou 1.霍夫直线变换概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用…