菜单
开源 RSS

Grafana Loki 入门

Loki 是一个受 Prometheus 启发的横向可扩展、高可用、多租户日志聚合系统。它设计为非常经济高效且易于操作。它不索引日志内容,而是索引每个日志流的一组标签。

由于所有 Loki 实现都是唯一的,因此安装过程对于每个客户来说都是不同的。但流程中有一些步骤应该是所有安装通用的。

收集日志并查看日志数据通常涉及以下步骤

Loki implementation steps

  1. 使用推荐的 Helm 图表,在 Kubernetes 上以简单的可扩展模式安装 Loki。为 Helm 图表提供您的对象存储身份验证详细信息。
  2. 部署 Grafana Alloy 从您的应用程序收集日志。
    1. 在 Kubernetes 上,使用 Helm 图表部署 Grafana Flow。配置 Grafana Alloy 从您的 Kubernetes 集群抓取日志,并添加您的 Loki 端点详细信息。有关示例 Grafana Alloy 配置文件,请参见下一节。
    2. 根据我们的 最佳实践,为您的日志添加 标签。大多数 Loki 用户首先添加描述日志来源的标签(区域、集群、环境等)。
  3. 部署 GrafanaGrafana Cloud 并配置 Loki 数据源
  4. 在 Grafana 主菜单中选择 探索功能。要 在探索中查看日志
    1. 选择一个时间范围。
    2. 选择 Loki 数据源。
    3. 查询编辑器 中使用 LogQL,使用构建器视图探索您的标签,或使用“启动您的查询”按钮从预配置的示例查询中选择。

下一步:详细了解 Loki 查询语言 LogQL

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

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

此示例 values.yaml 文件配置为

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

  2. 使用 Helm 图表部署 Grafana Alloy 或 Grafana Agent

  3. 基于以下示例创建一个 values.yaml 文件,确保更新 forward_to = [loki.write.endpoint.receiver] 的值

    yaml-alloy
    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-static-agent
    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