摘要:loki-stack这个架构是云原省的,它是grafana公司的一个产品。它是grafana labs开发的一个日志收集工具,它主要是想给kubernetes提供一个日志的检索功能。因为loki-stack是云原生的,所以是契合kubernetes的。日志的采
云原生,就是对于云框架专门去开发一套软件,适用于云框架,这种软件一般叫做云原生。
比如开发一套软件,专门符合kubernetes的特性诞生出来的,那就可以称作云原生。
ELk和EFK不是云原生,当kubernetes和openstack还没普及的时候,ELK和EFK就有了。
现在ELK和EFK是行业内的业界默认日志采集方案。
loki-stack这个架构是云原省的,它是grafana公司的一个产品。它是grafana labs开发的一个日志收集工具,它主要是想给kubernetes提供一个日志的检索功能。因为loki-stack是云原生的,所以是契合kubernetes的。日志的采集端是Promtail,存储端是Grafana Loki,还有GUI直接用的Grafana。同一个项目组的,所以直接复用Grafana是完全没有问题的。这就是loki-stack采取的组件:
logs日志➕Promtail➕Loki➕Grafana。
它的优势是:
资源消耗低
灵活性强
搜索速度快
缺点是:
案例相对比较少
loki是云原生的,kubernetes能够对接的概念被默认引入。
loki-stack相对于elk和efk来说,案例比较少。就是在整个行业中使用loki-stack的案例比较少,大部分主流日志方案是使用的ELk和EFK。
Loki-stack和ELK、EFK的对比:
1.存储方式:Loki使用类似于散列表的内容数据结构,不需要进行索引,查询速度快。ELK和EFK使用ElasticSearch进行索引,查询速度比较慢。
2.数据收集和处理:Loki使用Promtail进行数据收集和处理,EFK使用Fluentd进行数据收集和处理,ELK使用ElasticSearch进行数据收集和处理。Fluentd相对于Logstash更轻量级,拥有更好的可扩展性。Logstash可以处理大量数据源,但是可能需要更多的资源;Promtail是为了Loki设计的,它的性能通常会优于Logstash,特别是在大规模日志收集场景下。Promtail可以有效地处理大量的日志数据,并且具有良好的水平扩展性。
扩展性:ELK和EFK具有广泛的扩展性和适用性,可以对多种数据源进行处理,Loki的扩展性相对比较弱。
学习曲线:ELk和EFK相对于Loki具有更陡峭的学习曲线,因为它们具有更多的组件和功能。
可视化工具:ELK和EFK使用Kibana进行数据可视化,Kibana提供了丰富的图表、表格和仪表盘等可视化工具;Loki使用Grafana进行数据可视化,Grafana也是一个强大的可视化工具,但是它可能需要更多的配置和调整,grafana还可以对接zabbix提供一个强大的图形展示能力。
loki-stack是Grafana Labs团队最新的开源项目,是一个水平可扩展、高可用性、多租户的日志聚合系统。
Loki-stack是Like prometheus,but for logs。就是说抄着普罗米修斯的概念来的,但是专门为了日志服务的,而不是所谓的指标监控的。
Loki-stack与其他日志聚合系统相比,Loki-stack具有下面的一些特性:
1.不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki操作起来更加简单,更加节省成本。Loki官方提供了一个日志查询语言叫LogQL。
2.loki通过使用与Prometheus普罗米修斯相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。Prometheus会通过一系列的标签,做数据的多维分层,以此去区分数据还记录。通过标签去起到区分多维数据的作用。
3.Loki特别适合储存kubernetes Pod日志,诸如Pod标签之类的元数据会被自动删除和编入索引。
4.Loki-stack受Grafana的原生支持。在Grafana页面,它的数据语言是能够通过Loki直接获取的。
Loki-stack的组成分成:Promtail➕Loki➕Grafana。
1.Promtail: 用来将容器日志发送到Loki或者Grafana服务上的日志收集工具。
这个工具主要包括发现采集目标以及给日志流添加上label标签,然后发送给Loki。Promtail.的服务发现是基于Prometheus的服务发现机制实现的。Promtail和prometheus一样使用标签进行数据的多维分层。Promtail就是日志获取端,也就是数据采集端,类似日志采集器agent。
2.Loki Loki是受Prometheus的启发可以水平扩展,高可用以及支持多租户的日志聚合系统。
Loki使用了和Prometheus相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。
Loki从Promtail接收到的日志和应用的metrics指标具有相同的标签集。
Loki不仅提供了更好的日志和指标之上的上下文切换,还避免了对日志进行全文索引。
3.grafana Grafana是一个用于监控和可视化的开源平台,支持非常丰富的数据源。grafana本身不具备数据的收集功能和数据的存储功能,它只能从其他途径去获取数据,把这些获取到的数据通过图表的形式进行展现。在高版本的Grafana中还支持告警。
在Loki技术栈中,Grafana专门用来展示来自Prometheus普罗米修斯和Loki等数据源的时间序列数据。
Grafana可以进行查询、可视化和告警等操作。
Grafana可以用于创建、探索和共享数据Dashboard。
Grafana鼓励数据驱动
Loki-stack它的获取端用来把容器日志数据发送到Loki或者Grafana服务上的日志收集工具。日志获取端就是Promtail写入数据之后,会进入Ingester摄取器。摄取器要进行一定的过滤,摄取器也允许有多个。摄取服务负责在写入路径上将日志数据写入长期存储后端,存储后端包括对象存储的DynamoDB、S3、Cassandra等,并且在读取路径上返回内存中查询的日志数据。
如果写入被3个摄取器中的2个承认,就可以容忍一个摄取器丢失。但是不能容忍两个,因为这会导致数据丢失。
Loki默认配置为接受无顺序写入。
还有一段是读取数据的路径,读取从对象存储中读取到数据之后,通过读的查询前端进行展示数据,查询前端可以使用Grafana去进行实现。
prometheus普罗米修斯里面有一个叫alert manager的组件,专门用来告警。对于高版本的loki也支持告警策略,如果日志产生error等错误关键字,就可以让它去触发告警,发送到alert manager里面去,实现触发告警的功能。
Loki可以支持集群化,进行动态的服务发现,还支持把数据放在memcaches里面进行缓存,可以有效减轻整个在大的数据读取层面上的查询器消耗的压力。
有一些摄取器的数据是可以直接把被查询器所读取。
Loki默认接受无序写入,如果把时间的先后当成唯一的去确认日志前后关系的话,是不被允许的。
loki基于helm安装:
kubectl create ns loki
编辑values.yaml的时候需要注意一下组件的enabled状态是否为true。
helm install loki -n loki -f values.yaml .
或者执行:
helm install loki -f values . --namespace loki --create-namespace
创建完成后修改loki-grafana服务类型为NodePort。
查看grafana登录用户名和密码:
kubectl get secret loki-grafana -n loki jsonpath="{.data.admin-user}" | base64 --decode
kubectl get secret loki-grafana -n loki jsonpath="{.data.admin-password}" | base64 --decode
loki-stack起到日志检索的功能。
查看存储类:
kubectl get storageclass -n loki
登录到Grafana的Web GUI诫勉之后,可以点击explorer中的label brower去查看日志。
落日
鼓励的话语:此刻虽然落魄,却是重塑自我的雕琢。每一次跌倒,都是为了更稳地起跳!
来源:远航教育
