真香,Grafana开源Loki日志系统取代ELK?
一、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优势
- 轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据。Loki具有较低的硬件要求,可以在较小的硬件上运行,例如使用少量内存和CPU。
- 高度可扩展性:Loki可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。
- 简化的存储架构:Loki将日志数据存储在一个单一的列式存储引擎中,这使得它更容易维护和管理。
- 支持日志标签:Loki可以使用标签来过滤和查询日志数据,这使得它更加灵活。
- 直接支持Prometheus:Loki与Prometheus深度集成,这使得在Prometheus查询中使用Loki日志数据更加容易。
- 可伸缩性:Loki具有更好的可伸缩性,可以轻松地添加和删除节点以适应数据量的变化,而ELK需要更多的配置和管理工作来保持可伸缩性。
3.1.2、Loki的劣势
- 较少的可视化选项:Loki的可视化选项相对较少,因为它是一个相对较新的日志管理和分析工具。
- 学习曲线较陡峭:Loki使用的是自己的查询语言LokiQL,这需要一定的学习曲线。
- 需要额外的组件:虽然Loki本身是一个相对较小的组件,但它需要配合Promtail等其他组件来实现完整的日志管理和分析解决方案。
3.2、ELK的优劣势
3.2.1、ELK优势
- 成熟的生态系统:ELK已经有了一个成熟的生态系统,并且已经被广泛地使用和测试。
- 多样化的可视化选项:ELK提供了各种各样的可视化选项,包括基于时间序列的图表、热力图、地图等等。
- 丰富的插件库:ELK有丰富的插件库,可以方便地扩展其功能。
- 易于学习:ELK使用的是标准的查询语言,如Lucene查询语法和Elasticsearch查询DSL,这使得它相对容易学习。
3.2.2、ELK的劣势
- 相对重量级:ELK需要一个单独的Elasticsearch集群来存储和索引日志数据,这使得它相对较重。
- 复杂的存储架构:ELK使用的是分布式存储引擎,这使得它的存储架构相对复杂。
- 相对复杂的部相对复杂的部署和管理:ELK需要安装和配置多个组件,例如Elasticsearch、Logstash和Kibana,这使得它的部署和管理相对复杂。
- 较高的硬件要求:由于ELK需要处理大量的日志数据,因此需要大量的存储和处理能力,这可能需要更高的硬件要求和更大的部署成本。
总体而言,Loki和ELK都是优秀的日志解决方案,适合不同的使用场景。Loki相对轻量级,具有较高的可扩展性和简化的存储架构,但需要额外的组件和有一定的学习曲线。ELK则具有丰富的可视化选项和插件库,易于学习,但相对重量级,需要复杂的存储架构和较高的硬件要求,部署和管理也比较复杂。
具体如何选择取决于具体场景,若是数据量适中,数据属于时序类,如应用程序日志和基础设施指标,并且应用使用kubernetes Pod形式部署,则选择Loki比较合适;而ELK则适合更大的数据集和更复杂的数据处理需求,以及更多其他组件的日志收集场景。
四、Loki安装部署
要从0到1部署Loki,需要完成以下步骤:
- 安装Docker和Docker Compose。
- 创建一个Loki的Docker Compose文件。
- 配置Loki,包括日志收集和存储。
- 启动Loki服务,测试
4.1、Docker和Docker Compose安装
4.1.1、安装 Docker:
-
更新系统软件包:
sudo yum update
-
安装所需的软件包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
-
添加 Docker 的 yum 软件源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
安装 Docker:
sudo yum install docker-ce docker-ce-cli containerd.io
-
启动 Docker 服务:
sudo systemctl start docker
-
验证 Docker 是否安装成功:
sudo docker run hello-world
如果看到 “Hello from Docker!” 的输出,则说明 Docker 安装成功。
4.1.2、安装 Docker Compose:
-
安装依赖软件包:
sqlCopy codesudo yum install -y epel-release sudo yum install -y python-pip sudo pip install --upgrade pip
-
安装 Docker Compose:
Copy code sudo pip install docker-compose
-
验证 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:latestports:- "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: 3100grpc_listen_port: 9095schema_config:configs:- from: 2018-04-15store: boltdbobject_store: filesystemschema: v11index:prefix: index_period: 24hstorage_config:boltdb:directory: /data/loki/indexfilesystem:directory: /data/loki/chunksingester:lifecycler:address: 127.0.0.1ring:kvstore:store: inmemoryreplication_factor: 1heartbeat_timeout: 1mfinal_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30sschema_config:configs:- from: 2019-05-24store: boltdbobject_store: filesystemschema: v11index: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还提供了许多其他有用的功能,如警报、日志流水线和故障排除等。这些功能可以帮助用户更方便地管理和分析日志数据。
相关文章:

真香,Grafana开源Loki日志系统取代ELK?
一、Loki是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Graf…...

机器学习|多变量线性回归 | 吴恩达学习笔记
前文回顾:机器学习 | 线性回归(单变量) 目录 📚多维特征 📚多变量梯度下降 📚梯度下降法实践 🐇特征缩放 🐇学习率 📚特征和多项式回归 📚正规方程 &…...
高并发内存池
按照threadcache,centralcache,pagecache顺序所列 这里还需要一定的前期准备工作 首先是可以设计一个定长内存池 ObjectPool.h #pragma once #include<iostream> #include"Common.h" using std::cout; using std::endl; using std::…...
springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题
问题: 在对接 sqlserver数据库的时候 主子表 保存的时候 子表批量保存 使用的 mybatis-plus提供的saveOrUpdateBatch 这个方法 但是 报错 报错内容为 : com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。 框架版本 sprin…...

Acwing---843. n-皇后问题——DFS
n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 …...

Android事件分发机制
文章目录Android View事件分发机制:事件分发中的核心方法onTouchListener和onClickListener的优先级事件分发DOWN,MOVE,UP 事件分发CANCEL代码实践requestdisallowIntereptTouchEvent作用Android View事件分发机制: 事件分发中的核心方法 Android中事件…...

python版协同过滤算法图书管理系统
基于协同过滤算法的图书管理系统 一、简介(v信:1257309054) 本系统基于推荐算法给用户实现精准推荐图书。 根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然…...

Redis基础入门
文章目录前言一、redis是什么?二、安装步骤1.下载安装包2.安装三、Redis的数据类型redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点:字符串(String)列表(List)集合(Set,不允许出现重复…...
【微服务】Feign实现远程调用和负载均衡
目录 1.什么是Feign 2 订单微服务集成Feign 2.1.引入依赖 2.2添加注解 2.3编写Feign的客户端 2.4修改OrderServiceImpl.java的远程调用方法 2.5重启订单服务,并验证 总结 1.什么是Feign Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它…...

Windows使用QEMU搭建arm64 ubuntu 环境
1. 下载 QEMU: https://qemu.weilnetz.de/w64/ QEMU UEFI固件文件: https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd arm64 Ubuntu镜像: http://cdimage.ubuntu.com/releases/20.04.3/rel…...

NodeJS安装
一、简介Node.js是一个让JavaScript运行在服务端的开发平台,Node.js不是一种独立的语言,简单的说 Node.js 就是运行在服务端的 JavaScript。npm其实是Node.js的包管理工具(package manager),类似与 maven。二、安装步骤…...
Gin 优雅打印请求与回包内容
文章目录1.Gin 的 Middleware2.使用 Middleware 打印请求与回包内容3.多次读取请求 Body 的问题4.多次读取响应 Body 的问题5.小结参考文献在开发 Web 应用程序时,难免不会遇到功能或性能等问题。为了快速定位问题,需要打印请求和响应的内容。本文将介绍…...
关于k8s中ETCD集群备份灾难恢复的一些笔记
写在前面 集群电源不稳定,或者节点动不动就 宕机,一定要做好备份,ETCD 的快照文件很容易受影响损坏。重置了很多次集群,才认识到备份的重要博文内容涉及 etcd 运维基础知识了解静态 Pod 方式 etcd 集群灾备与恢复 Demo定时备份的任务编写二进…...
【设计模式之美 设计原则与思想:设计原则】19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
关于 SOLID 原则,我们已经学过单一职责、开闭、里式替换、接口隔离这四个原则。今天,我们再来学习最后一个原则:依赖反转原则。在前面几节课中,我们讲到,单一职责原则和开闭原则的原理比较简单,但是&#x…...
2023年全国最新高校辅导员精选真题及答案13
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、单选题 131.下列不属于我国国土空间具有的特点的是() A.水资…...

【XXL-JOB】XXL-JOB定时处理视频转码
【XXL-JOB】XXL-JOB定时处理视频转码 文章目录【XXL-JOB】XXL-JOB定时处理视频转码1. 准备工作1.1 高级配置1.2 分片广播2. 需求分析2.1 作业分片方案2.2 保证任务不重复执行2.2.1 保证幂等性3. 视频处理业务流程3.1 添加待处理任务3.2 查询待处理任务3.3 更新任务状态3.4 工具…...
optuna用于pytorch的轻量级调参场景和grid search的自定义设计
文章目录0. 背景:why optuna0.1 插播一个简单的grid search0.2 参考1. Optuna1.1 a basic demo与部分参数释义1.2 random的问题1.3 Objective方法类2. Optuna与grid search4. optuna的剪枝prune5. optuna与可视化6. 未完待续0. 背景:why optuna 小模型参…...

语法篇--汇编语言先导浅尝
一、相关概念 1.机器语言 机器语言(Machine Language)是一种计算机程序语言,由二进制代码(0和1)组成,可被计算机直接执行。机器语言是计算机硬件能够理解和执行的唯一语言。 机器语言通常由一系列的指令组…...

【ID:17】【20分】A. DS顺序表--类实现
时间限制1秒内存限制128兆字节题目描述用C语言和类实现顺序表属性包括:数组、实际长度、最大长度(设定为1000)操作包括:创建、插入、删除、查找类定义参考输入第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据…...

【java web篇】Tomcat的基本使用
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...