prometheus通过blackbox-exporter监控web站点证书

news2025/1/10 19:34:01

1 概述

线上站点普遍是https,因此监控https web站点的证书的过期时间,是一个基础性需求。例如,证书过期会导致tls握手失败,进而导致用户无法正常访问web站点。
blackbox-expoter是一个web服务,它暴露了一个接口,访问这个接口能使得它去访问目标站点,并向客户端响应相关的web站点指标信息。prometheus和black-expoter结合使用,可以监控https web站点的响应时间、证书过期时间等。


2 blackbox-expoter

2.1 指标接口

格式:
GET /probe?module=模块名&target=<网址>
例子:
GET /probe?module=http_get_2xx&target=https://www.baidu.com

在这里插入图片描述


2.2 部署

blackbox-exporter的配置中定义了多种模块,例如ping,http_get_2xx等,模块名称可以自行定义。

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
  
---

apiVersion: v1
kind: Service
metadata:
  name: blackbox-exporter
  namespace: monitoring
  labels:
    k8s-app: blackbox-exporter
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 9115
    targetPort: 9115
  selector:
    k8s-app: blackbox-exporter
    
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blackbox-exporter
  namespace: monitoring
  labels:
    k8s-app: blackbox-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: blackbox-exporter
  template:
    metadata:
      labels:
        k8s-app: blackbox-exporter
    spec:
      containers:
      - name: blackbox-exporter
        image: prom/blackbox-exporter:latest
        args:
        - --config.file=/etc/blackbox_exporter/blackbox.yml
        - --web.listen-address=:9115
        - --log.level=info
        ports:
        - name: http
          containerPort: 9115
        resources:
          limits:
            cpu: 200m
            memory: 256Mi
          requests:
            cpu: 100m
            memory: 50Mi
        livenessProbe:
          tcpSocket:
            port: 9115
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
        readinessProbe:
          tcpSocket:
            port: 9115
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
        volumeMounts:
        - name: config
          mountPath: /etc/blackbox_exporter
      volumes:
      - name: config
        configMap:
          name: blackbox-exporter

---

apiVersion: v1
kind: ConfigMap
metadata:
  name: blackbox-exporter
  namespace: monitoring
  labels:
    app: blackbox-exporter
data:
  blackbox.yml: |-
    modules:
      ## ----------- TCP 检测模块配置 -----------
      tcp_connect:
        prober: tcp
        timeout: 5s
      ## ----------- ICMP 检测配置 -----------
      ping:
        prober: icmp
        timeout: 5s
        icmp:
          preferred_ip_protocol: "ip4"
      ## ----------- HTTP GET 2xx 检测模块配置 -----------
      http_get_2xx:  
        prober: http
        timeout: 10s
        http:
          method: GET
          preferred_ip_protocol: "ip4"
          valid_http_versions: ["HTTP/1.1","HTTP/2"]
          valid_status_codes: [200]           # 验证的HTTP状态码,默认为2xx
          no_follow_redirects: false          # 是否不跟随重定向
      ## ----------- HTTP GET 3xx 检测模块配置 -----------
      http_get_3xx:  
        prober: http
        timeout: 10s
        http:
          method: GET
          preferred_ip_protocol: "ip4"
          valid_http_versions: ["HTTP/1.1","HTTP/2"]
          valid_status_codes: [301,302,304,305,306,307]  # 验证的HTTP状态码,默认为2xx
          no_follow_redirects: false                     # 是否不跟随重定向
      ## ----------- HTTP POST 监测模块 -----------
      http_post_2xx: 
        prober: http
        timeout: 10s
        http:
          method: POST
          preferred_ip_protocol: "ip4"
          valid_http_versions: ["HTTP/1.1", "HTTP/2"]
          #headers:                             # HTTP头设置
          #  Content-Type: application/json
          #body: '{}'                           # 请求体设置

在这里插入图片描述
在这里插入图片描述


3 部署prometheus

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus-app
  namespace: monitoring

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: prometheus-app
  name: prometheus-app
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus-app
  template:
    metadata:
      labels:
        app: prometheus-app
      name: prometheus-app
    spec:
      containers:
      - args:
        - --config.file=/etc/prometheus/prometheus.yml
        - --storage.tsdb.retention=7d
        - --web.enable-lifecycle
        - --log.level=debug
        image: prom/prometheus:v2.31.0
        imagePullPolicy: IfNotPresent
        name: prometheus
        ports:
        - containerPort: 9090
          name: web
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/prometheus
          name: config-volume
        - mountPath: /etc/prometheus/etc.d
          name: blackbox-web-target
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      serviceAccount: prometheus-app
      serviceAccountName: prometheus-app
      volumes:
      - configMap:
          name: prometheus-app
        name: config-volume
      - configMap:
          name: blackbox-web-target
        name: blackbox-web-target

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: prometheus-app
    name: prometheus-app
  name: prometheus-app
  namespace: monitoring
spec:
  ports:
  - name: http
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus-app
  sessionAffinity: None
  type: ClusterIP

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus-app
  namespace: monitoring

---
apiVersion: v1
data:
  prometheus.yml: |-
    global:
      scrape_interval: 15s
    scrape_configs:
    - job_name: blackbox
      metrics_path: /probe
      params:
        module: [http_get_2xx]			#  会变成http的参数:module=http_get_2xx
      file_sd_configs:         
      - files: 
        - '/etc/prometheus/etc.d/web.yml'           # 被监控的目标站点是写在此文件
        refresh_interval: 30s 						# 30秒热更新一次,不必重启prometheus
      relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target			# 会变成http的参数:target=目标url
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: blackbox-exporter.monitoring.svc.cluster.local:9115
kind: ConfigMap
metadata:
  name: prometheus-app
  namespace: monitoring

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: blackbox-web-target
  namespace: monitoring
  labels:
    app: blackbox-exporter
data:
  web.yml: |-
    ---
    - targets:
      - https://www.baidu.com         # 被监控的站点
      labels:
        env: prod
        app: baidu-web
        project: baidu
        desc: desc for baidu web
    - targets:
      - https://blog.csdn.net	       # 被监控的站点
      labels:
        env: prod
        app: csdn-web
        project: csdn
        desc: desc for csdn

在这里插入图片描述

4 promethues界面效果

在这里插入图片描述

在这里插入图片描述

指标probe_ssl_earliest_cert_expiry表示证书的过期时间的时间戳,那么以下公式表示多少秒后证书过期:

probe_ssl_earliest_cert_expiry - time()  

5 小结

prometheus和blackbox-exporter一起协同监控web站点,blackbox-exporter作为一个中间层解耦prometheus和目标web站点,blackbox-exporter是真正去获取目标web站点证书并暴露metrics的服务,prometheus只需要抓取blackbox-exporter暴露的指标即可。

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

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

相关文章

如何在面试中处理竞争与压力

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

WebSocket与SSE区别

一&#xff0c;websocket WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09; 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket是一个持久化的协议 websocket的原理 …

算法笔记:二叉树

1 基本二叉树 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点&#xff0c;而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点&#xff08;Node&…

服务运营 | MSOR文章精选:远程医疗服务中的统计与运筹(二)

作者信息&#xff1a;王畅&#xff0c;陈盈鑫 编者按 在上一期中&#xff0c;我们分享了与远程医疗中运营管理问题相关的两篇文章。其一发表在《Stochastic Systems》&#xff0c;旨在使用排队论与流体近似的方法解决远程医疗中资源配置的问题&#xff1b;其二发表在《Managem…

R_I相关指令函数(SMART PLC梯形图代码)

大部分小型PLC可能并没有R_I(浮点数转单字)指令&#xff0c;这篇博客我们介绍简单实用的一些转换FC,这些FC其实并不复杂&#xff0c;但是可以大大简化我们的代码量&#xff0c;使代码阅读起来更简介明了。SMART PLC的ABS()指令请查看下面文章链接&#xff1a; PLC绝对值指令AB…

04 Linux补充|C/C++

目录 Linux补充 C语⾔ C语言中puts和printf的区别&#xff1f; Linux补充 (1)ubuntu安装ssh服务端openssh-server命令&#xff1a; ubuntu安装后默认只有ssh客户端&#xff0c;只能去连其它ssh服务器&#xff1b;其它客户端想要连接这个ubuntu系统&#xff0c;需要安装部署…

LLM大模型推理加速 vLLM

参考&#xff1a; https://github.com/vllm-project/vllm https://zhuanlan.zhihu.com/p/645732302 https://vllm.readthedocs.io/en/latest/getting_started/quickstart.html ##文档 加速原理&#xff1a; PagedAttention&#xff0c;主要是利用kv缓存 使用&#xff1a; #…

JVM | Java执行引擎结构及工作原理

引言 Java虚拟机&#xff08;JVM&#xff09;和其复杂性 在我们先前探讨的文章中&#xff0c;我们已经深入到了Java虚拟机&#xff08;JVM&#xff09;的内部&#xff0c;透视了其如何通过元空间存储类的元数据和字节码。JVM的设计初衷是为了实现跨平台兼容性&#xff0c;但随…

JavaScript构造函数

1、构造函数&#xff1a; 是一个函数&#xff0c;是通过new运算符进行调用&#xff0c;生成一个特殊的对象并返回。 function 函数名([参数]){ this.属性名 ‘属性值’ ... this.属性名 function([参数]){ 函数体语句 } } 通常情况下&#xff0c;建议构造函数的首字母大写 …

如何修复损坏的MP4视频文件?

随着智能设备拍摄功能的不断强大&#xff0c;随拍摄成本逐渐降低&#xff0c;越来越多的人喜欢用视频记录我们的生活&#xff0c;并上传抖音、快手、B站等视频网站 但在拍摄视频时也可能遇到一些突发情况&#xff0c;如手机没电断电终止拍摄、视频文件传输中断等&#xff0c;拍…

【Semidrive】解决 X9HP reboot 导致 Android 崩溃的问题

本篇文章介绍如何解决 X9HP 平台的 AP1 域中插着 u 盘时运行 reboot 导致 Android 系统崩溃的问题&#xff0c;软件版本是 X9 PTG4.0&#xff0c;硬件环境是 X9H 开发板 X9H_REF_A04。一、问题原因 在调试过程中遇到插着 u 盘时用 adb shell reboot 命令或直接在串口中 reboot …

国际网页短信软件平台通道搭建与后台定制-移讯云短信系统

国际网页短信软件平台通道搭建与后台定制-移讯云短信系统 这里先介绍下客户的定制需求&#xff0c;稍候放出开发构架和开发思路 我们根据市场需要&#xff0c;开发了一套可以接入国际通道的短信系统。 支持地区通道分流&#xff0c;支持关键字&#xff0c;关键词通道分流&…

ELK框架Logstash配合Filebeats和kafka使用

ELK框架Logstash配合Filebeats和kafka使用 本文目录 ELK框架Logstash配合Filebeats和kafka使用配置文件结构input为标准输入&#xff0c;output为标准输出input为log文件output为标准输出output为es input为tcpspringboot配置logstash配置 input为filebeatsfilebeats配置logsta…

【脑机接口】通过任务判别成分分析提高单独校准的 SSVEPBCI 的性能

题目&#xff1a;Improving the Performance of Individually Calibrated SSVEP-BCI by Task Discriminant Component Analysis **1. 摘要****2. 方法***A.任务相关成分分析**B.任务判别成分分析**C.评估* **- 结果****- 结论** 1. 摘要 脑机接口&#xff08;BCI&#xff09;为…

Python异步请求处理框架

在互联网时代&#xff0c;我们的程序需要处理大量的网络请求。为了提高性能和用户体验&#xff0c;我们需要一个高效的异步请求处理框架。本文将引导您从头开始编写一个Python框架&#xff0c;实现异步请求及响应管理。 设计思路与关键技术点 a. 异步编程的基本概念 异步编程…

权限提升-Linux提权-环境变量文件配合SUID提权

LINUX系统提权项目介绍 一个综合类探针&#xff1a; Linux&#xff1a;https://github.com/liamg/traitor 一个自动化提权&#xff1a; Linux&#xff1a;https://github.com/AlessandroZ/BeRoot 两个信息收集&#xff1a; Linux&#xff1a;https://github.com/rebootuser/Lin…

OpenWAF配置本地资源访问

OpenWAF配置本地静态资源安全访问 介绍 OpenWAF&#xff08;Web Application Firewall&#xff09;是一个开源的Web应用防火墙&#xff0c;用于保护Web应用程序免受各种网络攻击。它通过与Web服务器集成&#xff0c;监控和过滤对Web应用程序的流量&#xff0c;识别和阻止潜在…

搭建最简单的SpringBoot项目

1、创建maven项目 2、引入父pom <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version> </parent> 3、引入springboot-web依赖 <dependency…

UG\NX CAM二次开发 遍历组中的工序 UF_NCGROUP_ask_member_list

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 遍历组中的工序 UF_NCGROUP_ask_member_list 效果: 代码: void GetAllOperTag(tag_t groupTag, vector<tag_t> &vOperTags) {int count=0;tag_t * list;UF_NCGROUP_ask_member_li…

数学建模-大模型的对比

引用老哥数学建模视频 【ChatGPT 4.0】在数学建模中的应用&#xff01;算法Matlab写作&#xff0c;全面测评六款大模型软件&#xff0c;直接使用&#xff01; 哪些问题可以问GPT 一、算法应用 1帮我总结一下数学建模有哪些预测类算法&#xff1f; 2灰色预测模型级比检验是什么…