当前位置: 首页 > 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.hskmm.com/?act=detail&tid=20065

相关文章:

  • Xcode 火焰图
  • 完整教程:dlib库关键点定位和疲劳检测
  • 2025 长沙美食餐厅权威推荐排行榜:老店红记领衔新晋品牌,200 + 湘味与网红菜品深度解析,吃货必藏指南长沙美食湘菜馆 /大排档/网红店餐厅推荐
  • VKD233HH触控IC有两种输出方式“直接输出”和“锁存输出”单路触摸检测芯片
  • 打包present, but unavailable
  • 2025 年最新推荐环保门禁厂家权威排行榜:清洁运输 / 智能 / 移动源系统及电子台账厂商详析企业/智能环保门禁厂家推荐
  • 2025 年即时通讯公司推荐 小天互连:私有化部署即时通讯、信创即时通讯、国产化即时通讯、局域内网即时通讯、企业 IM 即时通讯解决方案解析
  • GJOI 模拟赛6、7部分题解
  • 【C++list】底层结构、迭代器核心原理与常用接口完成全解析
  • 完整教程:Flink Watermark机制解析
  • 2025 年北京湖南菜餐厅推荐:小湖南岸以湖湘本味与匠心服务,成京城湘菜口碑之选
  • Vector
  • SSM
  • Mybatis Plus
  • 0927模拟赛总结
  • AT_agc010_b [AGC010B] Boxes
  • Selenium自动化脚本总报错?这7个调试技巧帮你解决90%问题
  • C语言 - *进制转*进制 3
  • ThreadLocal详解
  • C语言 - *进制转*进制 2
  • Functions
  • QOJ #5421. Factories Once More 题解
  • 自动生成验证码
  • 9.23 总结
  • 新品团购 V3 小程序:助力商家高效拓客与直播带货的全能解决方案
  • 事倍功半是蠢蛋56 写业务不要有预设心态
  • 365 赚钱宝小程序系统:多元化变现与趣味运营一体的小程序解决方案
  • 9.22 总结
  • Ansible实现自动化运维 - 实践
  • 每天30道四则运算题目(随机数习题)