日志收集系统Loki
grafana loki 是可以组成功能齐全的日志记录堆栈的一组组件
与其他日志记录系统不同,Loki是基于仅索引有关日志的元数据的想法而构建的: 标签。
日志数据本身被压缩并存储在对象存储(例如s3或GCS)中的块中,甚至存储在文件系统本地。
小索引和高度压缩的块简化了操作,并大大降低了Loki的成本。
基于Loki的日志收集系统
Loki- stack子系统
-
Promtail
- 将容器日志发送到loki或者grafana服务上的日志收集工具
- 发现采集目标以及给日志流添加上label,然后发送给Loki
- promtail的服务发现是基于prometheus的服务发现机制实现的,可以查看configmap loki-promtail了解细节。
-
Loki
- Loki是可以水平扩展、高可用以及支持多租户的日志聚合系统。
- 使用和prometheus相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。
- promtail接收到的日志和应用的metrics指标具有相同的标签集。
-
grafana
- grafana是一个用户监控可可视化观测的开源平台,支持非常丰富的数据源。
- 在Loki技术栈中它专门用来展示来自prometheus和Loki等数据源的时间序列数据。
- 允许进行查询、可视化、报警等操作,可以用于创建、探索和共享数据dashboard。
Loki架构
Loki组件
- Distributor(分配器)
- 分配器服务负责处理客户端写入的日志。
- 一旦分配器接收到日志数据,它就会把它们分成若干批次,并将它们并行地发送到多个采集器去。
- 分配器通过grpc和采集器进行通信。
- 它们是无状态的,基于一致性哈希,我们可以根据实际需要对它们进行扩缩容。
- Ingester(采集器)
- 采集器服务负责将日志数据写入长期存储的后段(dynameodb、s3、cassanbdra等等)。
- 采集器会校验采集的日志是否乱序。
- 采集器验证接收到的日志行是按照时间戳递增的顺序接收的,否则日志行将被拒绝并返回错误。
- Querier(查询器)
- 查询器服务负责处理LogQL查询语句来评估存储在长期存储中的日志数据。
一、使用helm安装Loki
1、添加repo
helm repo add grafana https://grafana.github.io/helm-charts
helm pull grafana/loki-stack
2、安装
tar -xvf loki-stack-*.tgz
helm upgrade --install loki ./loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false
二、简单使用Loki
1、修改grafann访问方式为nodeport
kubectl edit svc loki-grafana
2、查看登陆密码
kubectl get secret loki-grafana -oyaml -n default
#Base64解码
echo "UkVTZ0VEVDY0cXI3YjRXNjhmYjRreVB4Q1Jrc2hyQzJZWDJoUjBXYg==" | base64 -d
#解析密码为
RESgEDT64qr7b4W68fb4kyPxCRkshrC2YX2hR0Wb
3、登陆grafana
http://192.168.0.61:31778/login
4、使用grafana展示Loki数据