使用 Helm 在 EKS 集群部署 Loki 收集 EKS 集群日志

介绍

Loki 是一个由 Grafana 实现的开源日志聚合系统,专为 Kubernetes 和容器化工作负载设计。本文将使用 Helm 工具在 Amazon EKS(Elastic Kubernetes Service)集群上部署 Loki 日志聚合系统。

前提条件

  • 已经设置好并且可以访问 EKS 集群。
  • 安装了 kubectlhelm 工具,并配置好可以连接到你的 EKS 集群。

软件要求

步骤

1. 添加 Loki Helm 仓库

首先,添加 Loki 的 Helm 仓库到你的 Helm 客户端中:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

2. 创建 Loki 的配置文件

创建一个 values.yaml 文件来配置 Loki 的 Helm 部署。以下是一个基本的配置示例:

deploymentMode: SingleBinary
loki:
  commonConfig:
    replication_factor: 1
  storage:
    type: 'filesystem'
  schemaConfig:
    configs:
    - from: "2024-01-01"
      store: tsdb
      index:
        prefix: loki_index_
        period: 24h
      object_store: filesystem # we're storing on filesystem so there's no real persistence here.
      schema: v13
singleBinary:
  replicas: 1
read:
  replicas: 0
backend:
  replicas: 0
write:
  replicas: 0

3. 使用 Helm 部署 Loki

使用 Helm 安装 Loki 到你的 EKS 集群中:

helm upgrade --install loki --values  values.yaml --namespace=loki grafana/loki

这将会在你的集群中创建 Loki 的相关资源。

4. 验证部署

使用以下命令检查 Loki 相关的 Pods 是否正常运行:

kubectl get pods -n loki
> kubectl get pods -n loki
NAME                          READY   STATUS    RESTARTS   AGE
loki-0                        1/1     Running   0          7d
loki-canary-2c2jm             1/1     Running   0          7d6h
loki-canary-5gc5d             1/1     Running   0          7d6h
loki-canary-dvbgj             1/1     Running   0          7d6h
loki-canary-xrvsh             1/1     Running   0          7d1h
loki-chunks-cache-0           2/2     Running   0          7d23h
loki-gateway-b8957b47-2zrmb   1/1     Running   0          7d23h
loki-results-cache-0          2/2     Running   0          29h

确保所有的 Pods 的状态为 Running

5. 访问 Loki

可以通过 Loki 服务访问 Loki 实例,例如 http://loki-gateway.loki.svc.cluster.local 这个地址会在后续配置 grafana 数据源时用到。

> kubectl get service -n loki
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
loki                 ClusterIP   172.20.114.51    <none>        3100/TCP,9095/TCP    7d23h
loki-canary          ClusterIP   172.20.187.211   <none>        3500/TCP             7d23h
loki-chunks-cache    ClusterIP   None             <none>        11211/TCP,9150/TCP   7d23h
loki-gateway         ClusterIP   172.20.198.116   <none>        80/TCP               7d23h
loki-headless        ClusterIP   None             <none>        3100/TCP             7d23h
loki-memberlist      ClusterIP   None             <none>        7946/TCP             7d23h
loki-results-cache   ClusterIP   None             <none>        11211/TCP,9150/TCP   7d23h

结论

我们已经使用 Helm 在 EKS 集群部署了 Loki,但是这并不能收集 EKS 所有 Pod 的日志,后续我们还需要安装 Promtail 来收集所有 Pod 的日志。