Docker 部署loki日志 用于微服务

news2024/11/15 15:41:56

因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过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 conf

cd ..
cd promtail
mkdir conf


// 给文件付权限  否则挂载目录生成会失败
sudo chmod -R 777 /usr/local/docker/lokis

第一步  编辑loki的配置文件  :我放到了 /usr/local/docker/lokis/loki/conf  目录下

vim config.yaml

文件内容如下:

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9095
  grpc_server_max_recv_msg_size: 1572864000 #grpc最大接收消息值,默认4m
  grpc_server_max_send_msg_size: 1572864000 #grpc最大发送消息值,默认4m

ingester:
  lifecycler:
    address: 127.0.0.1 #绑定本机 ip
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
  wal:
    dir: /loki/wal

compactor:
  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: 24h
            prefix: loki_index_
        object_store: filesystem          # 持久化方式:本地文件
        schema: v11
        store: boltdb-shipper

storage_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: 0

positions:
  filename: /tmp/positions.yaml

#loki地址
clients:
  - url: http://loki:3100/loki/api/v1/push
#我名词定义是 ”环境-服务-文件/容器“
scrape_configs:
- job_name: test-systemserver-file
  static_configs:
  - targets:
    - localhost
    labels:
      client: test                          #自定义变量 定义环境
      job: system-file                     #变量定义类型
      __path__: /data/server/system/logs/**/*.log  #收集程序输出的日志 ,日志目录和dokcer-compose挂载相关  /**/


- job_name: test-geteway-file
  static_configs:
  - targets:
    - localhost
    labels:
      client: dev
      job: 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:latest
    container_name: loki
    ports:
      - "3100:3100"
      - "9095:9095"
    command: -config.file=/etc/loki/config.yaml
    volumes:
      - ./loki/conf:/etc/loki
      - ./loki/data/loki:/loki

#收集
  promtail:
    image: grafana/promtail
    container_name: promtail
    restart: always
    ports:
      - 9080:9080
    volumes:
      - ./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:ro
    privileged: true           #不开报错
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 200M
    logging:
        driver: json-file
        options:
          max-size: "200m"
          max-file: "4"
    command: ["-config.file=/opt/promtail-config.yaml"]


#web界面。 有的就不需要再部署了,都一样
  grafana:
    image: grafana/grafana
    container_name: grafana
    restart: "always"
    ports:
      - 3000:3000
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./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.coloradmin.cn/o/2053369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大模型从入门到精通29】开源库框架LangChain 语义搜索:高级检索策略3

这里写目录标题 实现上下文压缩与 MMR 的文档检索设置基于压缩的检索器与 MMR探索替代文档检索方法加载和准备文档实现 TF-IDF 和 SVM 检索器最佳实践结论理论问题实践问题 实现上下文压缩与 MMR 的文档检索 设置基于压缩的检索器与 MMR 上下文压缩的目标是通过关注与查询最相…

tomcat的初实现与memcache

文章目录 1. tomcat实现多虚拟机2. tomcat定制访问日志格式3. tomcat实现MSM集群4. JVM垃圾回收算法和分代5. memcache使用&#xff0c;安装和MSM原理 1. tomcat实现多虚拟机 一键安装tomcat并启动&#xff0c;使用openjdk #!/bin/bash version10.1.28 usertomcat grouptomcat…

【C++初阶】:C++入门篇(一)

文章目录 前言一、C命名空间1.1 命名空间的定义1.2 命名空间的使用 二、C的输入和输出2.1 cin和cout的使用 三、缺省参数3.1 缺省参数的分类 四、函数重载4.1 函数重载概念及其条件4.2 C支持函数重载原理 -- 名字修饰 前言 C是在C语言的基础之上&#xff0c;增加了一些面向对象…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector

1.杨辉三角 . - 力扣&#xff08;LeetCode&#xff09; 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> arr;int i 0;int j 0;for (i…

Git入门 -- 区域详解

Git入门 – 区域详解 1.Git 1.1 Git与SVN的区别 Git不仅仅是版本控制系统&#xff0c;同时也是内容管理系统。以下是Git与SVN的区别&#xff1a; 分布式&#xff1a;Git是分布式但SVN不是&#xff0c;这是Git与其他系统的核心区别。存储方式为元数据&#xff1a;Git在存储数…

Python 如何使用正则表达式进行复杂文本处理

正则表达式&#xff08;Regular Expressions&#xff0c;简称 regex 或 RE&#xff09;是一种强大的工具&#xff0c;用于在文本中执行模式匹配和搜索操作。通过正则表达式&#xff0c;你可以轻松地查找、替换和提取文本中的特定模式。Python 提供了一个内置的 re 模块&#xf…

数据结构--树(笔记)

文章目录 1. 含义及术语2. 应用3. 常见二叉树种类① 二叉树(Binary tree)一般树和二叉树的区别 ② 完美二叉树(Perfect Binary tree)③ 完全二叉树(Complete Binary tree)④ 满二叉树(Full Binary tree)完美二叉树、完全二叉树和满二叉树 ⑤ 平衡二叉树(Balanced Binary tree)二…

基于STM32开发的智能门锁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化密码输入与验证门锁控制与状态指示Wi-Fi通信与远程监控应用场景 家庭智能门锁办公室智能门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门锁系统通过集成键盘模块…

自学编程从哪个语言入手比较好?

自学编程时选择哪个语言作为起点&#xff0c;仍然取决于你的个人兴趣、学习目标和职业规划。希望以下建议可以帮到你。 Python&#xff1a; 如果你对数据分析、机器学习、人工智能、Web 开发或自动化脚本编写等领域感兴趣&#xff0c;Python 是一个非常好的起点。它的语法简洁…

java如何通过jdbc操作数据库

1. 安装JDBC 官网地址&#xff1a;官网地址选择 下载后&#xff0c;解压缩&#xff0c;然后将mysql-connector-j-9.0.0.jar文件放到项目目录下 编写操作数据库代码 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql…

20240819 每日AI必读资讯

&#x1f4da;AI爆料人遭全网封禁&#xff01;OpenAI等25个机构祭大招&#xff0c;一眼辨别AI机器人 - 最近半个月&#xff0c;全网被OpenAI的「AI爆料人」「草莓哥」iruletheworldmo愚弄。所有人没有等他预测的GPT-4o large模型&#xff0c;反被AI初创MultiOn创始人揭穿身份—…

Squid:概念、代理案例

目录 Squid 缓存代理 Web代理的工作机制 代理类型 传统代理 透明代理 使用代理的好处 示例和案例 Squid安装示例 使用源码包安装Squid 一些其他的安装参数&#xff08;安装用时较长&#xff09; 为什么异步io要指定线程数&#xff1f; 配置和初始化Squid 运行测试…

大咖齐聚!2024深圳eVTOL展首批发言嘉宾阵容亮相!

大咖齐聚&#xff01;2024深圳eVTOL展首批发言嘉宾阵容亮相&#xff01; 由上海市航空学会、广东省航空航天学会主办的2024深圳eVTOL产业发展大会暨低空经济展览会将于9月23-25日在深圳坪山燕子湖国际会展中心盛大召开。 2024深圳eVTOL产业发展大会由主论坛与低空经济、航电系…

一年秀一次!稚晖君的人形机器人上新了,还有开源、免费彩蛋

一年一秀&#xff0c;稚晖君的第二代人形机器人来了。 灵巧小手&#xff0c;正在麻将桌上叱咤风云&#xff1a; 不对不对&#xff0c;让我们先看看整体气质&#xff1a; 然后是常规家务&#xff0c;能看出来也是非常熟练&#xff1a; 在大模型风靡的 2024 年&#xff0c;如果说…

FreeRtos----------- 同步互斥

一、同步的缺陷&#xff1a;全局变量协同两个任务 1.建立两个任务&#xff1a;CalcTask 、LcdPrintTask xTaskCreate(CalcTask, "task1", 128, NULL, osPriorityNormal, NULL);xTaskCreate(LcdPrintTask, "task2", 128, &g_Task2Info, osPriorityNorm…

详解Element-UI el-table表格中勾选checkbox(selection)多选删除

本节讲解的是关于组件库中el-table组件多选删除功能的实现。 1.Vue文件内的引用 2.页面数据 3.存储多选数据 4. 处理多选数据 这里通过循环的方式找到数据并对数据删除&#xff0c;这种方式易于理解&#xff0c;但不一定是最优方案

springboot的自动配置和怎么做自动配置

目录 一、Condition 1、Condition的具体实现 2、Condition小结 &#xff08;1&#xff09;自定义条件 &#xff08;2&#xff09;SpringBoot 提供的常用条件注解 二、Enable注解 三、EnableAutoConfiguration 注解和自动配置 1、EnableAutoConfiguration的三个注解属性…

LLama 3 跨各种 GPU 类型的基准测试

2024 年 4 月 18 日&#xff0c;AI 社区对 Llama 3 70B 的发布表示欢迎&#xff0c;这是一款最先进的大型语言模型 &#xff08;LLM&#xff09;。该型号是 Llama 系列的下一代产品&#xff0c;支持广泛的用例。该模型 istelf 在广泛的行业平台上表现良好&#xff0c;并提供了新…

Eclipse的使用配置教程:必要设置、创建工程及可能遇到的问题(很详细,很全面,能解决90%的问题)

Eclipse的使用配置&#xff1a; Ⅰ、Eclipse 的必要配置&#xff1a;1、Eclipse 的安装&#xff1a;其一、将 Eclipse 解压或安装到没有中文且没有空格的路径下。其二、拿到 eclipse.exe 文件&#xff0c;傻瓜式安装即可; 2、设置工作空间(workspace)&#xff1a;其一、首次启动…

源头分析: 网络安全的分布式方法

部署网络可见性和网络检测和响应 (NDR) 解决方案来收集、查看和分析网络活动&#xff0c;以检测网络上的可疑和恶意活动。 这些解决方案中的大多数都是为了将数据从收集点 (或传感器) 移动到中央存储库进行分析而构建的。 这种方法有几个缺点&#xff0c;包括规模、性能、成本…