使用Kubernetes监控监控应用程序
介绍
本教程演示了如何将一个配置了仪表的三层(数据层、应用逻辑层、负载均衡层)Web应用程序部署到Kubernetes集群中,并利用Grafana Cloud内置的Kubernetes监控功能来监控应用程序。
在本教程中,您将
- 将 TNS 示例应用 部署到您的 Kubernetes 集群中。
- 将预构建的仪表板部署到您的 Grafana Cloud 实例中,以可视化应用的性能指标。
- 将 Grafana Agents 部署到 Kubernetes 集群中,以收集指标、日志和事件。
- 配置这些代理以从 TNS 应用中收集指标、日志和跟踪(包括示例)。
- 学习如何使用 Grafana 的强大关联功能,在指标、日志、跟踪之间进行导航。
- 学习如何使用 Kubernetes 集群导航器探索您的集群运行的工作负载,从 Pod 跳转到仪表板和日志。
开始之前
要完成本教程,您需要访问
- Kubernetes、K3s 或 OpenShift 集群
- 一个 Grafana Cloud 堆栈,可选地启用 示例 支持。
部署和配置Grafana Agent
按照以下步骤将 Grafana Agent 部署到您的 Kubernetes 集群中。为了使部署 Agent 更简单,Grafana Cloud 为您提供了预配置的清单供您下载和修改。
要部署 Grafana Agent
导航到您的 Grafana Cloud 实例。
点击左侧菜单中的 可观察性 并选择 Kubernetes。
点击 开始发送数据,然后点击 安装仪表板和警报规则 以安装预构建的 Kubernetes 仪表板和警报集合。
点击 代理配置说明 并检查 先决条件 下列出的项是否满足。
在 指标 & 事件 下,将 命名空间 字段中的
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 Pods 应该看起来像这样
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清单。这将应用程序Pods和Services部署到您的集群的
tns-cloud
命名空间,如果不存在则创建该命名空间。使用
kubectl
检查部署状态kubectl get all -n tns-cloud
将端口转发到本地网页浏览器
kubectl port-forward -n tns-cloud service/app 8080:80
在您的网页浏览器中导航到
https://127.0.0.1:8080
,查看演示应用程序的实际效果。
随着带有遥测的演示应用程序和负载生成器运行正常,现在您可以导航到Grafana Cloud以查询应用程序日志、可视化其指标和检查其跟踪数据。
关联指标、日志和跟踪
在此阶段,演示应用程序和负载生成器已经遥测、运行正常,并且您的遥测收集器正在将指标、日志、跟踪和事件数据转发到Grafana Cloud。在探索Grafana Cloud的一些内置功能之前,安装一个自定义的预构建应用程序仪表板,该仪表板演示了一些核心的Grafana功能。
关联遥测数据
在您的Grafana实例中,点击仪表板。
点击新建并从下拉菜单中选择导入。
在ID字段中输入
16491
,然后点击加载。点击导入以导入仪表板。
导航到仪表板。
以下仪表板显示
{{% 注解 type=“note” %}} 如果您没有看到黄色圆点(示例),请确保示例已启用。 {{% /注解 %}} 更多信息,请参阅配置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以快速查看更多信息、日志以及最新的Kubernetes集群事件。
点击屏幕右上角的“查看计算资源”快速跳转到Pod资源使用仪表板。
摘要
您现在可以直接导航并跳转到相关可观察数据,所有这些都在Grafana Cloud中,无需从终端复制粘贴Pod名称和标签,运行kubectl get
、kubectl describe
和kubectl logs
。
要了解更多关于Grafana Cloud Kubernetes监控的信息,请参阅Grafana Kubernetes监控文档。