如何用LogQL在几秒内快速查询TB级的日志

Jietu20210108-100726.jpg

LogQL在很大程度上受Prometheus的PromQL启发。但是,当涉及到在过滤海量日志时,我们就像面临在大海捞针一样复杂。LogQL是Loki特有的语句,在本文中,我们将提供LogQL的快速过滤器查询技巧,这些查询可以在几秒钟内过滤掉数TB的数据。

在Loki中,我们可以使用三种类型的过滤器:


image.png

Label matchers

Label matchers(标签匹配器)是你的第一道防线,是大幅减少你搜索的日志数量(例如,从100TB到1TB)的最好方法。当然,这意味着你需要在的日志采集端上有良好的标签定义规范?;旧?,标签应该定义的类型包括,工作负载、集群、命名空间和容器等,这样你就可以在多个不同的维度上对数据进行切分。比如说

  • 一个应用在多个集群上运行
  • 落在多个k8s集群命名空间的开发环境
  • 生产环境的命名空间

一个有效的经验法则是:你至少需要一个=匹配器(例如,{cluster="us-central1"})。否则,你将不得不提取整个索引数据。

但有一个例外。如果匹配器包含一个或多个字元,比如{container=~"promtail|agent"},同时只有一个单一的regex匹配器,Loki可以自行优化查询

下面就是一些实用的样例:

好例子:

{cluster="us-central1"}

{container="istio"}

{cluster="us-central1", container=~"agent|promtail"}

坏例子:

{job=~".*/queue"}

{namespace!~"dev-.*"}

Line filters

Line filters(行过滤器)是您的第二个好朋友,因为它们执行过程超级快。它允许你过滤包含(|=)或不包含(!=)字符串的日志,你也可以使用正则来匹配(|~)或不匹配(!~)日志,但你应该把它们放在标签匹配器之后

现在,当我们将这些过滤器连起来使用时,要注意过滤器的顺序。先用那些能过滤最多日志的过滤器,然后再使用正则,它比=!=慢。

但有一个例外。|~ "error|fatal "可以被Loki优化掉 实际上这两个字符串被loki自动过滤掉了,所以不会执行正则匹配

一个好的方法是先添加一个符合你要找的东西的过滤器,例如,|= "err"。然后再添加越来越多的不等式来过滤你不想要的东西,直到最终得到类似于下面这样的结果

|= "err" != "timeout" != "cancelled" |~ "failed.*" != "memcached"

现在,如果你意识到你的大部分错误来自memcached,那么就把它移到第一个位置

!= "memcached" |= "err" != "timeout" != "cancelled" |~ "failed.*"

这样一来,后续过滤器的执行次数就会减少。

除此之外,行过滤器也很适合查找IP、TraceID、UUID等类型的日志。比如下面这个也一个很好的查询方式

{namespace="prod"} |= "traceID=2e2er8923100"

如果你想让这个traceID的所有日志都符合某个regex,可以在ID过滤器后面加上|~ "/api/v.+/query",这样就不会对prod命名空间的每个pod中去添加查询。

Label filters

Label filters(标签过滤器)提供了更复杂的计算功能(duration,numerical等),但是它们通常需要先提取标签,然后再将标签值转换为另一种类型。这意味着它们通常是最慢的,因此我们应该最后使用它们

实际上我们可以在不提取标签的情况下使用标签过滤器(使用|json|logfmt等解析器)。标签过滤器也可以在索引标签上工作。例如,{job="ingress/nginx"}。| status_code >= 400 and cluster="us-central2"可以正常工作,但你真正应该问自己的是,你是否需要将 status_code 作为索引标签。一般来说,你不应该,但你可以考虑提取 status_code 作为标签,这可以将大批量的流(每秒超过一千行)分解成独立的流。

尽管| json| logfmt解析器很快,但是解析| regex却很慢。这就是为什么在使用解析器时,我总是在它前面加上一个行过滤器。例如,在我的Go应用程序(包括Loki)中,我的所有日??志均支持显示文件名和行号(此处为caller=metrics.go:83)

level=info ts=2020-12-07T21:03:22.885781801Z caller=metrics.go:83 org_id=29 traceID=4078dafcbc079822 latency=slow query="{cluster=\"ops-tools1\",job=\"loki-ops/querier\"} != \"logging.go\" != \"metrics.go\" |= \"recover\"" query_type=filter range_type=range length=168h0m1s step=5m0s duration=54.82511258s status=200 throughput=8.3GB total_bytes=454GB

因此,当我们想过滤缓慢的请求时,应该先对记录文件和行号进行过滤,然后再进行解析,最后再将提取的标签进行比较。

{namespace="loki-ops",container="query-frontend"} 
|= "caller=metrics.go:83" 
| logfmt 
| throughput > 1GB and duration > 10s and org_id=29

结论

这三个过滤器(Label matchers,Line filters和Label filters)就像一个管道,将逐步处理日志。我们应该尝试在每个步骤上尽可能减少操作,因为对于每个行,每个后续步骤执行的速度都可能更慢。


关注公众号「云原生小白」,获取更多精彩内容

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容