使用Prometheus监控web站点及证书过期


本文所指的web监控是指对某些访问地址或者说是接口进行监控。我们将通过一些实例,来介绍如何配置Prometheus 、black_exporter、grafana来监控站点的以下几个方面:

  1. 状态码
  2. 响应时间
  3. 证书过期时间

最终的效果图如下(图片建议在电脑端看):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单个站点监控详情图

在这里插入图片描述

企业微信告警样图

Prometheus的web监控需要借助 blackbox_exporter

当然black_exporter 的功能远不止于监控web站点,它还能监控端口(TCP),DNS、UDP等,以下是官方给出的介绍

The blackbox exporter allows blackbox probing of endpoints over HTTP, HTTPS, DNS, TCP and ICMP.

我们这里只专注于web监控,其他监控不在本文介绍范围。

配置详情

配置大概分为以下几步:

  1. 安装black_exporter
  2. 配置监控目标地址
  3. 配置告警规则
  4. 配置grafana面板

安装配置black_expoter

我这里使用docker-compose进行部署(我的Prometheus、grafana、alertmanager等都定义在一个compose文件中,这里只列出black_exporter)

version: '3.7'
services:
  blackbox_exporter:
    container_name: blackbox_exporter
    image: prom/blackbox-exporter:master
    volumes:
      - /data/monitor/blackbox_exporter/config/config.yml:/etc/blackbox_exporter/config.yml
    ports:
      - 9115:9115

配置文件/data/monitor/blackbox_exporter/config/config.yml 内容如下:

modules:
  http_2xx:      # 给模块取名,后面在Prometheus的配置文件中会用到该名称
    prober: http # 探针类型,探针有多种类型如http、tcp、icmp、dns,不同的探针具有不同的功能
    timeout: 5s  # 探针检测超时时间
    http:
      valid_status_codes: [] # 有效的状态码,默认为200,也可以自己定义,比如你的站点304也可能是正常的
      method: GET            # http使用get请求
      fail_if_body_not_matches_regexp: [] # 对返回结果进行正则匹配,如果未匹配成功则认为失败
      tls_config:
        insecure_skip_verify: true        # 不安全的https跳过确认,如某些证书不合法或者过期,如果你在浏览器访问,那浏览器会让你确认是否继续,这里也是类似的意思。

配置Prometheus支持black_expoter

在prometheus.yml配置文件中加入以下内容:

  - job_name: 'http_status'  # 配置job名
    metrics_path: /probe     # 定义metric获取的路径
    params:
      module: [http_2xx]     # 这里就是我们在black_exporter中定义的模块名
    file_sd_configs:         # 因需要监控的地址很多,我们这里将所有地址独立出来,后面会介绍该文件
      - files: 
        - '/etc/prometheus/etc.d/job_web.yaml'
        refresh_interval: 30s # 30秒刷新一次,当有新的监控地址时,会自动加载进来不需要重启
    relabel_configs:
      - source_labels: [__address__]  # 当前target的访问地址,比如监控百度则为 https://baidu.com
        target_label: __param_target  # __param是默认参数前缀,target为参数,这里可以理解为把__address__ 的值赋给__param_target,若监控百度,则target=https://baidu.com
      - source_labels: [__param_target]
        target_label: instance        # 可以理解为把__param_target的值赋给instance标签
      - target_label: __address__
        replacement: 172.33.0.33:9115 # web监控原本的target为站点的地址,但Prometheus不是直接去请求该地址,而是去请求black_exporter,故需要把目标地址替换为black_exporter的地址

job_web.yaml 样例

---
- targets:
  - https://www.baidu.com/
  labels:
    env: pro
    app: web
    project: 百度
    desc: 百度生产
- targets:
  - https://blog.csdn.net/
  labels:
    env: test
    app: web
    project: CSDN
    desc: 测试一下啦
    not_200: yes # 这个自定义标签是为了标识某些地址在正常情况下不是返回200状态码

配置完成后,将在你的Prometheus看到类似以下的目标

在这里插入图片描述

我们找一个点击进去,可以看到最终跳转的地址类似如下:

http://172.33.0.33:9115/probe?module=http_2xx&target=https%3A%2F%2Fwww.baidu.com

在这里插入图片描述

指标信息截图

配置告警规则

告警规则文件

groups:
- name: web
  rules:
  - alert: Web访问异常
    expr: probe_http_status_code{not_200 != "yes" } != 200
    for: 30s
    annotations:
      summary: Web 访问异常{{ $labels.instance }}
    labels:
      Severity: '严重'
  - alert: Web访问响应响应时间>3s
    expr: probe_duration_seconds >= 3
    for: 30s
    annotations:
      summary: Web 响应异常{{ $labels.instance }}
    labels:
      Severity: '警告'
  - alert: 证书过期时间<30天
    expr: probe_ssl_earliest_cert_expiry-time()< 3600*24*30
    annotations:
      summary: Web 证书将在30天后过期 {{ $labels.instance }}
    labels:
      Severity: '提醒'
  - alert: 证书过期时间<7天
    expr: probe_ssl_earliest_cert_expiry-time()< 3600*24*7
    annotations:
      summary: Web 证书将在30天后过期 {{ $labels.instance }}
    labels:
      Severity: '严重'
  - alert: 证书过期时间<1天
    expr: probe_ssl_earliest_cert_expiry-time()< 3600*24*1
    annotations:
      summary: Web 证书将在30天后过期 {{ $labels.instance }}
    labels:
      Severity: '灾难'

配置grafana

grafana web监控我制作了2个面板,如上文中的截图。

  • 站点可用性观测中心
  • 站点可用性-单个站点

一个是所有站点的概览,另一个是单个站点的详情。

通过概览点击可以跳转到详情页。
在这里插入图片描述

grafana的配置较为繁琐,文中的面板已经开源,可以在grafana官网下载该面板 Web Monitor Center dashboard for Grafana | Grafana Labs

注意: 在笔者实际使用过程中,发现grafana的兼容性不是很好,从grafana下载下来的面板有很多不兼容,故此也可能出现兼容性问题,目前笔者grafana的版本为: v7.5.3

如果你觉得有收获,可以关注公众号。
https://segmentfault.com/img/bVbAYdT/view

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值