参考:
k8s学习(三十二)K8s部署Loki日志收集_码农-文若书生的博客-CSDN博客_k8s部署loki
loki日志收集全网最全教程(强推) - 腾讯云开发者社区-腾讯云
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的也可以直接复用
命令行运行
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
对于loki的docker plugin有两种使用方式。
编辑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启动容器,可以通过--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 小于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映射到了宿主机的3000端口,所以地址就为 http://YOUR_IP:3000
grafana默认用户名密码是admin和admin
第一次进入需要修改admin的密码



选择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)