docker日志收集loki + grafana

752 阅读1分钟

1. 安装 docker 日志驱动插件 loki

docker plugin install grafana/loki-docker-driver:3.0.0 --alias loki --grant-all-permissions

安装成功后查看

[root@node1 ~]# docker plugin ls
ID             NAME          DESCRIPTION           ENABLED
7e092cffeb58   loki:latest   Loki Logging Driver   true

2. 部署 loki、grafana 服务

2.1 docker compose 部署
networks:
  net_log:

volumes:
  loki_data:
  grafana_data:

configs:
  loki_conf:
    external: true

services:
  loki:
    image: grafana/loki:3.0.0
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - loki_data:/loki
    configs:
      - source: loki_conf
        target: /etc/loki/config.yml
    command: -config.file=/etc/loki/config.yml
    ports:
      - "3100:3100"
    networks:
      - net_log
    deploy:
      placement:
        constraints: [node.role == worker]

  grafana:
    image: grafana/grafana
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    networks:
      - net_log
    deploy:
      placement:
        constraints: [node.role == worker]

配置说明:configs 与 deploy 都是在 swarm 模式下的配置,其他中 loki 的配置如下

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

ruler:
  alertmanager_url: http://localhost:9093

2.2 配置 grafana 的数据源 loki

访问 http://localhost:3000,打开grafana如下页面 1.jpg grafana与loki在同一网络,使用服务名即可 2.jpg

3. docker 容器日志收集

3.1 配置服务容器时,配置日志驱动
    logging:
      driver: loki
      options:
        loki-url: "http://127.0.0.1:3100/loki/api/v1/push"
        loki-batch-size: "100"
        loki-retries: "5"

这里有个问题:即便服务容器与 loki 在同一个网络下,也不能通过 loki 的服务名配置 loki-uri。原因是 docker 的日志驱动程序不能使用桥接网,可以通过给 loki 分配静态 ip 来解决

3.2 在 grafana 的 explore 下查询

3.jpg

4.jpg