【问题标题】:Prometheus metrics with timestamp带有时间戳的 Prometheus 指标
【发布时间】:2019-05-09 01:57:19
【问题描述】:

当我从 prometheus 查询指标时,我只得到查询时的时间戳。

例如,如果我这样查询数据,

http://localhost:9090/api/v1/query?query=go_memstats_buck_hash_sys_bytes

然后我得到如下响应。

{
    "status": "success",
    "data": {
        "resultType": "vector",
        "result": [
            {
                "metric": {
                    "__name__": "go_memstats_buck_hash_sys_bytes",
                    "instance": "localhost:9090",
                    "job": "prometheus"
                },
                "value": [
                    1557366670.588, <== UNIX time stamp when I queried.
                    "1472884" <== Value
                ]
            }
        ]
    }
}

但是在图表视图中,我可以看到如下图。这意味着我可以使用 prometheus 的时间戳查询数据。

我想知道如何使用 prometheus 的时间戳查询指标。

【问题讨论】:

标签: timestamp prometheus promql


【解决方案1】:

我找到了答案,我需要如下的时间范围。

http://localhost:9090/api/v1/query?query=go_memstats_buck_hash_sys_bytes[5m]

那么结果就是,

{
    "status": "success",
    "data": {
        "resultType": "matrix",
        "result": [
            {
                "metric": {
                    "__name__": "go_memstats_buck_hash_sys_bytes",
                    "instance": "localhost:9090",
                    "job": "prometheus"
                },
                "values": [
                    [
                        1557369023.318,
                        "1491644"
                    ],
                    [
                        1557369028.318,
                        "1491644"
                    ],
                    [
                        1557369033.282,
                        "1491644"
                    ],
      .........
                ]
            }
        ]
    }
}

【讨论】:

    【解决方案2】:

    说明:您想要获取特定查询的Creation Metric Timestamp。当您使用timestamp 函数(例如timestamp(your_metric_name{some_label="label_value"}))时,问题就开始了,不幸的是,您意识到结果是查询的当前时间戳。现在时间戳。这不是我们想要的。

    解决方案: 执行常规查询并从时间戳数组中过滤时间戳值。 响应是一个 JSON 输出,其中包含有关您的响应状态的信息、您的指标信息(名称、标签、值和结果)以及表示图表上时间戳的值 - 这是一个向量。如果我们解析时间戳数组中的第一个值,我们会得到这个特定指标的创建日期。

    prometheus 查询响应正文示例

    {
    "status": "success",
    "data": {
        "resultType": "matrix",
        "result": [
            {
                "metric": {
                    "__name__": "yourMetricName",
                    "some_label_a": "some_value_a",
                    "some_label_b": "some_value_b",
                    "some_label_c": "some_value_c",
                },
                "values": [
                    [
                        1589329002.665,
                        "1"
                    ],
                    [
                        1589329002.715,
                        "1"
                    ],
                    [
                        1589329002.765,
                        "1"
                    ],
                    [
                        1589329002.815,
                        "1"
                    ],
                    [
                        1589329002.865,
                        "1"
                    ]
                ]
            }
        ]
    }
    

    }

    实施

    curl -G --data-urlencode \ 
    query="your_metric_name{some_label='some_value_a',some_label_b='some_value_b'}[1d]" \
    localhost:9090/api/v1/query | jq .data.result[].values[1][0]
    

    实现说明:我正在执行 curl api 调用(GET 方法)并将查询参数发送到我的 prometheus 服务(在 localhost 的 9090 端口上本地运行),然后我解析结果(使用 @ 987654325@ 工具)索引 1 上的内部字段值数组,表示时间戳的双倍数。下一步是将其从纪元时间转换为日期时间,您就可以开始了。 在我的示例中,结果将是:1589329002.665

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 2021-11-30
      • 2022-01-02
      • 2020-07-15
      • 2023-01-25
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多