超轻量级日志系统 Loki,真香!!!

JavaGuide

共 5508字,需浏览 12分钟

 ·

2023-01-18 11:52

👉 欢迎准备 Java 面试以及学习 Java 的同学加入我的  知识星球  ,干货很多!收费虽然是白菜价,但星球里的内容或许比你参加上万的培训班质量还要高。

👉  《Java 面试指北》  来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。

Java面试指南网站:javaguide.cn

最近,在对公司容器云的日志方案进行设计的时候,发现主流的 ELK 或者 EFK 比较重,再加上现阶段对于 ES 复杂的搜索功能很多都用不上最终选择了 Grafana 开源的 Loki 日志系统,

Loki 简介

Loki 的第一个稳定版本于 2019 年 11 月 19 日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。Loki 是专门用于聚集日志数据,重点是高可用性和可伸缩性。与竞争对手不同的是,它确实易于安装且资源效率极高。

项目地址:https://github.com/grafana/loki/

770fd2acd7b9414006896c1e755a4ff4.webp

与其他日志聚合系统相比,Loki 具有下面的一些特性:

  • 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高,能对接 alertmanager。
  • 特别适合储存 Kubernetes Pod 日志;诸如 Pod 标签之类的元数据会被自动删除和编入索引。
  • 受 Grafana 原生支持,避免 kibana 和 grafana 来回切换。

我们来简单总结一下 Loki 的优缺点。

优点

  1. Loki 的架构非常简单,使用了和 Prometheus 一样的标签来作为索引,通过这些标签既可以查询日志的内容也可以查询到监控的数据,不但减少了两种查询之间的切换成本,也极大地降低了日志索引的存储。
  2. 与 ELK 相比,消耗的成本更低,具有成本效益。
  3. 在日志的收集以及可视化上可以连用 Grafana,实现在日志上的筛选以及查看上下行的功能。

缺点

  1. 技术比较新颖,相对应的论坛不是非常活跃。
  2. 功能单一,只针对日志的查看,筛选有好的表现,对于数据的处理以及清洗没有 ELK 强大,同时与 ELK 相比,对于后期,ELK 可以连用各种技术进行日志的大数据处理,但是 loki 不行。

Loki 架构

Loki 的架构如下:

1c8596771859db9599e7f0d92187a4c5.webp

不难看出,Loki 的架构非常简单,使用了和 Prometheus 一样的标签来作为索引,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据,不但减少了两种查询之间的切换成本,也极大地降低了日志索引的存储。Loki 将使用与 Prometheus 相同的服务发现和标签重新标记库,编写了 pormtail,在 Kubernetes 中 promtail 以 DaemonSet 方式运行在每个节点中,通过 Kubernetes API 等到日志的正确元数据,并将它们发送到 Loki。下面是日志的存储架构:

8d427199468c6b185d64516fb285df2c.webp

Loki 组成

  1. Loki 是主服务器,负责存储日志和处理查询。
  2. Promtail 是代理,负责收集日志并将其发送给 Loki 。
  3. Grafana 用于 UI 展示。

Loki 实战

本次安装使用 Docker 部署

1.0 安装 docker-compose

      
      curl -L "https://github.com/docker/compose/releases/download/1.28.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2.0 下载 yaml 文件

      
      wget https://raw.githubusercontent.com/grafana/loki/v2.2.0/production/docker-compose.yaml -O docker-compose.yaml
version: "3"

networks:
loki:

services:
loki:
image: grafana/loki:2.0.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki

promtail:
image: grafana/promtail:2.0.0
volumes:
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
networks:
- loki

grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki

3.0 启动服务

      
      docker-compose -f docker-compose.yaml up

4.0 检查服务

74a8a97441ca126830667c4cb0772a26.webp

5.0 配置服务

http://192.168.106.202:3000/

默认 Granfna 密码 admin/admin

5.1 配置数据源

d24e0c5ef6c8b3a8911702d6cec038f8.webp

配置 ip 和默认数据源,配置完成点击测试/保存

1b00592343b06dbe3655f7170ffa5d8a.webp

5.2 配置数据源

explore 查询样例

a312bd7a5482fc3c9e64e04f0d30dc58.webp

5.3 输出匹配日志信息

09edcf8143c2756a66ad7b58d858f388.webp

至此一次样例日志查询完成

6.0 promtail 配置详解

promtail 容器为日志采集容器,配置文件在 promtail 容器/etc/promtail/config.yml,将该容器部署在需要采集日志的服务器上就能正常采集日志传回 loki 服务收集整理

      
      root@2a0cc144dd58:/#  cat  /etc/promtail/config.yml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push     #这里配置的地址为loki服务器日志收集的信息

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs                       #这里为刚才选择job下子标签
      __path__: /var/log/*log            #将采集的日志放在/var/log/*log下自动发现

7.0 增加一台服务器日志采集

7.1 编写 promtail 的配置文件 config.yml

      
      mkdir  /root/promtail  &&cd  /root/promtail

[root@node2 promtail]# cat config.yml
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://192.168.106.202:3100/loki/api/v1/push     #这里配置的地址为loki服务器日志收集的信息

scrape_configs:
- job_name: mysql
  static_configs:
  - targets:
      - localhost
    labels:
      job: mysql                         #这里为刚才选择job下子标签
      __path__: /var/log/*log            #将采集的日志放在/var/log/*log下自动发现

7.2 编写 docker-compose.yaml 配置文件

      
      [root@node2 promtail]# cat  docker-compose.yaml
version: "v1"

services:
  promtail:
    image: grafana/promtail:2.0.0               #拉去镜像
    container_name: promtail-node              #镜像名称
    volumes:
      - /root/promtail/config.yml:/etc/promtail/config.yml    #挂载目录
      - /var/log:/var/log
    network_mode: 'host'

7.3 启动

      
      docker-compose up -d

8.0 去 loki 上查看检索

58aeeece6b2dd44a5888d97ccba339e0.webp4fce785825f7fc17305f1a2e10cffdc3.webpeb63d85a95e3d3eba9874ba52c993756.webp

可以根据数据查询到相应日志信息。

·········  END  ··············

👉 欢迎准备 Java 面试以及学习 Java 的同学加入我的 知识星球 ,干货很多!收费虽然是白菜价,但星球里的内容或许比你参加上万的培训班质量还要高。

👉  《Java 面试指北》 来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。

近期文章精选 :

👉如果本文对你有帮助的话,欢迎 点赞&在看&分享 ,这对我继续分享&创作优质文章非常重要。非常感谢!

浏览 145
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报