当前位置: 首页 > news >正文

Loki安装部署

Loki安装部署

1、Loki介绍

Loki 是受 Prometheus 启发由 Grafana Labs 团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语

言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,

也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。

Loki 对标 EFK/ELK,由于其轻量的设计,备受欢迎,Loki 相比 EFK/ELK,它不对原始日志进行索引,只对日志的

标签进行索引,而日志通过压缩进行存储,通常是文件系统存储,所以其操作成本更低,数量级效率更高。

由于 Loki 的存储都是基于文件系统的,所以它的日志搜索时基于内容即日志行中的文本,所以它的查询支持

LogQL,在搜索窗口中通过过滤标签的方式进行搜索和查询。

Loki文档网址:https://grafana.com/docs/loki/latest/

下载网址:https://github.com/grafana/loki/releases

Github Loki:https://github.com/grafana/helm-charts/tree/main/charts/loki-stack

2、Loki架构

Loki 架构如下图所示:

在这里插入图片描述

Loki 分两部分,Loki 是日志引擎部分,Promtail 是收集日志端。

  • Loki 是主服务器,负责存储日志和处理查询 。
  • promtail 是代理,负责收集日志并将其发送给 loki 。

promtail 是日志收集 client;loki 是日志收集 service,它是一个时间序列数据库,可以作为 Granfna 的数据源

(类似于prometheus),同时它也有 Alert Rule 规则功能,可以向 Alertmanager 发送告警信息;而 Alertmanager

是一个独立的组件,专注于告警处理。

Loki 的数据可以通过Grafana进行展示。

只要在应用程序服务器上安装 promtail 来收集日志然后发送给 Loki 存储,就可以在 Grafana UI 界面通过添加

Loki 为数据源进行日志查询(如果 Loki 服务器性能不够,可以部署多个 Loki 进行存储及查询)。作为一个日志

系统不光只有查询分析日志的能力,还能对日志进行监控和报警。

Promtail 客户端采集日志数据,将其索引并存储在后端持久化存储中。

用户可以使用 LogQL 查询语言来过滤和检索特定的日志记录,并通过 Grafana 的集成来进行可视化分析。

3、Loki工作流程

在这里插入图片描述

1、promtail 收集并将日志发送给 loki 的 Distributor 组件。

2、Distributor 会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到 Ingester。

3、Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端。

4、Querier 收到 HTTP 查询请求,并将请求发送至 Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合

条件的数据 ;如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过 HTTP 返

回查询结果。

  • Promtail(采集器):Loki 默认客户端,负责采集并上报日志。

  • Distributor(分发器): Distributor 是 Loki 的入口组件,负责接收来自客户端的日志数据,并将其分发给不

    同的 ingester 节点。

  • Ingester(摄取器): Ingester 负责接收并保存来自 Distributor 的日志数据。它将数据写入本地存储,并将

    索引相关的元数据发送给 index 组件。

  • Index(索引): Index 组件负责管理和维护 Loki 中的索引数据结构。

  • Chunks(块文件): Chunks 是 Loki 中日志数据的物理存储形式。

  • Querier(查询器): Querier 是用于查询 Loki 中日志数据的组件。

4、LPG(Loki+Promtail+Grafana)与ELK比较优势

ELK 虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。loki 不

对日志进行全文索引。通过存储压缩非结构化日志和索引元数据,Loki 操作起来会更简单,更省成本。通过使用

与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。安装部署简单快

速,且受 Grafana 原生支持。

架构和组件:

  • Loki:Loki 是一个开源的水平可扩展日志聚合系统,由 Promtail、Loki 和 Grafana 组成。
  • EFK:EFK 是一个集成的解决方案,由 Elasticsearch、Fluentd 和 Kibana 组成。

存储和查询:

  • Loki:Loki 使用了基于日志流的存储方式,将日志数据存储为可压缩的块文件,并达到高度压缩效率。
  • EFK:EFK 使用 Elasticsearch 作为中心化的日志存储和索引引擎。

可扩展性和资源消耗:

  • Loki:Loki 的水平可扩展性非常好,可以处理大规模的日志数据。
  • EFK:Elasticsearch 是一个高度可扩展的分布式存储系统,但它对硬件资源的要求较高,特别是在存储大规模日志数据时。

配置和部署复杂性:

  • Loki:Loki 的配置和部署较为简单。通过使用 Promtail 收集日志,并使用 Grafana 进行查询和可视化,可以

    相对快速地启动和使用。

  • EFK:EFK 的配置和部署相对复杂一些。需要配置 Fluentd 的输入、过滤和输出插件,以及 Elasticsearch 和

    Kibana 的集群设置。

5、Loki安装

这里通过编译好的二进制可执行文件进行安装。

下载地址:https://github.com/grafana/loki/releases/

配置文件参考地址:https://grafana.com/docs/loki/latest/configure/

5.1 下载Loki

# 下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/loki-linux-amd64.zip"
# 解压
# 解压之后只有一个二进制文件loki-linux-amd64
$ unzip "loki-linux-amd64.zip"
# 授权
$ chmod a+x "loki-linux-amd64"
# 查看版本
$ ./loki-linux-amd64 --version
loki, version 2.8.6 (branch: HEAD, revision: 990ac685e)build user:       root@75d791293cbebuild date:       2023-10-17T14:27:04Zgo version:       go1.20.10platform:         linux/amd64

5.2 下载Promtail

# 下载
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.8.6/promtail-linux-amd64.zip"
# 解压
# 解压之后只有一个二进制文件promtail-linux-amd64
$ unzip "promtail-linux-amd64.zip"
# 授权
$ chmod a+x "promtail-linux-amd64"
# 查看版本
$ ./promtail-linux-amd64 --version
promtail, version 2.8.6 (branch: HEAD, revision: 990ac685e)build user:       root@75d791293cbebuild date:       2023-10-17T14:27:04Zgo version:       go1.20.10platform:         linux/amd64

5.3 Loki配置文件

loki 配置文件:loki_config.yaml

auth_enabled: falseserver:# http监听端口,代理服务(promtail)会向此端口发送日志流http_listen_port: 3100# grpc监听端口grpc_listen_port: 3110# grpc最大接收消息值,默认4Mgrpc_server_max_recv_msg_size: 1073741824# grpc最大发送消息值,默认4Mgrpc_server_max_send_msg_size: 1073741824ingester:lifecycler:address: 192.168.151.195ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30smax_transfer_retries: 0# 一个timeseries块在内存中的最大持续时间,如果timeseries运行的时间超过此时间,则当前块将刷新到存储并创建一个新块max_chunk_age: 20mschema_config:configs:# 2020-10-24之后loki信息用下面的配置,这个主要是用来做兼容的- from: 2020-10-24# 索引使用哪种存储,还有boltdb-shipperstore: boltdb# 怎么存储,简单部署的话保存在本地文件系统object_store: filesystem# 版本schema: v11# 索引怎么更新和存储index: # 索引前缀prefix: index_# 索引期限168小时,每张表的时间范围7天period: 168hstorage_config:boltdb:# 索引文件存储地址directory: /data/loki/indexfilesystem:# 块存储地址directory: /data/loki/chunkslimits_config:enforce_metric_name: falsereject_old_samples: truereject_old_samples_max_age: 168h# 修改每用户摄入速率限制,即每秒样本量,默认值为4Mingestion_rate_mb: 30# 修改每用户摄入速率限制,即每秒样本量,默认值为6Mingestion_burst_size_mb: 15# 若不需要清理日志,以下配置均可删除
chunk_store_config:# 最大日志可见时间,回看日志行的最大时间,只适用于即时日志# 最大可查询历史日期28天,这个时间必须是schema_config中的period的倍数,否则报错# max_look_back_period: 168hmax_look_back_period: 0stable_manager:# 日志保留周期开关,默认为falseretention_deletes_enabled: false# 日志保留周期# 表的保留期28天# retention_period: 672hretention_period: 0sruler:# 告警地址,简单部署沿用即可alertmanager_url: http://192.168.151.195:9093analytics:# 关闭向loki团队发送此配置文件reporting_enabled: false# 默认配置
common:# 默认的路径前缀path_prefix: /data/lokistorage:filesystem:# 压缩后的日志,存储在这个目录chunks_directory: /data/loki/chunks# 一些告警规则和查找规则,存储在这个目录,简单部署不用管rules_directory: /data/loki/rules# 简单部署不用管replication_factor: 1# 哈希环配置,简单部署不用管ring:# 一般为部署loki的机器的ipinstance_addr: 192.168.151.195kvstore:# 沿用即可store: inmemorycompactor:# compactor运行状态保存目录working_directory: /data/loki/compactorshared_store: filesystem# 启动日志删除retention_enabled: true# compactor每隔10分钟运行一次compaction_interval:  10m# 在compactor运行2小时后删除retention_delete_delay: 2h# 用150个worker删除chunksretention_delete_worker_count: 150

5.4 Promtail配置文件

promtail 配置文件:promtail_config.yaml

server:# 监听端口http_listen_port: 9080# gRPC服务监听的端口(表示随机)grpc_listen_port: 0# grpc最大接收消息值,默认4Mgrpc_server_max_recv_msg_size: 900000000000# grpc最大发送消息值,默认4Mgrpc_server_max_send_msg_size: 900000000000positions:# romtail保存文件的位置,服务异常关闭,启时可以继续在中断处继续采集,文件保存日志采集进度filename: ./ositions.yamlclients:# oki接收日志的地址- url: http://192.168.151.195:3100/loki/api/v1/pushbatchwait: 10sbatchsize: 40960000# 日志采集配置
scrape_configs:
# 这个随意配置
- job_name: test static_configs:- targets:- localhostlabels:# note,host,server,level自己定义的标签,根据自己需要改动note: gl01host: zsx1server: 192.168.151.195level: info# 从此文件采集的日志会被打上上面的4个标签,支持正则__path__: /opt/logs/info.log- targets:- localhostlabels:note: gl02host: zsx2server: 192.168.151.196level: error__path__: /opt/logs/error.log
# 日志文件
$ cat /opt/logs/info.log
[INFO] Hello
[INFO] World$ cat /opt/logs/error.log
[ERROR] Bad
[ERROR] Now

5.5 启动

# 启动loki
$ nohup ./loki-linux-amd64 --config.file=loki_config.yaml > loki.out 2>&1 &
# 启动promtail
$ nohup ./promtail-linux-amd64 --config.file=promtail_config.yaml > promtail.out 2>&1 &
# 查看进程
$ ps -ef | grep loki
$ ps -ef | grep promtail

6、使用Grafana查询日志

Grafana的安装请参考:

https://blog.csdn.net/qq_30614345/article/details/131261635

6.1 配置Grafana Loki数据源

访问Grafana:

在这里插入图片描述

在这里插入图片描述

配置数据源:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

填写相关信息:

在这里插入图片描述

点击测试连接:

在这里插入图片描述

回到主页:

在这里插入图片描述

6.2 进行查询

点击Explore:

在这里插入图片描述

在这里插入图片描述

选择loki数据源:

在这里插入图片描述

输入查询条件:

{host="zsx1",note="gl01",server="192.168.151.195"}

在这里插入图片描述

# 对Hello进行筛选
{host="zsx1",note="gl01",server="192.168.151.195"} |= "Hello"

在这里插入图片描述

6.3 标签筛选

在这里插入图片描述

红色框中生成的为查询 LogQL,后面我们将对 LogQL 进行介绍。

也可以对时间进行筛选:

在这里插入图片描述

至此,Loki + promtail + Grafana 部署完毕。

相关文章:

Loki安装部署

Loki安装部署 1、Loki介绍 Loki 是受 Prometheus 启发由 Grafana Labs 团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语 言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索&…...

php如何实现文件上传

php实现文件上传需要通过全局变量(数组):$_FILES 结合 move_uploaded_file 函数来实现。 move_uploaded_file函数(只对POST方式生效): 其中move_uploaded_file函数语法:move_uploaded_file(需要…...

实验8配置工具

一、实验目的 1. 掌握UML中建模工具——部署图,用于显示系统中软件和硬件的物理架构。 2. 掌握应用Visio等业界常用的建模工具的基本使用方法和基本绘图操作,选择一种并熟练使用,会使用该工具针对具体问题建立分析模型。 二、实验内容与步骤…...

论文笔记:详解NEUPSL DSI

《Using Domain Knowledge to Guide Dialog Structure Induction via Neural Probabilistic 》 名词解释 Dialog Structure Induction(DSI)是推断给定目标导向对话的潜在对话结构(即一组对话状态及其时间转换)的任务。它是现代对…...

shared_ptr子类指针转换成父类指针

假设有如下应用场景: class Base { public:void addChild(std::shared_ptr<Base>& child){...} }class Derived : public Base {}int main() {Base a;std::shared_ptr<Derived> b std::make_shared<Derived>();a.addChild(b); // Error } 该代码中声…...

五、cookie、session、token、localstroage、sessionStroage区别

一、localStorage 跟 sessionStorage有什么不同&#xff1f;&#xff1f;&#xff1f;&#xff1f; localStorage 1、生命周期&#xff1a;localStorage的生命周期是永久的&#xff0c;关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据&am…...

基于SpringBoot的在线视频教育平台的设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线视频教育平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线视频教育平台&#xff0c;它彻底改变了过…...

Vue 2.0源码分析-渲染函数render

Vue 的 _render 方法是实例的一个私有方法&#xff0c;它用来把实例渲染成一个虚拟 Node。它的定义在 src/core/instance/render.js 文件中&#xff1a; Vue.prototype._render function (): VNode {const vm: Component thisconst { render, _parentVnode } vm.$options//…...

阿里云国际短信业务网络超时排障指南

选取一台或多台线上的应用服务器或选取相同网络环境下的机器&#xff0c;执行以下操作。 获取公网出口IP。 curl ifconfig.me 测试连通性。 &#xff08;推荐&#xff09;执行MTR命令&#xff08;可能需要sudo权限&#xff09;&#xff0c;检测连通性&#xff0c;执行30秒。 m…...

浅用tensorflow天气预测

1&#xff0e;开发环境 &#xff08;1&#xff09;Python3.8 &#xff08;2&#xff09;Anaconda3 &#xff08;3&#xff09;Tensorflow &#xff08;4&#xff09;Numpy &#xff08;5&#xff09;Pandas &#xff08;6&#xff09;Sklearn 先依次安装好上面的软件和包…...

基于SpringBoot学生读书笔记共享

摘 要 本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述读书笔记共享平台的当前背景以及系统开发的…...

设计模式之装饰模式(2)--有意思的想法

目录 背景概述概念角色 基本代码分析❀❀花样重难点聚合关系认贼作父和认孙做父客户端的优化及好处继承到设计模式的演变过程 总结 背景 这是我第二次写装饰模式&#xff0c;这一次是在上一次的基础上进一步探究装饰模式&#xff0c;这一次有了很多新的感受和想法&#xff0c;也…...

深入了解 Pinia:现代 Vue 应用的状态管理利器

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

TTS声音合成:paddlespeech、sherpa-onnx、coqui-ai

1、百度TTS文本合成语音 参考: https://aistudio.baidu.com/aistudio/projectdetail/5237474 https://www.jianshu.com/p/a7522ca6dec4 https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/text_to_speech/README_cn.md 1)过程中需要下载的TTS 声学相关模型…...

Android frameworks 开发总结之十一

1.查看android关机前的log 有时候我们在没有连接电脑的情况下,会在测试的时候突然机器关机. 这个时候如果查看 log信息就看不到了。测试前可以执行下面的命令&#xff0c;之后再进行测试. $ adb shell $ nohup logcat > /sdcard/xxx.log 2.android日期时间同步 关于…...

抑制过拟合——Dropout原理

抑制过拟合——Dropout原理 Dropout的工作原理 实验观察 在机器学习领域&#xff0c;尤其是当我们处理复杂的模型和有限的训练样本时&#xff0c;一个常见的问题是过拟合。简而言之&#xff0c;过拟合发生在模型对训练数据学得太好&#xff0c;以至于它捕捉到了数据中的噪声和…...

开发板启动进入系统以后再挂载 NFS 文件系统, 这里的NFS文件系统是根据正点原子教程制作的ubuntu_rootfs

如果是想开发板启动进入系统以后再挂载 NFS 文件系统&#xff0c;开发板启动进入文件系统&#xff0c;开发板和 ubuntu 能互相 ping 通&#xff0c;在开发板文件系统下新建一个目录 you&#xff0c;然后执行如下指令进行挂载&#xff1a; mkdir mi mount -t nfs -o nolock,nfsv…...

Ubuntu系统执行“docker ps“出现“permission denied“

当我们安装好Ubuntu时&#xff0c;使用鱼香ros一键安装指令 wget http://fishros.com/install -O fishros && . fishros 一键安装Docker后&#xff0c;执行"docker ps"出现"permission denied" seelina:~$ docker ps permission denied while …...

Python与设计模式--桥梁模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

Linux下查看目录大小

查看目录大小 Linux下查看当前目录大小&#xff0c;可用一下命令&#xff1a; du -h --max-depth1它会从下到大的显示文件的大小。...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...