Docker 部署loki日志 用于微服务
因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过ELK,原本打算用ELK,在做技术调研的时候发现了一个轻量级的日志系统Loki,果断采用Loki部署。也算是踩了不少坑。这里做一篇博客记录一下。
我这里是单个服务器系统部署,如果是多个服务器的话,修改链接配置即可。
主要是分为三个部分:
1、loki,主服务器,存储日志和处理查询
2、promtail,代理,收集日志并发给Loki
3、Grafana,查询和显示日志
我的服务器是 linux ubuntu系统。这是我部署的目录结构

Linux常用的文件命令一定要记住,下面是创建目录
//切换到你想部署的目录
cd /usr/local/docker//创建需要的文件
mkdir lokis
cd lokis
mkdir grafana
mkdir loki
mkdir promtail
cd grafana
mkdir confcd ..
cd promtail
mkdir conf// 给文件付权限 否则挂载目录生成会失败
sudo chmod -R 777 /usr/local/docker/lokis
第一步 编辑loki的配置文件 :我放到了 /usr/local/docker/lokis/loki/conf 目录下

vim config.yaml
文件内容如下:
auth_enabled: falseserver:http_listen_port: 3100grpc_listen_port: 9095grpc_server_max_recv_msg_size: 1572864000 #grpc最大接收消息值,默认4mgrpc_server_max_send_msg_size: 1572864000 #grpc最大发送消息值,默认4mingester:lifecycler:address: 127.0.0.1 #绑定本机 ipring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 5mchunk_retain_period: 30swal:dir: /loki/walcompactor:working_directory: /loki/persistent # 压缩目录,一般也作为持久化目录compaction_interval: 10m # 压缩间隔retention_enabled: true # 持久化开启retention_delete_delay: 5m # 过期后多久删除retention_delete_worker_count: 150 # 过期删除协程数目
schema_config:configs:- from: "2023-10-23"index:period: 24hprefix: loki_index_object_store: filesystem # 持久化方式:本地文件schema: v11store: boltdb-shipperstorage_config:boltdb_shipper:active_index_directory: /loki/boltdb-index # index 目录cache_location: /loki/boltdb-cache # cache 目录filesystem:directory: /loki/chunks # chunks 目录
limits_config:retention_period: 240h # 多久过期
第二步:编辑promtail 配置文件:

vim promtail-config.yaml
文件内容如下:
server:http_listen_port: 9080 #云服务器需开放9080端口grpc_listen_port: 0positions:filename: /tmp/positions.yaml#loki地址
clients:- url: http://loki:3100/loki/api/v1/push
#我名词定义是 ”环境-服务-文件/容器“
scrape_configs:
- job_name: test-systemserver-filestatic_configs:- targets:- localhostlabels:client: test #自定义变量 定义环境job: system-file #变量定义类型__path__: /data/server/system/logs/**/*.log #收集程序输出的日志 ,日志目录和dokcer-compose挂载相关 /**/- job_name: test-geteway-filestatic_configs:- targets:- localhostlabels:client: devjob: geteway-file__path__: /data/server/gateway/logs/**/*.log # 日志目录和dokcer-compose挂载相关 /**/
这里有两个需要注意的地方:
- url: http://loki:3100/loki/api/v1/push
这个地址是你采集日志后发送给loki的网络地址, 如果不同的服务器则采用Ip地址访问,如果同一台服务器可以用127.0.0.1 发送。如果是docker 部署并且在同一个网关内,可以采用容器名通信。如果不理解的可以查一下docker 部署容器直接通信
第二个需要注意的地方是

__path__: /data/server/system/logs/**/*.log
这个日志目录是你部署promtail的时候挂载出来的目录。因为我的微服务日志目录还有日期文件夹所以结尾是__path__: /data/server/system/logs/**/*.log
如果里面没有日期文件夹,直接对应的是日志文件:
__path__: /data/server/system/logs/*.log
其实就是文件的匹配规则。

第三步:获取Grafana的配置文件 defaults.ini
这里不同的版本配置文件不同。有的配置文件是:grafana.ini 有的配置文件是:defaults.ini
你可以先用docker 安装Grafana
然后通过docker命令:
docker exec -it <container_id_or_name> /bin/bash (修改自己的容器名)
查看一下grafana配置文件都有啥,然後通过docker复制文件到宿主机
docker cp abc123:/app/data.txt /home/user/data/ (修改目录和文件路径)
我的目录是这样的。
其他的文件是启动后自动生成的。

第四步:编辑docker-compose.yml文件
创建文件命令:
vim docker-compose.yml
文件内容如下:
version: '3'
services: #数据库loki:image: grafana/loki:latestcontainer_name: lokiports:- "3100:3100"- "9095:9095"command: -config.file=/etc/loki/config.yamlvolumes:- ./loki/conf:/etc/loki- ./loki/data/loki:/loki#收集promtail:image: grafana/promtailcontainer_name: promtailrestart: alwaysports:- 9080:9080volumes:- ./promtail/promtail-config.yaml:/opt/promtail-config.yaml- /usr/local/docker/javaapp/fxt-system/logs/fxt-sys-server_10201/:/data/server/system/logs/ - /usr/local/docker/javaapp/fxt-gateway/logs/fxt-gateway-center_10001/:/data/server/gateway/logs/ - /etc/localtime:/etc/localtime:roprivileged: true #不开报错deploy:resources:limits:memory: 2Greservations:memory: 200Mlogging:driver: json-fileoptions:max-size: "200m"max-file: "4"command: ["-config.file=/opt/promtail-config.yaml"]#web界面。 有的就不需要再部署了,都一样grafana:image: grafana/grafanacontainer_name: grafanarestart: "always"ports:- 3000:3000environment:- TZ=Asia/Shanghaivolumes:- ./grafana/conf/defaults.ini:/usr/share/grafana/conf/defaults.ini- ./grafana/grafana-storage:/var/lib/grafana- /etc/localtime:/etc/localtime:ro
networks:default:external:name: mynetwork
这里的networks 是自己创建的docker 网关路由。

所有的配置文件做好以后就可以启动了
//安装部署命令
docker-compose up -d//查询日志
docker-compose logs -f
启动成功以后可以通过http://192.168.1.48:3000/ 访问Grafana (换成自己服务器的ip地址)
第五步:数据源选项 选择loki选项

配置loki的地址:http://loki:3100 我这里是docker内部的连接 所以是这样的。如果是其他的地址就配置自己的ip地址。

选择自己的服务:

运行查询:出来日志
一种是实时刷新 一种是每次查询一次。
具体看情况。至于怎么使用查询可以学习相关的语句。有什么问题欢迎交流

相关文章:
Docker 部署loki日志 用于微服务
因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过ELK,原本打算用ELK,在做技术调研的时候发现了一个轻量级的日志系统Loki,果断采…...
[Day 57] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的零知識證明技術 一、引言 隨著區塊鏈技術的不斷發展,如何在保護用戶隱私的同時確保數據的完整性和可信度成為了研究的焦點。零知識證明(Zero-Knowledge Proof,ZKP)技術就是其中的一項關鍵技術,它允許一方在不…...
06结构型设计模式——代理模式
一、代理模式简介 代理模式(Proxy Pattern)是一种结构型设计模式(GoF书中解释结构型设计模式:一种用来处理类或对象、模块的组合关系的模式),代理模式是其中的一种,它可以为其他对象提供一种代…...
《深入浅出多模态》(九)多模态经典模型:MiniGPT-v2、MiniGPT5
🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…...
调试和优化大型深度学习模型 - 0 技术介绍
调试和优化大型深度学习模型 - 0 技术介绍 flyfish LLaMA Factory LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上…...
华为S3700交换机配置VLAN的方法
1.VLAN的详细介绍 VLAN(Virtual Local Area Network)即虚拟局域网,是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 1.1基本概念 1)作用: 隔离广播域:通过将网络划分为不同的 VLAN,广播帧只会在同一 VLAN 内传播,而不会扩散到其他 VLAN 中,从而有效…...
学懂C++(三十八):深入详解C++网络编程:套接字(Socket)开发技术
目录 一、概述与基础概念 1.1 套接字(Socket)概念 1.2 底层原理与网络协议 1.2.1 网络协议 1.2.2 套接字工作原理 二、C套接字编程核心技术 2.1 套接字编程的基本步骤 2.2 套接字编程详细实现 2.2.1 创建套接字 2.2.2 绑定地址 2.2.3 监听和接…...
SpringBoot-配置加载顺序
目录 前言 样例 内部配置加载顺序 样例 小结 前言 我之前写的配置文件,都是放在resources文件夹,根据当前目录下,优先级的高低,判断谁先被加载。但实际开发中,我们写的配置文件并不是,都放…...
第八周:机器学习笔记
第八周机器学习笔记 摘要Abstract机器学习1. 鱼和熊掌和可兼得的机器学习1.1 Deep network v.s. Fat network 2. 为什么用来验证集结果还是不好? Pytorch学习1. 卷积层代码实战2. 最大池化层代码实战3. 非线性激活层代码实战 总结 摘要 本周学习对李宏毅机器学习视…...
音乐怎么剪切掉一部分?5个方法,轻松学会音频分割!(2024全新)
音乐怎么剪切掉一部分?音频文件是娱乐和创作的重要基础。音频在我们日常生活中发挥着重要作用,从音乐播放列表到有趣的视频,它无处不在。无论是音乐爱好者还是内容创作者,我们常常需要对音频文件进行剪切和编辑。想象一下…...
洛谷 CF295D Greg and Caves
题目来源于:洛谷 题目本质:动态规划dp,枚举 解题思路:将整个洞分成两半,一半递增,一半递减。我们分别 DP 求值,最后合并。状态转移方程为:dpi,jk2∑j(j−k1)dpi−1,k1。枚举极…...
【图像处理】在图像处理算法开发中,有哪些常见的主观评价指标和客观评价指标?
主观评价指标 在图像处理算法开发中,主观评价指标依赖于观察者的个人感受和判断,通常用于评估图像的视觉质量。以下是一些常见的主观评价指标: 平均意见分数 (Mean Opinion Score, MOS):通过收集多个评价者的评分并计算平均值来评…...
从零开始学cv-6:图像的灰度变换
文章目录 一,简介:二、图像的线性变换三、分段线性变换四,非线性变换4.1 对数变换4.2 Gamma变换 五,效果: 一,简介: 图像灰度变换涉及对图像中每个像素的灰度值执行数学运算,进而调整图像的视觉…...
使用Apache POI和POI-OOXML实现word模板文档自动填充功能
最近接到一个新的需求,用户创建好模板文件保存到模板库,然后使用在线文档编辑器打开模板时,将系统数据填充到模板文件并生成新的word文件,然后在线编辑,研究使用Apache POI和POI-OOXML实现了这个功能。 Maven依赖 <…...
【HarmonyOS NEXT星河版开发学习】综合测试案例-各平台评论部分
目录 前言 功能展示 整体页面布局 最新和最热 写评论 点赞功能 界面构建 初始数据的准备 列表项部分的渲染 底部区域 index部分 知识点概述 List组件 List组件简介 ListItem组件详解 ListItemGroup组件介绍 ForEach循环渲染 列表分割线设置 列表排列方向设…...
垂直行业数字化表现抢眼 亚信科技全年利润展望乐观
大数据产业创新服务媒体 ——聚焦数据 改变商业 2024年8月14日,亚信科技控股有限公司(股票代码:01675.HK)公布了公司截至2024年6月30日的中期业绩。 财报数据显示,2024年上半年,亚信科技的营业收入为人民币…...
EmguCV学习笔记 VB.Net 4.1 颜色变换
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问:EmguCV学习笔记 C# 目录-CSD…...
【MySQL进阶之路】表结构的操作
目录 创建表 查看表 查看数据库有哪些表 查看表结构 查看表的详细信息 修改表 表的重命名 添加一列 修改某一列的属性 删除某一列 对列进行重命名 删除表 个人主页:东洛的克莱斯韦克-CSDN博客 【MySQL进阶之路】MySQL基础——从零认识MySQL-CSDN博客 创…...
3分钟搞定PDF转PPT!你一定要知道的3款转换神器!
在数字办公成为主流的当下,我们每天会收到各类基于数字化方式存储的办公文档,如PDF、PPT、Word、Excel文档等。 日常处理这些文档时,经常需要在不同格式的文档之间进行切换和转换,其中将PDF转换为PPT就是一个非常高频的需求&…...
【EasyExcel】导出excel-设置动态表头并导出数据
需求背景: 导出excel的设置某些表头动态导出(可以根据筛选条件或一些属性的数据量),方便导出后用户查看想看的信息。 一、技术选型: easyExcel的原生数据处理 二、方案设计: 根据EasyExcel支持的表头List<List<String>…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
