使用 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 存储库并部署监控示例:
克隆 Alloy scenarios 存储库
git clone https://github.com/grafana/alloy-scenarios.git
设置示例 Kubernetes 环境
导航到
alloy-scenarios/k8s-logs
目录cd alloy-scenarios/k8s-logs
使用 kind 创建本地 Kubernetes 集群。
kind.yml
文件提供了集群配置kind create cluster --config kind.yml
添加 Grafana Helm 仓库
helm repo add grafana https://grafana.github.io/helm-charts
创建
meta
和prod
命名空间kubectl create namespace meta && \ kubectl create namespace prod
在
meta
命名空间中部署 Loki。
Loki 存储收集到的日志。loki-values.yml
文件包含 Loki Helm chart 配置helm install --values loki-values.yml loki grafana/loki -n meta
此 Helm chart 在单体模式下安装 Loki。
有关更多详细信息,请参阅 Loki 文档。在
meta
命名空间中部署 Grafana。
您可以使用 Grafana 可视化存储在 Loki 中的日志。grafana-values.yml
文件包含 Grafana Helm chart 配置helm install --values grafana-values.yml grafana grafana/grafana --namespace meta
此 Helm chart 安装 Grafana 并将
datasources.datasources.yaml
字段设置为 Loki 数据源配置。在
meta
命名空间中部署 Alloy。k8s-monitoring-values.yml
文件包含 Kubernetes monitoring Helm chart 配置helm install --values ./k8s-monitoring-values.yml k8s grafana/k8s-monitoring -n meta --create-namespace
此 Helm chart 安装 Alloy 并指定了 Alloy 收集日志的 Pod 日志和 Kubernetes 事件源。
将 Grafana Pod 端口转发到您的本地机器
获取 Grafana Pod 名称
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}")
设置端口转发
kubectl --namespace meta port-forward $POD_NAME 3000
将 Alloy Pod 端口转发到您的本地机器
获取 Alloy Pod 名称
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}")
设置端口转发
kubectl --namespace meta port-forward $POD_NAME 12345
将 Grafana Tempo 部署到
prod
命名空间。
Tempo 为此示例生成日志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 收集的所有日志的静态标签。
cluster:
name: meta-monitoring-tutorial
目的地
定义名为 loki
的目的地,用于将日志转发到 Loki。url
属性指定 Loki 网关的 URL。
destinations:
- name: loki
type: loki
url: http://loki-gateway.meta.svc.cluster.local/loki/api/v1/push
集群事件
启用集群事件的收集。
collector
:使用alloy-logs
收集器收集日志。namespaces
:指定从meta
和prod
命名空间收集日志。
clusterEvents:
enabled: true
collector: alloy-logs
namespaces:
- meta
- prod
节点日志
禁用节点日志的收集。
收集节点日志需要挂载 /var/log/journal
,这超出了本例的范围。
nodeLogs:
enabled: false
Pod 日志
启用 Pod 日志的收集。
labelsToKeep
:指定收集日志时要保留的标签。
此配置将pod
从要保留的标签中移除。structuredMetadata
:指定要收集的结构化元数据。
此配置设置结构化元数据pod
以保留 Pod 名称用于查询。
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。
指标、跟踪和持续性能分析均已禁用。
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