我有普罗米修斯从几个机器上的节点导出器中抓取指标,配置如下:
scrape_configs:
- job_name: node_exporter
static_configs:
- targets:
- 1.2.3.4:9100
- 2.3.4.5:9100
- 3.4.5.6:9100
在Grafana中查看时,这些实例被分配了毫无意义的IP地址;相反,我更愿意看到他们的主机名。我认为您应该能够重新标记实例
标签以匹配节点的主机名,因此我尝试使用如下重新标记规则,但没有任何效果:
relabel_configs:
- source_labels: ['nodename']
target_label: 'instance'
我可以手动重新标记每个目标,但这需要将每个主机名硬编码到Prometheus中,这不是很好。我看到节点导出器提供了包含主机名的度量值node\u uname\u info
,但是如何从中提取它呢?
node_uname_info{domainname="(none)",machine="x86_64",nodename="myhostname",release="4.13.0-32-generic",sysname="Linux",version="..."} 1
该解决方案在刮擦时存储具有所需标签的数据,不需要有趣的PromQL查询或硬编码黑客。它通过用relabel_configs
替换正则表达式刮取的数据的标签来做到这一点。
默认情况下,实例
设置为地址
,即$host:$port
。
为了将实例
标签设置为$host
,可以使用relabel_configs
来摆脱端口:
- job_name: 'whatever'
static_configs:
- targets: [
'yourhost.lol:9001'
]
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
但上述内容也会覆盖这样设置的标签,例如文件\u sd\u configs
:
[
{
"targets": ['yourhost.lol:9001'],
"labels": {
"instance": 'node42'
}
}
]
如果要保留这些标签,可以通过以下方式执行重新标签\u configs
:
- job_name: 'rolf'
metrics_path: /metric/rolf
file_sd_configs:
- files:
- rolf_exporter_targets.yml
relabel_configs:
- source_labels: [instance]
target_label: __tmp_instance
regex: '(.+)'
replacement: '${1};'
- source_labels: [__tmp_instance, __address__]
separator: ''
target_label: instance
regex: '([^:;]+)((:[0-9]+)?|;(.*))'
replacement: '${1}'
然后从sd_configs
手动设置的实例
优先,但是如果没有设置,端口仍然被剥离。
我找到了硬代码解决方案:
global: scrape_interval: 5s scrape_timeout: 5s external_labels: monitor: 'Prometheus' scrape_configs: - job_name: 'shelby' static_configs: - targets: - 10.100.0.01:9100 relabel_configs: - source_labels: [__address__] regex: '.*' target_label: instance replacement: 'shelby' - job_name: 'camaro' static_configs: - targets: - 10.101.0.02:9100 relabel_configs: - source_labels: [__address__] regex: '.*' target_label: instance replacement: 'camaro' - job_name: 'verona' static_configs: - targets: - 10.101.0.03:9100 relabel_configs: - source_labels: [__address__] regex: '.*' target_label: instance replacement: 'verona'
结果:
node_load15{instance="camaro",job="camaro"} 0.16 node_load15{instance="shelby",job="shelby"} 0.4 node_load15{instance="verona",job="verona"} 0.07
我只是遇到了这个问题,解决办法是用group_left来解决这个问题。您不能在请求中使用不存在的值重新标记,您只能使用您给prometheus的不同参数或请求的模块使用中存在的参数(gcp,aws...)。
因此,我使用的解决方案是将包含我们想要的内容(host nmame)的现有值与节点导出器中的度量值相结合。我们的答案存在于包含节点名值的node_uname_info指标中。
我用这篇文章的答案作为我请求的范本:https://stackoverflow.com/a/50357418 .
解决办法是这样的:
node_memory_Active * on(instance) group_left(nodename) (node_uname_info)
这样,node_memory_Active度量标准默认只包含实例和作业作为第三个值节点名,您可以在grafana的描述字段中使用它。
希望这对其他人有所帮助。
我有一个带有普罗米修斯的k8s集群和几个带有web应用程序的豆荚。我想从这些网络应用程序中收集度量标准。我使用Prometheus blackbox_exporter来实现这一点。 我配置了服务监视器,部署,工作由普罗米修斯操作员。普罗米修斯收集了度量,但我无法区分它们。例如, 我应该做什么来为每个endpoint添加额外的标签? 如何向probe_success度量标准添加诸如target之类的
我刚刚升级到spring-boot 2.1.3.release,由于这个新的类/方法,我不能拥有多个StreamsBuilderFactoryBean(只需要一个): 我得到这个错误: 我在想,也许使构造的bean成为一个主要的bean。任何帮助都超过感激! 编辑:我通过删除和来规避这个问题。因此,不起作用。
问题内容: 我有一个问题,为什么将main方法标记为 public ? 根据关于stackoverflow的回答,它声明为 静态 “该方法是静态的,因为否则会产生歧义:应调用哪个构造函数?” 但是,任何人都可以解释为什么总是将其宣布为 公开 吗? 问题答案: 启动程序的初始化软件必须能够看到以便可以调用它。
问题内容: 我试图将整个段落输入到我的文字处理器中,然后先分成句子,然后再分成单词。 我尝试了以下代码,但它不起作用, 但是,这不起作用,并给我错误。那么,如何将段落标记为句子,然后再标记为单词? 一个示例段落: 这东西似乎使那只黑褐色的小狗感到吃惊和震惊,使他伤心。 他绝望地沉在孩子的脚下。当重击一声再加上幼稚的训诫时,他转过身来,用独特的方式握住了爪子。同时,他用耳朵和眼睛向孩子祈祷。 警告:
我正在尝试使用用户id,该id作为主要属性存储在HTML标记中的Spring Security Authentication令牌中,例如: 我只知道有两种方法可以使用Spring Security主体对象的id: > 使用专用标记库的身份验证标记(在这里不起作用,因为据我所知JSP不允许嵌套标记)。 使用scriptlet,这是我真正想要避免的。如果有人知道一个优雅的人在做这项工作,我还是会感兴趣
我一直在和Hyperledger Fabric一起工作。通常,当my chaincode实例化失败时(由于Go代码中的一些错误),或者当我只是想更新它时,我需要停止所有的执行,然后重新读取CA、Orderer、CouchDB和对等点。这确实很有问题,也很耗时。 我想知道有没有什么直接的方法可以做到这一点?我无法找到任何解决方案在网上的语言简单到足以理解。 提前谢谢你。