Grafana Loki是能够组成功能齐全的日志记录堆栈的一组组件。
与其余日志记录系统不一样,Loki是基于仅索引有关日志的元数据的想法而构建的:标签(就像Prometheus标签同样)。 而后,日志数据自己被压缩并存储在对象存储(例如S3或GCS)中的块中,甚至存储在文件系统本地。 小索引和高度压缩的块简化了操做,并大大下降了Loki的成本。
相较于EKL,Loki就显得很轻量级了;用了Loki之后,ELK忽然不香了!哈哈~~~git
先放两张图
github
Promtail 是用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具,该工具主要包括发现采集目标以及给日志流添加上 Label 标签,而后发送给 Loki,另外 Promtail 的服务发现是基于 Prometheus 的服务发现机制实现的。docker
Loki 是能够水平扩展、高可用以及支持多租户的日志聚合系统,使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引。所以,从 Promtail 接收到的日志和应用的 metrics 指标就具备相同的标签集。它不只提供了更好的日志和指标之间的上下文切换,还避免了对日志进行全文索引。shell
Grafana 是一个用于监控和可视化观测的开源平台,支持很是丰富的数据源,在 Loki 技术栈中它专门用来展现来自 Prometheus 和 Loki 等数据源的时间序列数据。还容许进行查询、可视化、报警等操做,能够用于建立、探索和共享数据 Dashboardless
接下来咱们就来上手体验Loki-stack工具
一、前提,须要有一个k8s集群和安装好helm工具
二、添加helm源fetch
helm repo add loki https://grafana.github.io/loki/charts 下载到本地,也能够直接安装,由于须要修改存储类及其余一些配置,我习惯下载到本地,方便修改调试 helm fetch loki/loki-stack tar -zxf loki-stack-0.38.1.tgz cd loki-stack/ [root@ loki-stack]# ls -al drwxr-xr-x. 7 root root 85 Jul 2 07:25 charts -rwxr-xr-x. 1 root root 369 Jul 1 01:46 Chart.yaml -rwxr-xr-x. 1 root root 342 Jul 1 01:46 .helmignore -rwxr-xr-x. 1 root root 1662 Jul 1 01:46 README.md -rwxr-xr-x. 1 root root 533 Jul 1 01:46 requirements.lock -rwxr-xr-x. 1 root root 595 Jul 1 01:46 requirements.yaml drwxr-xr-x. 3 root root 80 Jul 2 08:46 templates -rwxr-xr-x. 1 root root 206 Jul 16 00:53 values.yaml
三、修改loki-stack的values.yaml文件,我这里只安装了loki和promtail,而grafana和prometheus我就用集群已经部署好的prometheus-operator了ui
[root@ ]# cat values.yaml loki: enabled: true promtail: enabled: true
四、修改loki的values.yaml,
主要修改storageClass和persistence size,开启serviceMonitor以便监控loki3d
[root@ loki-stack]# cd charts/loki/ [root@ loki]# ll total 20 -rw-r--r-- 1 root root 367 Nov 28 00:31 Chart.yaml -rw-r--r-- 1 root root 1846 Nov 28 00:31 README.md drwxr-xr-x 2 root root 4096 Dec 1 09:14 templates -rw-r--r-- 1 root root 6695 Dec 1 09:15 values.yaml persistence: enabled: true storageClass: "rbd" accessModes: - ReadWriteOnce size: 100Gi annotations: {} serviceMonitor: enabled: true interval: "" additionalLabels: {} annotations: {} # scrapeTimeout: 10s
五、修改promtail的values.yaml
若是你想添加更多的日志目录,能够在这里添加调试
# Extra volumes to scrape logs from volumes: - name: docker hostPath: path: /var/lib/docker/containers - name: pods hostPath: path: /var/log/pods
六、执行部署
cd loki-stack kubectl create ns loki helm install loki -n loki -f values.yaml . [root@ loki-stack]# helm ls -n loki NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION loki loki 1 2020-12-01 09:15:22.971437761 +0800 CST deployed loki-stack-2.1.0 v2.0.0
七、登陆到已有的grafana界面,添加loki源
首先获取到loki的服务地址
[root@ loki-stack]# kubectl get svc -n loki NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE loki NodePort 10.101.129.255 <none> 3100:30439/TCP 92m loki-headless ClusterIP None <none> 3100/TCP 92m
填好信息之后,点击Save&Test,确认grafana能够链接到loki
八、点击Explore,就能够使用LogQL 查询日志,以下图
固然也能够导入别人作好的模板,更多Dashboard能够到官网https://grafana.com/grafana/dashboards 查看