使用 Kubernetes 监控器监控应用程序
简介
本教程演示如何将一个带有仪表的、三层(数据层、应用程序逻辑层、负载均衡层)Web 应用程序 部署到 Kubernetes 集群中,并利用 Grafana Cloud 内置的 Kubernetes 监控功能来监控该应用程序。
在本教程中,您将
- 将TNS 示例应用程序 部署到您的 Kubernetes 集群中。
- 将预构建的仪表盘部署到您的 Grafana Cloud 实例中,以可视化应用程序的性能指标。
- 推出 Grafana Agent 以收集来自 Kubernetes 集群的指标、日志和事件。
- 配置这些 Agent 以从 TNS 应用程序收集指标、日志和追踪(包括示例)。
- 了解如何使用 Grafana 的强大关联功能在指标、日志和追踪之间导航。
- 了解如何使用 Kubernetes 集群导航器来探索集群正在运行的工作负载,从 Pod 跳转到仪表盘和日志。
开始之前
要完成本教程,您需要访问
- Kubernetes、K3s 或 OpenShift 集群
- 一个 Grafana Cloud 堆栈,可以选择启用示例 支持。
部署和配置 Grafana Agent
请按照此步骤将 Grafana Agent 推送到您的 Kubernetes 集群中。为了使 Agent 部署更轻松,Grafana Cloud 提供了预配置的清单供您下载和修改。
要部署 Grafana Agent
导航到您的 Grafana Cloud 实例。
点击左侧菜单中的**可观察性**,然后选择**Kubernetes**。
点击**开始发送数据**,然后点击**安装仪表盘和警报规则**以安装预构建的 Kubernetes 仪表盘和警报集。
点击**Agent 配置说明**并检查**先决条件**下列出的项目是否已满足。
在**指标和事件**下,将**命名空间**字段中的
default
替换为您的命名空间。Agent ConfigMap 将使用您的命名空间进行更新。
点击**复制到剪贴板**并将 Agent ConfigMap 粘贴到编辑器中。
默认情况下,ConfigMap 仅抓取集群指标端点,例如
/cadvisor
和/kubelet
端点。您需要按照下一步配置 ConfigMap 以抓取集群中部署的 Pod 的/metrics
端点。在 ConfigMap 中,添加以下抓取作业片段
. . . relabel_configs: - action: keep regex: kube-state-metrics source_labels: - __meta_kubernetes_pod_label_app_kubernetes_io_name # New scrape job below - job_name: integrations/kubernetes/pod-metrics kubernetes_sd_configs: - role: pod relabel_configs: - action: drop regex: kube-state-metrics source_labels: - __meta_kubernetes_pod_label_app_kubernetes_io_name - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod - source_labels: ['__meta_kubernetes_namespace', '__meta_kubernetes_pod_label_name'] action: 'replace' separator: '/' target_label: 'job' replacement: '$1' - source_labels: ['__meta_kubernetes_pod_container_name'] action: 'replace' target_label: 'container' . . .
此抓取作业尝试在
/metrics
处抓取集群中运行的所有容器(和端口),删除所有 kube-state-metrics(因为您已在另一个抓取作业中获取这些指标),并执行一些重新标记(设置job
、pod
、namespace
等标签)。要了解有关配置抓取作业的更多信息,请参阅 Prometheus 抓取配置文档。您可以调整此通用的万能片段,以使用不同的配置指令将抓取限制到给定的命名空间、工作负载标签、删除其他指标等等。
配置 Grafana Agent 以将示例 发送到 Grafana Cloud。为此,请将以下内容添加到 ConfigMap 中
. . . configs: - name: integrations remote_write: - url: <your_prometheus_metrics_endpoint> basic_auth: username: <your_prometheus_metrics_user> password: <your_prometheus_metrics_api_key> # Add the following line send_exemplars: true . . .
您必须联系支持团队才能在您的 Grafana Cloud 实例中启用示例。
将 ConfigMap 部署到您的集群中。
按照 K8s 监控说明中的其余步骤,将以下内容部署到您指定的命名空间中
- 一个 Agent StatefulSet
- kube-state-metrics
- 一个 Agent ConfigMap 和 DaemonSet 以跟踪容器日志
按照使用 Grafana Agent 发送 Kubernetes 追踪指南部署 Agent 以收集追踪。
请务必填写所需的
remote_write
凭据。您的 Tempo 端点 URL 应类似于tempo-us-central1.grafana.net:443
。重要提示:如果没有 Agent 收集追踪,演示应用程序将无法启动,因此请确保完成此步骤。
完成遥测收集器的部署后,您正在运行的 K8s Pod 应如下所示
NAME READY STATUS RESTARTS AGE grafana-agent-0 1/1 Running 0 3m grafana-agent-logs-lcpjd 1/1 Running 0 2m44s grafana-agent-logs-pc9sp 1/1 Running 0 2m44s grafana-agent-logs-qtjzq 1/1 Running 0 2m44s grafana-agent-traces-7775575d6d-qcrmq 1/1 Running 0 21s ksm-kube-state-metrics-58ccd7456c-487c9 1/1 Running 0 2m50s
部署 TNS 应用程序
随着遥测收集器启动并运行,您现在可以将 TNS 演示应用程序部署到您的 Kubernetes 集群中。TNS 的 GitHub 仓库 包含 Kubernetes 清单文件(使用 Jsonnet 编写),用于部署应用程序所需的组件。您无需学习 Jsonnet 即可遵循本指南,并在部署组件之前检查清单文件和代码。该仓库还包含有关应用程序以及如何对其进行检测以与 Grafana Cloud 协同工作的更多信息。它还包含应用程序源代码。
部署 TNS 应用程序
要部署应用程序,请运行以下命令
kubectl apply -f https://raw.githubusercontent.com/grafana/tns/main/production/k8s-yamls-cloud/app-full.yaml
您可以在将应用程序部署到集群之前检查 YAML 清单文件。这会将应用程序 Pod 和服务部署到集群的
tns-cloud
命名空间中,如果该命名空间不存在则会创建它。使用
kubectl
检查部署状态kubectl get all -n tns-cloud
将端口转发到本地 Web 浏览器
kubectl port-forward -n tns-cloud service/app 8080:80
在您的 Web 浏览器中导航到
https://127.0.0.1:8080
以查看演示应用程序的运行情况。
随着已检测的演示应用程序和负载生成器启动并运行,您现在可以导航到 Grafana Cloud 以查询应用程序日志、可视化其指标并检查其跟踪数据。
关联指标、日志和追踪
此时,演示应用程序和负载生成器已检测并正在运行,您的遥测收集器正在将指标、日志、跟踪和事件数据转发到 Grafana Cloud。在探索 Grafana Cloud 的一些内置功能之前,请安装一个自定义预构建的 应用程序仪表板,该仪表板演示了一些核心 Grafana 功能。
关联遥测数据
在您的 Grafana 实例中,点击**仪表板**。
点击**新建**,然后在下拉菜单中选择**导入**。
在 ID 字段中输入**
16491
**,然后点击**加载**。点击**导入**以导入仪表板。
导航到仪表板。
以下仪表板显示
{{% admonition type=“note” %}} 如果您没有看到黄色点 (示例),请确保已启用示例。 {{% /admonition %}} 有关更多信息,请参阅 配置 Grafana Agent。
点击示例以跳转到特定缓慢请求的跟踪
从这里跳转到日志以查看有问题的跨度
点击日志行上的**显示上下文**以查看周围的日志上下文。
在指标、日志和追踪之间导航
能够在指标、跟踪、日志之间跳转并返回,是一个非常强大的功能,可以帮助您快速解决生产问题并减少平均恢复时间 (MTTR)。您还可以使用**探索**视图从指标跳转到日志。
在指标、日志和跟踪之间导航
输入以下 PromQL 查询,确保您选择了正确的 Prometheus 数据源
sum by (status_code) (rate(tns_request_duration_seconds_count{job=~"tns-cloud/app.*"}[$__rate_interval]))
以下图表显示
点击窗口顶部的**拆分**,然后在下拉菜单中选择正确的 Loki 数据源
Grafana 会将 PromQL 查询中选择的标签传递过来,并使用相同的标签预填充 LogQL 查询,以便您可以快速从 Prometheus 指标查询跳转到与您正在分析的指标图表相关的相应 Loki 日志数据
要了解有关这些功能的更多信息,请观看以下视频
导航集群工作负载
探索 Kubernetes 工作负载的另一种方法是使用集群导航功能。
导航集群工作负载
在 Grafana 中,点击左侧菜单中的**可观测性**,然后选择**Kubernetes**。
命名空间视图显示,您可以在其中导航集群。
点击特定的命名空间开始探索工作负载。
从这里,您可以查看任何触发的警报、正在运行的 Pod 的运行状况,并可以进一步深入到给定的 ReplicaSet。
点击 Pod 以快速查看其他 Pod 信息、其日志和最新的 Kubernetes 集群事件。
点击屏幕右上角的查看计算资源以快速跳转到 Pod 的资源使用情况仪表板
总结
现在,您可以直接在 Grafana Cloud 中导航并跳转到相关的可观测性数据,而不是从终端复制粘贴 Pod 名称和标签并运行 kubectl get
、kubectl describe
和 kubectl logs
。
要了解有关 Grafana Cloud Kubernetes 监控的更多信息,请参阅 Grafana Kubernetes 监控文档。