loki收集docker容器日志,loki+grafana

普通收集loki+grafana+promtail

loki进行日志聚合处理  类似elk中的es

promtail是日志收集,类似elk中的logstash filebeat等,如果是只收集docker容器的日志则可以用loki的docker plugin替代

grafana是日志显示,类似elk中的kibana,可以通过各种标签和表达式过滤显示日志

version: "3"
services:
  loki:
    image: grafana/loki
    container_name: loki
    restart: always
    ports:
      - "3100:3100"
    volumes:
      - $PWD:/etc/loki
    command: -config.file=/etc/loki/loki-local-config.yaml
  promtail:
    image: grafana/promtail
    container_name: promtail
    restart: always
    volumes:
      - $PWD:/etc/promtail  #当前目录下挂载对应
      - /app/promtail:/opt  #挂载
      - /app/promtail/log:/var/log  #挂载
    command: 
      -config.file=/etc/promtail/promtail-docker-config.yaml
  
  grafana:
    image: grafana/grafana:master
    restart: always
    environment:
    - TZ=Asia/Shanghai
    - LANG=zh_CN.UTF-8
    ports:
    - 3000:3000

安装loki的docker plugin

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

docker版本13安装失败了,18 19正常

两种方式 全局和指定容器

  • 配置daemon.json,收集此后创建的所有容器的日志(注意,是配置daemon.json后重启docker服务后创建的容器才会把日志输出到loki)。
  • 新建容器时指定logging类型为loki,这样只有指定了logging的容器才会输出到loki

 

全局收集配置

编辑daemon.json。linux下默认路径是/etc/docker/daemon.json (需要sudo), windows则默认是%userprofile%\.docker\daemon.json

 

{
  "log-driver": "loki",
  "log-opts": {
    "loki-url": "http://YOUR_IP:3100/loki/api/v1/push",
    "max-size": "50m",
    "max-file": "10"
  },
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

 

记得把YOUR_IP换成loki所在主机的IP,一般都是本机的局域网地址,如果loki映射的端口换了记得这里也需要换。镜像仓库地址也可以换成自己云服务的。

其中max-size表示日志文件最大大小,max-file表示最多10个日志文件,都是对单个容器来说的。

 

然后重启docker服务。

sudo systemctl restart docker

在此之后创建的容器默认都会把日志发送到loki。

 

如果不全局配置,而只想特定的容器进行日志收集,则根据启动容器的方式,有两种配置方法。

docker run配置日志输出到loki

通过docker run启动容器,可以通过--log-driver来指定为loki。示例如下

docker run --rm --name=grafana --log-driver=loki --log-opt loki-url="http://YOUR_IP:3100/loki/api/v1/push" --log-opt max-size=50m --log-opt max-file=10 grafana/grafana
--log-driver=loki指定日志驱动器为loki
--log-opt loki-url则指定了loki的url
--log-opt max-size日志最大大小
--log-opt max-file日志文件最大数量

docker-compose 配置日志输出到loki

docker-compose 小于3.4可以对需要日志输出的配置添加配置如下 

每个容器服务加一个,例如

version: "3"
services:
  promtail:
    image: grafana/promtail
    container_name: promtail
    restart: always
    volumes:
      - $PWD:/etc/promtail
      - /app/promtail:/opt
      - /app/promtail/log:/var/log
    command: 
      -config.file=/etc/promtail/promtail-docker-config.yaml
    logging:
      driver: loki
      options:
        loki-url: "http://123.123.123.123:3100/loki/api/v1/push"
        max-size: "50m"
        max-file: "10"

注意:max-size和max-file这里需要加引号

 

对于3.4极其以上版本可以通过定义模板来减少代码量

 

version: "3.4"

x-logging:
  &loki-logging
  driver: loki
  options:
    loki-url: "http://YOUR_IP:3100/loki/api/v1/push"
    max-size: "50m"
    max-file: "10"

services:
  host:
    container_name: grafana
    image: grafana/grafana
    environment:
    - TZ=Asia/Shanghai
    - LANG=zh_CN.UTF-8
    logging: *loki-logging

 

&loki-logging表示定义模板

*loki-logging表示引用模板。对于多个服务就只需要对应加上一行 logging: *loki-logging 即可。相比之前的版本可谓是大大简化了

 

下面grafana 配置loki  ,loki文档https://www.bookstack.cn/read/loki/logql.md

最后一图

同名服务或者容器的会全显示日志,例如名字:a  会显示所有a服务或容器的日志 不分主机

主机的会显示这个主机所有发过来的日志,例如主机b  会显示b主机下所有传过来的服务或者容器

 

 

loki收集docker容器日志,loki+grafana_第1张图片

loki收集docker容器日志,loki+grafana_第2张图片

loki收集docker容器日志,loki+grafana_第3张图片

loki收集docker容器日志,loki+grafana_第4张图片

 

 

 

你可能感兴趣的:(elk)