AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1146364
Accepted
Patrick
Patrick
Asked: 2023-10-23 08:41:46 +0800 CST2023-10-23 08:41:46 +0800 CST 2023-10-23 08:41:46 +0800 CST

在 SNMP 导出器上配置 Prometheus 抓取时出现 Puppet 语法问题

  • 772

一些背景

我有一个 SNMP 导出器作为服务在服务器上运行,它允许我使用以下 URL 访问某些 PDU 的数据:http://my.host.name:9116/snmp?target=10.0.1.200&auth=public_v1&module=apcups

我有一个 Prometheus 服务器,我在同一主机上使用 puppet 配置了该服务器。我想添加一个抓取作业来检索 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 等中绘制我的功耗。

我的问题

为了配置 Puppet 来生成上面的 prometheus 配置,我在配置了 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 语法错误。

我的问题

如何通过 Puppet 获得/etc/prometheus/prometheus.yaml此问题顶部所需的显示?我的猜测是一定有某种语法允许生成不带引号的文本字符串,但我不知道如何。

我正在使用 Puppet 版本 8.2.0 和puppet/prometheus v13.3.0 模块。

puppet
  • 1 1 个回答
  • 82 Views

1 个回答

  • Voted
  1. Best Answer
    Longsight
    2024-01-08T20:02:16+08:002024-01-08T20:02:16+08:00

    你已经完成了一半 - 你不想删除引号,而是移动它们:

    'job_name'        => 'snmp_scrapper',
          'scrape_interval' => '60s',
          'scrape_timeout'  => '10s',
          'metrics_path'    => '/snmp',
          'static_configs'  => [{ 'targets' => ['angelico.fine.cs.kobe-u.ac.jp:9116'], }],
          'params' => {
            'target' => ['10.0.1.200'],
            'auth' => ['public_v1'],
            'module' => ['apcups'],
    

    在 YAML 和 Puppet DDL 中,[and]表示数组,在本例中为字符串数组;target: [10.0.1.200]YAML 中是包含单个字符串 ( ) 的单元素数组10.0.1.200,也可以写为:

          target:
            - 10.0.1.200
    

    要生成正确的 Prometheus 配置,您需要确保target、auth和module生成为数组,这意味着它们在传入时必须是 Puppet 数组。这意味着在引号之外包含 和[,]因为它们是语言语法而不是字符串的一部分,但是因为 Puppet 需要引用字符串,所以需要引用您的实际值( 等),否则您会收到报告的 Puppet 语法错误10.0.1.200。public_v1

    Puppet Prometheus 模块只是scrape_configs直接转换为 YAML,因此 Puppet 数组表示为 YAML 数组 - 并且错误的 Puppet 字符串会表示为 YAML 字符串,即使您不希望它们如此。

    • 1

相关问题

  • 如何修复 Puppet 完全限定的参数路径错误?

  • puppet:修改配置文件后强制重启服务

  • 木偶模块资源

  • 傀儡主机名问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve