将laravel log输出到容器,再通过loki插件输出到 grafana 并通过grafana进行监控和通知

最近在生产环境中需要将日志集中管理。之前使用的是ELK。目前已经部署了grafana套件,打算切换到grafana来管理日志。loki是一个轻量级日志管理工具。负责采集和保存日志并提供给grafana来图形化

对于laravel有几种方案,一个是使用laravel的插件来实现,不太合适,因为服务已经拆分成无状态服务(API)和有状态服务(队列),已备自动伸缩。总不能在每个容器中再添加各个日志面板。
方案二是在每个容器中将log打出来,然后统一在采集到日志数据库。也不合适。节点之间的文件共享本来就是问题。
方案三最为简单,将每个容器的log统一打出到docker标准log,通过loki插件将log输出到loki中。这样别管怎么伸缩都可以获取所有日志。开整

前提是你有一个loki服务启动了,grafana环境

1 配置laravel应用将log打到容器标准输出

vi .env

LOG_CHANNEL=errorlog

2 安装docker 的loki插件

docker plugin ls
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
  1. 修改docker file或者docker composer file,增加将容器的log发送到loki
    docker run -d \
    --network host \
    --log-driver=loki \
    --log-opt loki-url="http://xxxxx:3100/loki/api/v1/push" \
    --log-opt loki-retries=5 \
    --log-opt loki-batch-size=100 \
    --log-opt no-file=true \
    --restart=always --name $(NAME) $(IMAGE):$(TAG)

composer file

version: '3'
services:      
  app:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - COMPOSER_PROCESS_TIMEOUT=6000      
    ports:
      - 8290:80
    volumes:
      - /etc/hosts:/etc/hosts      
      - ../src:/var/www/html
    logging:
      driver: loki
      options:
        loki-url: "http://xxxxx:3100/loki/api/v1/push"
        loki-retries: "5"
        loki-batch-size: "100"
        no-file: "true"
        ``

4 使用explore获取数据,日志和异常都可以获得

  1. 下一步创建面板,grafana有很多展现方式,我只是简单测试一下,日志来了可以自由发挥

  2. 添加监控和告警,或者当通知来用,比如你的异步队列执行的结果

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!