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如下页面
grafana与loki在同一网络,使用服务名即可
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 来解决