Loki 是一个由Grafana Labs 开发的开源日志聚合体系,旨在为云原生架构供给高效的日志处理解决方案。

Loki 经过使用相似 Prometheus 的标签索引机制来存储和查询日志数据,这使得它能够快速地进行分布式查询和聚合,而不需求将一切数据都从存储中加载到内存中。Loki还使用了紧缩和切开日志数据的方法来削减存储空间的占用,然后更好地适应云原生环境下的高速增长的日志数据量。

Loki的架构由以下几个首要组件组成:

Promtail: 担任收集使用程序和体系的日志数据,并将其发送到 Loki 的集群中。

Loki: 担任存储日志数据,供给 HTTP API 的日志查询,以及数据过滤和挑选。

Grafana: 担任 UI 展示日志数据。

Loki vs ELK

Loki 和 ELK(Elasticsearch, Logstash, Kibana)都是常用的日志处理体系,它们各自具有一些长处。下面是 Loki 相对于 ELK 的几个长处:

  • 存储效率更高:Loki 使用了紧缩和切开日志数据的方法来削减存储空间的占用,相比之下,ELK 需求维护一个大的索引,需求更多的存储空间。

  • 查询速度更快:Loki 使用相似 Prometheus 的标签索引机制存储和查询日志数据,这使得它能够快速地进行分布式查询和聚合,而不需求将一切数据都从存储中加载到内存中。而ELK需求将数据从存储中加载到内存中进行查询,查询速度相对较慢。

  • 布置和办理更容易:Loki 是一个轻量级的日志聚合体系,相比之下,ELK 需求布置和办理多个组件,需求更多的资源和人力成本。

装置和装备 Loki

条件

参阅 Rainbond 快速装置 文档进行装置。

装置 Loki

Loki 使用已发布到开源使用商铺,可经过开源使用商铺一键装置。

渠道办理 -> 使用市场 -> 开源使用商铺 中查找 Loki 并装置。

10分钟学会使用 Loki 日志聚合系统

装置完成后,该使用内包含 Loki Grafana 组件:

10分钟学会使用 Loki 日志聚合系统

同时还有 k8s资源,其间包括 promtailDaemonset 以及 SA 等资源。

10分钟学会使用 Loki 日志聚合系统

装备 Loki

进入使用内 -> k8s资源,修正 ConfigMap promtail-configurl 部分,URL 经过 Loki 的 组件内 -> 端口 -> 拜访地址 获取,如下:

apiVersion: v1
data:
  promtail.yaml: |
    clients:
    - url: http://gre4f2a2:3100/loki/api/v1/push # Changed
......

进入使用内 -> k8s资源,修正 ClusterRoleBinding promtail-clusterrolebindingnamespace 部分为当时使用的命名空间。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: promtail-clusterrolebinding
......
subjects:
- kind: ServiceAccount
  name: promtail-serviceaccount
  namespace: dev # Changed

假如使用的容器运行时是 Containerd 需求修正 promtail-daemonset 资源,假如容器运行时是 Docker 则不用修正。

......
volumeMounts:
- mountPath: /var/lib/containers # Changed
  name: varlibdockercontainers
  readOnly: true
......
volumes:
- hostPath:
    path: /var/lib/containers # Changed
    type: ""
  name: varlibdockercontainers

修正后更新 Loki Grafana 组件,使用内 -> 更新即可。

使用 Loki

拜访 Grafana,使用内点击拜访按钮即可经过 Rainbond 默许供给的域名拜访 Grafana

进入 Explore 内经过 Labels 挑选 POD 日志,挑选 namespace pod Labels,会主动生成查询表达式,点击 Show logs 即可查看日志。

10分钟学会使用 Loki 日志聚合系统

10分钟学会使用 Loki 日志聚合系统

查询表达式

除了经过 Grafana 界面挑选 Labels 之外,还可以手动写查询表达式,比如:

{container="rbd-api",namespace="rbd-system",pod="rbd-api-5fdd795546-j5679"}

现在支撑以下标签匹配运算符:

  • = 等于
  • != 不等于
  • =~ 正则匹配
  • !~ 正则不匹配

例如:

{namespace=~"dev|rbd-system"}

最后

总归,Loki是一个轻量级、高效的日志聚合体系,它在处理云原生环境下大规模日志数据方面表现出色。Loki 相比于 ELK具有存储效率更高、查询速度更快、布置和办理更容易。结合 Rainbond 一同使用,使咱们的使用和日志办理都非常简单。