获取 prometheus/grafana 中不同标签值的计数
Getting a count of distinct label values in prometheus/grafana
我正在尝试在 Grafana 中创建一个 table/chart,显示在给定时间范围内(例如过去 24 小时)登录给定应用程序的唯一用户总数。我有一个指标,app_request_path
记录每分钟到达特定路径的请求数:
app_request_count{app="my-app", path="/login"}
这给了我以下信息:
app_request_count{app="my-app",path="/login",status="200",username="username1"}
app_request_count{app="my-app",path="/login",status="200",username="username2"}
现在我想计算唯一用户名的数量,所以我 运行:
count_values("username", app_request_count{app="my_app", path="/login"})
我得到:
{username="0"}
{username="1"}
{username="2"}
{username="3"}
{username="4"}
{username="5"}
我错过了什么/我做错了什么?理想情况下,我希望获得一个标量值,显示过去 24 小时内登录的唯一用户名的总数。
非常感谢。
count without (username)(app_request_count)
count_values
用于指标值,count
用于时间序列。也不建议将用户名之类的东西作为标签值,因为它们往往是高基数。它们也可能是 PII,这可能会产生法律影响。
以下查询应该 return 在过去 24 小时内遇到的给定标签 app="my-app"
和 path="/login"
的唯一 username
标签值的数量:
count(
group(
last_over_time(app_request_count{app="my-app", path="/login"}[24h])
) by (username)
)
工作原理:
内部 last_over_time(...[24h])
查询确保在过去 24 小时内选择每个唯一的时间序列,即使该时间序列在过去 24 小时内停止接收新样本也是如此。参见 last_over_time() docs。
group(...) by (username)
return每个唯一的 username
标签都有一个时间序列。参见 group() docs。
count(...)
return 时间序列的总数 return 来自 group()
。此数字与 username
标签的唯一值数量相匹配。参见 count() docs。
我正在尝试在 Grafana 中创建一个 table/chart,显示在给定时间范围内(例如过去 24 小时)登录给定应用程序的唯一用户总数。我有一个指标,app_request_path
记录每分钟到达特定路径的请求数:
app_request_count{app="my-app", path="/login"}
这给了我以下信息:
app_request_count{app="my-app",path="/login",status="200",username="username1"}
app_request_count{app="my-app",path="/login",status="200",username="username2"}
现在我想计算唯一用户名的数量,所以我 运行:
count_values("username", app_request_count{app="my_app", path="/login"})
我得到:
{username="0"}
{username="1"}
{username="2"}
{username="3"}
{username="4"}
{username="5"}
我错过了什么/我做错了什么?理想情况下,我希望获得一个标量值,显示过去 24 小时内登录的唯一用户名的总数。
非常感谢。
count without (username)(app_request_count)
count_values
用于指标值,count
用于时间序列。也不建议将用户名之类的东西作为标签值,因为它们往往是高基数。它们也可能是 PII,这可能会产生法律影响。
以下查询应该 return 在过去 24 小时内遇到的给定标签 app="my-app"
和 path="/login"
的唯一 username
标签值的数量:
count(
group(
last_over_time(app_request_count{app="my-app", path="/login"}[24h])
) by (username)
)
工作原理:
内部
last_over_time(...[24h])
查询确保在过去 24 小时内选择每个唯一的时间序列,即使该时间序列在过去 24 小时内停止接收新样本也是如此。参见 last_over_time() docs。group(...) by (username)
return每个唯一的username
标签都有一个时间序列。参见 group() docs。count(...)
return 时间序列的总数 return 来自group()
。此数字与username
标签的唯一值数量相匹配。参见 count() docs。