如何用Prometheus Relabel合并备份指标并筛选当日数据
问题
从filestat_exporter获取了如下备份文件指标:
{backup_object="website", instance="server1", job="file_exporter", path="/backups/website/04-29-2023.tar.gz"} 5373952 {backup_object="website", instance="server1", job="file_exporter", path="/backups/website/05-01-2023.tar.gz"} 674667398 {backup_object="website", instance="server1", job="file_exporter", path="/backups/website/05-02-2023.tar.gz"} 674707321 {backup_object="website", instance="server1", job="file_exporter", path="/backups/website/05-03-2023.tar.gz"} 674707321 {backup_object="website", instance="server1", job="file_exporter", path="/backups/website/05-04-2023.tar.gz"} 674712580
其中backup_object是区分备份的唯一标识,每日生成一个备份。抓取间隔为10分钟,同一文件的指标值始终不变,这种方式并不高效。希望对比每日备份文件大小的异常情况,打算通过relabel将多指标合并为按backup_object标识的单指标,最终格式如下:
{backup_object="website", instance="server1", job="file_exporter"} 674712580
已通过relabel从path中提取出date标签,但不知道如何筛选出当日的指标并移除非当日数据,也计划后续移除path标签。
解决方案
1. 筛选当日备份指标
利用Prometheus的metric_relabel_configs,拆分date标签(假设格式为MM-DD-YYYY)为月、日临时标签,再与当前系统日期对比,仅保留匹配的指标:
metric_relabel_configs: # 从date标签提取月份到临时标签 - source_labels: [date] regex: '(\d{2})-(\d{2})-\d{4}' replacement: '$1' target_label: __tmp_month # 从date标签提取日期到临时标签 - source_labels: [date] regex: '\d{2}-(\d{2})-\d{4}' replacement: '$1' target_label: __tmp_day # 仅保留与当前月日匹配的指标 - source_labels: [__tmp_month, __tmp_day] regex: '{{ month now | printf "%02d" }}-{{ day_of_month now | printf "%02d" }}' action: keep
2. 移除冗余标签
在上述规则基础上,添加标签移除规则,清理path和临时生成的__tmp_*标签:
metric_relabel_configs: # 保留上面的筛选规则 # 移除path标签 - action: labeldrop regex: path # 移除临时标签 - action: labeldrop regex: __tmp_.*
3. 确保指标唯一性(可选)
由于同一backup_object+instance+job下仅保留当日指标,此时已自然形成单条指标。如果需要进一步确保聚合(比如极端情况下出现重复指标),可配置记录规则做最终聚合:
groups: - name: backup_size_rules rules: - record: backup_file_size expr: max(filestat_size) by (backup_object, instance, job)
内容的提问来源于stack exchange,提问作者DBCL
相关产品推荐
相关产品推荐

