使用 Loki 来观察 TiDB 日志

对于一个系统来说,日志具有非常重要的作用,当我们遇到某个问题,可以直接登录到机器上面,看看日志,grep 下关键信息,在辅助其他一些手段,多数就能快速定位问题了。但是,对于分布式系统来说,因为日志散落在很多的机器上面,我们不可能人工的登录到不同的机器查看,而且也没法对多台机器上面的日志进行汇总聚合分析,所以,这里,我们一定需要一个统一的 Log 管理工具,它不光能帮我们自动的收集所有机器上面的 Log,同时也能让我们方便的使用各种条件来查询特定的信息。

在 TiDB 里面,我们使用的是 fluentbit + Elasticsearch,两者结合,很好的帮我们解决了上面的需求。不过这里我要说的,是另一套解决方案 Loki,虽然它现在还不成熟,但因为是 Grafana 团队开发的, 所以没准会成为 K8s 下面的一套标准。

Loki

根据官网的介绍,Loki 是一个可水平扩展的,高可靠的,支持多租户的 Log 聚合系统,有点类似于 Prometheus,不过是针对 Log 的。网上已经有很多针对 Loki 的介绍,这里不重点说明了,我觉得 Loki 有两点吸引我的地方:

  1. 非常类似 Prometheus,如果大家熟悉了 Prometheus,用 Loki 会非常的习惯,毕竟 Label 这些概念都是一致的。而且 Loki 里面还可以支持将 Log entry 提取成一个 metrics。
  2. 跟 Grafana 完美结合,不过这需要 Grafana 6.0 及以上版本的支持。

除了 Loki 自身,我们有时候还需要使用另外两个组件:

  1. Promtail : 用来将不同机器上面的 Log 收集并且发给 Loki
  2. Logcli:Loki 的 cli 客户端,如果没有 Grafana,就可以用这个来操作

其实对于 Promtail,大家也可以使用其他的 Log 收集器,譬如著名的 fluentd,fluentbit 这些,然后写个插件能将 Log 发给 Loki 就成,毕竟 Loki 的 API 足够简单,很容易对接。

我是直接从源码来安装 Loki 的,参考的这里,没什么难度,唯一想吐槽的就是现在都什么年代了,Loki 竟然还是使用的 dep + vendor 的方式来管理项目的依赖(貌似最新的已经换成 go mod 方式了)。

运行

首先,我们启动 Loki,这里,因为我只是在本机验证,所以直接使用的是 Loki 里面自带的配置文件:

./loki --config.file=./cmd/loki/loki-local-config.yaml

默认的配置里面,Loki 是监听 3100 端口。

然后就是启动 Promtail 了,这里要在配置文件里面配置如何让 Promtail 去抓取 TiDB 集群的日志:

scrape_configs:
- job_name: tikv
  pipeline_stages:
  - regex:
      expression: '\[(?P<time>\d{4}\/\d{2}\/\d{2}.\d{2}:\d{2}:\d{2}.\d{3}.\+\d{2}:\d{2})\].\[(?P<level>\w*)\].\[(?P<source>\w.*):(?P<line>\d*)\].(?P<message>.*$)'
  - labels:
      level:
  - timestamp:
      format: 2006/01/02 15:04:05.000 -07:00
      source: time
  static_configs:
  - targets:
      - localhost
    labels:
      job: tikv
      __path__: /var/tikv*.log

上面的例子是 Prometheus 抓取 TiKV 日志的配置,job 的名字就是 “tikv”,因为整个 TiDB 的日志格式跟 Loki 默认能处理的不一样,我们需要自己解析出来,这个就是在 regex 的 expression 定义的正则,用来匹配类似如下的 Log 格式:

[2019/07/21 17:26:36.484 +08:00] [INFO] [peer.rs:142] ["create peer"] [peer_id=31] [region_id=30]

具体格式定义,大家可以参考这里

然后我们在额外定义了一个 label level,也就是 Loki 到时候会按照 Log level 对 log 进行分组聚合。

再就是 timestamp 的处理,因为我们的日志里面包含了时间,所以需要显示的告诉 Promtail 用我们日志里面的时间,不然 Promtail 就会用它自己的当前时间作为日志的时间,这个其实就不对了。

TiDB 其他组件也会按照同样的方式来配置, 当然最后,我们还要启动整个 TiDB 集群,参考这里

Grafana

当整个都启动起来之后,我们就可以打开 Grafana,参考这里,将 Loki 加入到 Grafana 中,然后就可以做查询操作了,譬如下面,我按照 job 来简单的查询,得到如下的输出:

看起来还是挺不错的,不过唯一让我有点不爽的就是 timestamp 有点冗余,Grafana 显示了两次时间,这个主要原因在于 Promtail 在处理的时候,仍然会把原始 message 发给 Loki。我没找到比较好的办法来解决,没准用 template 能搞定。

于是我尝试了另一种方法,自己写了一个 tidb-to-loki,将 TiDB 的日志发给 Loki,毕竟我们只需要使用 Loki 的 Push API 就可以了,而且它还支持 JSON 格式,都不用去折腾 Protobuf 的,然后 Grafana 展示如下:

界面清爽了很多,但现在 tidb-to-loki 还只是一个玩具,不可能用于生产,后面还不如增强 Promtail 或者用 fluentbit 这些来搞定吧。

总结

总的来说,受益于 Grafana,我对于 Loki 的未来还是蛮期待的,写到这里,不由的现编了一个段子:

曾经,有一位程序员新手跑到一位大师面前,问道:『大师,我写的服务器程序出现了问题,请告诉我如何快速找到问题?』

大师:『日志』。

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

推荐阅读更多精彩内容

  • 概述 对于生产环境,须使用 TiDB-Ansible 部署 TiDB 集群。如果只是用于测试 TiDB ...
    张伟科阅读 1,859评论 0 9
  • 一、分布式数据库诞生背景 随着互联网的飞速发展,业务量可能在短短的时间内爆发式地增长,对应的数据量可能快速地从几百...
    nightwish夜愿阅读 3,516评论 0 12
  • 人生最是读书好,掐指十年能几重。 不改粗心难大器,常存败笔怎文龙。 青丝岂以生颓废,白首全然剩陋庸。 莫使薄躯沉峻...
    沈明东阅读 292评论 5 3
  • 二十三岁的维南茨基写道,他立意“要在智能、知识和才华上尽量取得实力,这样我的智慧便会无比的丰富多彩……”他在另一...
    猎人小杰阅读 192评论 0 0