最轻量级的Kubernetes云原生日志框架Loki
Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流配置一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs,类似于 Prometheus 的日志系统。
一、Loki 是什么
Loki官方是这么介绍自己的: Loki 是一个 可水平扩展, 高可用, 多租户 的日志聚合收集系统, 并且追求高性能和易于部署.
对比一下它和别的日志收集系统:
- 由于它不创建全文索引, 而且只存储压缩后的非结构化日志和元信息索引, 所以很轻量级易于部署
- 索引和分组与 Prometheus 使用相同的 label
- 非常适合收集 k8s pod 日志信息, 类似 pod labels 这些元信息都是自动收集并添加索引的
- 直接可以对接 Grafana 作为日志查询界面
相对于 ELK 需要的资源更少, 并且更易于部署.
loki 组件也基本分为三个:
- promtail 日志收集 agent, 收集日志并发送给 loki
- loki 核心服务, 存储日志和索引, 并提供查询服务
- Grafana 日志查询界面
可以看到, 组件和 ELK 基本一样, 并且符合 k8s 的日志收集架构.
二、Loki 快速安装使用
根据Loki的组件架构, 可以看出 promtail 需要运行在所有运行应用容器的节点, 所以会是 DaemonSet, loki 作为核心服务, 带有持久化存储而且支持横向扩展, 所以应该是StatefulSet, Grafana 是比较基本的独立应用, 可以复用已部署的.
从官方的文档中看,提供了5中安装方法
- 使用Tanka进行安装(推荐)
- 通过helm安装
- 通过Docker或Docker Compose安装
- 在本地安装并运行
- 从源码编译安装
官方推荐用Tanka来安装,是官方提供的一个安装工具,不过相信大部分人都不知道这个工具。所以,对于kubernetes来说,最简单的方式还是使用 helm, loki 官方已经提供了生产可用的 chart.
添加Loki的源到Helm,并更新源
helm repo add loki https://grafana.github.io/loki/charts
helm repo update
# 默认配置 helm upgrade --install loki loki/loki-stack
# 自定义namespace helm upgrade --install loki --namespace=loki loki/loki
部署Loki 套件包括 (Loki, Promtail, Grafana, Prometheus)
helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false
获取grafana的登陆密码
kubectl get secret --namespace <YOUR-NAMESPACE> loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
映射grafana的登陆端口到3000
kubectl port-forward --namespace <YOUR-NAMESPACE> service/loki-grafana 3000:80
用浏览器打开 http://localhost:3000 并用上面得到的密码登陆,用户名为 admin。
在grafana中增加Loki Data Source, 对应URL: http://loki:3100/ for Loki.
点击 Explore 并且选择 label 就可以查看日志了
三、部署nginx测试日志收集
笔者用springboot简单写了个程序,一秒钟打印一条日志处理
apiVersion: apps/v1 kind: Deployment metadata: name: loki-springboot-test labels: app: log-test spec: replicas: 1 selector: matchLabels: app: log-test template: metadata: labels: app: log-test spec: containers: - name: log-test image: log-test:0.0.1 ports: - containerPort: 80
部署好看能正常收集到日志
四、总结
提起日志收集,相信大家首先想到的是EFK(Elasticsearch、Fluentd、Kibana),能搜索到也是EFK的解决方案,但是Elasticsearch 中的数据以非结构化 JSON 对象的形式存储在磁盘上。每个对象的键和每个键的内容都有索引。然后可以使用 JSON 对象来定义查询(称为 Query DSL)或通过 Lucene 查询语言来查询数据。功能强大,但是部署维护比较难,学习成本也比较高,并且系统资源占用非常高,没有3台服务器很难搭建起来,但是其实对应日志我们只需要能正确并快速的收集到,并存储起来,需要查询的时候能简单的查询到需要的日志。
相比之下,Loki受 Prometheus 启发的可以水平扩展、高可用以及支持多租户的日志聚合系统,主要体现在以下几点:
- 使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引
- 从 Promtail 接收到的日志和应用的 metrics 指标就具有相同的标签集
- 不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。
因此,当笔者看到Loki的日志方案后,毫不犹豫的在公司内部进行了试用,非常轻量,非常丝滑,这才是我们需要的云原生日志解决方案。
推荐给大家。
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-2742.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 11月15日|20.1M/S,Shadowrocket/Clash/SSR/V2ray免费节点订阅链接每天更新
- 11月21日|20.9M/S,SSR/Shadowrocket/Clash/V2ray免费节点订阅链接每天更新
- 11月29日|18.1M/S,SSR/Clash/Shadowrocket/V2ray免费节点订阅链接每天更新
- 11月28日|19.7M/S,V2ray/SSR/Shadowrocket/Clash免费节点订阅链接每天更新
- 11月27日|19.2M/S,SSR/Shadowrocket/Clash/V2ray免费节点订阅链接每天更新
- 11月24日|22.5M/S,V2ray/Shadowrocket/Clash/SSR免费节点订阅链接每天更新
- 11月23日|22.6M/S,Shadowrocket/V2ray/Clash/SSR免费节点订阅链接每天更新
- 11月22日|21.3M/S,V2ray/Shadowrocket/SSR/Clash免费节点订阅链接每天更新
- 11月30日|18M/S,Clash/V2ray/SSR/Shadowrocket免费节点订阅链接每天更新
- 11月16日|19.9M/S,Shadowrocket/Clash/SSR/V2ray免费节点订阅链接每天更新
最新文章
- 12月10日|21.8M/S,SSR/V2ray/Clash/Shadowrocket免费节点订阅链接每天更新
- 12月9日|20.5M/S,V2ray/Clash/Shadowrocket/SSR免费节点订阅链接每天更新
- 12月8日|21.5M/S,V2ray/Clash/Shadowrocket/SSR免费节点订阅链接每天更新
- 12月7日|18.5M/S,SSR/V2ray/Clash/Shadowrocket免费节点订阅链接每天更新
- 12月6日|19.9M/S,SSR/Shadowrocket/V2ray/Clash免费节点订阅链接每天更新
- 12月5日|18.5M/S,Clash/SSR/Shadowrocket/V2ray免费节点订阅链接每天更新
- 12月4日|21.8M/S,Clash/SSR/Shadowrocket/V2ray免费节点订阅链接每天更新
- 12月3日|21.7M/S,Shadowrocket/Clash/V2ray/SSR免费节点订阅链接每天更新
- 12月2日|18.5M/S,Clash/SSR/V2ray/Shadowrocket免费节点订阅链接每天更新
- 12月1日|21.8M/S,Clash/SSR/V2ray/Shadowrocket免费节点订阅链接每天更新