轻量级日志管理平台:Grafana Loki搭建及应用(详细篇)

前言

Grafana Loki是Grafana Lab团队提供的一个水平可扩展、高可用性、多租户的日志聚合系统,与其他日志系统不同的是,Loki最初设计的理念是为了为日志建立标签索引,而非将原日志内容进行索引。

现在目前成熟的方案基本上都是:Logstash + Elasticsearch + Kibana (LEK),但是LEK对资源要求比较高,少了8H8G用起来都是一卡一卡的,所以我们可以转向比较轻量的方案 Promtail + Loki + Grafana (PLG),本文就介绍PLG这种方案,可以对接各种云存储,比如Minio、S3、COS、OSS等等。

介绍

Grafana Loki

官方:Grafana Loki OSS | Log aggregation system

开源地址:GitHub - grafana/loki: Like Prometheus, but for logs.

Loki 是一个日志聚合系统,旨在存储和查询来自所有应用程序和基础设施的日志。

Grafana

官方:Grafana | Query, visualize, alerting observability platform

开源地址:GitHub - grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

一个监控面板,查询、可视化、警报和理解您的数据,无论数据存储在何处。借助 Grafana,您可以通过美观、灵活的仪表板创建、探索和共享所有数据。

Promtail

Promtail 是一个代理,它将本地日志的内容发送到私有 Grafana Loki 。它通常部署到运行需要监视的应用程序的每台计算机。

开始部署

推荐配置2H4G比较丝滑。

参考官方部署手册:Quickstart to run Loki locally | Grafana Loki documentation

官方docker-compose快速部署架构图有下面这些组件:使用的最新版本3.1.x

轻量级日志管理平台Grafana Loki搭建及应用

flog :生成日志行。 flog是常见日志格式的日志生成器。

Grafana Alloy :从 flog 中刮取原木线,并通过网关将它们推送给 Loki。

网关(nginx),接收请求并根据请求的 URL 将它们重定向到适当的容器。

Loki 读取组件:运行查询前端和查询器。

Loki 写入组件:运行分发器和接收器。

Loki 后端组件:运行 Index Gateway、Compactor、Ruler、Bloom Compactor(实验性)和 Bloom Gateway(实验性)。

Minio :Loki 用它来存储索引和块。

Grafana :提供 Loki 中捕获的日志行的可视化。

上面官方采用的是读写分离以及minio存储后端,启动的组件比较多,本人调整了成单节点部署测试,想初步体验的可以使用我下面的 docker-compose.yaml 快速部署。

version: "3"networks:loki:services:
# minio对象存储minio:image: minio/minioentrypoint:- sh- -euc- |mkdir -p /data/loki-data && \mkdir -p /data/loki-ruler && \minio server --console-address ':9001' /dataenvironment:- MINIO_ROOT_USER=lcry- MINIO_ROOT_PASSWORD=www.51it.wang- MINIO_PROMETHEUS_AUTH_TYPE=public- MINIO_UPDATE=offports:- 19000:9000- 19001:9001volumes:- ./minio-data:/datahealthcheck:test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]interval: 15stimeout: 20sretries: 5networks:- loki
# grafana面板grafana:image: grafana:latestenvironment:- GF_SECURITY_ADMIN_PASSWORD=www.51it.wangentrypoint:- sh- -euc- |mkdir -p /etc/grafana/provisioning/datasourcescat <<EOF > /etc/grafana/provisioning/datasources/ds.yamlapiVersion: 1datasources:- name: Lokitype: lokiaccess: proxyurl: http://backend:3100jsonData:httpHeaderName1: "X-Scope-OrgID"secureJsonData:httpHeaderValue1: "tenant-lcry"EOF/run.shports:- "3000:3000"healthcheck:test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1" ]interval: 10stimeout: 5sretries: 5networks:- loki# loki后端服务backend:image: grafana/loki:3.1.1depends_on:- miniovolumes:- ./loki-config.yaml:/etc/loki/config.yamlports:- "3100:3100"- "7946"- "9095"command: "-config.file=/etc/loki/config.yaml -target=all"healthcheck:test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]interval: 10stimeout: 5sretries: 5networks:- loki# 采集promtail:image:promtail:3.1.1depends_on:- backendvolumes:- ./log:/var/log- ./promtail-config.yaml:/etc/promtail/config.yamlcommand: -config.file=/etc/promtail/config.yamlnetworks:- loki

loki-config.yaml 配置文件:

auth_enabled: false
server:http_listen_address: 0.0.0.0http_listen_port: 3100memberlist:join_members: ["backend"]dead_node_reclaim_time: 30sgossip_to_dead_nodes_time: 15sleft_ingesters_timeout: 30sbind_addr: ['0.0.0.0']bind_port: 7946gossip_interval: 2sschema_config:configs:- from: 2021-08-01store: tsdbobject_store: s3schema: v13index:prefix: index_period: 24h
common:path_prefix: /lokireplication_factor: 1compactor_address: http://backend:3100storage:s3:endpoint: minio:9000insecure: truebucketnames: loki-dataaccess_key_id: lcrysecret_access_key: www.51it.wangs3forcepathstyle: truering:kvstore:store: memberlist
ruler:storage:s3:bucketnames: loki-rulercompactor:working_directory: /tmp/compactor

promtail-config.yaml 配置文件:

server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://backend:3100/loki/api/v1/pushscrape_configs:- job_name: systemstatic_configs:- targets:- localhostlabels:job: varlogs__path__: /var/log/*log

然后执行命令:docker-compose up -d 运行

随后访问Grafana UI :http://服务器地址:3000/,账号:admin,密码:admin

Loki作为一个活跃的开源项目,持续地接受着来自全球开发者社区的贡献和维护,确保了它能够适应不断变化的云原生环境需求。对于那些寻求高效、经济的日志管理解决方案的开发团队和企业来说,Loki是一个值得深入探索的强大工具。

默认已经在配置文件中加入了loki数据源,直接点击测试是否可用:

轻量级日志管理平台Grafana Loki搭建及应用

直接预览日志,搜索自己手动添加的测试日志,没问题搭建完成。

轻量级日志管理平台Grafana Loki搭建及应用

物理部署protmail

若你需要采集其他机器上的日志,那么你只需要安装采集组件protmail,docker版本在上面已经演示过了,下面演示使用物理部署。

首先到loki发布版本这里下载对应操作系统的安装包:Releases · grafana/loki · GitHub

新建配置文件promtail-config.yaml

server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://服务端IP:3100/loki/api/v1/pushscrape_configs:- job_name: service-logstatic_configs:- targets:- xxx.xxx.xxx.xxxlabels:job: varlogs__path__: /var/log/*log

编写启停脚本:ubuntu为例

start.sh

#!/bin/bash
nohup ./promtail-linux-amd64 -config.file=./promtail-config.yaml > ./server.log 2>&1 &
echo "$!" > pid

stop.sh

#!/bin/bash
kill -9 `cat pid`
echo "关闭成功!"

执行启动 ./start.sh

查看日志 tail -300f server.log ,无报错,观察Grafana UI日志已经能看到了则成功

更多protmail配置可参考链接:Promtail agent | Grafana Loki documentation

资源占用

最后我们来看下轻量级的Promtail + Loki + Grafana + Minio 整个容器占用的内存大小。

轻量级日志管理平台Grafana Loki搭建及应用

总共加起来300MB不到,相当的丝滑,若你只是需要收集一些自己折腾玩的服务日志太合适不过了。

总结

本文通过对比不同的日志平台,最终实战搭建了Promtail + Loki + Grafana + Minio,实打实的可以用于生产,但是要注意生产环境的HA部署以及参考官方文档进行优化,比如不同租户的请求速度频率的限制大小,日志的保留时长,最大上传的日志大小等等配置,希望本文对大家有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansible自动化运维(四)jinjia2模板

Jinjia2模板 前面说到playbook组成的时候&#xff0c;有介绍到template模块&#xff0c;而template模块对模板文件进行渲染时&#xff0c;使用的就是jinja2模板引擎&#xff0c;jinja2本身就是基于python的模板引擎&#xff0c;所以下面先来了解一下jinjia2模板的一些用法 基…

光谱相机

光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上&#xff0c;在探测器前设置分光元件&#xff0c;如光栅、棱镜或滤光片等&#xff0c;将光按不同波长分解成多个光谱通道&#xff0c…

LLM 分布式训练六大关键技术介绍

编者按&#xff1a; 本文聚焦于分布式去中心化神经网络训练技术&#xff0c;作者系统阐述了在大规模模型训练中提高硬件使用效率的创新方法。 文章重点阐述了六种关键的分布式训练技术&#xff1a; 数据并行训练&#xff1a;通过将数据 mini-batches 分散到多个 workers&#x…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法&#xff0c;主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

跨平台开发技术的探索:从 JavaScript 到 Flutter

随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…

队列+宽搜_429. N 叉树的层序遍历_二叉树最大宽度

429. N 叉树的层序遍历 定义一个队列q&#xff0c;将一层的节点入队&#xff0c;并记录节点个数。根据节点的个数&#xff0c;出队列&#xff0c;并将其孩子入队列。出完队列&#xff0c;队列当前剩余节点的个数就是下次出队列的次数。直到队列为空 /* // Definition for a Nod…

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天&#xff0c;语音芯片与可穿戴设备的携手合作&#xff0c;正引领我们步入一个前所未有的个性化音频时代。这一创新融合&#xff0c;用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…

单片机学习笔记 18. IIC总线EEPROM(理论)

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

一、基于CNNSoftmax函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 二、 基于CNNsigmoid函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 三、 基于CNNSVM进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分…

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等

在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析&#xff0c;接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量&#xff08;对标CANoe Graphics&#xff09; 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 本篇文章&#xff0c;老白把日期和时间的格式化参数进行了整理&#xff0c;方便以后查阅&#xff0c;更加详细的说明请参考 Java API 文档。 一、语法解释 %&#xff0c;必要参数&#xff0c;用于引用参…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…

VR虚拟展厅的实时互动是如何实现的?

VR虚拟展厅的实时互动是通过一系列技术和流程实现的&#xff0c;这些技术和流程共同确保了用户在虚拟环境中的互动体验能够及时响应和更新。 接下来&#xff0c;由专业从事VR虚拟展厅制作的圆桌3D云展厅平台为大家介绍一下实现VR虚拟展厅实时互动的几个关键要素&#xff1a; 高…

(三)FT2232HL高速调试器的接口定义与使用配置说明

&#xff08;特别声明&#xff1a;仅对FT2232HL_v0.2 20241125版本进行电路优化调整&#xff09; 如果FT2232HL板子是V0.2版本&#xff08;背面丝印FT2232HL_v0.2 20241125&#xff09;&#xff0c;类似下图这样的&#xff0c;说明已经对电路进行了优化调整。 1、接口定义 FT…

C++20 标准概念

1. 所有标准概念的概述 “类型和对象基本概念”表列出了类型和对象的基本概念。 “范围、迭代器和算法概念”表列出了范围、视图、迭代器和算法的概念。 “辅助概念”表列出的概念主要用作其他概念的构建块&#xff0c;通常不会让应用程序开发者直接使用。 头文件和命名空间 …

zookeeper的安装

zookeeper的安装 一.前言 zookeeper开源组件是为分布式应用&#xff0c;提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中&#xff0c;如何以单机&#xff0c;伪集群&#xff0c;集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假…

【经验分享】容器云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…