分布式日志轻量级方案
Loki VS ELK
Loki 和 ELK(Elasticsearch, Logstash, Kibana)都是常用的日志处理系统,它们各自具有一些优点。下面是 Loki 相对于 ELK 的几个优点:
- 存储效率更高:Loki 使用了压缩和切割日志数据的方法来减少存储空间的占用,相比之下,ELK 需要维护一个大的索引,需要更多的存储空间。
- 查询速度更快:Loki 使用类似 Prometheus 的标签索引机制存储和查询日志数据,这使得它能够快速地进行分布式查询和聚合,而不需要将所有数据都从存储中加载到内存中。而ELK需要将数据从存储中加载到内存中进行查询,查询速度相对较慢。
- 部署和管理更容易:Loki 是一个轻量级的日志聚合系统,相比之下,ELK 需要部署和管理多个组件,需要更多的资源和人力成本。
通过docker-compose安装Loki、grafana套件
loki进行日志聚合处理 类似elk中的es
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
grafana:
image: grafana/grafana:master
restart: always
environment:
- TZ=Asia/Shanghai
- LANG=zh_CN.UTF-8
ports:
- 3000:3000
networks:
- loki
每台服务端安装loki的docker插件
命令行安装
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
更新插件
docker plugin disable loki --force
docker plugin upgrade loki grafana/loki-docker-driver:latest --grant-all-permissions
docker plugin enable loki
systemctl restart docker
对于loki的docker plugin有两种使用方式。
- 配置daemon.json,收集此后创建的所有容器的日志(注意,是配置daemon.json后重启docker服务后创建的容器才会把日志输出到loki),如果是已有的容器需要重建容器。
- 新建容器时指定logging类型为loki,这样只有指定了logging的容器才会输出到loki
编辑daemon.json。linux下默认路径是/etc/docker/daemon.json (需要sudo), windows则默认是%userprofile%.docker\daemon.json ,编辑添加完成后,需要重启docker daemon即可。
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://YOUR_IP:3100/loki/api/v1/push",
"max-size": "50m",
"max-file": "10"
},
}
Grafana显示和过滤日志
一开始安装的时候将grafana映射到了宿主机的3000端口,所以地址就为 [http://YOUR_IP:3000]
grafana默认用户名密码是admin和admin
第一次进入需要修改admin的密码
左侧菜单configuraiton -> Data Source -> Add Data Source -> loki
在url处配置loki运行地址,保存并测试,同页面点击explore即可查看日志
查询日志
通过搜索语句{compose_service="jeecg-boot-system"} |= "spring"
,点击run query,可查询jeecg-boot-system服务下,包含“spring”的日志。
LogQL 表达式功能丰富,具体参见:https://grafana.com/docs/loki/latest/logql/log_queries