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语法
分类:
Prometheus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)