【问题标题】:Unit Testing Prometheus Alerts: input series and interval单元测试 Prometheus 警报:输入系列和间隔
【发布时间】:2022-12-14 00:38:32
【问题描述】:

我一直在为我的 Prometheus 警报编写单元测试,我刚刚增加了警报的间隔范围,因此我需要修改我当前的测试。这是我修改后的测试:

  - interval: 15m
    # Series data.
    input_series:
      - series: 'some_bucket{service_name="some-service", le="1000"}'
        values: 6 6 6 6 6 6 6
      - series: 'some_bucket{service_name="some-service", le="10000"}'
        values: 10 11 12 13 14 14 14
      - series: 'some_bucket{service_name="some-service", le="+Inf"}'
        values: 10 100 200 300 400 500 600
    alert_rule_test:
      - eval_time: 5m
        alertname: someName
        exp_alerts: []
      - eval_time: 15m
        alertname: someName
        exp_alerts:
          - exp_labels:
              severity: error
              service_name: some-service
            exp_annotations:
              summary: "a summary"
              description: "adescription"

我的警报规则是:

 histogram_quantile(0.95, sum by(le) (rate(some_bucket{service_name="some-service"}[15m]))) >= 1000

测试工作正常,它不会在 5 分钟的 eval_time 触发,而是在达到正确的间隔时触发。我的问题是关于顶部设置的间隔

 - interval: 15m

我的理解是,这应该是抓取间隔,但如果我将其更改为 1,则测试失败。这是为什么?这是否意味着我的时间序列/输入数据需要更改?

谢谢

【问题讨论】:

    标签: unit-testing prometheus alert


    【解决方案1】:

    给定的间隔本身不是刮擦间隔,而是系列中值之间的时间。

    将间隔设置为 15 分钟意味着您的系列(每个有七个条目,因此它们之间有六个间隔)为 6 x 15 = 90 minutes 定义数据。

    将此设置为 1m 意味着六分钟后您的测试数据为空。我在任何文档中都找不到我猜它未定义或被视为缺失值的行为。

    以下测试将使用interval: 15m 运行。将其设置为 1m 会中断测试,您会看到桶的值为“nil”。

    evaluation_interval: 1m
    
    tests:
      - interval: 1m
        # Series data.
        input_series:
          - series: 'some_bucket{service_name="some-service", le="1000"}'
            values: 6 6 6 6 6 6 6
          - series: 'some_bucket{service_name="some-service", le="10000"}'
            values: 10 11 12 13 14 14 14
          - series: 'some_bucket{service_name="some-service", le="+Inf"}'
            values: 10 100 200 300 400 500 600
        promql_expr_test:
          - expr: histogram_quantile(0.95, sum by(le) (rate(some_bucket{service_name="some-service"}[15m])))
            eval_time: 15m
            exp_samples:
              - value: 10000
          - expr: some_bucket
            eval_time: 16m
            exp_samples:
              - labels: 'some_bucket{service_name="some-service",le="1000"}'
                value: 6
              - labels: 'some_bucket{service_name="some-service",le="10000"}'
                value: 11
              - labels: 'some_bucket{service_name="some-service",le="+Inf"}'
                value: 100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多