菜单
开源 RSS

Grafana Loki 入门

Loki 是一个水平可伸缩、高可用、多租户日志聚合系统,灵感来自 Prometheus。它设计得非常经济高效且易于操作。它不索引日志内容,而是为每个日志流索引一组标签。

由于所有 Loki 实现都是独一无二的,因此每个用户的安装过程都不同。但在此过程中有一些步骤是所有安装共有的。

收集日志和查看日志数据通常包括以下步骤:

Loki implementation steps

  1. 使用推荐的Helm chart,以简单的可伸缩模式在 Kubernetes 上安装 Loki。向 Helm chart 提供您的对象存储认证详细信息。
  2. 部署Grafana Alloy以从您的应用程序收集日志。
    1. 在 Kubernetes 上,使用 Helm chart 部署 Grafana Alloy。配置 Grafana Alloy 以抓取您的 Kubernetes 集群中的日志,并添加您的 Loki endpoint 详细信息。请参考以下部分了解 Grafana Alloy 示例配置文件。
    2. 遵循我们的最佳实践,为您的日志添加标签。大多数 Loki 用户首先添加描述日志来源的标签,例如区域 (region)、集群 (cluster) 或环境 (environment)。
  3. 部署GrafanaGrafana Cloud并配置一个Loki 数据源
  4. 在 Grafana 主菜单中选择探索功能。要在探索中查看日志
    1. 选择一个时间范围。
    2. 选择 Loki 数据源。
    3. 查询编辑器中使用 LogQL,使用 Builder 视图探索您的标签,或点击 Kick start your query 按钮从预配置的示例查询中选择。

下一步: 了解更多关于 Loki 查询语言,LogQL

Grafana Alloy 和 Agent 发送 Kubernetes Pod 日志到 Loki 的示例配置文件

要部署 Grafana Alloy 或 Agent 以从 Kubernetes 集群收集 Pod 日志并将其发送到 Loki,您可以使用 Helm chart 和一个 values.yaml 文件。

此示例 values.yaml 文件配置用于:

  • 安装 Grafana Agent 以发现 Pod 日志。
  • 向日志添加 containerpod 标签。
  • 使用租户 ID cloud 将日志推送到您的 Loki 集群。
  1. 使用Helm chart安装 Loki。

  2. 使用 Helm chart 部署 Grafana Alloy 或 Grafana Agent

  3. 根据以下示例创建 values.yaml 文件,确保更新 forward_to = [loki.write.endpoint.receiver] 的值。

    yaml
    alloy:
      mounts:
        varlog: true
      configMap:
        content: |
          logging {
            level  = "info"
            format = "logfmt"
          }
    
          discovery.kubernetes "pods" {
            role = "pod"
          }
    
          loki.source.kubernetes "pods" {
            targets    = discovery.kubernetes.pods.targets
            forward_to = [loki.write.endpoint.receiver]
          }
    
          loki.write "endpoint" {
            endpoint {
                url = "http://loki-gateway.default.svc.cluster.local:80/loki/api/v1/push"
                tenant_id = "local"
            }
          }
    yaml
    agent:
      mounts:
        varlog: true
      configMap:
        content: |
          logging {
            level  = "info"
            format = "logfmt"
          }
    
          discovery.kubernetes "k8s" {
            role = "pod"
          }
    
          discovery.relabel "k8s" {
            targets = discovery.kubernetes.k8s.targets
    
            rule {
              source_labels = ["__meta_kubernetes_pod_name"]
              action = "replace"
              target_label = "pod"
            }
            rule {
              source_labels = ["__meta_kubernetes_pod_container_name"]
              action = "replace"
              target_label = "container"
            }
    
            rule {
              source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_label_name"]
              target_label  = "job"
              separator     = "/"
            }
    
            rule {
              source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
              target_label  = "__path__"
              separator     = "/"
              replacement   = "/var/log/pods/*$1/*.log"
            }
          }
    
          local.file_match "pods" {
            path_targets = discovery.relabel.k8s.output
          }
    
          loki.source.file "pods" {
            targets = local.file_match.pods.targets
            forward_to = [loki.write.endpoint.receiver]
          }
    
          loki.write "endpoint" {
            endpoint {
                url = "http://loki-gateway:80/loki/api/v1/push"
                tenant_id = "cloud"
            }
          }
  4. 然后在您的 Kubernetes 集群中使用以下命令安装 Alloy 或 Agent:

    alloy
    helm install alloy grafana/alloy -f ./values.yml
    agent
    helm upgrade -f values.yaml agent grafana/grafana-agent