如何过滤 prometheus.yml 中的 EC2 实例?

How to filter EC2 instances in prometheus.yml?

我正在尝试过滤 prometheus.yml 中的 EC2 实例。假设以下是 yml 文件的一部分。我如何在以 prodqa 或其他标签开头的 return 实例的值中使用正则表达式?这可能不配置 relabeling?

  ec2_sd_configs:
- region: us-east-1
  access_key: access
  secret_key: mysecret
  profile: profile
  filters:
    - name: tag:Name
      values:
        - prod.*
        - qa.*

我没有任何使用 AWS 的经验,但我相信它 API 不支持正则表达式过滤 API。

一般来说,重新标记是进行过滤的首选方法。如何实现这一点的一个例子是(对于领事,但这并不重要): 可用的 ec2 元标签列表位于 https://prometheus.io/docs/prometheus/latest/configuration/configuration/#ec2_sd_config

的普罗米修斯文档中

我看到 Prometheus 文档建议在您可能有数千个实例时出于效率原因使用过滤器而不是重新标记。使用具有 "qa"、"prod" 等值的单独标记(例如 "Env")以便它们可以完全匹配(没有 regex/wildcard)将是一个优雅的解决方案,我在这里猜猜?

Prometheus 现在似乎不支持正则表达式过滤 API,但如果他们可以在未来的版本中添加它,那将是一个不错的功能。在这种情况下可以做的是,您可以在 EC2 实例上添加一个单独的标签,这样您就可以根据这些标签进行过滤。如果您有大量实例,则在早期阶段进行过滤非常有用。否则,你会得到一个巨大的列表,你需要通过重新标记来经历 drop/keep 阶段,这仍然在服务发现面板中保留一长串列表并且难以阅读。

在下一步中,您可以使用重新标记将每个发现的实例的地址从私有 IP 替换为 public IP。最后一点,您可以将实例名称替换为标签名称,例如,所有 QA 实例都标记为 QA。

 ec2_sd_configs:
  - region: value
    access_key: value
    secret_key: value
    port: value
    filters:
      - name: tag:Name
        values:
          - qa
          - prod
          - some other types
relabel_configs:
  - source_labels: [__meta_ec2_public_ip]
    replacement: ':your port number'
    target_label: __address__
  - source_labels: [__meta_ec2_tag_Name]
    target_label: instance