Файл конфигурации Prometheus с Puppet: как обрабатывать кавычки и скобки в файле конфигурации yaml?
Я пытаюсь написать конфигурацию Prometheus с этим модулем: https://github.com/voxpupuli/puppet-prometheus
Но я не могу заставить его сгенерировать действительный конфигурационный файл для Prometheus.
Это соответствующая часть моей текущей конфигурации:
'relabel_configs' => [
{
'source_labels' => '[__meta_consul_node]',
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '$1',
},
{
'source_labels' => '[__meta_consul_service]',
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '$1',
}
],
Вот что я получаю в моем prometheus.yml:
relabel_configs:
- source_labels: '[__meta_consul_node]'
regex: ^(.*)$
target_label: instance
replacement: $1
- source_labels: '[__meta_consul_service]'
regex: ^(.*)$
target_label: job
replacement: $1
Что я хочу это:
relabel_configs:
- source_labels: ['__meta_consul_node']
regex: '^(.*)$'
target_label: 'instance'
replacement: '$1'
- source_labels: ['__meta_consul_service']
regex: '^(.*)$'
target_label: 'job'
replacement: '$1'
Я перепробовал кучу вещей, но не смог понять, как отформатировать хеш-значения в моем манифесте, чтобы получить правильный файл конфигурации для Прометея.
Это похоже на проблему с анализатором ruby? Как мне избежать '
правильно?
1 ответ
Я думаю, что путаница заключается в том, как обрабатываются переменные массивы в Puppet и в YAML, и как строки анализируются в YAML.
В YAML переменные массивы могут быть:
array:
- element
- another_element
или же:
array: [element, another_element]
В Puppet они выглядят так:
$array = [element, another_element]
Следовательно, вы можете иметь чистое взаимно однозначное сопоставление массивов, просто указав массив строк в хеше Puppet для source_labels
ключ как:
'relabel_configs' => [
{
'source_labels' => ['__meta_consul_node'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'instance',
'replacement' => '$1',
},
{
'source_labels' => ['__meta_consul_service'], # single element string array
'regex' => '^(.*)$',
'target_label' => 'job',
'replacement' => '$1',
}
],
и это правильно сгенерирует массив строк для вашего source_labels
как вы описали для того, что вы хотели.
relabel_configs:
- source_labels: ['__meta_consul_node'] # single element string array
regex: ^(.*)$
target_label: instance
replacement: $1
- source_labels: ['__meta_consul_service'] # single element string array
regex: ^(.*)$
target_label: job
replacement: $1
Обратите внимание, что YAML будет анализироваться одинаково для строк в кавычках и без кавычек (например, target_label: job
такой же как target_label: 'job'
).