用途
本技能是一个日志分析专用能力,基于 Quickwit 搜索引擎并与 Terraphim AI 集成,帮助用户探索、分析和排查日志数据中的问题。适用于以下场景:
- 调查生产环境事故
- 分析跨服务的错误模式
- 排查性能问题
- 安全日志审计
- 配置日志搜索
主要能力
- 全文日志搜索:在数百万条日志条目中搜索
- 字段级过滤:按级别(level)、服务(service)、时间戳(timestamp)等字段查询
- 多种索引模式:快速显式索引、便捷自动发现、平衡的过滤发现
- 优雅降级:网络故障时返回空结果,不会崩溃
配置模式
1. 显式索引(生产环境 - 快速)
适用于生产监控、已知索引。配置示例:
{
"location": "http://localhost:7280",
"service": "Quickwit",
"extra_parameters": {
"default_index": "workers-logs",
"max_hits": "100",
"sort_by": "-timestamp"
}
}
指标:API 调用 1 次,延迟约 100ms,用于生产监控。
2. 自动发现(探索 - 便捷)
适用于日志探索、发现新索引。配置示例:
{
"location": "http://localhost:7280",
"service": "Quickwit",
"extra_parameters": {
"max_hits": "50",
"sort_by": "-timestamp"
}
}
指标:API 调用 N+1 次,延迟约 300-500ms,用于探索。
3. 过滤发现(平衡)
适用于多服务监控且需要控制范围。配置示例:
{
"location": "http://localhost:7280",
"service": "Quickwit",
"extra_parameters": {
"index_filter": "workers-*",
"max_hits": "100",
"sort_by": "-timestamp"
}
}
指标:API 调用 N+1(已过滤),延迟约 200-400ms,用于多服务模式。
查询语法
基础查询
# 简单文本搜索
/search error
# 短语搜索
/search "connection refused"
# 通配符
/search err*
字段级查询
# 日志级别
/search "level:ERROR"
/search "level:WARN OR level:ERROR"
# 服务名
/search "service:api-gateway"
# 组合
/search "level:ERROR AND service:auth"
时间范围查询
# 某日期之后
/search "timestamp:[2024-01-01 TO *]"
# 日期之间
/search "timestamp:[2024-01-01 TO 2024-01-31]"
# 与级别组合
/search "level:ERROR AND timestamp:[now-1h TO now]"
布尔运算符
# AND(两者都需满足)
/search "error AND database"
# OR(任一匹配)
/search "error OR warning"
# NOT(排除)
/search "error NOT timeout"
# 分组
/search "(error OR warning) AND database"
认证
Bearer Token
{
"extra_parameters": {
"auth_token": "Bearer your-token-here",
"default_index": "logs"
}
}
使用 1Password 的 Basic Auth
# 从 1Password 设置密码
export QUICKWIT_PASSWORD=$(op read "op://Private/Quickwit/password")
# 配置
{
"extra_parameters": {
"auth_username": "cloudflare",
"auth_password": "${QUICKWIT_PASSWORD}"
}
}
常见工作流
事故调查
- 从宽泛搜索开始:
/search "level:ERROR" - 按时间窗口缩小:
/search "level:ERROR AND timestamp:[2024-01-15T10:00:00Z TO 2024-01-15T11:00:00Z]" - 聚焦特定服务:
/search "level:ERROR AND service:payment-api" - 查找模式:
/search "timeout OR connection refused"
错误模式分析
- 查找所有错误类型:
/search "level:ERROR" - 按消息模式分组:
/search "level:ERROR AND message:*database*"/search "level:ERROR AND message:*timeout*"/search "level:ERROR AND message:*authentication*"
性能排查
- 查找慢请求:
/search "duration:>1000" - 检查特定端点:
/search "path:/api/users AND duration:>500"
配置参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| default_index | string | 无 | 显式指定要搜索的索引 |
| index_filter | string | 无 | 自动发现的 glob 模式 |
| max_hits | string | "100" | 每个索引的最大结果数 |
| sort_by | string | "-timestamp" | 排序字段(- 表示降序) |
| timeout_seconds | string | "10" | HTTP 请求超时 |
| auth_token | string | 无 | Bearer token |
| auth_username | string | 无 | Basic auth 用户名 |
| auth_password | string | 无 | Basic auth 密码 |
故障排查
连接被拒绝
错误:"Failed to connect to Quickwit"
- 验证 Quickwit 是否运行:
curl http://localhost:7280/health - 检查 API 路径前缀(Quickwit 使用 /api/v1/):
- 正确:
curl http://localhost:7280/api/v1/indexes - 错误(返回 "Route not found"):
curl http://localhost:7280/v1/indexes
- 正确:
自动发现无结果
错误:"No indexes discovered"
- 验证索引是否存在:
curl http://localhost:7280/api/v1/indexes | jq '.[].index_config.index_id' - 检查索引过滤模式是否匹配你的索引
- 尝试回退到显式索引模式
搜索结果为空
- 测试直接搜索:
curl "http://localhost:7280/api/v1/workers-logs/search?query=*&max_hits=10" - 验证查询语法和字段名
- 检查排序字段是否存在于索引 schema 中
性能建议
- 生产监控使用显式索引模式
- 将 max_hits 限制在实际需要的数量(通常 50-100)
- 添加时间约束以缩小搜索范围
- 索引较多时使用过滤发现而非完整自动发现
限制
- 依赖 Quickwit 服务器与 Terraphim AI
- 网络故障时返回空结果(优雅降级)
- 自动发现模式会产生 N+1 次 API 调用,延迟较高
- 具体收费、价格、平台支持等信息暂未提供