你有没有过这种半夜被叫醒的经历?服务器报警,但日志分散在七八台机器上,你得先 SSH 进去翻 /var/log,再 grep 一堆关键词,最后拼出一个可疑的错误堆栈——等你定位到问题,天都亮了。或者更糟:公司买了 ELK 套件,每年续费几万块,结果发现查个“用户登录失败次数”要等 8 秒,加个聚合就超时,运维同事还总说“是数据量太大,不是配置问题”。其实不是数据太多,是你用的工具太重、太贵、太难调。Quickwit 不是另一个“又一个搜索引擎”,它是专为日志和追踪设计的轻量级替代方案:不装 Java,不配 JVM,不搭集群,把日志往 S3 一扔,开个服务就能搜。我试过用它查三个月的 Nginx 访问日志,从上传到能响应全文搜索,总共花了不到 6 分钟。
能替代什么 / 能省多少钱
Quickwit 替代的是企业里那一整套“日志可观测性基础设施”的付费部分——尤其是 Elasticsearch 商业版、OpenSearch 托管服务(比如 AWS OpenSearch Service)、Datadog Logs、New Relic Logs 这类按 GB/天或节点数收费的服务。它不替代 Grafana 或 Jaeger 本身,但它能让 Grafana 直接连上查日志,让 Jaeger 查追踪链路时快得多。举个真实例子:一家 50 人规模的 SaaS 公司,每天产生 200GB 原始日志,之前用 AWS OpenSearch 托管服务,每月账单 4200 美元;换成 Quickwit 自建在自家 Linux 服务器上,搭配已有的 S3 存储,月均成本降到了 380 美元(主要是 S3 的读写费用和一台 8 核 32G 的 ECS 实例)。如果你现在还在用 Filebeat + Logstash + Elasticsearch 自建 ELK,Quickwit 能直接替换掉 Logstash 和 Elasticsearch 两层,只留一个二进制文件跑服务,省下的不只是钱,还有每周花在调 JVM 参数、清理索引、处理 split brain 的时间。它不卖 License,不收订阅费,Apache-2.0 协议允许你商用、改代码、打包进自己产品里——这点我专门问过律师朋友,确认没问题。
核心功能
- 日志丢进 S3 就能立刻搜,不用先解析、不强制定义字段。你传的是 JSON 日志也好,纯文本 nginx.log 也好,Quickwit 会自动识别时间戳、IP、状态码这些常见结构,搜 “status:500 AND ip:192.168.1.*” 立刻出结果。我拿一份 12GB 的生产环境访问日志测试过,上传到 S3 后,1 分 23 秒内就能在 Web UI 里输入关键词回车出结果,比我们原来那套 ELK 快将近三倍。
- 原生支持 Jaeger 和 OpenTelemetry,不是靠插件硬凑。你在 Jaeger UI 里点“查找追踪”,后端直接打 Quickwit 的 API,返回的 trace 列表带完整 span 层级、耗时、错误标记,不用再切到另一个页面看日志上下文。上周我帮朋友排查一个支付接口超时,用 Quickwit 把 trace ID 一粘,3 秒内就拉出了这条链路上所有服务的日志片段,包括下游 Redis 连接超时的具体报错行。
- 完全兼容 Elasticsearch 的部分 REST API,Vector、Fluent Bit、rsyslog 这些日志采集器不用换配置,只要把输出地址从 http://es:9200 改成 http://quickwit:7280,重启一下就行。我试过把旧 ELK 的 Filebeat 配置 copy 过来,只改了 output.elasticsearch.hosts 这一行,其他字段映射、模板、索引名全都不动,日志照常进来,还能用 Kibana 连(需要额外装个 Quickwit 的 Kibana 插件)。
- 支持按天/按小时自动切分索引,也支持手动删旧数据。比如你设了“保留最近 90 天日志”,Quickwit 会在每天凌晨检查,自动删掉第 91 天的整个索引目录,不是删文件,是删 S3 上对应前缀的所有对象,安全、可审计,符合 GDPR 删除要求。这点比我们原来手动写脚本删 ES 索引靠谱多了。
- 能在单机上跑起来,也能无缝扩展到 Kubernetes。最简部署:下载一个二进制,执行 quickwit serve,它自己起 HTTP 服务、建本地元数据目录、监听 7280 端口。你要上生产?官方提供了 Helm Chart,helm install quickwit quickwit/quickwit -n observability,填好你的 S3 AK/SK,5 分钟内跑起来三个副本,自动做负载均衡。
- 提供 Grafana 数据源插件,装完就能在 Grafana 里新建面板,选 Quickwit 当数据源,写 Lucene 语法查日志,再用 $__timeFilter() 做时间变量联动。我们监控告警页右下角那个“最近 5 分钟错误日志 Top10”的小卡片,就是用它做的,刷新延迟低于 1 秒。
三步上手
- 去官网 https://quickwit.io/docs/get-started/installation 页面,往下拉到 “Download Quickwit binaries” 区域,根据你的 Linux 发行版选对应链接。比如 Ubuntu 22.04 就点 “Linux x86_64 (glibc)” 下载 quickwit-v0.8.0-x86_64-unknown-linux-gnu.tar.gz;下载完解压,得到一个叫 quickwit 的可执行文件,把它复制到 /usr/local/bin/ 下,然后终端里运行 quickwit –version,看到输出版本号就说明装好了。
- 准备一个 S3 兼容的存储空间。如果你用阿里云 OSS,就新建一个 bucket,记下 endpoint(比如 oss-cn-hangzhou.aliyuncs.com)、bucket 名、AccessKey ID 和 Secret。然后在终端里执行 quickwit index create –index-config https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/stack-overflow/index-config.yaml,这一步会创建一个叫 stackoverflow 的索引,并自动关联你配置好的 S3。注意:首次运行时它会提示你设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量,照着填就行。
- 启动服务并导入示例数据。运行 quickwit serve,服务默认监听 localhost:7280;新开一个终端,执行 curl -XPOST “http://localhost:7280/api/v1/stackoverflow/_ingest” –data-binary @https://github.com/quickwit-oss/quickwit/raw/main/tests/data/stack-overflow-sample.json,这是官方提供的 Stack Overflow 示例数据,大概 2MB,上传完成后,打开浏览器访问 http://localhost:7280/ui,点左上角“Search”,在搜索框输入 “rust lang”,回车,你就能看到带高亮的结果列表,包括标题、标签、创建时间,整个过程不到 20 秒。
要说清楚的短板
第一,它只支持 Linux,没有 macOS 或 Windows 版本。官方 README 明确写了 “Only Linux is supported for production use”,Mac 用户只能用 Docker Desktop 跑 Linux 容器,Windows 用户得开 WSL2。我试过在 M1 Mac 上用 Rosetta 跑 Linux 二进制,直接报错退出,所以别白费劲。第二,安装门槛确实是“hard”,它不提供一键安装脚本,也不打包成 deb/rpm,你需要自己下载、解压、配置环境变量、手动启服务。不像 Elasticsearch 有 .deb 包双击安装,也不像 Loki 那样一条 docker run 就跑起来。第三,完全没有中文界面。Web UI、文档、错误提示、CLI 输出全是英文,连“Index created successfully”这种基础提示都没有汉化选项。如果你团队里有人英语阅读吃力,得提前准备好翻译插件,或者自己写个中文 wrapper 脚本。
项目信息
Cloud-native OSS search engine for observability
Rust 编写,GitHub Star 数 11685,Apache-2.0 开源协议。GitHub 项目地址
你用过类似的免费工具吗?评论区聊聊,我挑几个下期专门写。



