带有 Puppet 的 Prometheus 配置文件:如何处理 yaml 配置文件中的引号和括号?
Prometheus config file with Puppet: how to handle quotes and brackets in yaml config file?
我正在尝试使用此模块编写 Prometheus 配置:https://github.com/voxpupuli/puppet-prometheus
但我似乎无法让它为 Prometheus 生成有效的重新标记配置。
这是我当前配置的相关部分:
'relabel_configs' => [
{
'source_labels' => '[__meta_consul_node]',
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '',
},
{
'source_labels' => '[__meta_consul_service]',
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '',
}
],
这是我在 prometheus.yml 中得到的:
relabel_configs:
- source_labels: '[__meta_consul_node]'
regex: ^(.*)$
target_label: instance
replacement:
- source_labels: '[__meta_consul_service]'
regex: ^(.*)$
target_label: job
replacement:
我想要的是:
relabel_configs:
- source_labels: ['__meta_consul_node']
regex: '^(.*)$'
target_label: 'instance'
replacement: ''
- source_labels: ['__meta_consul_service']
regex: '^(.*)$'
target_label: 'job'
replacement: ''
我尝试了很多东西,但无法弄清楚如何在我的清单中格式化散列值,以便为 Prometheus 获取正确的配置文件。
这似乎是 ruby 解析器的问题?如何正确转义 '
?
我认为这里的混淆是变量数组在 Puppet 和 YAML 中的处理方式,以及字符串在 YAML 中的解析方式。
在 YAML 中,变量数组可以是:
array:
- element
- another_element
或:
array: [element, another_element]
在 Puppet 中,它们看起来像:
$array = [element, another_element]
因此,您只需在 Puppet 散列中为 source_labels
键指定一个字符串数组,就可以得到一个干净的 one-to-one 数组映射,例如:
'relabel_configs' => [
{
'source_labels' => ['__meta_consul_node'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '',
},
{
'source_labels' => ['__meta_consul_service'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '',
}
],
这将正确地为您的 source_labels
生成一个字符串数组,正如您所描述的那样。
relabel_configs:
- source_labels: ['__meta_consul_node'] # single element string array
regex: ^(.*)$
target_label: instance
replacement:
- source_labels: ['__meta_consul_service'] # single element string array
regex: ^(.*)$
target_label: job
replacement:
请注意,对于带引号和不带引号的字符串,YAML 将被完全相同地解析(例如 target_label: job
与 target_label: 'job'
相同)。
我正在尝试使用此模块编写 Prometheus 配置:https://github.com/voxpupuli/puppet-prometheus
但我似乎无法让它为 Prometheus 生成有效的重新标记配置。
这是我当前配置的相关部分:
'relabel_configs' => [
{
'source_labels' => '[__meta_consul_node]',
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '',
},
{
'source_labels' => '[__meta_consul_service]',
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '',
}
],
这是我在 prometheus.yml 中得到的:
relabel_configs:
- source_labels: '[__meta_consul_node]'
regex: ^(.*)$
target_label: instance
replacement:
- source_labels: '[__meta_consul_service]'
regex: ^(.*)$
target_label: job
replacement:
我想要的是:
relabel_configs:
- source_labels: ['__meta_consul_node']
regex: '^(.*)$'
target_label: 'instance'
replacement: ''
- source_labels: ['__meta_consul_service']
regex: '^(.*)$'
target_label: 'job'
replacement: ''
我尝试了很多东西,但无法弄清楚如何在我的清单中格式化散列值,以便为 Prometheus 获取正确的配置文件。
这似乎是 ruby 解析器的问题?如何正确转义 '
?
我认为这里的混淆是变量数组在 Puppet 和 YAML 中的处理方式,以及字符串在 YAML 中的解析方式。
在 YAML 中,变量数组可以是:
array:
- element
- another_element
或:
array: [element, another_element]
在 Puppet 中,它们看起来像:
$array = [element, another_element]
因此,您只需在 Puppet 散列中为 source_labels
键指定一个字符串数组,就可以得到一个干净的 one-to-one 数组映射,例如:
'relabel_configs' => [
{
'source_labels' => ['__meta_consul_node'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '',
},
{
'source_labels' => ['__meta_consul_service'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '',
}
],
这将正确地为您的 source_labels
生成一个字符串数组,正如您所描述的那样。
relabel_configs:
- source_labels: ['__meta_consul_node'] # single element string array
regex: ^(.*)$
target_label: instance
replacement:
- source_labels: ['__meta_consul_service'] # single element string array
regex: ^(.*)$
target_label: job
replacement:
请注意,对于带引号和不带引号的字符串,YAML 将被完全相同地解析(例如 target_label: job
与 target_label: 'job'
相同)。