Kibana + Elasticsearch 如何统计字段的唯一值数量(去重计数)?

统计字段唯一值(如独立访客数)用 Cardinality 聚合:Kibana 可视化中选 Unique Count 聚合类型,或 DSL 写 cardinality agg。注意它是近似算法,精度可控。本文给出两种操作与精度说明。

最佳实践
Kibana + Elasticsearch 如何统计字段的唯一值数量(去重计数)?封面

用 Cardinality(基数)聚合:Kibana 可视化编辑器里选聚合类型「Unique Count」、选目标字段即可;等价 DSL 是 cardinality 聚合。它是 HyperLogLog++ 近似算法,默认误差率约 5% 以内。

Kibana 可视化操作

  1. 新建可视化(如 Metric 大数字);
  2. 聚合类型选 Unique Count
  3. Field 选目标字段(如 user_id.keyword)——注意要用 keyword 子字段,text 字段不能聚合
  4. 保存加到仪表盘。

DSL 查询

GET /logs-*/_search
{
  "size": 0,
  "aggs": {
    "unique_users": {
      "cardinality": { "field": "user_id.keyword" }
    }
  }
}

精度说明

Cardinality 用 HLL++ 近似算法换取内存效率:默认精度阈值下误差很小,可通过 precision_threshold(最大 40000)调高:

"cardinality": { "field": "user_id.keyword", "precision_threshold": 40000 }

要精确值只能脚本遍历,代价极高——生产上近似即可。

观测云对照

观测云 DQL 提供去重计数函数,在查看器与看板中对任意字段直接做独立值统计,无需关心字段类型(不分 text/keyword 之惑)。

常见问题(FAQ)

Q:选不到目标字段? 字段是 text 类型——改用它的 .keyword 子字段,或调整索引 mapping。

Q:能按天分组看每天的 UV 吗? 可以,外层套 Date Histogram 聚合即可。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台