EFK 是大而全,Promtail + Loki + Grafana 是小而精
Loki 采用对日志进行打标签的方式而非全文索引的方式,从而大大降低了对服务器资源的依赖
下面是两者的区别
- EFK落盘是落在ELasticsearch上,Loki 落盘是落在存储的文件上,可以放在 本地硬盘、S3桶 或者其他 PV卷上
- EFK存储的格式是经过倒排索引处理的 二进制格式,Loki 存储的是经过Tag的普通文本(Plaintext)
- EFK可以通过 lucene query language 查询内容,Loki通过 LogQL
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
kubectl create namespace loki
helm upgrade --install loki --namespace=loki grafana/loki-stack --set grafana.enabled=true
如果需要持久化
参考https://grafana.com/docs/loki/next/installation/helm/
helm upgrade --install loki --namespace=loki grafana/loki-stack --set grafana.enabled=true,loki.persistence.enabled=true,loki.persistence.storageClassName=standard,loki.persistence.size=200Gi
helm upgrade --install loki --namespace=loki grafana/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false,loki.persistence.enabled=true,loki.persistence.storageClassName=gp2,loki.persistence.size=200Gi
grafana.enabled=true
prometheus.enabled=true
prometheus.alertmanager.persistentVolume.enabled=false
prometheus.server.persistentVolume.enabled=false
loki.persistence.enabled=true
loki.persistence.storageClassName=gp2
loki.persistence.size=200Gi
$ kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
kubectl port-forward --namespace loki service/loki-grafana 3000:80
如果使用的是 rancher
kubectl port-forward --namespace loki-stack service/loki-stack-grafana 3000:80
可以看到已经自动添加了 data source loki