
일부 맥락
다음 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_path
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]"
그러면 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.yaml
Puppet을 통해 이 질문 상단에 원하는 쇼를 얻으려면 어떻게 해야 합니까 ? 내 생각엔 따옴표 없이 텍스트 문자열을 생성할 수 있는 일종의 구문이 있을 것 같지만 방법은 모르겠습니다.
저는 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.200
public_v1
Puppet Prometheus 모듈은 단순히 scrape_configs
YAML로 직접 변환하므로 Puppet 배열은 YAML 배열로 표현되며 잘못된 Puppet 문자열은 원하지 않는 경우에도 YAML 문자열로 표현됩니다.