Ubuntu 22.04 部署 Loki + promtail + grafana 收集 docker 日志

背景

  1. 安装 docker
  2. 安装 docker-compose
  3. 服务器IP:172.16.16.78

image
本次只部署日志展示

部署 loki

mkdir -p /data/docker-compose/loki/data
cd /data/docker-compose/loki
chown 10001:10001 data

cat >>docker-compose.yml <<EOF
version: '3.3'
services:
  # Loki 日志存储服务
  loki:
    image: grafana/loki:2.9.15
    container_name: loki
    ports:
      - "3100:3100"
    volumes:
      - ./loki-config.yaml:/etc/loki/local-config.yaml
      - ./data:/loki
    command: -config.file=/etc/loki/local-config.yaml
EOF

# 配置
vi loki-config.yaml

# 认证开关:禁用身份验证
auth_enabled: false

server:
  # HTTP服务监听端口(默认3100)
  http_listen_port: 3100

common:
  # 数据存储根目录
  path_prefix: /loki
  storage:
    # 本地文件系统存储
    filesystem:
      # 日志块存储目录(原始日志分块)
      chunks_directory: /loki/chunks
      # 告警/记录规则存储目录
      rules_directory: /loki/rules
  # 数据副本数(单节点部署设为1)
  replication_factor: 1
  ring:
    # 当前节点通信地址(单机部署用127.0.0.1)
    instance_addr: 127.0.0.1
    kvstore:
      # 环状态存储方式(内存存储,重启丢失)
      store: inmemory

# 存储引擎配置
storage_config:
  boltdb_shipper:
    # 当前活跃索引存储目录(BoltDB索引文件)
    active_index_directory: /loki/boltdb
    # 索引缓存目录
    cache_location: /loki/cache
    # 最终存储类型(本地文件系统)
    shared_store: filesystem

# 压缩与清理配置
compactor:
  # 压缩工作目录
  working_directory: /loki/compactor
  # 存储类型(与shared_store一致)
  shared_store: filesystem
  # 启用日志保留清理
  retention_enabled: true
  # 压缩完成后延迟多久执行删除(防误删)
  retention_delete_delay: 2h
  # 删除操作的并行线程数
  retention_delete_worker_count: 10

# 全局限制配置
limits_config:
  # 日志保留周期(7天=168小时)
  retention_period: 168h

# 日志块存储配置
chunk_store_config:
  # 查询最大回溯时间(需≥retention_period)
  max_look_back_period: 168h

# 索引模式配置
schema_config:
  configs:
    # 配置版本1(从指定日期生效)
    - from: "2023-01-01"
      # 索引存储引擎(boltdb-shipper)
      store: boltdb-shipper
      # 对象存储类型(本地文件系统)
      object_store: filesystem
      # 索引格式版本(v12支持TSDB)
      schema: v12
      index:
        # 索引文件前缀
        prefix: index_
        # 索引分片时长(24小时分片一次)
        period: 24h

# 启动
docker-compose up -d

部署 promtail

用来采集 docker 日志

mkdir -p /data/docker-compose/promtail
cd /data/docker-compose/promtail

cat >>docker-compose.yml <<EOF
version: '3.3'
services:
  # Promtail 日志收集器
  promtail:
    image: grafana/promtail:2.9.15
    ports:
      - "9080:9080"
    container_name: promtail
    volumes:
      - ./promtail-config.yaml:/etc/promtail/config.yml
      - /var/run/docker.sock:/var/run/docker.sock
    command: -config.file=/etc/promtail/config.yml
EOF

# 创建配置
vi promtail-config.yaml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://172.16.16.78:3100/loki/api/v1/push

# 使用增强版配置
scrape_configs:
- job_name: docker_java_logs
  docker_sd_configs:
    - host: unix:///var/run/docker.sock
      refresh_interval: 5s
      filters:
        - name: label
          values: ["logging=promtail"]
  relabel_configs:
    - source_labels: ['__meta_docker_container_name']
      regex: '/(.*)'
      target_label: 'container'
    - source_labels: ['__meta_docker_container_log_stream']
      target_label: 'logstream'


# 启动
docker-compose up -d

部署 grafana

mkdir -p /data/docker-compose/grafana/data
cd /data/docker-compose/grafana
chown 472:0 data

cat >>docker-compose.yml <<EOF
version: '3.3'
services:
  grafana:
    image: grafana/grafana:12.0.2
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - ./data:/var/lib/grafana
    environment:
      GF_SECURITY_ADMIN_USER: admin            # 用户名
      GF_SECURITY_ADMIN_PASSWORD: klvchen123   # 密码
      GF_DEFAULT_INSTANCE_NAME: Loki-Dashboard
EOF

# 启动
docker-compose up -d

配置 grafana 的数据源

浏览器访问 http://172.16.16.78:3000/
image

测试部署 java 应用

下面是我这边的镜像,其他人可自行测试,特别注意,需要加入 "logging=promtail" 的 label promtail 才会抓取日志

vi docker-compose.yml

version: '3.3'
services:
  user-bff:
    image: harbor.klvchen.com/3bur/user-bff:3
    labels:                # 注意这里要加 labels
      - "logging=promtail"
    deploy:
      resources:
        limits:
           cpus: '2'
           memory: 2G
    restart: always

# 启动
docker-compose up -d

查询日志

http://172.16.16.78:3000/explore
image

查看 promtail 抓取了哪些服务的日志

浏览器访问 http://172.16.16.78:9080/targets

参考:

https://www.jianshu.com/p/df5a0536121e

posted @ 2025-07-23 15:03  klvchen  阅读(116)  评论(0)    收藏  举报