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证书过期监控啦。

最终效果:

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[vite] ts写配置根目录别名

参考:配置 Vite | Vite 写对象的形式吧 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],resolve: {alias: {"": path.resolve(__dirname…

Datawhale ChatGPT基础科普

根据课程GitHub - datawhalechina/hugging-llm: HuggingLLM, Hugging Future. 摘写自己不懂得一些地方&#xff0c;具体可以再到以上项目地址 LM&#xff1a;这是ChatGPT的基石的基石。 Transformer&#xff1a;这是ChatGPT的基石&#xff0c;准确来说它的一部分是基石。 G…

2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介&#xff1a; 2024新算法角蜥优化算法&#xff08;HLOA&#xff09;和经典灰狼优化器&#xff08;GWO&#xff09;进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗&#xff0c;并使无人机能够适应复杂…

数据持久化第四课-EF的基本使用

数据持久化第四课-EF的基本使用 一.预习笔记 1.数据实体模型概述 ORM全称是“对象-关系映射”&#xff08;Object-Relation Mapping&#xff09; ORM是将关系数据库中的数据用对象的形式表现出来&#xff0c;并通过面向对象的方式将这些对象组织起来&#xff0c;实现系统业务…

理发师问题的业务建模方案

背景 题目&#xff1a; 假设有一个理发店只有一个理发师&#xff0c;一张理发时坐的椅子&#xff0c;若干张普通椅子顾客供等候时坐。没有顾客时&#xff0c;理发师睡觉。顾客一到&#xff0c;叫醒理发师 。如果理发师没有睡觉&#xff0c;而在为别人理发&#xff0c;他就会坐…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…

实现Spring底层机制(二)

文章目录 阶段2—封装bean定义信息到Map1.代码框架图2.代码实现1.文件目录2.新增注解Scope存储单例或多例信息Scope.java3.修改MonsterService.java指定多例注解4.新增bean定义对象存储bean定义信息BeanDefinition.java5.修改pom.xml增加依赖6.修改容器实现bean定义信息扫描Sun…

基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言 基于Vue2.5ElementPlus实现的一个自定义带历史记录的搜索框组件 效果如图&#xff1a; 基本样式&#xff1a; 获取焦点后&#xff1a; 这里的历史记录默认最大存储10条&#xff0c;同时右侧的清空按钮可以清空所有历史记录。 同时搜索记录也支持点击搜索&#xff0c;按…

Linux给磁盘扩容(LVM方式)

Linux给磁盘扩容&#xff08;LVM方式&#xff09; 最近测试性能&#xff0c;在本地打数据时&#xff0c;发现磁盘空间不足&#xff0c;于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。 LVM:是一种技术&#xff0c;方便管理磁盘。如果不用LVM&#xff0c;那…

springboot2集成东方通tongweb嵌入式版

由于最近项目需要国产化信创改造&#xff0c;引入东方通tongweb 联系东方通厂家 &#xff0c;将依赖导入到maven仓库&#xff0c;并获取嵌入式版license文件修改pom.xml&#xff0c;引入依赖&#xff0c;注意springboot版本&#xff0c;这里以springboot2举例 首先移除springb…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式&#xff08;1&#xff09;Write_First&#xff08;2&#xff09;Read_First&#xff0…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

大模型训练及推理【硬件选型指南】及 GPU 通识

我们在做大模型应用部署时&#xff08;如训练、微调、RAG&#xff09;&#xff0c;往往需要在前期就分析好硬件选型指标&#xff0c;或者我们给客户报方案之前&#xff0c;可能你已经有了一个方案&#xff0c;但是由于实践经验缺乏&#xff0c;不知道在硬件上该如何评估并上报。…

invidia-smi占用显存,无法显示PID

如果是动用了子线程创建进程&#xff0c;比如利用accelerate训练脚本&#xff0c;那么大概率可以通过这种方式解决&#xff1a;nvidia-smi没有进程&#xff0c;但是显存占用_nvidia-smi有的卡是0%-CSDN博客 如果这种方法不可用&#xff0c;请尝试直接查询所有python进程&#x…

react v18 项目初始化

按照以下命令进行傻瓜式操作即可&#xff1a; 全局安装脚手架工具&#xff1a; npm install -g create-react-app创建项目my-react-app&#xff1a; create-react-app my-react-app安装 antd: yarn add antd安装 react-router-dom&#xff1a; yarn add react-router-dom启动项…

[Qt的学习日常]--初识Qt

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、Qt的基本…

鸿蒙(HarmonyOS)性能优化实战-多线程共享内存

概述 在应用开发中&#xff0c;为了避免主线程阻塞&#xff0c;提高应用性能&#xff0c;需要将一些耗时操作放在子线程中执行。此时&#xff0c;子线程就需要访问主线程中的数据。ArkTS采用了基于消息通信的Actor并发模型&#xff0c;具有内存隔离的特性&#xff0c;所以跨线…

4.23日总结(项目总结)

1.项目&#xff1a; 今日项目通过一个在登录界面的一个静态变量&#xff0c;完成了区分老师和学生&#xff0c;能够分开老师和学生&#xff0c;并且不同身份的人进去会有不同的显示&#xff0c;以及登录链接主界面&#xff0c;还有学生和老师的不同的表&#xff0c;其次就是创…

葡萄书--关系图卷积神经网络

异质图和知识图谱 同质图与异质图 同质图指的是图中的节点类型和关系类型都仅有一种 异质图是指图中的节点类型或关系类型多于一种 知识图谱 知识图谱包含实体和实体之间的关系&#xff0c;并以三元组的形式存储&#xff08;<头实体, 关系, 尾实体>&#xff0c;即异…

用Excel做一个功能完备的仓库管理系统

1 基本设计思路 用到的Excel技术&#xff1a;sumif, vlookup, 表格(table)。基本思路&#xff1a;在有基础的商品、仓库等信息的情况下&#xff0c;对商品的每一个操作都有对应的单据&#xff0c;然后再汇总统计。标识&#xff1a;为了在不同的维度统计数量&#xff0c;各单据…