真香,Grafana开源Loki日志系统取代ELK?

news2025/7/4 18:40:34

一、Loki是什么?

Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。该项目受 Prometheus 启发,官方的介绍是: Like Prometheus,But For Logs.

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

  • 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki的存储更加轻量,操作更加简单,更加节省成本。
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
  • 天然适合存储Kubernetes Pod 日志,Pod 标签之类的元数据会被自动处理,特点适合云云原生场景的应用日志处理。
  • Grafana Labs出品,Grafana原生对Loki的支持就非常好。

二、Loki架构和功能

Loki 的架构非常简单,主要由以下 3 个部分组成:

  • Loki:负责存储日志和处理查询。
  • Promtail:日志收集的代理,负责在各端收集日志并将其发送给 Loki 。
  • Grafana:用于日志搜索的UI 展示。
    在这里插入图片描述

Loki 使用与 Prometheus 相同的服务发现和标签重新标记库,编写了 Pormtail,在 Kubernetes 中 Promtail 以 DaemonSet 方式运行在每个节点中,通过 Kubernetes API 得到日志的正确元数据,并将它们发送到 Loki。

也正是因为这个原因,通过这些标签,既可以查询日志的内容,也可以查询到监控的内容,这两种查询被很好的兼容,节省了分别存储相关日志和监控数据的成本,也减少了查询的切换成本。

整体来说可以把Loki的功能总结如下:

  • 日志收集:Loki可以接收来自不同应用程序、主机和容器的日志数据。
  • 日志存储:Loki使用可扩展的分布式存储后端存储日志数据,包括本地存储和云存储。
  • 日志查询:Loki提供了一个高效的查询语言,可以快速地搜索和过滤日志数据。
  • 日志索引:Loki使用标签索引和压缩算法对日志数据进行索引,可以大大减少存储空间和查询时间。
  • 日志警报:Loki可以根据日志数据中的条件触发警报,并将警报发送到警报通道。

可以看到,作为一个日志处理系统,从收集、存储、查询、告警支持都是比较全面的,配合Grafana也能够比较好实现可视化,相关组件也比较简单。

三、Loki与ELK的优劣势对比?

ELK是大规模日志解决方案中的佼佼者,所以说到Loki,免不了要拿来跟ELK做个对比。两者都是日志解决方案,有相似之处,也有诸多不同。

  • 架构

ELK(Elasticsearch、Logstash、Kibana)架构中Logstash用于日志收集和处理,Elasticsearch用于存储和索引,Kibana用于可视化和查询。而Loki则采用了分布式架构,将日志数据存储在多个节点上,Promtail进行日志收集,可视化依赖于Grafana。

  • 存储

ELK使用Elasticsearch作为存储和索引引擎,Elasticsearch需要使用大量的硬盘空间和内存。而Loki使用了紧凑的索引和压缩算法,可以大大减少存储空间。

  • 查询

ELK使用Lucene作为查询引擎,可以快速地搜索和过滤大规模的日志数据。但是在数据量过大和查询复杂度高一些的情况下,查询速度会变慢。Loki使用自己的查询语言,查询的场景一般也比较简单,可以快速地搜索和过滤日志数据。

  • 部署

ELK的部署比较复杂,需要安装和配置多个组件。而Loki则采用了单一二进制文件的方式,部署比较简单。

3.1、Loki的优劣势

3.1.1、Loki优势
  1. 轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据。Loki具有较低的硬件要求,可以在较小的硬件上运行,例如使用少量内存和CPU。
  2. 高度可扩展性:Loki可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。
  3. 简化的存储架构:Loki将日志数据存储在一个单一的列式存储引擎中,这使得它更容易维护和管理。
  4. 支持日志标签:Loki可以使用标签来过滤和查询日志数据,这使得它更加灵活。
  5. 直接支持Prometheus:Loki与Prometheus深度集成,这使得在Prometheus查询中使用Loki日志数据更加容易。
  6. 可伸缩性:Loki具有更好的可伸缩性,可以轻松地添加和删除节点以适应数据量的变化,而ELK需要更多的配置和管理工作来保持可伸缩性。
3.1.2、Loki的劣势
  1. 较少的可视化选项:Loki的可视化选项相对较少,因为它是一个相对较新的日志管理和分析工具。
  2. 学习曲线较陡峭:Loki使用的是自己的查询语言LokiQL,这需要一定的学习曲线。
  3. 需要额外的组件:虽然Loki本身是一个相对较小的组件,但它需要配合Promtail等其他组件来实现完整的日志管理和分析解决方案。

3.2、ELK的优劣势

3.2.1、ELK优势
  1. 成熟的生态系统:ELK已经有了一个成熟的生态系统,并且已经被广泛地使用和测试。
  2. 多样化的可视化选项:ELK提供了各种各样的可视化选项,包括基于时间序列的图表、热力图、地图等等。
  3. 丰富的插件库:ELK有丰富的插件库,可以方便地扩展其功能。
  4. 易于学习:ELK使用的是标准的查询语言,如Lucene查询语法和Elasticsearch查询DSL,这使得它相对容易学习。
3.2.2、ELK的劣势
  1. 相对重量级:ELK需要一个单独的Elasticsearch集群来存储和索引日志数据,这使得它相对较重。
  2. 复杂的存储架构:ELK使用的是分布式存储引擎,这使得它的存储架构相对复杂。
  3. 相对复杂的部相对复杂的部署和管理:ELK需要安装和配置多个组件,例如Elasticsearch、Logstash和Kibana,这使得它的部署和管理相对复杂。
  4. 较高的硬件要求:由于ELK需要处理大量的日志数据,因此需要大量的存储和处理能力,这可能需要更高的硬件要求和更大的部署成本。

总体而言,Loki和ELK都是优秀的日志解决方案,适合不同的使用场景。Loki相对轻量级,具有较高的可扩展性和简化的存储架构,但需要额外的组件和有一定的学习曲线。ELK则具有丰富的可视化选项和插件库,易于学习,但相对重量级,需要复杂的存储架构和较高的硬件要求,部署和管理也比较复杂。

具体如何选择取决于具体场景,若是数据量适中,数据属于时序类,如应用程序日志和基础设施指标,并且应用使用kubernetes Pod形式部署,则选择Loki比较合适;而ELK则适合更大的数据集和更复杂的数据处理需求,以及更多其他组件的日志收集场景。

四、Loki安装部署

要从0到1部署Loki,需要完成以下步骤:

  1. 安装Docker和Docker Compose。
  2. 创建一个Loki的Docker Compose文件。
  3. 配置Loki,包括日志收集和存储。
  4. 启动Loki服务,测试

4.1、Docker和Docker Compose安装

4.1.1、安装 Docker:
  1. 更新系统软件包:

    sudo yum update
    
  2. 安装所需的软件包:

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 添加 Docker 的 yum 软件源:

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  4. 安装 Docker:

    sudo yum install docker-ce docker-ce-cli containerd.io
    
  5. 启动 Docker 服务:

    sudo systemctl start docker
    
  6. 验证 Docker 是否安装成功:

    sudo docker run hello-world
    

    如果看到 “Hello from Docker!” 的输出,则说明 Docker 安装成功。

4.1.2、安装 Docker Compose:
  1. 安装依赖软件包:

    sqlCopy codesudo yum install -y epel-release
    sudo yum install -y python-pip
    sudo pip install --upgrade pip
    
  2. 安装 Docker Compose:

    Copy code
    sudo pip install docker-compose
    
  3. 验证 Docker Compose 是否安装成功:

    cssCopy code
    docker-compose --version
    

    如果看到 Docker Compose 的版本信息,则说明安装成功。

注意:在安装 Docker 和 Docker Compose 之前,建议先确保系统已经安装了最新版本的软件包和依赖。如果之前已经安装了旧版本的 Docker 或 Docker Compose,需要先将其卸载。

4.2、创建一个Loki的Docker Compose文件。

可以通过以下命令创建一个Loki的Docker Compose文件:

$ mkdir loki
$ cd loki
$ touch docker-compose.yml

编辑docker-compose.yml文件,添加以下内容:

version: '3.7'

services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    volumes:
      - ./config:/etc/loki
      - ./data:/data/loki

这个Docker Compose文件定义了一个Loki服务,使用最新的grafana/loki镜像,将3100端口映射到主机,同时将配置和数据目录挂载到主机上。

4.3、配置Loki,包括日志收集和存储。

在配置目录下创建一个local-config.yaml文件,用于配置Loki的日志收集和存储。这个文件可以定义多个日志收集器,每个收集器都有一个唯一的名称。

以下是一个简单的local-config.yaml文件示例:

auth_enabled: false
server:
  http_listen_port: 3100
  grpc_listen_port: 9095

schema_config:
  configs:
    - from: 2018-04-15
      store: boltdb
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb:
    directory: /data/loki/index
  filesystem:
    directory: /data/loki/chunks

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
      heartbeat_timeout: 1m
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s

schema_config:
  configs:
    - from: 2019-05-24
      store: boltdb
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

该配置文件包括了以下几个配置项:

  • auth_enabled:是否开启认证。
  • server:HTTP和gRPC服务监听地址。
  • schema_config:配置日志索引和存储。
  • storage_config:配置日志存储后端。
  • ingester:配置日志收集。

4.4、启动Loki服务,测试

运行以下命令启动Loki服务:

$ docker-compose up -d

等待几秒钟后,可以通过以下命令查看服务是否正常启动:

$ docker ps

如果Loki服务正在运行,应该能够看到一个名为“loki_loki_1”的Docker容器。

此时,可以使用Loki的API或者Promtail将日志数据发送到Loki,然后通过Loki的查询语言查询日志数据。

在浏览器中访问http://localhost:3100/,进入Loki的Web UI。

Loki的Web UI提供了一个交互式的查询界面,可以输入查询语言和过滤条件,查询日志数据。

例如,可以输入以下查询语句:

{job="example-job"}

这将返回所有标签job值为“example-job”的日志条目。

还可以使用聚合函数和表达式来对日志数据进行处理和分析。例如,以下查询语句将计算每个标签instance的平均值,并返回结果:

avg_over_time({job="example-job"}[5m]) by (instance)

此外,Loki还提供了许多其他有用的功能,如警报、日志流水线和故障排除等。这些功能可以帮助用户更方便地管理和分析日志数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】一个更底层库-React基础知识点

目录Reat是什么?为什么要使用React类库比较容易学习,API非常少。组件内聚,容易组合原生组件和自定义组件融合渲染状态/属性驱动全局更新commonjs生态圈/工具栏完善React基础知识JSX概述JSX嵌入变量Event事件组合组合CHILDREN总结大家好&#…

02-问题思考维度:抓住核心用户、场景化分析、需求收集与辨别、用户故事

文章目录2.1 抓住核心用户2.1.1 为什么要抓住核心用户2.1.2 核心用户的特征根据不同维度,描述核心用户2.1.3 如何抓住核心用户2.2 场景化分析2.2.1 场景五要素2.2.2 场景化分析方法2.2.3 场景化分析方法的应用2.3 需求收集与辨别2.3.1 需求的定义及层次2.3.2 需求收…

汇编相关问题

汇编语言期末复习题DX:单项选择题 DU:多项选择题 TK:填空题 MC:名词解释 v JD:简答题 CXFX:程序分析题 CXTK:程序填空题 BC:编程题第1章:基础知识1、在汇编语言程序的开发…

Vue2.0开发之——购物车案例-axios请求列表数据(45)

一 概述 项目导入axios HTTP 库axios请求数据列表将请求到的数据转存到data中 二 项目导入axios HTTP 库 2.1 axios介绍 Axios是一个基于promise 的 HTTP 库,可以用在浏览器和 node.js中 2.2 axios项目地址 https://www.npmjs.com/package/axios 2.3 axios安装…

excel的Countif函数使用详细教程

excel的Countif函数使用详细教程本教程通过七个示例讲解Countif函数使用教程,其中条件如何设置模糊值,统计固定长度的文本,统计大于某个值,统计等于某个值的,统计日期等。Countif函数作用:对指定单元格区域…

pycharm关联github、新建以及更新仓

此处已经默认你安装了git以及pycharm,这篇文章将会教给大家如何利用pycharm管理自己的github. 目录 pycharm关联github设置 Github创建新的仓 仓库的更新 pycharm:2022。不同版本界面略有不同。 pycharm关联github设置 设置PyCharm,打开File --> Settings -…

SAP 如何批量扩充(复制)科目到其他子公司(T-CODE: FS15)?

SAP 科目主数据管理常用的事务代码: 科目的创建分科目表层(FSP0); 公司代码层(FSS0); 集中创建(FS00)。 现假设我们成立一家新的子公司,需要把母公司的科目批…

博客系统程序(页面设计)

咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…

1、JAVA 开发环境搭建 - JDK 的安装配置

文章目录一、下载 JDK81、官网地址:[**https://www.oracle.com**](https://www.oracle.com)二、安装 JDK1、鼠标右键安装包,以管理员身份运行(无脑下一步即可)2、细节说明三、配置环境变量1、为啥要配置环境变量呢?2、原因分析3、配置环境变量…

SpringMVC的完整执行流程

Java知识点总结:想看的可以从这里进入 目录2.5、SpringMVC流程2.5、SpringMVC流程 Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图等组成,它和其他的MVC框架一样,以请求为驱动,围绕Servlet分派…

顺序表(一篇带你掌握顺序表)

目录 一、顺序表是什么 1.1 概念 1.2 分类 1.3 结构 二、顺序表的基本操作 2.1 前绪准备 2.2 初始化 2.3 扩容 2.5 尾插 2.6 打印 2.7 尾删 2.8 头插 2.9 头删 2.10 在pos位置插入 2.11 删除pos位置的数据 2.12 查找 三、完整代码 3.1 Test.c文件 3.2 SeqList.h…

C++之const_cast的用法

C的四种类型转换之const_cast 这里写目录标题前言const_cast1.new type为左值引用2. new type为函数类型的右值引用3.new type为对象类型的右值引用4.指向函数的指针和指向成员函数的指针不受约束5.通过非const访问路径修改const对象导致未定义行为6.const_cast只能用来修改指针…

Android onLayout布局流程解析

组件布局流程结论 1.)layout流程始于ViewRootImpl的performLayout()方法,该方法会调用根View(DecorView)的layout()方法进行布局,因为DecorView是ViewGroup(FrameLayout),所以layout流程来到了ViewGroup(其…

【C语言指针练习题】你真的学会指针了吗?

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨一维数组练习题:字符数组练习题:字符指针练习题:二维数组练习题&am…

LeetCode-63. 不同路径 II

题目来源 63. 不同路径 II 递归 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row obstacleGrid.length-1;int col obstacleGrid[0].length-1;return process(row,col,0,0,obstacleGrid);}private int process(int row ,int col,int i…

重装系统一半电脑蓝屏如何解决

小编相信大家在使用电脑或者给电脑重装系统的时候都遇到过电脑蓝屏等等故障问题。最近有用户就遇到了这样一个问题,问小编重装系统一半电脑蓝屏怎么办,那么今天小编就告诉大家重装系统一半电脑蓝屏的解决方法。 工具/原料: 系统版本&#x…

Tecent libco C++协程库初探

安装 https://github.com/Tencent/libco 上把release版本的下下来: mkdir build && cd build && cmake .. && make拿到动态和静态库啦,然后cp到/usr/local/lib就完成安装啦。 项目有很多example,直接进根目录make就…

phpinfo包含临时文件Getshell全过程及源码

目录 前言 原理 漏洞复现 靶场环境 源码 复现过程 前言 PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服…

B. Sherlock and his girlfriend

Sherlock has a new girlfriend (so unlike him!). Valentines day is coming and he wants to gift her some jewelry. He bought n pieces of jewelry. The i-th piece has price equal to i  1, that is, the prices of the jewelry are 2, 3, 4, ... n  1. Watson…

跳表--C++实现

目录 作者有话说 为何要学习跳表?为了快,为了更快,为了折磨自己..... 跳表作用场景 1.不少公司自己会设计哈希表,如果解决哈希冲突是不可避免的事情。通常情况下会使用链址,很好理解,当有冲突产生时&#…