You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Loki和Grafana实现全文搜索及日志缺失语句告警?

Loki + Grafana 全文搜索与日志告警实现方案

一、Loki + Grafana 全文搜索实现

LogQL支持标签过滤与全文检索结合,针对你的场景,常用语法如下:

  • 精确匹配单个关键词:先筛选流标签,再搜索指定内容
    {job="my_job"} |= "simulate from"
    
    该查询会返回job="my_job"所有流中包含"simulate from"的日志行。
  • 多关键词逻辑与匹配:同时匹配多个关键词
    {job="my_job"} |= "simulate from" |= "error=0"
    
  • 正则模糊匹配:用~=匹配符合正则的内容
    {job="my_job", filename=~"20230920_.*.log"} ~= "error=[0-9]+"
    
  • 排除指定关键词:用!=过滤包含目标内容的日志
    {job="my_job"} != "error=1"
    

在Grafana中,将上述查询输入Loki数据源的查询面板,即可实时查看匹配日志,完成全文搜索。

二、日志告警配置(检查文件是否包含指定语句)

你的需求是每天17点检查当日16点生成的日志文件,确保每个文件同时包含"simulate from"和"error=0",缺失则告警。具体实现步骤如下:

1. 编写LogQL查询语句

按filename分组统计每个文件中两个关键词的出现次数,筛选出任意关键词未出现的文件:

sum by (filename) (
  count_over_time({job="my_job", filename=~"${__date:YYYYMMDD}_.*.log"} |= "simulate from" [1d])
  + count_over_time({job="my_job", filename=~"${__date:YYYYMMDD}_.*.log"} |= "error=0" [1d])
) < 2
  • ${__date:YYYYMMDD}是Grafana内置变量,自动获取当天日期,确保只查询当日生成的日志文件
  • count_over_time([1d])统计1天内匹配关键词的日志行数
  • sum by (filename)将两个关键词的计数按文件聚合:若两个关键词都存在,总和至少为2;若任意一个缺失,总和会小于2,触发告警条件

2. 配置Grafana告警规则

  1. 进入Grafana的Alerting面板,点击Create alert rule
  2. 选择Loki作为数据源,粘贴上述查询语句
  3. 设置Evaluation behavior:
    • 评估频率:用Cron表达式设置为0 17 * * *(每天17点执行一次)
    • 时间范围:保持默认或设置为1d,确保覆盖当日日志
  4. 设置告警阈值:当查询结果存在(即有文件满足sum < 2)时触发告警
  5. 配置通知渠道:添加邮件、企业微信等通知方式,接收告警信息

注意事项

  • 确保Loki已正确采集对应日志文件,流标签job和filename配置准确
  • 若日志文件生成存在延迟,可适当调整告警评估时间(比如17:10),避免因采集延迟导致误告警

三、替代工具建议

如果Loki的聚合能力无法满足你的复杂场景,可考虑以下工具:

  • VictoriaMetrics Logs:与Prometheus生态兼容,存储效率更高,支持类似LogQL的查询语法,同时提供更灵活的聚合分析能力,适合大规模日志场景
  • ELK Stack:Elasticsearch作为全文搜索数据库,可将每个日志文件作为独立文档分组,通过布尔查询直接检查文档是否包含指定关键词,配置更直观,适合对日志内容做精细化检索与告警的场景

内容的提问来源于stack exchange,提问作者54vault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 18:25:56