Helm-Charts(yaml):正则表达式损坏
Helm-Charts(yaml): Regex expression broken
我正在与 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 流映射。它通常包含以逗号分隔的键值对,但您也可以像本例中那样提供单个值,这将使它们成为具有 null
值的键。
在 YAML 中,一旦您输入流式集合,all special flow-indicators 就不能再用于普通标量。特殊流量指示器是 {}[],
。普通标量是不带引号的文本值。
第一个破损值是非法的,因为它包含 [
和 ]
。根据规范,第二个损坏的值实际上是合法的,但相当多的 YAML 实现会阻塞它,因为 ?
也用作映射键的指示符。
您有多种选择:
- 引用标量。因为 none 其中包含单引号,所以用单引号括起来就可以了。通常你也可以双引号,但是你需要转义所有双引号字符和其中的所有反斜杠,这不利于可读性。
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
如您所见,这现在使用前面提到的 ?
作为关键指标。
由于它是一个块序列,因此您不再需要逗号。
|-
开始一个文字块标量,从中剥离最后的换行符。
我正在与 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 流映射。它通常包含以逗号分隔的键值对,但您也可以像本例中那样提供单个值,这将使它们成为具有 null
值的键。
在 YAML 中,一旦您输入流式集合,all special flow-indicators 就不能再用于普通标量。特殊流量指示器是 {}[],
。普通标量是不带引号的文本值。
第一个破损值是非法的,因为它包含 [
和 ]
。根据规范,第二个损坏的值实际上是合法的,但相当多的 YAML 实现会阻塞它,因为 ?
也用作映射键的指示符。
您有多种选择:
- 引用标量。因为 none 其中包含单引号,所以用单引号括起来就可以了。通常你也可以双引号,但是你需要转义所有双引号字符和其中的所有反斜杠,这不利于可读性。
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
如您所见,这现在使用前面提到的 ?
作为关键指标。
由于它是一个块序列,因此您不再需要逗号。
|-
开始一个文字块标量,从中剥离最后的换行符。