
Algún contexto
Tengo un exportador SNMP ejecutándose como servicio en un servidor que me permite acceder a los datos de algunas PDU usando la siguiente URL:http://my.host.name:9116/snmp?target=10.0.1.200&auth=public_v1&module=apcups
Tengo un servidor Prometheus que configuré usando Puppet en el mismo host. Quiero agregar un trabajo raspado para recuperar la información proporcionada por las PDU.
Confiando en el tutorialen esta páginay algunas otras fuentes, pude confirmar que modificar manualmente el /etc/prometheus/prometheus.yaml
archivo para insertar lo siguiente me da el resultado esperado. Para abreviar, solo incluyo la parte relevante del archivo de configuración.
- 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
Esto funciona exactamente como esperaba, puedo trazar mi consumo de energía en Prometheus y Grafana, etc.
Mi problema
Para configurar Puppet para producir la configuración de Prometheus anterior, agregué el siguiente trabajo en el perfil en el que está configurado Prometheus (tengo otro trabajo de extracción de node_exporter en varios hosts en los que pude inspirarme):
{
'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]',
}
},
El problema es que esto produce el prometheus.yaml
siguiente archivo erróneo con comillas adicionales alrededor de metrics_path
y tres elementos dentro 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]"
El analizador de configuración de Prometheus falla con el siguiente error:
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, pensé que eliminar las comillas alrededor /snmp
de los corchetes en los parámetros solucionaría mi problema, es decir:
'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],
Pero esto da como resultado un error de sintaxis de Puppet.
Mi pregunta
¿Cómo obtengo lo que deseo /etc/prometheus/prometheus.yaml
que se muestra en la parte superior de esta pregunta a través de Puppet? Supongo que debe haber algún tipo de sintaxis que permita la producción de una cadena de texto sin comillas, pero no sé cómo.
Estoy usando Puppet versión 8.2.0 y elmarioneta/prometeoMódulo v13.3.0.
Respuesta1
Estás a mitad de camino: no quieres eliminar las comillas, pero sí moverlas:
'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 en YAML como en Puppet DDL, [
e ]
indican matrices, en este caso matrices de cadenas; target: [10.0.1.200]
en YAML es una matriz de un solo elemento que contiene una sola cadena ( 10.0.1.200
), que también podría escribirse como:
target:
- 10.0.1.200
Para generar la configuración correcta de Prometheus, debe asegurarse de que target
, auth
y module
se generen como matrices, lo que simplemente significa que deben ser matrices Puppet en el camino de entrada. Esto significa tener las comillas [
y ]
el exterior, ya que son parte de la sintaxis del lenguaje en lugar de parte de las cadenas, pero debido a que Puppet requiere que las cadenas estén entre comillas, sus valores reales ( 10.0.1.200
, public_v1
etc.) deben citarse; de lo contrario, obtendrá los errores de sintaxis de Puppet que está informando.
El módulo Puppet Prometheus simplemente se convierte scrape_configs
directamente a YAML, por lo que las matrices Puppet se expresan como matrices YAML, y las cadenas Puppet erróneas se expresan como cadenas YAML, incluso cuando no desea que lo sean.