我正在使用 Prometheus 从 Apache Flink 查询指标。我想测量 Map 函数每秒输入和输出的记录数。当我在 Prometheus 中查询两个不同的指标时,图表只显示其中之一。
flink_taskmanager_job_task_operator_numRecordsInPerSecond{operator_name="Map"}
or flink_taskmanager_job_task_operator_numRecordsOutPerSecond{operator_name="Map"}
Run Code Online (Sandbox Code Playgroud)
如果我将运算符更改or为and. 该图表仅显示第一个 ( flink_taskmanager_job_task_operator_numRecordsInPerSecond)。我也尝试过编辑 Prometheus 配置文件,/etc/prometheus/prometheus.yml但我对 Prometheus 没有太多经验,而且我的配置有问题。我的解决方案基于这篇文章。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
- job_name: 'flink'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9250', 'localhost:9251', '192.168.56.20:9250']
metrics_path: /
# HOW TO ADD THE OPERATOR NAME ON THE METRIC NAME?
metric_relabel_configs:
- source_labels: [__name__]
regex: '(flink_taskmanager_job_task_operator)_(\w+)'
replacement: '${2}'
target_label: pool
- source_labels: [__name__]
regex: '(flink_taskmanager_job_task_operator)_(\w+)'
replacement: '${1}_bytes'
target_label: __name__
Run Code Online (Sandbox Code Playgroud)
val*_*ala 11
__name__通过在标签上使用正则表达式过滤器,可以通过单个 PromQL 查询选择多个指标名称:
{__name__=~"flink_taskmanager_job_task_operator_numRecords(In|Out)PerSecond",operator_name="Map"}
Run Code Online (Sandbox Code Playgroud)
请参阅此处__name__有关标签的文档。
使用与 Prometheus 兼容的查询引擎(例如MetricsQL)时,还有另一种解决方案,即使用union函数:
union(
flink_taskmanager_job_task_operator_numRecordsInPerSecond{operator_name="Map"},
flink_taskmanager_job_task_operator_numRecordsOutPerSecond{operator_name="Map"}
)
Run Code Online (Sandbox Code Playgroud)
请注意,如果所选系列包含在任何 PromQL 函数中,则通过正则表达式选择多个时间系列__name__可能会导致错误。vector cannot contain metrics with the same labelset例如:
max_over_time(
{__name__=~"flink_taskmanager_job_task_operator_numRecords(In|Out)PerSecond",operator_name="Map"}[5m]
)
Run Code Online (Sandbox Code Playgroud)
这是因为 Prometheus 在应用 PromQL 函数时从输入系列中删除指标名称。VictoriaMetrics 的MetricsQL为这个问题提供了一个解决方案 -keep_metric_names修饰符(有关详细信息,请参阅这些文档):
max_over_time(
{__name__=~"flink_taskmanager_job_task_operator_numRecords(In|Out)PerSecond",operator_name="Map"}[5m]
)
keep_metric_names
Run Code Online (Sandbox Code Playgroud)
PS 我从事 VictoriaMetrics 和 MetricsQL 工作。
首先,对于更复杂的图形,您绝对应该研究Grafana。内置的 Prometheus 图很有用,例如。用于调试,但绝对更有限。特别是一张图只会显示一个查询的结果。
现在对于我绝对不推荐的 hack:
flink_taskmanager_job_task_operator_numRecordsInPerSecond{operator_name="Map"}
or
label_replace(flink_taskmanager_job_task_operator_numRecordsOutPerSecond{operator_name="Map"}, "distinct", "foo", "job", ".*")
Run Code Online (Sandbox Code Playgroud)
因为,据记载
vector1 or vector2产生一个向量,其中包含 的所有原始元素(标签集 + 值)vector1以及所有在vector2中没有匹配标签集的元素vector1。
您可以将第一个向量的标签中不存在的新标签添加到第二个向量,从而保留两者中的所有元素。
| 归档时间: |
|
| 查看次数: |
10518 次 |
| 最近记录: |