带时间戳的Prometheus指标

时间:2019-05-09 01:57:19

标签: timestamp prometheus promql

当我从普罗米修斯查询指标时,我只是在查询时得到时间戳记。

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

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
                ]
            }
        ]
    }
}

但是在图视图中,我可以看到如下图。这意味着我可以使用带有普罗米修斯的时间戳查询数据。

enter image description here

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

2 个答案:

答案 0 :(得分:0)

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

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"
                    ],
      .........
                ]
            }
        ]
    }
}

答案 1 :(得分:0)

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

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

普罗米修斯查询响应正文的

示例

{
"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服务(在本地9090端口本地运行)。 {1}}工具)索引1上的内部字段值数组,它表示时间戳的两倍。下一步是将其从纪元时间转换为日期时间,您就可以开始了。 在我的示例中,结果将是:jq