带有时间戳的普罗米修斯指标
Prometheus metrics with timestamp
当我从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 的时间戳查询指标。
我找到了答案,我需要如下时间范围。
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"
],
.........
]
}
]
}
}
说明:您想获取特定查询的创建指标时间戳。当您使用 timestamp
函数(例如 timestamp(your_metric_name{some_label="label_value"})
)时问题就开始了,不幸的是您意识到结果是查询的当前时间戳。现在时间戳。这不是我们想要的。
解决方法:进行正则查询,从时间戳数组中过滤时间戳值。 响应是一个 JSON 输出,其中包含有关您的响应状态的信息、您的指标信息(名称、标签、值和结果)以及表示图表上时间戳的值 - 这是一个向量。如果我们解析时间戳数组中的第一个值,我们将获得该特定指标的创建日期。
普罗米修斯查询响应正文示例:
{
"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 端口上本地运行) 之后我解析结果(使用 jq
工具)索引 1 上的内部字段值数组,它表示时间戳的双倍数。下一步是将它从纪元时间转换为日期时间,您就可以开始了。
在我的示例中,结果将是:1589329002.665
.
当我从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 的时间戳查询指标。
我找到了答案,我需要如下时间范围。
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"
],
.........
]
}
]
}
}
说明:您想获取特定查询的创建指标时间戳。当您使用 timestamp
函数(例如 timestamp(your_metric_name{some_label="label_value"})
)时问题就开始了,不幸的是您意识到结果是查询的当前时间戳。现在时间戳。这不是我们想要的。
解决方法:进行正则查询,从时间戳数组中过滤时间戳值。 响应是一个 JSON 输出,其中包含有关您的响应状态的信息、您的指标信息(名称、标签、值和结果)以及表示图表上时间戳的值 - 这是一个向量。如果我们解析时间戳数组中的第一个值,我们将获得该特定指标的创建日期。
普罗米修斯查询响应正文示例:
{
"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 端口上本地运行) 之后我解析结果(使用 jq
工具)索引 1 上的内部字段值数组,它表示时间戳的双倍数。下一步是将它从纪元时间转换为日期时间,您就可以开始了。
在我的示例中,结果将是:1589329002.665
.