Kubernetes轻量级日志收集系统Loki-Stack
一、Loki简介
Loki
是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs.
,类似于 Prometheus 的日志系统。然后,日志数据本身被压缩并存储在对象存储(例如S3或GCS)中的块中,甚至存储在文件系统本地。 小索引和高度压缩的块简化了操作,并大大降低了Loki的成本。
相较于EKL,Loki就显得很轻量级了;用了Loki以后,ELK突然不香了!哈哈~~~
二、Loki-stack组件
- Promtail
Promtail 是用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添加上 Label 标签,然后发送给 Loki,另外 Promtail 的服务发现是基于 Prometheus 的服务发现机制实现的。
- Loki
Loki 是可以水平扩展、高可用以及支持多租户的日志聚合系统,使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。因此,从 Promtail 接收到的日志和应用的 metrics 指标就具有相同的标签集。它不仅提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。
- Grafana
Grafana 是一个用于监控和可视化观测的开源平台,支持非常丰富的数据源,在 Loki 技术栈中它专门用来展示来自 Prometheus 和 Loki 等数据源的时间序列数据。还允许进行查询、可视化、报警等操作,可以用于创建、探索和共享数据 Dashboard
三、安装Loki-stack
3.1 配置loki helm仓库
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm pull grafana/loki-stack --untar --version 2.3.1
3.2 修改values.yaml文件
为了保险起见,不修改原本的文件,复制一份values.yaml
为values-prod.yaml
文件:
values-prod.yaml
loki:
enabled: true
persistence:
enabled: true
storageClassName: hostpath
accessModes:
- ReadWriteOnce
size: 10Gi
promtail:
enabled: true
grafana:
enabled: true
service:
type: NodePort
persistence:
enabled: true
storageClassName: hostpath
accessModes:
- ReadWriteOnce
size: 10Gi
3.3 安装loki-stack
$ cd ~/loki-stack
~/loki-stack $ helm install loki . -f values-prod.yaml -n logging
稍等片刻,等pod运行成功后,查看访问地址:
$ kubectl -n logging get pod
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 94m
loki-grafana-9694db697-v7bgj 1/1 Running 0 44m
loki-promtail-hz9st 1/1 Running 0 94m
loki-promtail-p9nf8 1/1 Running 0 94m
loki-promtail-xwgxz 1/1 Running 0 94m
$ kubectl -n logging get svc | grep loki-grafana
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loki-grafana NodePort 10.96.19.223 <none> 80:30099/TCP 94m
3.4 访问测试
获取密码指令:
$ kubectl -n logging get secret loki-grafana -o jsonpath='{.data.admin-password}' | base64 --decode ; echo
也可导入相应的模板13713
自行进行调整!