
Algum contexto
Tenho um exportador SNMP rodando como serviço em um servidor que me permite acessar os dados de alguma PDU usando a seguinte URL:http://my.host.name:9116/snmp?target=10.0.1.200&auth=public_v1&module=apcups
Eu tenho um servidor Prometheus que configurei usando fantoche no mesmo host. Quero adicionar um trabalho de raspagem para recuperar as informações fornecidas pelas PDUs.
Confiando no tutorialnesta páginae algumas outras fontes, consegui confirmar que modificar manualmente o /etc/prometheus/prometheus.yaml
arquivo para inserir o seguinte me dá o resultado esperado. Para resumir, incluo apenas a parte relevante do arquivo de configuração.
- job_name: snmp_scrapper
scrape_interval: 60s
scrape_timeout: 10s
metrics_path: /snmp
static_configs:
- targets:
- my.host.name:9116
params:
target: [10.0.1.200] # IP of the PDU on the private network
auth: [public_v1] # authentication method
module: [apcups] # module to retrieve APC PDU/UPS information
Isso funciona exatamente como eu esperava, posso traçar meu consumo de energia no Prometheus e Grafana etc.
Meu problema
Para configurar o Puppet para produzir a configuração do prometheus acima, adicionei o seguinte trabalho no perfil no qual o prometheus está configurado (tenho outro trabalho de raspagem node_exporter em vários hosts nos quais pude me inspirar):
{
'job_name' => 'snmp_scrapper',
'scrape_interval' => '60s',
'scrape_timeout' => '10s',
'metrics_path' => '/snmp',
'static_configs' => [{ 'targets' => ['my.host.name:9116'], }],
'params' => {
'target' => '[10.0.1.200]',
'auth' => '[public_v1]',
'module' => '[apcups]',
}
},
O problema é que isso produz o prometheus.yaml
arquivo errado abaixo com aspas adicionais em torno de metrics_path
e três elementos dentro de params
.
- job_name: snmp_scrapper
scrape_interval: 60s
scrape_timeout: 10s
metrics_path: "/snmp"
static_configs:
- targets:
- my.host.name:9116
params:
target: "[10.0.1.200]"
auth: "[public_v1]"
module: "[apcups]"
O analisador de configuração do Prometheus falha com o seguinte erro:
FAILED: parsing YAML file /etc/prometheus/prometheus.yaml20231023-1016214-j3iqrx: yaml: unmarshal errors:
line 47: cannot unmarshal !!str `[10.0.1...` into []string
line 48: cannot unmarshal !!str `[public...` into []string
line 49: cannot unmarshal !!str `[apcups]` into []string
Ingenuamente, pensei que remover as aspas entre /snmp
colchetes nos parâmetros resolveria meu problema, ou seja:
'job_name' => 'snmp_scrapper',
'scrape_interval' => '60s',
'scrape_timeout' => '10s',
'metrics_path' => /snmp,
'static_configs' => [{ 'targets' => ['my.host.name:9116'], }],
'params' => {
'target' => [10.0.1.200],
'auth' => [public_v1],
'module' => [apcups],
Mas isso resulta em um erro de sintaxe do Puppet.
Minha pergunta
Como obtenho o desejado /etc/prometheus/prometheus.yaml
mostrado no topo desta questão através do Puppet? Meu palpite é que deve haver algum tipo de sintaxe que permita a produção de uma string de texto sem aspas, mas não sei como.
Estou usando o Puppet versão 8.2.0 e ofantoche / PrometeuMódulo v13.3.0.
Responder1
Você está na metade do caminho - não deseja remover as aspas, mas movê-las:
'job_name' => 'snmp_scrapper',
'scrape_interval' => '60s',
'scrape_timeout' => '10s',
'metrics_path' => '/snmp',
'static_configs' => [{ 'targets' => ['my.example.com:9116'], }],
'params' => {
'target' => ['10.0.1.200'],
'auth' => ['public_v1'],
'module' => ['apcups'],
Tanto no YAML quanto no Puppet DDL, [
e ]
indicam arrays, neste caso arrays de strings; target: [10.0.1.200]
em YAML é uma matriz de elemento único contendo uma única string ( 10.0.1.200
), que também pode ser escrita como:
target:
- 10.0.1.200
Para gerar a configuração correta do Prometheus, você precisa garantir que target
, auth
e module
sejam gerados como arrays, o que significa simplesmente que eles precisam ser arrays Puppet no caminho. sintaxe da linguagem em vez de parte das strings, mas como o Puppet exige que as strings sejam citadas, seus valores reais ( , etc) precisam ser citados, caso contrário, você receberá os erros de sintaxe do Puppet que está relatando.[
]
10.0.1.200
public_v1
O módulo Puppet Prometheus simplesmente converte scrape_configs
diretamente em YAML, então matrizes Puppet são expressas como matrizes YAML - e strings Puppet erradas são expressas como strings YAML, mesmo quando você não deseja que elas sejam.