Problema de sintaxe do Puppet ao configurar um scrape do Prometheus em um exportador SNMP

Problema de sintaxe do Puppet ao configurar um scrape do Prometheus em um exportador SNMP

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.yamlarquivo 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.yamlarquivo errado abaixo com aspas adicionais em torno de metrics_pathe 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 /snmpcolchetes 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.yamlmostrado 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, authe modulesejam 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.200public_v1

O módulo Puppet Prometheus simplesmente converte scrape_configsdiretamente 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.

informação relacionada