文章目录
官方文档
# 官方文档
https://docs.victoriametrics.com/victorialogs/logsql/
## LogsQL 关键字运算符
AND、NOT、
简单语法示例
# 直接 单词 或 短语 查询(查询日志消息中含有该error单词的消息条目)
error
# 若要查询的单词或短语 与 LogsQL 关键字冲突,用“”括起来
"AND"
"error: cannot find file"
"'ip': '1.1.1.1.1'"
# 限定时间范围查询
# 查询在过去 5 分钟内含有 error的消息 (该AND运算符 意味着日志条目 必须匹配两个过滤器才能被选中)
error AND _time:5m
# LogsQL 允许省略AND单词,样式如下
_time:5m error
# 查询结果按时间排序(默认 _time:5m error 该查询返回的日志顺序是任意的,因为对大量日志进行排序可能需要大量的 CPU 和 RAM)
_time:5m error | sort by (_time)
# 以下查询返回error过去 5 分钟内包含该单词的最后 10 条日志
_time:5m error | sort by (_time) desc | limit 10
# 仅返回特定字段的结果,仅返回 _stream 和_msg 字段(VictoriaLogs 默认返回所有日志字段)
error _time:5m | fields _time, _stream, _msg
# 踢出包含 某某的行(用NOT 或者 - )
_time:5m error NOT buggy_app
_time:5m error -buggy_app
# 踢出包含 某两个某某的行
_time:5m error -buggy_app -foobar
_time:5m error -(buggy_app OR foobar)
# 若error 不是存储在消息字段中,而是在log.level 字段中,应该在查询单词前加前缀,如下
_time:5m log.level:error -(buggy_app OR foobar)
# 如果单词包含特殊字符,可能与LogsQL关键字语法冲突,那么任何单词均要“”引号括起来
"_time":"5m" "log.level":"error" -("buggy_app" OR "foobar")
# 如果应用程序标识符(例如buggy_appand foobar)存储在该app字段中怎么办?正确 - 只需在andapp:前面添加前缀即可:buggy_appfoobar
_time:5m log.level:error -(app:buggy_app OR app:foobar)
# app:可以通过将前缀移到括号外面来简化查询
_time:5m log.level:error -app:(buggy_app OR foobar)
# app如果每个唯一实例都运行一个实例,则该字段唯一地标识应用程序实例。app在这种情况下,
# 建议在数据提取 期间将该app字段与日志流字段关联。当通过过滤器 查询所需的流时,这通常可以提高压缩率和查询性能 。
# 如果该字段与日志流相关联,则可以将上述查询重写为性能更高的查询:_streamapp
_time:5m log.level:error {app!~"buggy_app|foobar"}
# 统计日志数量
# 统计过去5分钟内 在error 日志条目中有多少条含有 logs_with_error 字段的条目数
_time:5m error | stats count() logs_with_error
过滤器
# 长度范围过滤器
len_range(5, 10) # 5-10个字符长度的日志
len_range(5, inf) # 大于等于5个字符长度的日志
# 默认情况下,len_range()应用于_msg字段,将字段名称 放在 前面,len_range()以便将过滤器应用于所需的字段
foo:len_range(10, 20)
正则的使用
# 匹配 在 fcsource 字段中是 getl-frps的日志条目中,找到含有 ecb的条目
fcsource:getl-frps | ~ "ecb"
fcsource:getl-frps | ~ "ecb" | ~ "closing$"
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论