ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenObserve 日志搜索变慢排查实录:3 处配置让要打开的文件从 86 个减到 12 个

OpenObserve 日志搜索变慢排查实录:3 处配置让要打开的文件从 86 个减到 12 个 OpenObserve 日志搜索变慢排查实录3 处配置让要打开的文件从 86 个减到 12 个【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, RUM, Session replay, pipelines, SLO and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve一条本该 200ms 出结果的日志查询拖到 900ms先怀疑扫描阶段每个条件能排除多少候选文件才是最大变量。这是一个跑着约 5000 万条日志的单节点 OpenObserve 集群的排查复盘3 处配置改动把要打开的文件从 86 个压到 12 个P50 从 900ms 到 120ms。 先固定现场900ms 和它的 86 个文件出问题的查询带 3 个过滤条件service、org、status_code时间窗 4 小时冷缓存下 P50 是 900ms。用查询检查器拆开看成本分布是文件列表裁剪约 30%文件打开与行读取约 55%聚合只占零头——大头都花在“打开文件确认里面没数据”上。OpenObserve 选文件分三步分区裁剪按时间和目录级分区键缩小候选集实现在 partition/、布隆过滤器裁剪文件级概率索引过滤器说“值不存在”就直接跳过整个文件、元数据读取每次查询回元数据存储取 schema 和文件列表。当时集群前两步基本没启用没配分区键也没开布隆过滤器4 小时的数据摊开就是 86 个候选文件逐个打开确认。⚡ 改动清单配置与缓存三处动作一把 service 声明为分区键做法在流设置里加上两个中低基数字段settings: { partition_keys: [service, status_code] }为什么有效写入后数据按字段值分目录查询指定servicecheckout时直接落进对应目录其余目录在文件列表阶段就被排除不用碰文件内容。注意分区键改动只对之后写入的数据生效。实测变化4 小时窗的候选文件从 86 个降到 26 个P50 从 900ms 降到 410ms。动作二给高基数字段开布隆过滤器做法把user_id加进bloom_filter_fieldssettings: { bloom_filter_fields: [user_id, trace_id] }为什么有效分区键解决“哪个目录”布隆过滤器记录每个文件出现过哪些值、不会漏报的概率结构解决“目录里哪个文件”。压实任务按文件构建过滤器compaction/不含目标值的文件不再打开。实测变化user_idu-xxxx这类查询的文件打开数从 26 降到 12P50 从 410ms 降到 210ms。动作三把缓存目录指到本地盘做法启动环境里加一行ZO_DATA_CACHE_DIR /data/openobserve/cache为什么有效热点流的 schema 和文件列表此前每次查询都回源 KV 存储指了本地缓存目录后读取先走本地内存加磁盘两级参数见 config/。实测变化单次查询的元数据读取从 55ms 降到 8msP50 从 210ms 降到 120ms。 重跑十遍数字变成了什么样验证条件同一个单节点集群、同一批 5000 万条日志、同一条三条件查询改动前后各跑 10 遍取 P50中位数比峰值稳定指标改动前改动后单查询打开的文件数8612分区裁剪后候选文件8626单次元数据读取耗时55ms8ms查询 P50 延迟900ms120ms收益大头来自前两步文件打开数降了 86%缓存那步锦上添花但风险最低可以无脑先上。边界与深挖位置高基数字段别设分区键user_id进partition_keys会把文件切得极碎、目录数爆炸高基数走布隆过滤器。分区键和布隆过滤器是叠加关系前者目录级粗筛后者文件级细筛两者都要配才覆盖完整路径。缓存要有失效机制schema 变更后旧元数据留在缓存里会返回错误的字段类型靠 TTL 加主动失效兜底。延伸阅读裁剪逻辑 src/search_service/src/partition/、布隆构建与压实 src/compaction/、缓存与合并参数 src/config/跑一遍 tests/api-testing/ 的回归用例能直接验证效果想改这类行为从 CONTRIBUTING.md 进入。【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, RUM, Session replay, pipelines, SLO and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表