返回
创建于
状态公开

要将Docker Compose的日志收集整合到Grafana中,推荐使用Grafana Loki和Promtail的组合。Loki是一个轻量级的日志聚合系统,Promtail负责收集Docker容器日志并将其推送到Loki,然后通过Grafana进行可视化。以下是实现步骤和相应的Docker Compose配置。

yaml
1version: "3.9"
2services:
3  loki:
4    image: grafana/loki:3.4.1
5    container_name: loki
6    ports:
7      - "3100:3100"
8    volumes:
9      - ./loki-config.yaml:/etc/loki/loki-config.yaml
10    command: -config.file=/etc/loki/loki-config.yaml
11    networks:
12      - monitoring
13
14  promtail:
15    image: grafana/promtail:3.4.1
16    container_name: promtail
17    volumes:
18      - ./promtail-config.yaml:/etc/promtail/promtail-config.yaml
19      - /var/lib/docker/containers:/var/lib/docker/containers:ro
20      - /var/run/docker.sock:/var/run/docker.sock
21    command: -config.file=/etc/promtail/promtail-config.yaml
22    depends_on:
23      - loki
24    networks:
25      - monitoring
26
27  grafana:
28    image: grafana/grafana:latest
29    container_name: grafana
30    ports:
31      - "3000:3000"
32    volumes:
33      - grafana-data:/var/lib/grafana
34      - ./grafana/provisioning:/etc/grafana/provisioning
35    environment:
36      - GF_AUTH_ANONYMOUS_ENABLED=true
37      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
38    depends_on:
39      - loki
40    networks:
41      - monitoring
42
43volumes:
44  grafana-data:
45
46networks:
47  monitoring:
48    driver: bridge
yaml
1auth_enabled: false
2server:
3  http_listen_port: 3100
4  grpc_listen_port: 9096
5common:
6  instance_addr: 127.0.0.1
7  path_prefix: /tmp/loki
8  storage:
9    filesystem:
10      chunks_directory: /tmp/loki/chunks
11      rules_directory: /tmp/loki/rules
12  replication_factor: 1
13  ring:
14    kvstore:
15      store: inmemory
16schema_config:
17  configs:
18    - from: 2020-10-24
19      store: tsdb
20      object_store: filesystem
21      schema: v13
22      index:
23        prefix: index_
24        period: 24h
yaml
1server:
2  http_listen_port: 9080
3  grpc_listen_port: 0
4positions:
5  filename: /tmp/positions.yaml
6clients:
7  - url: http://loki:3100/loki/api/v1/push
8scrape_configs:
9  - job_name: docker
10    docker_sd_configs:
11      - host: unix:///var/run/docker.sock
12        refresh_interval: 5s
13    relabel_configs:
14      - source_labels: ['__meta_docker_container_name']
15        target_label: 'container'
16      - source_labels: ['__meta_docker_container_label_com_docker_compose_project']
17        target_label: 'compose_project'
18      - source_labels: ['__meta_docker_container_log_stream']
19        target_label: 'logstream'
yaml
1apiVersion: 1
2datasources:
3  - name: Loki
4    type: loki
5    url: http://loki:3100
6    access: proxy
7    isDefault: true
8    editable: false

实现步骤

  1. 创建配置文件

    • 将上述docker-compose.yamlloki-config.yamlpromtail-config.yamldatasource.yaml保存到项目目录。
    • 确保目录结构如下:
      js
      1.
      2├── docker-compose.yaml
      3├── loki-config.yaml
      4├── promtail-config.yaml
      5├── grafana
      6│   └── provisioning
      7│       └── datasources
      8│           └── datasource.yaml
  2. 启动服务

    • 运行docker-compose up -d启动Loki、Promtail和Grafana容器。
  3. 访问Grafana

    • 打开浏览器,访问http://localhost:3000,默认用户名为admin,密码为admin(首次登录后需更改)。
    • Grafana已通过datasource.yaml自动配置Loki数据源。
  4. 查看日志

    • 在Grafana左侧菜单点击“Explore”,选择“Loki”数据源。
    • 使用LogQL查询日志,例如{container="your_container_name"}查看特定容器日志,或{compose_project="your_project_name"}按Docker Compose项目过滤。

注意事项

  • 确保Docker主机上/var/lib/docker/containers/var/run/docker.sock可被Promtail访问,用于收集容器日志。
  • 可通过loki-external-labelspromtail-config.yaml中添加自定义标签,便于日志查询。
  • 如果需要持久化Loki数据,可为Loki配置卷挂载。
  • 参考资料:Grafana Loki文档,Docker日志集成。

通过以上配置,你可以在Grafana中轻松查看Docker Compose应用的日志,实现集中化日志管理。