一.传统的日志方案
EFK:Elastic Search+Fluentd+Kibana
ELK: Elastic Search+Logstash+Kibana
传统日志方案的优势:
1.功能完善
2.具有丰富的案例,在行业中已经被广泛应用
缺点:
1.灵活性差
2.资源消耗量大(针对的是kubernetes环境而言)
二.云原生的日志服务器Loki
之所以能称之为云原生,是因为Loki是云场景的特性而诞生的一个日志解决方案。
Loki的架构:Promtail+Grafana loki+Grafana
Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
Promtail介绍:
1.用来将容器日志发送到Loki 或者 Grafana 服务上的日志收集工具
2.该工具主要包括发现采集目标以及给日志流添加上Label 标签 然后发送给Loki
3.Promtail 的服务发现是基于 Prometheus 的服务发现机制实现的
loki介绍:
1.受 Prometheus 启发的可以水平扩展、高可用以及支持多租户的日志聚合系统
2.使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引
3.从 Promtail 接收到的日志和应用的metrics 指标就具有相同的标签集
4.不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引
Grafana介绍:
1.一个用于监控和可视化观测的开源平台
2.支持非常丰富的数据源
3.在 Loki 技术栈中它专门用来展示来自Prometheus 和 Loki 等数据源的时间序列数据
4.可进行查询、可视化、报警等操作,可以用于创建、探索和共享数据 Dashboard,鼓励数据驱动
三.Loki与传统日志方案EFK等对比
1.存储方式:Loki 使用类似于散列表的内存数据结构,不需要进行索引,查询速度快;ELK和 EFK 使用Elasticsearch进行索引,查询速度可能比较慢。
2.数据收集和处理:Loki 使用 Promtail 进行数据收集和处理,EFK 使用 Fluentd 进行数据收集和处理,ELK 使用Logstash 进行数据收集和处理,Fluentd 相对于 Logstash 更轻量级,拥有更好的可扩展性;Logstash 可以处理大量数据源,但可能需要更多的资源;Promtail 是为 Loki设计的,它的性能通常会优于 Logstash,特别是在大规模日志收集场景下。Promtail可以有效地处理大量的日志数据,并且具有良好的水平扩展性。
3.扩展性:ELK和 EFK具有广泛的扩展性和适应性,可以对多种数据源进行处理;Loki 的扩展性相对较弱。
4.学习曲线:ELK和 EFK 相对于 Loki具有更陡峭的学习曲线,因为它们具有更多的组件和功能。
5.可视化工具:ELK和 EFK 使用 Kibana 进行数据可视化,Kibana 提供了丰富的图表、表格和仪表盘等可视化工具;Loki 使用 Grafana 进行数据可视化,Grafana 也是一个强大的可视化工具,但它可能需要更多的配置和调整。
Loki的优势:资源消耗低,灵活性强,搜索速度快
Loki的劣势:案例相对较少
四.Loki的安装
基于helm进行安装,准备loki-stack-2.9.11.tgz文件
将压缩包解压,进入到loki-stack文件夹中,修改values.yaml文件,第一处地方修改存储类的名字为自己k8s集群上已有的存储类名;第二处地方修改部署组件的挂载主机目录为docker的数据目录,默认在 /var/lib/docker/containers下,然后保存
#kubectl create ns loki
#helm install loki -n loki -f values.yaml .
查看部署pod是否都正常运行
查看svc,可修改工作模式为nodeport类型以便访问
# kubectl edit svc loki-grafana -n loki
type: NodePort
在浏览器输入访问
用户名和密码需要去secret寻找并解码
#kubectl get secret loki-grafana -n loki -o yaml
[root@k8s-master loki-stack]# echo -n 'YWRtaW4=' | base64 -d
admin
[root@k8s-master loki-stack]# echo -n 'b2QzV0hFbm9IbzkwblFRZ3BiaHlOTXhScElzU21tOG1ZUmtRZWRKMA==' | base64 -d
od3WHEnoHo90nQQgpbhyNMxRpIsSmm8mYRkQedJ0
输入得到的用户名和密码即可登录
点击左侧导航栏的Explore,即可进到查询日志界面,点击Log browser,然后根据筛选,比如标签app,名字空间namespace,pod名即可查到指定的日志