教程:观察您的 Kubernetes 部署

编辑

教程:观察您的 Kubernetes 部署

编辑

在 Kubernetes 等容器化环境中运行的应用程序带来了独特的监控挑战:如何在数千(或数百万)个容器中运行的数百个微服务上诊断和解决问题,这些容器在短暂且可丢弃的 Pod 中运行?

成功的 Kubernetes 监控解决方案需要满足一些要求

  • 监控技术栈的所有层,包括:

    • 运行 Kubernetes 的主机系统。
    • Kubernetes 核心组件、节点、Pod 和在集群中运行的容器。
    • 在 Kubernetes 容器中运行的所有应用程序和服务。
  • 自动检测和监控动态出现的服务。
  • 提供一种关联相关数据的方法,以便您可以对相关的指标、日志和其他可观测性数据进行分组和探索。

您将学习的内容

编辑

本指南介绍如何使用 Elastic 可观测性来观察应用程序的所有层,包括编排软件本身。

  • 收集来自 Kubernetes 和您的应用程序的日志和指标。
  • 收集从使用 Kubernetes 部署的应用程序中生成的跟踪数据。
  • 将数据集中在 Elastic Stack 中。
  • 使用定制的仪表板和可观测性 UI 实时探索数据。

本指南介绍如何使用 Elastic Agent 清单文件将 Elastic 监控代理部署为 DaemonSet。有关其他部署选项,请参阅来自 Elastic Cloud on Kubernetes (ECK) 的 Kubernetes 运算符和自定义资源定义。

监控架构

编辑

Elastic Stack 为监控 Kubernetes 提供以下组件:

  1. Elastic Agent 是一种单一统一的方式,用于为主机添加日志和指标等数据的监控。
  2. Elastic Agent Kubernetes 集成与 Elastic Agent 协同工作,收集来自 Kubernetes 集群的日志和指标。
  3. APM(稍后介绍)用于监控、检测和诊断复杂的应用程序性能问题。
  4. Elasticsearch 用于存储和搜索您的数据。
  5. Kibana 中的可观测性应用程序用于可视化和管理您的可观测性数据。
Kubernetes monitoring architecture

Elastic Agent 的默认安装部署到 Kubernetes 中作为 DaemonSet,以确保在集群的每个节点上都运行一个实例。它收集来自 Kubernetes 上运行的 Pod、容器和应用程序的日志和指标。

元数据

编辑

Elastic Agent 提供处理器,用于向事件添加元数据。元数据对于分组和探索相关数据非常有价值。例如,在分析容器日志时,您需要知道主机和容器名称,并能够关联日志、指标和跟踪。

默认部署包括处理器(如有需要),用于使用云和主机元数据丰富事件。

Metadata processors for cloud

有关这些处理器的更多信息,请参阅 add_cloud_metadataadd_host_metadata 文档。

默认情况下,Kubernetes 集成使用有价值的元数据丰富日志和指标。

默认情况下,所有 Kubernetes 指标都使用元数据进行了丰富。丰富过程在代码中发生,可以使用每个数据集上的 add_resource_metadata 块进行配置。有关配置 add_resource_metadata 块的更多信息,请参阅 配置 kubelet API 元数据丰富配置 kube-state-metrics 元数据丰富

默认情况下,所有 Kubernetes 日志都使用元数据进行了丰富。有关配置元数据丰富的更多信息,请参阅 收集 Kubernetes 容器日志

现在您已经对监控架构有了基本的了解,让我们学习如何将监控部署到您的 Kubernetes 环境。

开始之前

编辑

在监控 Kubernetes 之前,您需要以下内容:

  • Elasticsearch 用于存储和搜索您的可观测性数据,以及 Kibana 用于可视化和管理它。
  • 如果您想收集 Kubernetes 状态指标,则需要部署 kube-state-metrics。有关部署说明,请参阅 Kubernetes 文档

第一部分:添加和配置 Kubernetes 集成

编辑

要开始收集来自 Kubernetes 集群的日志和指标,首先将 Kubernetes 集成 添加到您的策略中,并配置您要收集的指标和日志。

步骤 1:将 Kubernetes 集成添加到您的部署
编辑

请按照以下步骤将 Kubernetes 集成添加到您的策略:

  1. 在主菜单中找到 集成,或使用 全局搜索字段
  2. 在搜索栏中输入“Kubernetes”,然后选择 Kubernetes 集成。
  3. 点击 Kubernetes 集成页面顶部的 添加 Kubernetes
  4. 点击“添加集成”页面底部的 仅添加集成(跳过代理安装)

继续执行 步骤 2:配置您的 Kubernetes 集成

步骤 2:配置您的 Kubernetes 集成
编辑

Kubernetes 集成可以从多个组件获取指标和日志。在 添加 Kubernetes 集成 页面中,配置您要收集的指标和日志的选项。以下部分概述了配置选项。

收集指标

收集有关 Kubernetes 集群及其上运行的工作负载的指标是 Kubernetes 可观测性的一个关键方面。您需要收集有关基础架构上运行的资源(例如,Kubernetes 集群的机器)的指标、整个集群的指标以及容器和 Pod 的单个指标。具体来说,您需要监控以下内容的运行状况和性能:

  • 运行 Kubernetes 组件的主机。每个主机都会生成 CPU、内存、磁盘利用率以及磁盘和网络 I/O 等指标。
  • Kubernetes 容器,它们会生成自己的一组指标。
  • 作为 Kubernetes Pod 运行的应用程序(例如应用程序服务器和数据库),每个都会生成自己的一组指标。
  • 其他 Kubernetes 资源(如服务、部署、cronjob)是整个基础设施的宝贵资产,并会生成需要监控的自己的一组指标。

Elastic Agent 与 Kubernetes 集成一起提供了一种统一的解决方案来监控 Kubernetes 技术栈的所有层,因此您无需使用多种技术来收集指标。

您可以使用以下选项来收集有关 Kubernetes 集群及其上运行的工作负载的指标:

收集日志

收集和分析 Kubernetes 核心组件和 Kubernetes 上运行的各种应用程序的日志是 Kubernetes 可观测性的强大工具。在 Kubernetes Pod 中运行的容器会将日志发布到 stdout 或 stderr。

您可以使用以下选项来收集 Kubernetes 日志:

从 kubelet API 收集 Kubernetes 指标
编辑

从 kubelet API 收集指标默认为启用状态。Kubelet 是在每个 Kubernetes 节点上运行的代理,对于管理单个 Pod 和承载它们的节点至关重要。有关 kubelet 的更多信息,请参阅 Kubernetes kubelet 文档

Elastic Agent 与 Kubernetes 集成一起可以从 kubelet API 收集指标,以收集有关 Kubernetes 节点、Pod、容器和其他资源状态的重要信息。展开以下列表以查看 kubelet API 中所有可用的指标。

展开以查看 kubelet API 中可用的指标

容器指标

监控容器级别的整体资源使用情况、性能和状态。了解更多信息,请访问 kubelet 容器指标

节点指标

监控节点级别的整体资源使用情况、性能和状态。了解更多信息,请访问 kubelet 节点指标

Pod 指标

监控 Pod 级别的整体资源使用情况、性能和状态。了解更多信息,请访问 kubelet Pod 指标

系统指标

监控系统容器的整体资源使用情况、性能和状态。了解更多信息,请访问 kubelet 系统指标

卷指标

监控持久卷的存储使用情况和容量。了解更多信息,请访问 kubelet 卷指标

配置 kubelet API 选项
编辑

为每个 kubelet API 选项提供以下信息:

添加元数据

此选项会向事件添加元数据。元数据对于分组和探索相关数据非常有价值。此选项默认启用。

Bearer 令牌文件

用于通过 kubelet API 进行身份验证的令牌的文件路径。

主机

Elastic 用于收集指标的 kubelet API 服务器地址。 ${env.NODE_NAME} 是一个环境变量,表示 Kubernetes 节点的名称。端口 10250 是 kubelet API 监听 HTTPS 连接的默认端口。

轮询周期

轮询 kubelet API 获取指标的频率。默认为每 10 秒一次。

SSL 验证模式

指定如何处理 SSL 验证。none 表示禁用 SSL 验证。

配置 kubelet API 元数据增强
编辑

Kubernetes 容器指标Kubernetes Pod 指标 下,您可以从 高级选项 → 添加节点和命名空间元数据 配置元数据增强。

在此处,更新 add_resource_metadata 块以配置增强。

 add_resource_metadata:
   namespace:
     include_labels: ["namespacelabel1"]
   node:
     include_labels: ["nodelabel2"]
     include_annotations: ["nodeannotation1"]
   deployment: false
kube-state-metrics 收集 Kubernetes 指标
编辑

您需要先部署 kube-state-metrics 才能使用它来收集指标数据。要了解如何操作,请参阅 Kubernetes 的 部署文档

kube-state-metrics 收集指标默认情况下是开启的。kube-state-metrics 服务提供有关 Kubernetes 对象运行状况的集群范围指标。有关更多信息,请参阅 kube-state-metrics 文档

kube-state-metrics 提供水平分片以支持大型 Kubernetes 部署。有关更多信息,请参阅 kube-state-metrics 分片 文档。

使用 Kubernetes 集成,您可以使用 kube-state-metrics 收集许多指标。展开以下列表以查看 kube-state-metrics 中所有可用的指标。

展开以查看 kube-state-metrics 中可用的指标

容器指标

监控容器性能以确保 Pod 的效率和稳定性。了解更多信息,请访问 kube-state-metrics 容器指标

CronJob 指标

监控 CronJob 性能并确保其可靠高效地运行。了解更多信息,请访问 kube-state-metrics CronJob 指标

Kubernetes DaemonSet 指标

监控 DaemonSet 的健康状况和分发情况。了解更多信息,请访问 kube-state-metrics DaemonSet 指标

Kubernetes Deployment 指标

监控部署状态和配置。了解更多信息,请访问 kube-state-metrics 部署指标

Kubernetes Job 指标

监控作业完成状态和执行情况。了解更多信息,请访问 kube-state-metrics 作业指标

Kubernetes Namespace 指标

监控命名空间的活动和终止状态。了解更多信息,请访问 kube-state-metrics 命名空间指标

Kubernetes Node 指标

监控节点的健康状况和资源使用情况。了解更多信息,请访问 kube-state-metrics 节点指标

Kubernetes PersistentVolume 指标

监控 PersistentVolume 的大小、状态和存储配置。了解更多信息,请访问 kube-state-metrics PersistentVolume 指标

Kubernetes PersistentVolumeClaim 指标

监控 PersistentVolumeClaim 的阶段、类和存储请求。了解更多信息,请访问 kube-state-metrics PersistentVolumeClaim 指标

Kubernetes Pod 指标

监控 Pod 的健康状况和性能。了解更多信息,请访问 kube-state-metrics Pod 指标

Kubernetes ReplicaSet 指标

监控 ReplicaSet 的状态以及 ReplicaSet 中副本的数量。了解更多信息,请访问 kube-state-metrics ReplicaSet 指标

Kubernetes ResourceQuota 指标

监控资源限制和当前使用情况。了解更多信息,请访问 kube-state-metrics ResourceQuota 指标

Kubernetes Service 指标

监控服务的配置、可访问性和网络集成。了解更多信息,请访问 kube-state-metrics 服务指标

Kubernetes StatefulSet 指标

监控 StatefulSet 的配置、状态和缩放。了解更多信息,请访问 kube-state-metrics StatefulSet 指标

Kubernetes StorageClass 指标

监控存储的配置和分配方式。了解更多信息,请访问 kube-state-metrics StorageClass 指标

配置 kube-state-metrics 选项
编辑

为每个 kube-state-metrics 选项提供以下信息

添加元数据

此选项会向事件添加元数据。元数据对于分组和探索相关数据非常有价值。此选项默认启用。

主机

kube-state-metrics 运行的地址。默认端口为 8080。

Leader Election(领导者选举)

开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 kube_state_metrics 检索指标。这可以防止在多节点 Kubernetes 集群中出现重复数据。

轮询周期

轮询 kube-state-metrics 获取指标的频率。默认为每 10 秒一次。

配置 kube-state-metrics 元数据增强
编辑

Kubernetes 容器指标Kubernetes Pod 指标 下,您可以从 高级选项 → 添加节点和命名空间元数据 配置元数据增强。

在此处,更新 add_resource_metadata 块以配置增强。

add_resource_metadata:
  namespace:
   enabled: true
    #use_regex_include: false
    include_labels: ["namespacelabel1"]
    #use_regex_exclude: false
    #exclude_labels: ["namespacelabel2"]
  node:
   enabled: true
    #use_regex_include: false
    include_labels: ["nodelabel2"]
    include_annotations: ["nodeannotation1"]
    #use_regex_exclude: false
    #exclude_labels: ["nodelabel3"]
  #deployment: false
  #cronjob: false
从 Kubernetes API 服务器收集 Kubernetes 指标
编辑

kube-apiserver 收集指标默认情况下是开启的。kube-apiserver 设置并验证 Pod、服务和其他 API 对象。这些指标提供了对 API 服务器性能、工作负载和运行状况的洞察。

有关收集的指标的更多信息,请参阅 kube-apiserver 指标

配置 Kubernetes API 服务器选项
编辑

提供以下信息以收集 kube-apiserver 指标

Bearer 令牌文件

用于向 kube-apiserver 进行身份验证的令牌的文件路径。

主机

集成连接到的 Kubernetes API 服务器的地址。它使用 KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT 环境变量。

Leader Election(领导者选举)

开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 kube-apiserver 检索指标。这可以防止在多节点 Kubernetes 集群中出现重复数据。

轮询周期

轮询 kube-state-metrics 获取指标的频率。默认为每 30 秒一次。

SSL 证书颁发机构

用于验证 Kubernetes API 服务器 TLS 证书的证书颁发机构 (CA) 捆绑包的路径。

从 Kubernetes 代理收集 Kubernetes 指标
编辑

kube-proxy 在每个节点上运行并维护网络规则。从 kube-proxy 收集指标默认情况下是开启的。这些指标提供了对代理网络活动、性能和资源使用情况的洞察。

有关收集的指标的更多信息,请参阅 kube-proxy 指标

配置 Kubernetes 代理选项
编辑

提供以下信息以收集 Kubernetes 代理指标

主机

kube-proxy 运行的地址。默认端口为 10249。

轮询周期

轮询 kube-state-metrics 获取指标的频率。默认为每 10 秒一次。

从 Kubernetes 调度程序收集 Kubernetes 指标
编辑

kube-scheduler 将没有节点分配的新 Pod 分配到最合适的节点。启用此选项可获取来自 kube-scheduler 的指标。这些指标提供了有关 kube-scheduler 的性能、资源使用情况和运行状况的洞察。

有关收集的指标的更多信息,请参阅 kube-scheduler 指标

配置 Kubernetes 调度程序选项
编辑

提供以下信息以收集 Kubernetes 调度程序指标

Bearer 令牌文件

用于向 kube-scheduler 进行身份验证的令牌的文件路径。

主机

Elastic 集成应从中收集指标的 kube-scheduler 的地址和端口。默认端口为 10259

轮询周期

轮询 kube-scheduler 获取指标的频率。默认为每 10 秒一次。

SSL 验证模式

指定如何处理 SSL 验证。默认为 none,这意味着禁用 SSL 验证。

从 Kubernetes 控制器管理器收集 Kubernetes 指标
编辑

kube-controller-manager 规范集群的状态。启用此选项可获取来自 kube-controller-manager 的指标。这些指标提供了有关 kube-controller-manager 的性能、资源使用情况和运行状况的洞察。

有关收集的指标的更多信息,请参阅 kube-controller-manager 指标

配置 Kubernetes 控制器管理器选项
编辑

提供以下信息以收集 kube-controller-manager 指标

Bearer 令牌文件

用于向 kube-controller-manager 进行身份验证的令牌的文件路径。

主机

集成应从中收集指标的 kube-controller-manager 的地址和端口。默认端口为 10259。

轮询周期

轮询 kube-controller-manager 获取指标的频率。默认为每 10 秒一次。

SSL 验证模式

指定如何处理 SSL 验证。默认为 none,这意味着禁用 SSL 验证。

从 Kubernetes API 服务器收集 Kubernetes 事件
编辑

事件指标为您提供了集群中发生情况的整体视图。这些指标可帮助您了解集群中发生的情况,并提高可靠性和稳定性。从 Kubernetes API 服务器收集 Kubernetes 事件默认情况下是开启的。

有关收集的指标的更多信息,请参阅 事件指标

配置来自 Kubernetes API 服务器的事件
编辑

提供以下信息以收集 Kubernetes 事件指标

轮询周期

轮询 kube-api-server 获取事件的频率。默认为每 10 秒一次。

添加元数据

开启后可为事件添加元数据。元数据对于分组和探索相关数据非常有价值。

跳过较旧的事件

忽略在特定时间之前发生的事件

Leader Election(领导者选举)

开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 kube-apiserver 检索指标。这可以防止在多节点 Kubernetes 集群中出现重复数据。

收集 Kubernetes 容器日志
编辑

默认情况下启用 Kubernetes 容器日志的收集和解析。在 Kubernetes Pod 中运行的容器将日志发布到 stdout 或 stderr。这些日志将写入 kubelet 已知的某个位置。容器解析器默认启用。您可以在高级设置中启用其他解析器。

元数据富集也默认启用,并基于 Kubernetes 提供程序。使用 Kubernetes 提供程序的add_resource_metadata块进行配置。有关配置提供程序的更多信息,请参阅Kubernetes 提供程序文档。

有关收集容器日志的更多信息,请参阅Kubernetes 容器日志

配置 Kubernetes 容器日志
编辑

提供以下信息以收集容器日志

使用符号链接

符号链接轻量级,不包含日志文件的数据,但指向它们的实际位置。默认情况下使用符号链接。

条件

您可以指定一个条件来控制是否将配置应用于正在运行的 Elastic Agent。

收集 Kubernetes 审计日志
编辑

此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

启用此选项以收集审计日志。Kubernetes 审计日志记录来自内部和外部组件的 Kubernetes API 请求。这些日志可帮助您了解集群行为并调试问题。

有关收集审计日志的更多信息,请参阅Kubernetes 审计日志

第二部分:配置和安装独立 Elastic Agent

编辑

配置集成后,您需要下载并更新清单。首先,请完成以下步骤下载清单

  1. 添加 Kubernetes 集成页面底部,单击保存并继续
  2. 单击将 Elastic Agent 添加到您的主机
  3. 注册到 Fleet?下,选择运行独立模式

    Select run standalone under Enroll in Fleet
  4. 配置 Agent下,选择下载清单

下载清单后,打开它并更新 DaemonSet 中的ES_USERNAMEES_PASSWORD环境变量,以匹配您的 Elasticsearch 凭据。

您还可以进一步修改清单以满足您的需求。例如,您可能希望启用自动发现以自动发现容器日志。有关在清单中启用自动发现的更多信息,请参阅 Fleet 指南中的自动发现文档

准备好部署 Elastic Agent 后

  1. 从您下载清单的目录中,运行以下应用命令

    kubectl apply -f elastic-agent-standalone-kubernetes.yml
  2. 使用以下命令检查 Elastic Agent 状态

    kubectl -n kube-system get pods -l app=elastic-agent

如果您在配置或安装 Elastic Agent 时遇到任何问题,请参阅调试独立 Elastic Agent

第三部分:浏览日志和指标

编辑

使用 Kibana 查看 Elastic Agent 收集的指标和日志数据。有关查看数据的更多信息,请参阅以下部分。

查看性能和健康指标
编辑

要查看 Elastic Agent 收集的性能和健康指标,请在主菜单中查找基础架构或使用全局搜索字段

清单页面上,您可以切换不同的视图以查看 Kubernetes 上运行的容器和 Pod 的概述

Inventory page that shows Kubernetes pods

有关使用清单页面的更多信息,请参阅按资源类型查看基础架构指标

指标资源管理器页面上,您可以对正在监控的资源的指标进行分组和分析。

Metrics dashboard that shows CPU usage for Kubernetes pods

有关使用指标资源管理器页面的更多信息,请参阅随时间推移浏览基础架构指标

查看 Kubernetes 日志
编辑

全局搜索字段中查找日志资源管理器

使用日志资源管理器,您可以快速搜索和过滤日志数据,获取有关日志字段结构的信息,并在可视化中显示您的发现。

screenshot of the logs explorer main page

日志资源管理器中,您可以从数据选择器中选择 Kubernetes 集成以查看您的 Kubernetes 数据。

screenshot of the logs explorer main page

在这里,您可以过滤日志数据并深入研究单个日志以查找和解决问题。有关更多信息,请参阅

第四部分:监控应用程序性能

编辑

借助 Elastic 应用程序性能监控 (APM),您可以快速分类和解决应用程序性能问题。

考虑一下延迟峰值——APM 可以帮助您将调查范围缩小到单个服务。由于您还摄取并关联了日志和指标,因此您可以将问题与特定 Kubernetes Pod 的 CPU 和内存利用率或错误日志条目关联起来。

步骤 1:设置 APM
编辑

应用程序监控数据从在 Kubernetes 中运行的应用程序流式传输到 APM,在 APM 中,它会被验证、处理并转换为 Elasticsearch 文档。

在使用 Kubernetes 时,部署 APM 的方法有很多,但这篇指南假设您正在使用 Elastic Cloud 上的托管 Elasticsearch 服务。如果您尚未这样做,请在Elasticsearch 服务控制台中启用 APM。

如果您想自己管理 APM,还有其他一些选择

展开替代方案
  • Elastic Cloud on Kubernetes (ECK)——Elastic 建议用于管理在 Kubernetes 上部署的 APM Server 的方法。ECK 基于 Kubernetes Operator 模式构建,它扩展了基本的 Kubernetes 编排功能,以支持在 Kubernetes 上设置和管理 APM Server。
  • 将 APM Server 部署为 DaemonSet——确保集群中每个节点上都有一个正在运行的 APM Server 实例。当节点中的所有 Pod 都应该共享单个 APM Server 实例时很有用。
  • 将 APM Server 部署为 sidecar——对于不应共享 APM Server 的环境,例如当将来自多个应用程序的跟踪定向到单独的 Elasticsearch 集群时。
  • 下载并安装 APM Server——经典的非 Kubernetes 选项。
步骤 2:保存您的密钥令牌
编辑

使用密钥令牌来保护 APM 代理和 APM Server 之间的通信安全。要在 Kibana 中创建或更新密钥令牌

  1. 在主菜单中查找Fleet或使用全局搜索字段
  2. Agent策略选项卡下,选择要配置的策略。
  3. 找到 Elastic APM 集成并选择操作 → 编辑集成
  4. 导航到Agent 授权 → 密钥令牌并设置令牌的值。
  5. 单击保存集成。APM Server 将在更改生效之前重新启动。

为了避免公开密钥令牌,您可以将其存储在 Kubernetes 密钥中。例如

kubectl create secret generic apm-secret --from-literal=ELASTIC_APM_SECRET_TOKEN=asecretpassword --namespace=kube-system 

在您将部署应用程序的同一命名空间中创建密钥。

如果您自己管理 APM Server,请参阅密钥令牌,了解如何设置密钥令牌。

如果您使用 ECK 设置 APM Server,操作员会自动为您生成{APM-server-name}-apm-token密钥。

步骤 3:安装和配置 APM 代理
编辑

在大多数情况下,设置 APM 代理并从而检测您的应用程序就像安装库并添加几行代码一样简单。

选择您的应用程序的语言以获取详细信息

附加代理

Java 代理无需更改应用程序映像或代码即可检测支持的技术。为此,您需要一个基于官方 Elastic APM docker 镜像的init 容器

在您的应用程序启动之前,将代理从 init 容器复制到共享卷中。例如,使用 Java 代理

    # ...
    spec:
      volumes:
      - name: elastic-apm-agent 
        emptyDir: {}
      initContainers:
      - name: elastic-java-agent
        image: docker.elastic.co/observability/apm-agent-java:1.12.0 
        volumeMounts:
        - mountPath: /elastic/apm/agent
          name: elastic-apm-agent
        command: ['cp', '-v', '/usr/agent/elastic-apm-agent.jar', '/elastic/apm/agent'] 

共享卷

从官方 Elastic Java 代理镜像构建initContainer

将代理复制到共享卷

Java 命令行需要一种方法来获取此javaagent配置。您可以使用标准 JVM TI JAVA_TOOL_OPTIONS环境变量来执行此操作。它不必显式指定,并在 JVM 启动时由 JVM 自动获取。

对于不支持此选项的 JVM,您可以使用任何其他环境变量——在您的启动脚本中已定义的环境变量(例如某些 servlet 容器脚本中的JAVA_OPTS),或者添加一个专用空变量,如果未设置,则不会产生任何影响。

      # ...
      containers:
      - name: your-app-container
        env:
        # ...
        - name: JAVA_TOOL_OPTIONS 
          value: -javaagent:/elastic/apm/agent/elastic-apm-agent.jar

用于命令行获取javaagent配置。

配置代理

使用环境变量配置代理

        # ...
        - name: ELASTIC_APM_SERVER_URLS
          value: "apm-server-url-goes-here" 
        - name: ELASTIC_APM_SECRET_TOKEN
          valueFrom:
            secretKeyRef:
              name: apm-secret
              key: ELASTIC_APM_SECRET_TOKEN 
        - name: ELASTIC_APM_SERVICE_NAME
          value: "service-name-goes-here" 
        - name: ELASTIC_APM_APPLICATION_PACKAGES
          value: "org.springframework.samples.petclinic" 
        - name: JAVA_TOOL_OPTIONS 
          value: -javaagent:/elastic/apm/agent/elastic-apm-agent.jar

默认为https://127.0.0.1:8200

从先前创建的apm-secret密钥库中传入ELASTIC_APM_SECRET_TOKEN

允许的字符:a-z、A-Z、0-9、-、_ 和空格

用于确定堆栈跟踪帧是应用内帧还是帧。

前面已解释

在代理参考中了解更多信息

步骤 4:配置 Kubernetes 数据
编辑

在大多数情况下,APM 代理会自动读取容器内的 Kubernetes 数据并将其发送到 APM Server。如果不是这种情况,或者如果要覆盖此数据,则可以设置代理读取的环境变量。这些环境变量是通过 Kubernetes pod 规范中的 向下 API 设置的

      # ...
      containers:
      - name: your-app-container
        env:
        # ...
        - name: KUBERNETES_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: KUBERNETES_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: KUBERNETES_POD_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid

下表将这些环境变量映射到 APM 元数据事件字段

环境变量 元数据字段名称

KUBERNETES_NODE_NAME

system.kubernetes.node.name

KUBERNETES_POD_NAME

system.kubernetes.pod.name

KUBERNETES_NAMESPACE

system.kubernetes.namespace

KUBERNETES_POD_UID

system.kubernetes.pod.uid

步骤 5:部署您的应用程序
编辑

APM 代理与您的应用程序一起部署。

资源配置文件示例

基于上述步骤的完整资源配置文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <<your-app>>
  namespace: kube-system
  labels:
    app: <<your-app>>
    service: <<your-app>>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: <<your-app>>
  template:
    metadata:
      labels:
        app: <<your-app>>
        service: <<your-app>>
    spec:
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: elastic-apm-agent
        emptyDir: {}
      initContainers:
      - name: elastic-java-agent
        image: docker.elastic.co/observability/apm-agent-java:1.12.0
        volumeMounts:
        - mountPath: /elastic/apm/agent
          name: elastic-apm-agent
        command: ['cp', '-v', '/usr/agent/elastic-apm-agent.jar', '/elastic/apm/agent']
      containers:
      - name: <<your-app>>
        image: <<your-app>>
        volumeMounts:
        - mountPath: /elastic/apm/agent
          name: elastic-apm-agent
        env:
        - name: ELASTIC_APM_SERVER_URL
          value: "apm-server-url-goes-here"
        - name: ELASTIC_APM_SECRET_TOKEN
          valueFrom:
            secretKeyRef:
              name: apm-secret
              key: ELASTIC_APM_SECRET_TOKEN
        - name: ELASTIC_APM_SERVICE_NAME
          value: "petclinic"
        - name: ELASTIC_APM_APPLICATION_PACKAGES
          value: "org.springframework.samples.petclinic"
        - name: ELASTIC_APM_ENVIRONMENT
          value: test
        - name: JAVA_TOOL_OPTIONS
          value: -javaagent:/elastic/apm/agent/elastic-apm-agent.jar
        - name: KUBERNETES_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: KUBERNETES_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: KUBERNETES_POD_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid
kubectl apply -f demo.yml
在 Kibana 中查看您的应用程序跟踪
编辑

应用程序跟踪数据可在 服务清单 中找到。要打开 服务清单,请在主菜单中查找 应用程序 或使用 全局搜索字段

应用程序 应用程序允许您实时监控您的软件服务和应用程序:可视化服务上的详细性能信息,识别和分析错误,以及监控主机级别和特定于代理的指标,例如 JVM 和 Go 运行时指标。

Applications UI Kubernetes

只需点击几下即可访问应用程序级别的见解,这可以大大减少您花费在调试错误、缓慢的响应时间和崩溃上的时间。

最重要的是,由于 Kubernetes 环境变量已映射到 APM 元数据事件,您可以按 Kubernetes namespacenode.namepod.namepod.uid 过滤跟踪数据。

Applications UI Kubernetes

下一步

编辑
  • 想要保护您的端点免受安全威胁?试试 Elastic Security。添加端点保护只是您添加到代理策略的另一个集成!
  • 盯着屏幕墙看得眼睛都花了?创建警报,并在泳池边啜饮您最喜欢的饮料时了解问题。
  • 想要 Elastic 来完成繁重的工作?使用机器学习来 检测异常