【问题标题】:Helm-Charts(yaml): Regex expression brokenHelm-Charts(yaml):正则表达式被破坏
【发布时间】:2021-07-16 09:52:20
【问题描述】:

我正在与https://github.com/prometheus-community/helm-charts 合作,并且在我们的基本 yaml 部署中遇到了一些正则表达式查询的问题。我遇到的问题专门与普罗米修斯图表的节点导出器部分有关。我已经配置了这个:

   nodeExporter:
      extraArgs: {
        collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$",
        collector.filesystem.ignored-mount-points="^/etc/.+$",
        collector.netstat.fields="*",
        collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$", # BROKEN
        collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$,                      # BROKEN
        collector.nfs
       }
      tolerations:
        - operator: Exists

如上所述,这两条带有正则表达式的行被破坏了:

 collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$", # BROKEN
 collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$,                      # BROKEN

第一个字符“nvme”之前的| 字符和第二个字符的?: 似乎有问题。我认为这与 regex/yaml 格式有关,但我不确定如何纠正。

【问题讨论】:

    标签: yaml prometheus kubernetes-helm


    【解决方案1】:

    使用{,您正在开始一个 YAML 流映射。它通常包含以逗号分隔的键值对,但您也可以像本例中一样,提供单个值,这将使它们成为具有 null 值的键。

    在 YAML 中,一旦您输入流式集合,all 特殊的flow-indicators 就不能再用于纯标量了。特殊流量指标为{}[],。纯标量是不带引号的文本值。

    第一个损坏的值是非法的,因为它包含[]。根据规范,第二个损坏的值实际上是合法的,但是由于? 也被用作映射键的指示符,因此相当多的 YAML 实现对此感到窒息。

    您有多种选择:

    • 引用标量。因为它们都不包含单引号,所以用单引号括起来就可以了。通常你也可以双引号,但是你需要转义所有双引号字符和其中的所有反斜杠,这不利于可读性。
       nodeExporter:
          extraArgs: {
            collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$",
            collector.filesystem.ignored-mount-points="^/etc/.+$",
            collector.netstat.fields="*",
            'collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$"',
            'collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$',
            collector.nfs
           }
          tolerations:
            - operator: Exists
    
    • 使用块标量。块标量通常是输入具有许多特殊字符的标量的最佳方式,因为它们以缩进结束,因此可以包含任何特殊字符。块标量只能出现在其他块结构中,因此您需要将extraArgs 设为块映射:
       nodeExporter:
          extraArgs:
            ? collector.filesystem.ignored-fs-types="^(devpts|devtmpfs|mqueue|proc|securityfs|binfmt_misc|debugfs|overlay|pstore|selinuxfs|tmpfs|hugetlbfs|nfsd|cgroup|configfs|rpc_pipefs|sysfs|autofs|rootfs)$"
            ? collector.filesystem.ignored-mount-points="^/etc/.+$"
            ? collector.netstat.fields="*"
            ? |-
              collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p|dm-)\d+$"
            ? |-
              collector.netclass.ignored-devices=^(?:tun|kube|veth|dummy|docker).+$
            ? collector.nfs
          tolerations:
            - operator: Exists
    

    如您所见,现在使用前面提到的? 作为关键指标。 由于它是一个块序列,因此您不再需要逗号。 |- 开始一个文字块标量,从中剥离最后的换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多