Prometheus09-黑盒监控、日志监控

白盒监控

  • 对Exporter的使用可以称为“白盒监控”,即需要把对应的Exporter程序安装到被监控的目标主机上,从而实现对主机各种资源及其状态的数据采集工作。

黑盒监控

  • 不是所有的Exporter都能部署到被监控的主机环境中,最典型的例子是监控全国网络质量的稳定性,通常的方法是使用ping操作,对选取的节点进行ICMP测试,此时不可能在他人应用环境中部署相关的Exporter程序。
  • 针对这样的应用的场景,Prometheus社区提供了黑盒解决方案,Blackbox Exporter无须安装在被监控的目标环境中,用户只需要将其安装在与Prometheus和被监控目标互通的环境中,通过HTTP、HTTPS、DNS、TCP、ICMP等方式对网络进行探测监控,还可以探测SSL证书过期时间。

配置黑盒监控

# 安装prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.34.0/prometheus-2.34.0.linux-amd64.tar.gz
tar -xvf prometheus-2.34.0.linux-amd64.tar.gz
cd prometheus-2.34.0.linux-amd64
./prometheus

# 安装blackbox_exporter
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.20.0/blackbox_exporter-0.20.0.linux-amd64.tar.gz
tar -xvf blackbox_exporter-0.20.0.linux-amd64.tar.gz
useradd --no-create-home --shell /bin/false blackbox
chown -R blackbox:blackbox /etc/blackbox_exporter
chown blackbox:blackbox /usr/local/bin/blackbox_exporter
ln -sv blackbox_exporter-0.20.0.linux-amd64 blackbox_exporter
cd blackbox_exporte
./blackbox_exporter --config.file=/etc/prober/prober.yml --web.listen-address=:9115

# 查看
http://localhost:9115/metric    # 默认端口9115

# 添加blackbox_exporter为系统服务开机启动
vim /usr/lib/systemd/system/blackbox_exporter.service
[Unit]
Description=blackbox_exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/path/to/blackbox_exporter/blackbox_exporter \
          --config.file=/path/to/blackbox_exporter/blackbox.yml \
          --web.listen-address=:9115
Restart=on-failure

[Install]
WantedBy=multi-user.target”

# 配置Blackbox exporter
mkdir /etc/blackbox/blackbox.yml
vim /etc/blackbox/blackbox.yml
modules:
  http_2xx_check:                                  # 定义模块名称:http_2xx,自定义符合命名规则即可
    prober: http                                   # 定义探测类型:http
    timeout: 5s
  http:
    valid_http_versions: ["HTTP/1.1", "HTTP/2"]
    vaild_status_codes: []                         # 留空表示所有2xx状态码都能被视为成功
    # vaild_status_codes: [ "200", "304" ]         # 指定状态码被视为成功
    method: GET
  icmp_check:
    prober: icmp
    timeout: 5s
    icmp:
        preferred_ip_protocaol: "ipv4"
  dns_check:
    prober: dns                                    # 使用DNS探测器来执行DNS查询
    dns:
      preferred_ip_protocol: "ipv4"
      query_name: "www.example.com"                # 指定要被检测的域名

# 启动Blackbox exporter
blackbox_exporter --config.file="/etc/blackbox/blackbox.yml"

# 查看
http://localhost:9115/metric

# prometheus中部署Blackbox exporter
- job_name: "http_probe"
  metrics_path: /probe
  params:
    module: [http_2xx_check]            # 不指定module的内容表示使用所有定义的模块
# 直接指定URL
  static_configs:
    - targets:
      - http://example.com              # 需要监测的目标URL
# 基于文件指定监测URL
  file_sd_configs:
    - file:
      - "/target/prober/http_probe.json"
      refresh_interval: 5m
  relabel_configs:
    - soucre_labels: [__address__]
      target_label: __param_target
    - soucre_labels: [__param_target]
      target_label: instance
    - soucre_labels: __address__
      replacement: localhost:9115    # Blackbox Exporter的地址

# 指定要监测的URL
vim /target/prober/http_probe.json
[{
    "targets": [
        "http://www.example.com",
        "https://www.example.com",
    ]
}]

relabel_configs的作用

  • 在Prometheus的配置文件中,relabel_configs用于重新标记或重新映射抓取的目标标签。这些标签可以是由Prometheus抓取过程中自动添加的标签,也可以是由用户在配置文件中指定的静态标签。
  • relabel_configs允许你对目标的标签进行修改,以便更好地组织和管理监控数据。例如,你可以使用relabel_configs来更改目标的标签名称、添加新的标签、根据某些条件过滤目标,或者基于正则表达式来重新映射标签的值。
  • 这些配置项可以在抓取之前(pre阶段)、抓取后(post阶段)或抓取过程中(replace阶段)应用。relabel_configs可以根据需要多次应用,每个配置项都会按顺序依次执行。
  • 总的来说,relabel_configs的配置允许你在Prometheus抓取目标之前对目标进行动态调整,以满足特定的监控需求或者优化监控数据的结构。
__address__
是Prometheus的内置标签,表示抓取目标的地址。可以通过引用[__address__]来访问目标的地址信息。
通常是IP地址和端口号的组合

__param_target
是一个占位符,用于表示static_configs中指定的抓取目标列表中的目标地址。通常是URL或者IP地址

[__address__]
被用作源标签,表示要从抓取目标的地址中提取值,并在target_label指定的标签中使用

Prometheus是如何与Blackbox Exporter进行关联集成的?

relabel_configs覆盖目标的__address__标签以指定导出器的主机名,进而简化了Prometheus任务配置内容。在采集样本数据之前通过relabel_configs对采集任务进行动态设置过程如下:
1)第一个relabel通过将__address__标签(即当前目标的地址)写入__param_target标签来创建参数。
2)第二个relabel将获取__param_target的值,并覆写到instance标签中。
3)第三个relabel覆写target实例的__address__标签值为BlockBox Exporter实例的访问地址

Prometheus在执行抓取时,会将module=http_2xx_check作为查询参数发送给Blackbox Exporter。

日志监控

mtail

  • Mtail的主要作用是从文本日志文件中提取出关键信息,并将这些信息转换成Prometheus所能识别的指标格式。这样,用户就可以利用Prometheus的强大查询和可视化功能对日志数据进行实时监控和分析。

  • 它支持使用正则表达式来定义日志的格式和提取规则,还提供了丰富的函数和选项,以满足不同场景下的日志提取需求。

使用mtail监控日志

# 安装mtail
wget https://github.com/google/mtail/releases/download/v3.0.0/mtail_v3.0.0_linux_amd64.tar.gz
tar -xzvf mtail_v3.0.0_linux_amd64.tar.gz
chmod 0755 mtail
cp mtail /usr/local/bin

# 验证安装
mtail --version
mtail --help

# 使用mtail
mkdir /etc/mtail                    # 创建存放监控规则的目录
vim /etc/mtail/line_count.mtail
counter line_count                  # 定义一个名为 line_count 的计数器
/$/ { line_count++ }                # /$/匹配每一行的末尾(即行结束符),读取日志行数

counter request_count
/GET/ { request_count++ }           # 对GET请求进行计数

gauge custom_metric                 # 定义一个名为 custom_metric 的仪表盘(gauge)
/ERROR/ { custom_metric = 1 }       # 日志出现ERROR关键字时,将custom_metric置为1,以便后续生成报警或做其他处理

log_reopen_interval: 5s             # 每隔5秒重新打开一次日志文件。确保Mtail能够及时感知日志文件的更新
log_patterns: {
  "/var/log/nginx/access.log": "%{remote} - %{user} [%{time:timestamp}] \"%{method} %{path} %{proto}\" %{status} %{bytes} \"%{referer}\" \"%{user-agent}\""
}

# 监控日志文件中每个请求的响应时间
vim nginx_access_log.mtail
logs:
  - path: /var/log/nginx/access.log
    format: "%{remote} - %{user} [%{time:timestamp}] \"%{method} %{path} %{proto}\" %{status} %{bytes} \"%{referer}\" \"%{user-agent}\" %{duration:duration}"
metrics:
  - name: nginx_request_duration_seconds      # 定义指标名称
    type: histogram                           # 定义指标类型
    buckets: [0.05, 0.1, 0.5, 1, 2, 5, 10]    # 指定了直方图的桶(buckets),用于记录不同范围的请求响应时间
    value: duration                           # 读取%{duration:duration}字段的值,表示请求的响应时间


# 运行mtail
mtail --progs /etc/mtail/line_count.mtail --logs /var/log/*.log
# --progs 指定规则文件
# --logs 指定要处理的日志。多个日志用","或--logs
# 默认运行在3903端口

# prometheus中部署mtail
scrape_configs:
- job_name: "mtail"
  file_sd_config:
    - files:
       - "/path/to/target/mtail/*.json"
         refresh_interval: 5m

# 指定被监控端
vim /path/to/target/mtail/*.json
[{
    "targets": [
        "192.168.9.10:3903",
        "webapp:3903"
    ]
}]

mtail语法

https://github.com/google/mtail/wiki/Language

posted @   立勋  阅读(168)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示