Loki日志聚合系统快速起步¶
Loki是受 Prometheus监控 启发的水平可扩展、高可用、多租户日志聚合系统。Loki的设计非常经济高效且易于操作。
Loki 不索引日志的内容,而是为每个日志流建立一组标签 这意味着不能实现灵活的全文搜索(相比较 Elasticsearch ),但是带来了高效率的数据存储(占用极少的磁盘空间)以及适合预知查询组合方式(标签查询)的快速日志搜索。
Loki 日志聚合系统是 Grafana通用可视分析平台 Labs于 2018年开发的平台,具备以下优点:
非常容易集成到Kubernetes集群和 Prometheus监控 + Grafana通用可视分析平台 (可视化展示)
可以采集任何格式的日志
运行成本低: 存储数据少且写入快速,索引占用空间也很小,能够实现快速查询
工作原理¶
使用
Promtail
作为日志采集器: 结合Prometheus的 Prometheus服务发现 以及类似功能,实现在存储到Loki之前就完成日志的标签(labeling), 转换(transforming) 和 过滤(filtering)在
Loki
中存储日志: Loki不对日志文本进行索引 ! 相反,存储对象是直接在数据流中进行分组 并且 使用标签(labels)进行索引。这意味着降低成本,也意味着能够实现毫秒级的查询使用
LogQL
查询语言: 在 Grafana通用可视分析平台 中剋直接使用LogQL
查询和可视化日志,也可以使用LogCLI
实现命令行功能基于日志告警: 在输入的日志数据上可以通过
Loki
设置告警,告警可以发送给 Alertmanager 路由给合适的处理团队
典型的Loki日志软件栈包括以下3个组件:
Agent: 也就是
Promtail
,负责抓取日志,通过添加标签和通过一个Loki的HTTP API将日志流化并推送到LokiLoki: 主要服务器负责日志存储以及处理查询(有3种不同部署模式)
Grafana通用可视分析平台 : 查询和显示日志数据,也可以通过
LogCLI
命令行查询日志
特点¶
Loki是受 Prometheus监控 启发的水平可扩展、高可用、多租户的日志聚合系统
Loki与Prometheus的区别在于: Loki关注日志而不是metrics,Loki通过推送而不是拉取来收集日志(主流的日志采集系统都是这样)
Loki设计经济高效且高度可扩展: 与其他日志系统不同(例如 Elasticsearch ),Loki不对日志内容索引,而只对日志的元数据索引,作为每个日志流的一组标签
日志流(log stream)是一组共享相同标签的日志: 标签帮助Loki在数据存储中找到日志流,所以拥有高质量的标签是高效执行查询的关键
备注
我理解Loki的日志标签类似于关系型数据库的表结构,预先创建好Label就相当于数据库的字段,就能够根据字段(标签)进行查询
优点是存储空间占用小,查询迅速。
缺点是只有预先知道(设置)的标签才能提供查询,难以适应千变万化的日志查询需求
日志数据被压缩以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS) ,甚至可以为了开发或概念验证存储在文件系统中
小索引和高度压缩的块简化了操作并显著降低了Loki的成本
备注
日志存储在S3或GCS云存储中,表明Loki更适合部署在特定的云计算服务商平台,实际上这也显示了Loki的定位,就是基于云计算(厂商)部署,为了节约云计算费用,舍弃了高级的日志内容索引,而针对特定查询场景进行优化(很多初级用户可能只需要基础的特定查询)可以极大降低运营成本。