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

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地址。

选择自己的服务:

运行查询:出来日志

一种是实时刷新 一种是每次查询一次。

具体看情况。至于怎么使用查询可以学习相关的语句。有什么问题欢迎交流

http://www.lryc.cn/news/427599.html

相关文章:

  • [Day 57] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 06结构型设计模式——代理模式
  • 《深入浅出多模态》(九)多模态经典模型:MiniGPT-v2、MiniGPT5
  • 调试和优化大型深度学习模型 - 0 技术介绍
  • 华为S3700交换机配置VLAN的方法​
  • 学懂C++(三十八):深入详解C++网络编程:套接字(Socket)开发技术
  • SpringBoot-配置加载顺序
  • 第八周:机器学习笔记
  • 音乐怎么剪切掉一部分?5个方法,轻松学会音频分割!(2024全新)
  • 洛谷 CF295D Greg and Caves
  • 【图像处理】在图像处理算法开发中,有哪些常见的主观评价指标和客观评价指标?
  • 从零开始学cv-6:图像的灰度变换
  • 使用Apache POI和POI-OOXML实现word模板文档自动填充功能
  • 【HarmonyOS NEXT星河版开发学习】综合测试案例-各平台评论部分
  • 垂直行业数字化表现抢眼 亚信科技全年利润展望乐观
  • EmguCV学习笔记 VB.Net 4.1 颜色变换
  • 【MySQL进阶之路】表结构的操作
  • 3分钟搞定PDF转PPT!你一定要知道的3款转换神器!
  • 【EasyExcel】导出excel-设置动态表头并导出数据
  • 深入探索 Elasticsearch 8:新特性与核心原理剖析(上)
  • 瑜伽馆预约小程序,在线预约,提高商业价值
  • Python--数据类型转换
  • 域控ntdsutil修改架构、域命名、PDC、RID、结构主机
  • 解决 Swift 6 全局变量不能满足并发安全(concurrency-safe)读写的问题
  • 迈入退休生活,全职开发ue独立游戏上架steam
  • 什么是光伏气象站——仁科测控
  • webshell免杀--免杀入门
  • Linux---02---系统目录及文件基本操作命令
  • CSP-J/S第一轮初赛模拟赛试题
  • LangGPT结构化提示词