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

loki收集容器日志

Loki介绍

Loki 是 Grafana Labs 开源的日志聚合系统,常被称为 “日志界的 Prometheus”。它的设计理念是只索引元数据,不索引完整日志内容,结合 Promtail 和 Grafana,就能实现高效的日志采集、存储与可视化。与传统的 ELK(Elasticsearch + Logstash + Kibana)方案相比,Loki 部署更轻量、存储成本更低,对资源要求小,非常适合与容器和 Kubernetes 环境结合使用。同时,Loki 在查询时依赖标签(labels)过滤,再结合 Grafana 强大的可视化能力,让日志分析更直观灵活。

部署步骤

部署目录

root@test-midware-0001:/data/grafana# ls -l
total 12
-rw-r--r-- 1 root root 1614 Sep 23 15:45 docker-compose.yaml
-rw-r--r-- 1 root root  424 Sep 23 15:37 loki-config.yaml
-rw-r--r-- 1 root root 1508 Sep 23 15:53 promtail-config.yaml
drwxr-xr-x 2 root root    6 Sep 28 16:02 promtail-data

 

本次采用docker-compose的方式部署loki及其相关的组件。以下是详细的docker-compose.yaml文件内容:

version: '3.8'services:loki:image: grafana/loki:2.9.8container_name: lokiports:- "32100:3100"volumes:- ./loki-config.yaml:/etc/loki/local-config.yaml:ro    # 配置挂载- loki_data:/loki                                      # 存储日志/chunks/index 数据- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:rocommand: -config.file=/etc/loki/local-config.yamlrestart: unless-stoppednetworks:- grafana-netpromtail:image: grafana/promtail:2.9.8  # 最近 stable 的带安全补丁版本container_name: promtaildepends_on:- lokicommand: -config.file=/etc/promtail/config.yaml -log.level=infovolumes:- /var/run/docker.sock:/var/run/docker.sock:ro               # promtail需要使用docker API- /data/docker/containers:/var/lib/docker/containers:ro      # 日志目录挂载- ./promtail-config.yaml:/etc/promtail/config.yaml:ro        # 配置文件挂载
      - ./promtail-data:/tmp                                       # 临时文件挂载,记录日志位置- /etc/localtime:/etc/localtime:ro                           # 时区- /etc/timezone:/etc/timezone:rouser: rootrestart: unless-stoppednetworks:- grafana-netgrafana:image: grafana/grafanacontainer_name: grafanadepends_on:- loki- promtailenvironment:- GF_SECURITY_ADMIN_PASSWORD=*******  #这里设置自己的密码 - GF_AUTH_ANONYMOUS_ENABLED=false# 其他环境变量配置你自己的需求ports:- "23100:3000"volumes:- grafana_data:/var/lib/grafana- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:rorestart: unless-stoppednetworks:- grafana-netvolumes:loki_data:grafana_data:networks:grafana-net:external: true

 这里有一个需要注意的点是,容器网络需要提前创建好

$ docker network create grafana-net

上面的docker-compose.yaml中有三个容器,分别是grafana,日志展示的UI。Loki日志存储服务端和promtail日志收集端。后面两个需要挂载配置文件,这也得提前编辑好。

root@test-midware-0001:/data/grafana# cat loki-config.yaml
auth_enabled: falseserver:http_listen_port: 3100common:path_prefix: /lokistorage:filesystem:chunks_directory: /loki/chunksrules_directory: /loki/rulesreplication_factor: 1ring:kvstore:store: inmemoryschema_config:configs:- from: 2020-10-24store: tsdbobject_store: filesystemschema: v13index:prefix: index_period: 24h
root@test-midware-0001:/data/grafana# cat promtail-config.yaml 
server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://loki:3100/loki/api/v1/push

scrape_configs:# -------------------------------# 1. Docker 容器日志# -------------------------------- job_name: docker-logsdocker_sd_configs:- host: unix:///var/run/docker.sock
        refresh_interval: 5srelabel_configs:# 容器名称(去掉开头的 /- source_labels: [__meta_docker_container_name]target_label: container_nameregex: '/(.*)'replacement: '$1'# 给特定容器(比如名字里包含 ls-device)加标签 project_name=ls-device- source_labels: [__meta_docker_container_name]regex: .*ls-device.*target_label: project_namereplacement: ls-device# 容器 ID- source_labels: [__meta_docker_container_id]target_label: container_id# 镜像名称- source_labels: [__meta_docker_image]target_label: image# 日志路径- source_labels: [__meta_docker_container_id]target_label: __path__replacement: /var/lib/docker/containers/$1/*.logpipeline_stages:# 解析 Docker json-file 日志格式- docker: {}# 将日志的 time 字段作为 timestamp- timestamp:source: timeformat: RFC3339Nano# 丢弃超过 7 天的旧日志- drop:older_than: 168h  

启动容器

docker-compose up -d 

登录grafana

配置Loki数据源,并保存。

image

 再次点击探索就可以查看到我们添加的Loki数据源了

image

 我们可以点击标签过滤,按容器名或者项目名来查找特定的日志。

 

http://www.rkmt.cn/news/13478.html

相关文章:

  • 完整教程:dlib库关键点定位和疲劳检测
  • VKD233HH触控IC有两种输出方式“直接输出”和“锁存输出”单路触摸检测芯片
  • C# Avalonia 15- Animation- CachingTest
  • Ansible + Docker 部署 MinIO 集群
  • 自动遍历测试利器:开源工具AppCrawler 配置全解析
  • 250928
  • window 安全模式卸载任何软件
  • 定制笔记本电脑工厂排名:从基础代工到联合设计全面分析 - 教程
  • sv 去除字符串行尾空格函数
  • linux执行yum报错: except KeyboardInterrrupt, e
  • grafana如何添加自定义geoJson地图
  • AI元人文:追问与悟空
  • 2025 年纽扣电池厂家:力源电池以 TWS 适配技术与定制服务,打造多场景电源解决方案
  • AWS SageMaker SDK 完整教程:从零开始云端训练你的模型
  • 反转数字-处理溢出的条件-Java
  • Storm-0501威胁组织利用云技术实施勒索攻击的技术分析
  • US$289 VVDI2 AUDI and 5th IMMO Functions Authorization Service
  • OpenLayers地图交互 -- 章节十三:拖拽旋转交互详解 - 实践
  • Python抖音直播间实时数据获取方案:弹幕、礼物与互动消息全解析 - 教程
  • Gitee企业版MCP Server:开启AI驱动的企业研发新时代
  • kafka-日志收集高效的平台部署任务
  • iOS Xcode16 中删除描述文件 Provisioning Profiles
  • git仓库管理memo
  • 关键领域软件研发知识管理的范式革命:从静态文档到智能图谱的跃迁
  • Discord桌面应用远程代码执行漏洞分析
  • DRL模型训练:原始奖励函数记录以及绘制
  • 【Boolean】布尔值:逻辑判断的基础
  • Modbus RTU TCP 拓扑
  • 借助Aspose.Email,使用 Python 将 EML 转换为 MHTML
  • python+springboot+django/flask的医院食堂订餐系统 菜单发布 在线订餐 餐品管理与订单统计系统 - 教程