洛基(Loki),是北欧神话中的恶作剧和谎言之神,亦是火神。他是巨人法布提(Farbauti)和女巨人劳菲(Laufey)的儿子,阿萨神族主神奥丁(Odin)的义兄弟,虽然他比奥丁要年轻许多。但他的个性狡猾奸诈,经常出言不逊,与其他神祇争吵不休。他是北欧神话体系里极为重要的神祇之一,他在诸神黄昏扮演重要角色。
简介
Loki是受Prometheus启发由Grafana Labs团队最新的开源项目,是水平可扩展,高可用性,多租户的日志聚合系统。 Google go语言开发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。官方的介绍就是:Like Prometheus, but for logs.
,类似于 Prometheus 的日志系统。
特性
- 不对日志进行全文索引。
Loki
中存储的是压缩后的非结构化日志,并且只对元数据建立索引,因此Loki
具有操作简单、低成本的优势。 - 使用与 Prometheus 相同的标签。
Loki
通过标签对日志进行索引和分组,这使得日志的扩展和操作效率更高。 - 特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引。
- Grafana 原生支持。
Loki
日志系统由以下3个部分组成:
- loki是主服务器,负责存储日志和处理查询。
- promtail是专为loki定制的代理,负责收集日志并将其发送给 loki 。
- Grafana用于 UI展示。
系统架构
-
Promtail收集并将日志发送给Loki的 Distributor 组件
-
Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester
-
Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端
-
Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;
如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果。
Loki与ELK比较
- ELK功能丰富,但是架构复杂,资源占用高,很多功能系统用不上,造成很多资源浪费。
- ELK进行全文索引。安装部署复杂。
- Loki不对日志全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
- Loki通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
- Loki安装部署简单快速,且受 Grafana 原生支持。
假如系统依赖于ES,建议使用ELK作为日志系统。若系统不依赖ES,选择用Loki。
安装部署Loki
使用docker-compose安装
编写docker-compose.yaml文件
version: "3"
networks:
loki:
services:
loki:
container_name: loki
image: grafana/loki:1.5.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
container_name: promtail
image: grafana/promtail:1.5.0
volumes:
- /home/chinda/logs:/var/log
- /mydata/loki/promtail/promtail.yaml:/etc/promtail/docker-config.yaml
command: -config.file=/etc/promtail/docker-config.yaml
networks:
- loki
grafana:
container_name: grafana
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
注意: 数据卷需将promtail.yaml文件创建出来。
配置promtail.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
运行容器
docker-compose -f docker-compose.yaml up -d
配置Grafand
- 登录到Grafana实例。 如果这第一次运行Grafana,则用户名和密码均默认为admin。
- 在Grafana中,通过左侧栏中的齿轮图标提添加数据源。
- 选择Loki数据源
- 添加监听接口http://loki:3100
- 左侧栏中的Explore中选择labels查看日志。
UI控制台
http://localhost:3000
账号:admin
密码: admin