作为云原生的轻量级日志系统,Loki 是 Grafana 团队参考 Prometheus 的标签思想来做的,只对标签进行索引。这也是日志查询中最重要的一点。

语法组成

基本的查询由 2 部分组成:日志标签 + 过滤

日志标签的查询

日志标签:是一组键值对,在 Promtail 配置文件中进行自定义,如 app: nginx,或者 1: 2,只要方便你快速查询日志即可。如下是一个简单的 LogQL

{app="nginx",1="2"}

在上面的例子中表示,查询标签 app 的值为 nginx 的日志,并且在第一个的结果中再查找,第二个对应的键值对。

除了例子中的 = 符号,还支持以下运算符号

  • =:完全相等
  • !=:不相等
  • =~:正则表达式匹配
  • !~:正则表达式不匹配

如:匹配标签键为 app,且值为 nginx 的日志

{app = "nginx"}

也可以同时匹配2个,如:匹配标签键为 app,值为 nginx,且 name 不等于 web1 的日志

{app = "nginx",name != "web1"}

如:匹配标签键为 app,值为 nginx,且 name 等于 web1 或者 web2,正则的使用可参考:菜鸟教程-正则表达式

{app = "nginx",name =~ "web[12]"}

如:匹配标签键为app,且值不是以 my 开头的

{app !~ "^mysql.*"}

日志管道

在日志管道中支持6种表达式,这里只说明行过滤表达式,别问为什么,因为复杂不想学,需要用到其他的我再来补充更新,就这样。想要了解其他表达式请参考官方文档:LogQL-log-pipeline

行过滤表达式

在查询到的日志中进行过滤,也可以理解为 Linux 命令的 grep。

同样过滤也有4个运算符号

  • |=:显示过滤字符串
  • !=:不显示过滤字符串
  • |~:日志行匹配正则表达式
  • !~:日志行与正则表达式不匹配

如:查询日志中含有 error 的行

{app="nginx"} |= "error"

如:查询日志中不含有 warn 的行

{app="nginx"} != "warn"

如:查询日志中含有 192.168 ip 的行,\d表示单个数字,等于[0-9]\d+表示多个数字,等于[0-9]+

{app="nginx"} |~ "192.168.\d+.[0-9]+"

如:查询日志中不含有以 192.168 ip结尾的行,且以 web 开头的行

{app="nginx"} !~ "192.168.\d+.\d+$" !~ "^web.*"

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0