将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
- 修改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获取数据,日志和异常都可以获得
下一步创建面板,grafana有很多展现方式,我只是简单测试一下,日志来了可以自由发挥
添加监控和告警,或者当通知来用,比如你的异步队列执行的结果
本作品采用《CC 协议》,转载必须注明作者和本文链接