尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 Kubernetes Monitoring Helm Chart 与 Loki 采集 Kubernetes 日志的完整实战指南

使用 Kubernetes Monitoring Helm Chart 与 Loki 采集 Kubernetes 日志的完整实战指南 使用 Kubernetes Monitoring Helm Chart 与 Loki 采集 Kubernetes 日志的完整实战指南【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/lokiLoki 最典型的落地场景之一就是从 Kubernetes 集群中采集并存储日志。本指南基于 Grafana 官方教程完整演示如何在同一 Kubernetes 集群中部署 Loki、Grafana 与 Kubernetes Monitoring Helm chart内含 Grafana Alloy 采集器实现 Pod 日志与 Kubernetes 事件两类日志的采集、存储与可视化。读完本文你将掌握 Helm 安装 Loki单二进制模式、配置 Grafana 的 Loki 数据源、精细化控制 Alloy 日志采集命名空间过滤、标签保留、结构化元数据的完整实操链路。背景Kubernetes 中的三类日志Kubernetes 集群中的日志大致可分为三类Loki 的主要使用场景就是针对它们做集中采集Pod 日志Pod logs集群中运行的 Pod 所生成的日志也是本教程采集的第一类日志。Kubernetes 事件Kubernetes Events由 Kubernetes API Server 生成的事件日志描述集群内发生的重要状态变化。节点日志Node logs集群节点自身产生的日志如/var/log/journal下的系统日志本教程中不涉及。本教程聚焦前两类Pod 日志和Kubernetes 事件并部署 Grafana 用于可视化。动手前的关键认知正式开始前先明确几个影响后续决策的核心概念Loki 的部署模式Loki 既可以单二进制monolithic运行也可以作为分布式系统运行。本教程采用单二进制模式Single Binary。在 Loki Helm chart 的 values.yaml 中deploymentMode字段定义了三种模式及其适用规模SingleBinary以单个二进制部署适合小型安装通常无高可用需求日写入量约几十 GB 以内可随日志量垂直扩容SimpleScalable拆分为 read、write、backend 三个目标部署适合中型安装约 1TB/天以内比分布式更易管理Distributed按微服务拆分独立组件最复杂但能力最强适合大型安装通常超过 1TB/天。Grafana Labs 官方建议生产环境处理高日志量时优先采用分布式/微服务模式。本教程使用单二进制模式足以支撑演示场景。部署位置Loki、Grafana 以及 Kubernetes Monitoring Helm chart 自带的 Alloy 都将部署在meta命名空间。请确保你有在该命名空间创建资源的权限并评估节点剩余容量是否足够承载这些 Pod。Kubernetes Monitoring chart 本身资源占用很小也可以只部署它、把日志写到外部 Loki 实例或 Grafana Cloud。存储后端Loki Helm chart 默认内置的对象存储后端是 MinIO本教程直接使用它。生产环境应迁移到 S3、GCS、Azure Blob Storage 或 MinIO 集群等更成熟的存储方案。前提条件开始前需要准备一个运行Kubernetes 1.23 及以上版本的集群本地安装kubectl本地安装Helm。第一步创建meta与prod命名空间Kubernetes Monitoring chart 将监控两个命名空间职责划分如下meta部署 Loki、Grafana 与 Alloyprod部署用于产生日志的示例应用。kubectl create namespace meta kubectl create namespace prod第二步添加 Helm 仓库并克隆教程仓库Grafana 与 Kubernetes Monitoring Helm chart 位于 Grafana Helm 仓库而 Loki Helm chart 独立维护在 Grafana Community Helm Charts 仓库中。分别添加两个仓库并更新索引helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm repo add grafana-community https://grafana-community.github.io/helm-charts helm repo update随后克隆教程仓库并进入对应目录后续所有命令均假设你已位于该目录下git clone https://github.com/grafana/alloy-scenarios.git cd alloy-scenarios/k8s/logs第三步部署 Loki使用 Loki Helm chart 以最小资源占用部署 Loki单二进制模式并启用其默认的 MinIO 存储后端helm install --values loki-values.yml loki grafana-community/loki -n meta该命令将 Loki 部署到meta命名空间values文件指定了 Loki 的资源配置。关于 Loki Helm chart 的更多配置细节可参考仓库内的 production/helm/loki 目录及其 README.md。注意教程中的loki-values.yml针对资源受限的演示集群做了裁剪关闭了缓存、关闭 Loki Canary 自监控并限制 Loki 的 CPU/内存配额。整个部署过程最多需要约1 分钟。从源码结构看单二进制模式在 chart 中有专门的模板支撑production/helm/loki/templates/single-binary/目录下定义了 StatefulSetstatefulset.yaml、Service、HPA、PDB 等资源。chart 内置的 single-binary-values.yaml 是一个很好的参考它将deploymentMode设为SingleBinary、singleBinary.replicas设为 1同时把 backend/read/write 以及其他各组件的replicas归零并显式开启minio.enabled: true。关于 MinIO 存储values.yaml 中的默认配置为minio.enabled: false生产环境由你显式提供对象存储但启用后会创建chunks、ruler、admin三个默认 bucket 和一个logs-user读写账号。本教程的loki-values.yml正是通过开启该内置 MinIO 来完成开箱即用的演示闭环。第四步部署 Grafana将 Grafana 部署到meta命名空间用于可视化 Loki 中的日志helm install --values grafana-values.yml grafana grafana/grafana --namespace metagrafana-values.yml中有两个关键配置项值得注意登录凭据adminUser与adminPassword本教程中的值分别为admin和adminadminadmin。推荐做法是使用 Kubernetes Secret 或让 Grafana 自动生成密码避免明文写在配置文件中。数据源配置通过datasources段声明 Grafana 使用的数据源这里定义一个名为Loki的 Loki 数据源datasources: datasources.yaml: apiVersion: 1 datasources: - name: Loki type: loki access: proxy orgId: 1 url: http://loki-gateway.meta.svc.cluster.local:80 basicAuth: false isDefault: false version: 1 editable: falseurl指向Loki gateway这是 Loki Helm chart 在 Loki API 前提供的一个统一入口 Service负责日志写入与查询的路由。URL 格式为http://loki-gateway.NAMESPACE.svc.cluster.local:80。如果你把 Loki 部署到其他命名空间或使用了不同名称必须同步修改该url。从源码看gateway 默认由 chart 启用并基于 Nginx 实现values.yaml 明确说明chart 默认部署一个 Nginx 容器作为 gateway 负责流量路由可选做认证默认镜像为nginxinc/nginx-unprivileged、容器端口8080对应的部署模板见 deployment-gateway-nginx.yaml。第五步部署 Kubernetes Monitoring Helm chartKubernetes Monitoring Helm chart 负责采集、抓取并把 Kubernetes 遥测数据转发到 Grafana 技术栈支持指标、日志、追踪与持续性能分析continuous profiling。本教程只启用其中的 Pod 日志与集群事件采集helm install --values ./k8s-monitoring-values.yml k8s grafana/k8s-monitoring -n meta完整的k8s-monitoring-values.yml如下--- cluster: name: meta-monitoring-tutorial destinations: - name: loki type: loki url: http://loki-gateway.meta.svc.cluster.local/loki/api/v1/push clusterEvents: enabled: true collector: alloy-logs namespaces: - meta - prod nodeLogs: enabled: false 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 # Collectors alloy-singleton: enabled: false alloy-metrics: enabled: false alloy-logs: enabled: true # Required when using the Kubernetes API to pod logs alloy: mounts: varlog: false clustering: enabled: true alloy-profiles: enabled: false alloy-receiver: enabled: false逐项拆解这份配置cluster.name设为meta-monitoring-tutorial这是一个静态标签会附加到 Kubernetes Monitoring chart 采集的所有日志上。destinations定义名为loki的转发目标url指向 Loki gateway 的推送端点/loki/api/v1/push。若 Loki 部署在其他命名空间或完全不同的位置需同步修改该url。集群事件与 Pod 日志采集collector指定使用哪个采集器这里统一使用alloy-logslabelsToKeep指定采集日志时保留的标签。注意它不会丢弃日志只是避免把高基数high cardinality标签例如本配置中刻意移除了pod直接落到 Loki 的索引标签上structuredMetadata定义结构化元数据。这里把pod设为结构化元数据从而在查询时仍能保留 Pod 名称又无需将其作为需要索引的标签namespaces限定从哪些命名空间采集日志这里是meta与prod。禁用节点日志本教程关闭nodeLogs因为它需要挂载/var/log/journal超出本教程范围。按需部署采集器该 chart 只部署你实际需要的东西。这里只启用了alloy-logs并配套mounts.varlog: false、启用 clustering其余 collectormetrics、profiles、receiver、singleton全部关闭。如果还需要采集 K8s 指标、追踪或持续性能分析数据再分别启用对应 collector 即可。第六步访问 Grafana通过 port-forward 将 Grafana 服务映射到本地 3000 端口export POD_NAME$(kubectl get pods --namespace meta -l app.kubernetes.io/namegrafana,app.kubernetes.io/instancegrafana -o jsonpath{.items[0].metadata.name}) \ kubectl --namespace meta port-forward $POD_NAME 3000 --address 0.0.0.0提示port-forward 会占用当前终端按Ctrl C即可停止。浏览器访问 http://localhost:3000使用默认凭据admin/adminadminadmin登录。推荐第一站是Logs Drilldown日志下钻视图它无需手写查询即可自动可视化与探索日志http://localhost:3000/a/grafana-lokiexplore-app第七步可选查看 Alloy UIKubernetes Monitoring chart 通过 Grafana Alloy 采集并转发集群遥测数据chart 帮你屏蔽了手写 Alloy 配置的过程。如果想了解采集管线的构成可以打开 Alloy UIexport POD_NAME$(kubectl get pods --namespace meta -l app.kubernetes.io/namealloy-logs,app.kubernetes.io/instancek8s-alloy-logs -o jsonpath{.items[0].metadata.name}) \ kubectl --namespace meta port-forward $POD_NAME 12345 --address 0.0.0.0浏览器访问 http://localhost:12345 即可查看 Alloy 的采集管线与组件运行状态。第八步向prod部署示例应用最后向prod命名空间部署一个会产生日志的示例应用。本教程以 Grafana Tempo分布式追踪后端充当业务应用来生成日志helm install tempo grafana/tempo-distributed -n prod正常情况下 Tempo 应与 Loki、Grafana 同处meta命名空间这里为了演示故意把它当作prod中的主应用来产生日志。再次暴露 Grafanaexport POD_NAME$(kubectl get pods --namespace meta -l app.kubernetes.io/namegrafana,app.kubernetes.io/instancegrafana -o jsonpath{.items[0].metadata.name}) \ kubectl --namespace meta port-forward $POD_NAME 3000 --address 0.0.0.0访问http://localhost:3000/a/grafana-lokiexplore-app即可查看 Tempo 产生的日志。总结与进阶方向至此你已经完成了完整的链路搭建Alloy 采集meta/prod命名空间的 Pod 日志与 Kubernetes 事件 → 推送到 Loki gateway → 写入 Loki单二进制模式 MinIO 存储→ 通过 Grafana 的 Logs Drilldown 可视化查询。整个过程只需几条 Helm 命令足以证明 Loki 与 Kubernetes 监控生态开箱即用的集成体验。本教程部署的是各组件的最小化演示版本生产化还需要进一步探索Loki 的规模化结合 production/helm/loki/values.yaml 中的deploymentMode按日志量评估从SingleBinary升级到SimpleScalable甚至Distributed并为分布式模式接入 S3/GCS/Azure Blob 等生产级对象存储存储与高可用将内置 MinIO 替换为托管对象存储为 gateway、组件开启多副本与 HPA/PDB采集策略调优在k8s-monitoring-values.yml中按需启用 metrics/traces/profiling 采集器细化labelsToKeep与structuredMetadata以控制标签基数监控自身Loki Helm chart 支持自监控self-monitoring可结合 Loki Canary 持续验证写入链路相关测试代码见 src/helm-test/canary_test.go。Grafana 与 Kubernetes Monitoring Helm chart 独立于本仓库维护其完整的参数说明可查阅各自 Helm chart 的官方文档Loki Helm chart 的仓库内资料见 production/helm/loki/README.md 与 docs/sources/setup 目录。【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/loki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表