Prometheus blackbox_exporter 黑盒监控

2024-04-23 19:44

本文主要是介绍Prometheus blackbox_exporter 黑盒监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述


在监控体系里面,通常我们认为监控分为:白盒监控黑盒监控

黑盒监控:主要关注的现象,一般都是正在发生的东西,例如出现一个告警,业务接口不正常,那么这种监控就是站在用户的角度能看到的监控,重点在于能对正在发生的故障进行告警。

白盒监控:主要关注的是原因,也就是系统内部暴露的一些指标,例如 redis 的 info 中显示 redis slave down,这个就是 redis info 显示的一个内部的指标,重点在于原因,可能是在黑盒监控中看到 redis down,而查看内部信息的时候,显示 redis port is refused connection。

 

 

 

黑盒监控  blackbox_exporter


前边介绍有很多exporter可以直接将metrics暴露给Prometheus进行监控,这些称为“白盒监控”,那些exporter无法监控到的指标呢?或者未暴露Metrics给Prometheus的一些服务怎么办?这时就要用到 blackbox_exporter “黑盒监控”。

blackbox_exporter是Prometheuse官方提供的一个exporter,可以通过HTTP、HTTPS、DNS、TCP和ICMP对被监控节点进行监控和数据采集,还可以探测SSL证书过期时间。

在 Kubernetes (k8S) 中,Blackbox Exporter 主要用于进行黑盒监控,即对外部服务或者网络端点的可用性、响应时间等指标进行探测。它并不直接监控 Kubernetes 内部组件的状态,而是针对集群内外的各种网络服务提供健康检查和性能监控。

Blackbox Exporter 支持多种协议和检查类型,包括但不限于:

  • HTTP(S):对 Web 服务器的响应状态、响应时间进行探测,URL/API可用性检测。
  • DNS:域名解析,检查 DNS 解析的速度和正确性。
  • TCP:通过建立TCP连接来验证端口的开放情况和服务的可达性。(端口监听检测) 
  • ICMP:利用ping命令来检测远程主机是否在线(主机存活检测)。
  • gRPC:对gRPC服务的健康状况进行检查。

详细的配置请查看黑盒监控官方文档 

部署blackbox_exporter


https://github.com/prometheus/blackbox_exporter/releases/tag/v0.25.0icon-default.png?t=N7T8https://github.com/prometheus/blackbox_exporter/releases/tag/v0.25.0 这里以linux二进制部署为例,下载安装包:

curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.22.0/blackbox_exporter-0.22.0.linux-amd64.tar.gz

展开程序包:

tar xf blackbox_exporter-0.22.0.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/blackbox_exporter-0.22.0.linux-amd64 /usr/local/blackbox_exporter

 创建用户,或prometheus用户已经存在,可略过该步骤:

useradd -r prometheus

 创建Systemd Unitfile,保存于/usr/lib/systemd/system/blackbox_exporter.service文件中:

[Unit]
Description=blackbox_exporter
After=network.target[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter \--config.file=/usr/local/blackbox_exporter/blackbox.yml \--web.listen-address=:9115
Restart=on-failure[Install]
WantedBy=multi-user.target

 验证监听的端口,并测试访问其暴露的指标

ss -tnlp | grep '9115'
curl localhost:9115/metrics

随后即可访问Blackbox Exporter的Web UI,其使用的URL如下,其中的<host_ip>要替换为节点的实际地址:http://<host_ip>:9115/

icmp监控,监控主机存活状态


prometheus 添加相关监控,Blackbox 使用默认配置启动即可

 vi /usr/local/prometheus/prometheus.yml

  - job_name: "icmp_ping"metrics_path: /probeparams:module: [icmp]  # 使用icmp模块file_sd_configs:- refresh_interval: 10s #检测时间间隔files:- "ping/ping_status*.yml"  #具体的配置文件路径relabel_configs:- source_labels: [__address__]regex: (.*)(:80)?target_label: __param_targetreplacement: ${1}- source_labels: [__param_target]target_label: instance- source_labels: [__param_target]regex: (.*)target_label: pingreplacement: ${1}- source_labels: []regex: .*target_label: __address__replacement: 127.0.0.1:9115

创建对应的ping目录

cd /usr/local/prometheus/
mkdir ping
cd ping

 vi ping_status.yml

- targets: ['monitor.example.com']labels:group: '跳板机'
- targets: ['10.xx.xx.xx','10.xx.xx.xx','10.xx.xx.xx']labels:group: 'k8s cluster'
- targets: ['www.baidu.com']labels:group: '百度' 

配置完成后,可以检查配置文件语法,并让Prometheus重载配置。

./promtool check config prometheus.yml
--web.enable-lifecycle  这个参数得放进去 
curl -XPOST monitor.example.com:9090/-/reload

打开Prometheus web UI,可以看到,已经监控到了主机icmp情况:

http 监控


编辑prometheus的主配置文件prometheus.yml,添加类似如下内容,即可用户对目标站点的探测。

这里演示的网页是 baidu.com ,所有主机有网且有配置正确的dns都可以访问到该域名。因为该域名是有在dns域名服务上做解析的。

  # Blackbox Exporter- job_name: 'http_get_status'metrics_path: /probeparams:module: [http_2xx]  # Look for a HTTP 200 response.file_sd_configs:- refresh_interval: 2mfiles:- "httpget/http_get*.yml"  #具体的配置文件relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: "monitor.example.com:9115" # 替换原_address_的值,修改指向实际的Blackbox exporter- target_label: regionreplacement: "local"

vi httpget/http_get.yml

static_configs:
- targets:- "https://monitor.example.com"- "http://monitor.example.com:8080"- "http://www.baidu.com"refresh_interval: 2m

重新加载Prometheus

curl -XPOST monitor.example.com:9090/-/reload
在加载的时候最好看一下相关配置curl -XPOST http://prom.ky56.com/prometheus/-/reload[apps@prometheus-uat prom]$ docker inspect  8557be391699 
"--web.enable-lifecycle"

展示:

probe_http_status_code 

这里要注意,blackbox下并不是prometheus中State状态为UP就认为是正常状态,其实并不然,这里我们随便写一个不存在的域名,例如:http://www.buzhida2222o.com,这里看也是UP状态:

但实际看其的metrics指标并不正常,探活的指标是失败,这里不确定是BUG还是怎样。 

自己公司环境测试配置如下:

  - job_name: 'blackbox-http'
    metrics_path: /probe
    params:
      module: [http_2xx]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.172.159:9115
    file_sd_configs:
    - refresh_interval: 1m
      files:
      - targets/blackbox/http/*.yaml

建议将需要监控的配置单独存放,而不是配置在prometheus里面,使用file_sd_configs配置。

[apps@HZP conf]$ cat targets/blackbox/http/http.yaml 
- labels:
    env: pro
    team: 运维
    app: xiaomi云
    project: 站点监控
  targets:
  - https://newvue-kypay.net
 

- labels:
    env: uat
    team: 运维
    app: xiaomi云
    project: 站点监控
  targets:
  - https://www.xiaomi.com

 

监控没有域名解析的网页


例如Prometheus使用nginx-ingress作为网关,给外部系统通过域名来访问集群内部的Prometheus。现在需要通过Prometheus来检查域名的状态是否为200状态码。

这里只需要在http.yml文件中添加一个域名即可。稍等几分钟即可在Prometheus看到

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-files-sd-config
  namespace: kube-mon
data:
  http.yml: |
    - targets:
      - baidu.com
      - www.ecloud.com/prometheus 

只需要更新configMap即可

kubectl apply -f prometheus-config.yaml
configmap/prometheus-config unchanged
configmap/prometheus-files-sd configured

Prometheus展示

从promSQL获取到的域名 www.ecloud.com/prometheus 的状态码为403。出现该原因是blockbox exporter直接使用dns服务器解析 www.ecloud.com 的域名(可以通过查看blockbox exporter日志发现问题)。固然这不是我们想要的结果。从尝试过将设置域名映射为本地IP地址,但是发现是无效的。

解决方法:
blockbox exporter容器先使用内部的dns服务进行域名解析,如果解析不成功,会通过 /etc/resolv.conf 的域名解析地址进行解析。所以只需要在内部dns服务添加A记录进行解析即可。

# 添加A记录
kubectl -n kube-system edit cm coredns
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local. in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        # 添加hosts{}的字段,有多个域名加添加多行
        # 【注意】最后一行固定是fallthrough
        hosts {
            192.168.31.188 www.ecloud.com
            fallthrough
        }
        prometheus :9153
        forward . /etc/resolv.conf {
            max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }

# 重启coredns服务
kubectl -n kube-system delete pod -l k8s-app=kube-dns
pod "coredns-8587764bd6-b898r" deleted
pod "coredns-8587764bd6-tlxpd" deleted
pod "coredns-8587764bd6-tts8x" deleted

再次查看PromSQL就可以看到状态码为200了。

targets

 

tcp端口监控


大体的步骤都是一致的,这里就直接上配置:

- job_name: 'tcp_port_status'metrics_path: /probeparams:module: [tcp_connect]static_configs:- targets: ['monitor.example.com:80','monitor.example.com:8080','monitor.example.com:443']labels:instance: 'port_status'group: 'tcp'relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: monitor.example.com:9115

至此,黑盒监控中常用的一些功能介绍完毕,监控项配置完毕后,可以通过导入dashboard到grafana来更直观的查看监控数据。

自定义blackbox.yml,监控TLS证书过期时间


blackbox的默认监控配置也可以进行自定义修改,例如http GET添加一些headers,设置boby_size_limit值或判断一些response body是否符合预期,还有一些TLS的设置等等,我们可以参考官网文档中给出的example来进行自定义:

# github地址
https://github.com/prometheus/blackbox_exporter# github中blackbox.yml各配置项解析
blackbox_exporter/CONFIGURATION.md at master · prometheus/blackbox_exporter · GitHub# github中example文件
blackbox_exporter/example.yml at master · prometheus/blackbox_exporter · GitHub

这里我们做一个演示https及私有TLS证书的演示,监控证书过期时间。首先需要更改默认的vim blackbox.yml。

modules:http_2xx:prober: httphttp:preferred_ip_protocol: "ip4"valid_http_versions: ["HTTP/1.1", "HTTP/2"]valid_status_codes: [200,301,302,303]tls_config:insecure_skip_verify: truehttp_ca_example:prober: httphttp:method: GETpreferred_ip_protocol: "ip4"valid_http_versions: ["HTTP/1.1", "HTTP/2"]fail_if_ssl: falsefail_if_not_ssl: truetls_config:insecure_skip_verify: falseca_file: /usr/local/blackbox_exporter/certs/ca.crtcert_file: /usr/local/blackbox_exporter/certs/server.crtkey_file: /usr/local/blackbox_exporter/certs/server.key

http_2xx:

在此模块的基础上添加了请求状态码的校验,并设置了tls校验直接跳过,这种就比较省事,可以直接跳过证书的校验。

http_ca_example:

此模块为新增,主要配置了tls证书的一些配置,添加ca、证书和私钥的文件位置,使blackbox请求时带着证书。配置完成后,重启blackbox服务:

systemctl restart blackbox_exporter.service

然后配置prometheus.yml添加对应模块的使用:

  - job_name: 'http_get_status'metrics_path: /probeparams:module: [http_2xx]  # Look for a HTTP 200 response.file_sd_configs:- refresh_interval: 2mfiles:- "httpget/http_get*.yml"  #具体的配置文件relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: "monitor.example.com:9115"  # 指向实际的Blackbox exporter.- target_label: regionreplacement: "local"- job_name: 'http_get_ca_status'metrics_path: /probeparams:module: [http_ca_example]  file_sd_configs:- refresh_interval: 2mfiles:- "httpget/http_ca.yml"relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: "monitor.example.com:9115"  # 指向实际的Blackbox exporter.- target_label: regionreplacement: "beijing"

在对应的发现文件中,配置主机并重新加载prometheus配置,并查看监控状态:

curl -XPOST monitor.example.com:9090/-/reload

搜索指标

probe_http_duration_seconds{phase="tls"}

证书过期时间已经获取成功,这个时候可以导入ID为13230的Dashboard到Grafana,然后再设置一个告警rule,就可以完成TLS证书过期监控啦。

最终效果:

这篇关于Prometheus blackbox_exporter 黑盒监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929706

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

java后端服务监控与告警:Prometheus与Grafana集成

Java后端服务监控与告警:Prometheus与Grafana集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的微服务架构中,监控和告警是确保服务稳定性的关键组成部分。Prometheus和Grafana是两个强大的工具,它们可以集成在一起,为Java后端服务提供实时监控和可视化告警。 服务监控的重要性 服务监控可以帮助我们实时了解服务的健

145-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

参考 【权限维持】Linux&Rootkit后门&Strace监控&Alias别名&Cron定时任务_alias ls='alerts(){ ls $* --color=auto;python -c "-CSDN博客 参考 FlowUs 息流 - 新一代生产力工具 权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1、编辑后门反弹shell脚本

828华为云征文|基于Flexus云服务器X实例的应用场景-拥有一款自己的ssl监控工具

先看这里 写在前面效果图华为云Flexus云服务器X实例介绍特点可选配置购买 连接服务器Uptime-kuma简介开源信息部署准备工作:docker部署命令访问uptime-kuma 基本配置总结 写在前面 作为一个个人开发者,相信你手里肯定也有不少自己的服务,有的服务呢也是https的。 以前ssl各厂都是可以免费申请一年的,我们更换的频率还好,比较小;但是最近,各厂都