菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 监控指标和日志breadcrumb arrow 监控 Kubernetes 日志
开源

使用 Grafana Alloy 监控 Kubernetes 日志

Kubernetes 捕获运行中 Pod 中每个容器的日志。
使用 Alloy,您可以收集 Kubernetes 日志,将其转发到 Grafana Stack,并创建仪表盘来监控您的 Kubernetes 部署。

alloy-scenarios 存储库包含 Alloy 部署的完整示例。
克隆存储库并使用这些示例来了解 Alloy 如何收集、处理和导出遥测信号。

此示例场景使用 Kubernetes Monitoring Helm chart 部署和监控 Kubernetes 日志。
它安装三个 Helm chart:Loki、Grafana 和 Alloy。
Helm chart 简化了配置并部署了监控 Kubernetes 集群的最佳实践。

通过 k8s-monitoring-helm 安装的 Alloy 收集两种日志源:Pod 日志Kubernetes 事件

开始之前

确保您已安装以下工具:

克隆并部署示例

按照以下步骤克隆 scenarios 存储库并部署监控示例:

  1. 克隆 Alloy scenarios 存储库

    shell
    git clone https://github.com/grafana/alloy-scenarios.git
  2. 设置示例 Kubernetes 环境

    1. 导航到 alloy-scenarios/k8s-logs 目录

      shell
      cd alloy-scenarios/k8s-logs
    2. 使用 kind 创建本地 Kubernetes 集群。
      kind.yml 文件提供了集群配置

      shell
      kind create cluster --config kind.yml
    3. 添加 Grafana Helm 仓库

      shell
      helm repo add grafana https://grafana.github.io/helm-charts
    4. 创建 metaprod 命名空间

      shell
      kubectl create namespace meta && \
      kubectl create namespace prod
  3. meta 命名空间中部署 Loki。
    Loki 存储收集到的日志。
    loki-values.yml 文件包含 Loki Helm chart 配置

    shell
    helm install --values loki-values.yml loki grafana/loki -n meta

    此 Helm chart 在单体模式下安装 Loki。
    有关更多详细信息,请参阅 Loki 文档

  4. meta 命名空间中部署 Grafana。
    您可以使用 Grafana 可视化存储在 Loki 中的日志。
    grafana-values.yml 文件包含 Grafana Helm chart 配置

    shell
    helm install --values grafana-values.yml grafana grafana/grafana --namespace meta

    此 Helm chart 安装 Grafana 并将 datasources.datasources.yaml 字段设置为 Loki 数据源配置。

  5. meta 命名空间中部署 Alloy。
    k8s-monitoring-values.yml 文件包含 Kubernetes monitoring Helm chart 配置

    shell
    helm install --values ./k8s-monitoring-values.yml k8s grafana/k8s-monitoring -n meta --create-namespace

    此 Helm chart 安装 Alloy 并指定了 Alloy 收集日志的 Pod 日志和 Kubernetes 事件源。

  6. 将 Grafana Pod 端口转发到您的本地机器

    1. 获取 Grafana Pod 名称

      shell
      export POD_NAME=$(kubectl get pods --namespace meta -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
    2. 设置端口转发

      shell
      kubectl --namespace meta port-forward $POD_NAME 3000
  7. 将 Alloy Pod 端口转发到您的本地机器

    1. 获取 Alloy Pod 名称

      shell
      export POD_NAME=$(kubectl get pods --namespace meta -l "app.kubernetes.io/name=alloy-logs,app.kubernetes.io/instance=k8s" -o jsonpath="{.items[0].metadata.name}")
    2. 设置端口转发

      shell
      kubectl --namespace meta port-forward $POD_NAME 12345
  8. 将 Grafana Tempo 部署到 prod 命名空间。
    Tempo 为此示例生成日志

    shell
    helm install tempo grafana/tempo-distributed -n prod

监控和可视化您的数据

使用 Grafana 监控您的部署健康状况并可视化您的数据。

监控您的 Alloy 部署健康状况

要监控您的 Alloy 部署健康状况,请打开浏览器并访问 https://:12345

有关 Alloy UI 的更多信息,请参阅 调试 Grafana Alloy

可视化您的数据

要使用 Grafana Logs Drilldown,请打开浏览器并访问 https://:3000/a/grafana-lokiexplore-app

要创建仪表盘可视化您的指标和日志,请打开浏览器并访问 https://:3000/dashboards

理解 Kubernetes Monitoring Helm chart

Kubernetes Monitoring Helm chart,k8s-monitoring-helm,收集、抓取并将 Kubernetes 遥测数据转发到 Grafana Stack。
这包括指标、日志、跟踪和持续性能分析数据。

集群

将集群名称定义为 meta-monitoring-tutorial
这是附加到由 Kubernetes Monitoring Helm chart 收集的所有日志的静态标签。

yaml
cluster:
  name: meta-monitoring-tutorial

目的地

定义名为 loki 的目的地,用于将日志转发到 Loki。
url 属性指定 Loki 网关的 URL。

yaml
destinations:
  - name: loki
    type: loki
    url: http://loki-gateway.meta.svc.cluster.local/loki/api/v1/push

集群事件

启用集群事件的收集。

  • collector:使用 alloy-logs 收集器收集日志。
  • namespaces:指定从 metaprod 命名空间收集日志。
yaml
clusterEvents:
  enabled: true
  collector: alloy-logs
  namespaces:
    - meta
    - prod

节点日志

禁用节点日志的收集。
收集节点日志需要挂载 /var/log/journal,这超出了本例的范围。

yaml
nodeLogs:
  enabled: false

Pod 日志

启用 Pod 日志的收集。

  • labelsToKeep:指定收集日志时要保留的标签。
    此配置将 pod 从要保留的标签中移除。
  • structuredMetadata:指定要收集的结构化元数据。
    此配置设置结构化元数据 pod 以保留 Pod 名称用于查询。
yaml
podLogs:
  enabled: true
  gatherMethod: kubernetesApi
  collector: alloy-logs
  labelsToKeep: ["app_kubernetes_io_name","container","instance","job","level","namespace","service_name","service_namespace","deployment_environment","deployment_environment_name"]
  structuredMetadata:
    pod: pod  # Set structured metadata "pod" from label "pod"
  namespaces:
    - meta
    - prod

定义 Alloy 角色

Kubernetes Monitoring Helm chart 只部署您需要的内容。
在本例中,配置部署了具有收集日志能力的 Alloy。
指标、跟踪和持续性能分析均已禁用。

yaml
alloy-singleton:
  enabled: false

alloy-metrics:
  enabled: false

alloy-logs:
  enabled: true
  alloy:
    mounts:
      varlog: false
    clustering:
      enabled: true

alloy-profiles:
  enabled: false

alloy-receiver:
  enabled: false