zoukankan      html  css  js  c++  java
  • docker容器使用loki收集日志

    docker-compose安装loki套件(loki+promtail+grafana)

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

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

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

    docker-compose.yml内容如下

    version: "3"
    
    networks:
      loki:
    
    services:
      loki:
        image: grafana/loki
        restart: always
        environment:
        - TZ=Asia/Shanghai
        - LANG=zh_CN.UTF-8
        ports:
        - 3100:3100
        networks:
        - loki
    
      promtail:
        image: grafana/promtail
        restart: always
        environment:
        - TZ=Asia/Shanghai
        - LANG=zh_CN.UTF-8
        networks:
        - loki
      
      grafana:
        image: grafana/grafana:master
        restart: always
        environment:
        - TZ=Asia/Shanghai
        - LANG=zh_CN.UTF-8
        ports:
        - 3000:3000
        networks:
        - loki

    如果只用docker plugin来收集日志则可以把promtail部分删除,已经有grafana的也可以直接复用

    安装loki的docker plugin

    命令行运行

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

    对于loki的docker plugin有两种使用方式。

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

    全局收集配置

    编辑daemon.json。linux下默认路径是/etc/docker/daemon.json (需要sudo), windows则默认是%userprofile%.dockerdaemon.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可以对需要日志输出的配置添加配置如下

    logging:
      driver: loki
      options:
        loki-url: "http://YOUR_IP: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显示和过滤日志

    一开始安装的时候将grafana映射到了宿主机的3000端口,所以地址就为 http://YOUR_IP:3000

    grafana默认用户名密码是admin和admin

    第一次进入需要修改admin的密码

    添加loki数据源

     

     选择loki。

    因为一开始安装grafana和loki是在一个docker-compose里,所以默认在同一个子网下,因此可以url可以直接写http://loki:3100。如果grafana和loki是分开的,则需要改为填loki所在的宿主机ip

     

    点击  保存和测试 。会提示链接成功。

    查看过滤日志

    左侧菜单栏选择探索 

    label里有对应选项可以选择。  compose_project就是docker-compose的项目名  compose_service就是其中的服务名   container_name就是容器名。这几个基本就够我们定位到具体的某个容器了。

     

    关键字查询    |~ "keyword"      文档链接: LogQL文档

    然后是时间段选择

    后续应该是loki增加缓存以优化查询速度和集群配置(k8s)

  • 相关阅读:
    快速认识ELK中的L
    HBase启动和停止命令
    Kafka 快速起步(作者:杜亦舒)
    Kafka 消息存储及检索(作者:杜亦舒)
    HBase集群搭建
    Kafka消息保证不丢失和重复消费问题
    Kafka文件的存储机制
    Kafka的配置文件详细描述
    kafka常用操作命令
    BZOJ1769 : [Ceoi2009]tri
  • 原文地址:https://www.cnblogs.com/turingguo/p/13847003.html
Copyright © 2011-2022 走看看