「LOGGING」- 部署 Grafana Loki 服务,实现日志集中管理

  CREATED BY JENKINSBOT

问题描述

我们采用 Promtail 来采集日志,Grafana Loki 来存储日志,并对日志进行集中管理(即单个 Grafana Loki 实例来管理多个集群日志)。

该笔记将记录:采用 Grafana Loki 进行日志集中管理的方法,若干需要考虑的问题,以及相关问题的解决办法;

解决方案

在部署前,我们需要考虑的问题:

部署方式

我们直接采用 Grafana Loki 的微服务式(分布式)部署方式,原因如下:
1)官方文档也推荐该部署模式,官方文档也表示模式也最适合 Kubernetes 部署;
2)也符合我们的部署场景,我们需要在 Kubernetes Cluster 中运行日志采集;

我们采用 Helm 进行部署,原因是不用引入新的技术栈。而未采用官方推荐的 Tanka 进行部署,原因是 Tanka 暂时还没有成为像 Helm 那样广泛使用,引入新的工具需要额外的学习成本、维护成本、培训成本;

代理认证

在我们的场景中,鉴于是多集群日志管理,流量需要通过公网(部署 VPN 需要而外成本,所以流量目前是通过公网的),所以我们需要对 Grafana Loki 进行认证,防止非法访问。

但是 Grafana Loki 本身并不提供认证功能(Authentication),需要增加前端服务来提供认证,比如 Nginx Reverse Proxy 等等。

不过,这是个常见需求,所以 Grafana Loki 的 Helm Chart 包含 Basic Auth 特性,在部署的设置打开相关配置即可。

关于 Basic Auth 的位置
1) 虽然 Basic Auth 是在 Grafana Loki Helm Chart 的 ingress 中进行设置,但是实际的 Basic Auth 是添加到 Nginx 当中的;
2)所以不管 Grafana 还是 Promtail 服务,当访问 Gateway 服务时,都需要配置相关的 Basic Auth 认证;

日志标签

我们需要区分来自不同集群的日志,即 Promtail 需要增加标签,以表明该日志所来自的集群。

如果在 scrape_configs/Job 中增加,则每个都需要增加响应的标签。所以,我们使用 clients.external_labels 属性,来为所有 clients 增加标签;

日志保留

Retention | Grafana Loki documentation

Compactor 执行日志清理工作,而日志保留时长通过 limits_config 进行控制;