SNMP 내보내기에서 Prometheus 스크랩을 구성할 때 Puppet 구문 문제

SNMP 내보내기에서 Prometheus 스크랩을 구성할 때 Puppet 구문 문제

일부 맥락

다음 URL을 사용하여 일부 PDU의 데이터에 액세스할 수 있는 서버에서 서비스로 실행되는 SNMP 내보내기가 있습니다.http://my.host.name:9116/snmp?target=10.0.1.200&auth=public_v1&module=apcups

동일한 호스트에서 꼭두각시를 사용하여 구성한 Prometheus 서버가 있습니다. PDU에서 제공하는 정보를 검색하기 위해 스크래핑 작업을 추가하고 싶습니다.

튜토리얼에 의존이 페이지에서/etc/prometheus/prometheus.yaml및 기타 소스를 통해 다음을 삽입하기 위해 파일을 수동으로 수정하면 예상한 결과가 나오는 것을 확인할 수 있었습니다 . 간단히 말해서 구성 파일의 관련 부분만 포함합니다.

- 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

이는 예상한 대로 정확하게 작동하며 Prometheus 및 Grafana 등에서 전력 소비량을 표시할 수 있습니다.

내 문제

위의 prometheus 구성을 생성하도록 Puppet을 구성하기 위해 prometheus가 구성된 프로필에 다음 작업을 추가했습니다(영감을 얻을 수 있었던 여러 호스트에서 node_exporter를 스크래핑하는 또 다른 작업이 있습니다).

        {
          '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]',
          }
        },

문제는 이로 인해 및 내부의 세 요소 prometheus.yaml주위에 추가 따옴표가 포함된 잘못된 파일이 생성된다는 것입니다 .metrics_pathparams

 - 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]"

그러면 Prometheus의 구성 파서가 다음 오류와 함께 실패합니다.

  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

/snmp순진하게, 나는 매개변수의 대괄호 주변과 주위의 따옴표를 제거하면 내 문제가 해결될 것이라고 생각했습니다 . 즉, 다음과 같습니다.

          '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],

그러나 이로 인해 Puppet 구문 오류가 발생합니다.

내 질문

/etc/prometheus/prometheus.yamlPuppet을 통해 이 질문 상단에 원하는 쇼를 얻으려면 어떻게 해야 합니까 ? 내 생각엔 따옴표 없이 텍스트 문자열을 생성할 수 있는 일종의 구문이 있을 것 같지만 방법은 모르겠습니다.

저는 Puppet 버전 8.2.0을 사용하고 있으며꼭두각시/프로메테우스v13.3.0 모듈.

답변1

절반쯤 왔습니다. 따옴표를 제거하고 싶지 않고 이동합니다.

'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'],

YAML과 Puppet DDL 모두에서 배열을 표시 [합니다 ](이 경우 문자열 배열). target: [10.0.1.200]YAML에서 단일 문자열( 10.0.1.200)을 포함하는 단일 요소 배열은 다음과 같이 작성할 수도 있습니다.

      target:
        - 10.0.1.200

target올바른 Prometheus 구성을 생성하려면 , auth및 가 배열 로 생성되었는지 확인해야 합니다. 이는 단순히 입력 module시 Puppet 배열이어야 함을 의미합니다. 문자열의 일부가 아닌 언어 구문이지만 Puppet에서는 문자열을 따옴표로 묶어야 하므로 실제 값( 등) 을 따옴표로 묶어야 합니다. 그렇지 않으면 보고하는 Puppet 구문 오류가 발생합니다.[]10.0.1.200public_v1

Puppet Prometheus 모듈은 단순히 scrape_configsYAML로 직접 변환하므로 Puppet 배열은 YAML 배열로 표현되며 잘못된 Puppet 문자열은 원하지 않는 경우에도 YAML 문자열로 표현됩니다.

관련 정보