教程:观察您的 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 提供以下组件:
- Elastic Agent 是一种单一统一的方式,用于为主机添加日志和指标等数据的监控。
- Elastic Agent Kubernetes 集成与 Elastic Agent 协同工作,收集来自 Kubernetes 集群的日志和指标。
- APM(稍后介绍)用于监控、检测和诊断复杂的应用程序性能问题。
- Elasticsearch 用于存储和搜索您的数据。
- Kibana 中的可观测性应用程序用于可视化和管理您的可观测性数据。
Elastic Agent 的默认安装部署到 Kubernetes 中作为 DaemonSet,以确保在集群的每个节点上都运行一个实例。它收集来自 Kubernetes 上运行的 Pod、容器和应用程序的日志和指标。
元数据
编辑Elastic Agent 提供处理器,用于向事件添加元数据。元数据对于分组和探索相关数据非常有价值。例如,在分析容器日志时,您需要知道主机和容器名称,并能够关联日志、指标和跟踪。
默认部署包括处理器(如有需要),用于使用云和主机元数据丰富事件。
有关这些处理器的更多信息,请参阅 add_cloud_metadata
和 add_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 集成添加到您的策略:
- 在主菜单中找到 集成,或使用 全局搜索字段。
- 在搜索栏中输入“Kubernetes”,然后选择 Kubernetes 集成。
- 点击 Kubernetes 集成页面顶部的 添加 Kubernetes。
- 点击“添加集成”页面底部的 仅添加集成(跳过代理安装)。
继续执行 步骤 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 服务器地址。 |
轮询周期 |
轮询 kubelet API 获取指标的频率。默认为每 10 秒一次。 |
SSL 验证模式 |
指定如何处理 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 的效率和稳定性。了解更多信息,请访问 |
CronJob 指标 |
监控 CronJob 性能并确保其可靠高效地运行。了解更多信息,请访问 |
Kubernetes DaemonSet 指标 |
监控 DaemonSet 的健康状况和分发情况。了解更多信息,请访问 |
Kubernetes Deployment 指标 |
监控部署状态和配置。了解更多信息,请访问 |
Kubernetes Job 指标 |
监控作业完成状态和执行情况。了解更多信息,请访问 |
Kubernetes Namespace 指标 |
监控命名空间的活动和终止状态。了解更多信息,请访问 |
Kubernetes Node 指标 |
监控节点的健康状况和资源使用情况。了解更多信息,请访问 |
Kubernetes PersistentVolume 指标 |
监控 PersistentVolume 的大小、状态和存储配置。了解更多信息,请访问 |
Kubernetes PersistentVolumeClaim 指标 |
监控 PersistentVolumeClaim 的阶段、类和存储请求。了解更多信息,请访问 |
Kubernetes Pod 指标 |
监控 Pod 的健康状况和性能。了解更多信息,请访问 |
Kubernetes ReplicaSet 指标 |
监控 ReplicaSet 的状态以及 ReplicaSet 中副本的数量。了解更多信息,请访问 |
Kubernetes ResourceQuota 指标 |
监控资源限制和当前使用情况。了解更多信息,请访问 |
Kubernetes Service 指标 |
监控服务的配置、可访问性和网络集成。了解更多信息,请访问 |
Kubernetes StatefulSet 指标 |
监控 StatefulSet 的配置、状态和缩放。了解更多信息,请访问 |
Kubernetes StorageClass 指标 |
监控存储的配置和分配方式。了解更多信息,请访问 |
配置 kube-state-metrics
选项
编辑为每个 kube-state-metrics
选项提供以下信息
添加元数据 |
此选项会向事件添加元数据。元数据对于分组和探索相关数据非常有价值。此选项默认启用。 |
主机 |
|
Leader Election(领导者选举) |
开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 |
轮询周期 |
轮询 |
配置 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 令牌文件 |
用于向 |
主机 |
集成连接到的 Kubernetes API 服务器的地址。它使用 |
Leader Election(领导者选举) |
开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 |
轮询周期 |
轮询 |
SSL 证书颁发机构 |
用于验证 Kubernetes API 服务器 TLS 证书的证书颁发机构 (CA) 捆绑包的路径。 |
从 Kubernetes 代理收集 Kubernetes 指标
编辑kube-proxy
在每个节点上运行并维护网络规则。从 kube-proxy
收集指标默认情况下是开启的。这些指标提供了对代理网络活动、性能和资源使用情况的洞察。
有关收集的指标的更多信息,请参阅 kube-proxy
指标。
配置 Kubernetes 代理选项
编辑提供以下信息以收集 Kubernetes 代理指标
主机 |
|
轮询周期 |
轮询 |
从 Kubernetes 调度程序收集 Kubernetes 指标
编辑kube-scheduler 将没有节点分配的新 Pod 分配到最合适的节点。启用此选项可获取来自 kube-scheduler 的指标。这些指标提供了有关 kube-scheduler
的性能、资源使用情况和运行状况的洞察。
有关收集的指标的更多信息,请参阅 kube-scheduler
指标。
配置 Kubernetes 调度程序选项
编辑提供以下信息以收集 Kubernetes 调度程序指标
Bearer 令牌文件 |
用于向 |
主机 |
Elastic 集成应从中收集指标的 |
轮询周期 |
轮询 |
SSL 验证模式 |
指定如何处理 SSL 验证。默认为 |
从 Kubernetes 控制器管理器收集 Kubernetes 指标
编辑kube-controller-manager
规范集群的状态。启用此选项可获取来自 kube-controller-manager
的指标。这些指标提供了有关 kube-controller-manager 的性能、资源使用情况和运行状况的洞察。
有关收集的指标的更多信息,请参阅 kube-controller-manager
指标。
配置 Kubernetes 控制器管理器选项
编辑提供以下信息以收集 kube-controller-manager
指标
Bearer 令牌文件 |
用于向 |
主机 |
集成应从中收集指标的 |
轮询周期 |
轮询 |
SSL 验证模式 |
指定如何处理 SSL 验证。默认为 |
从 Kubernetes API 服务器收集 Kubernetes 事件
编辑事件指标为您提供了集群中发生情况的整体视图。这些指标可帮助您了解集群中发生的情况,并提高可靠性和稳定性。从 Kubernetes API 服务器收集 Kubernetes 事件默认情况下是开启的。
有关收集的指标的更多信息,请参阅 事件指标。
配置来自 Kubernetes API 服务器的事件
编辑提供以下信息以收集 Kubernetes 事件指标
轮询周期 |
轮询 |
添加元数据 |
开启后可为事件添加元数据。元数据对于分组和探索相关数据非常有价值。 |
跳过较旧的事件 |
忽略在特定时间之前发生的事件 |
Leader Election(领导者选举) |
开启时(默认行为),只有持有领导者锁的 Elastic Agent 才会从 |
收集 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
编辑配置集成后,您需要下载并更新清单。首先,请完成以下步骤下载清单
- 在添加 Kubernetes 集成页面底部,单击保存并继续。
- 单击将 Elastic Agent 添加到您的主机。
-
在注册到 Fleet?下,选择运行独立模式。
- 在配置 Agent下,选择下载清单。
下载清单后,打开它并更新 DaemonSet 中的ES_USERNAME
和ES_PASSWORD
环境变量,以匹配您的 Elasticsearch 凭据。
您还可以进一步修改清单以满足您的需求。例如,您可能希望启用自动发现以自动发现容器日志。有关在清单中启用自动发现的更多信息,请参阅 Fleet 指南中的自动发现文档。
准备好部署 Elastic Agent 后
-
从您下载清单的目录中,运行以下应用命令
kubectl apply -f elastic-agent-standalone-kubernetes.yml
-
使用以下命令检查 Elastic Agent 状态
kubectl -n kube-system get pods -l app=elastic-agent
如果您在配置或安装 Elastic Agent 时遇到任何问题,请参阅调试独立 Elastic Agent。
第三部分:浏览日志和指标
编辑使用 Kibana 查看 Elastic Agent 收集的指标和日志数据。有关查看数据的更多信息,请参阅以下部分。
查看性能和健康指标
编辑要查看 Elastic Agent 收集的性能和健康指标,请在主菜单中查找基础架构或使用全局搜索字段。
在清单页面上,您可以切换不同的视图以查看 Kubernetes 上运行的容器和 Pod 的概述
有关使用清单页面的更多信息,请参阅按资源类型查看基础架构指标。
在指标资源管理器页面上,您可以对正在监控的资源的指标进行分组和分析。
有关使用指标资源管理器页面的更多信息,请参阅随时间推移浏览基础架构指标。
查看 Kubernetes 日志
编辑在全局搜索字段中查找日志资源管理器
。
使用日志资源管理器,您可以快速搜索和过滤日志数据,获取有关日志字段结构的信息,并在可视化中显示您的发现。
从日志资源管理器中,您可以从数据选择器中选择 Kubernetes 集成以查看您的 Kubernetes 数据。
在这里,您可以过滤日志数据并深入研究单个日志以查找和解决问题。有关更多信息,请参阅
- 日志资源管理器,概述日志资源管理器。
- 在日志资源管理器中过滤日志,了解如何在日志资源管理器中过滤日志。
第四部分:监控应用程序性能
编辑借助 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 中创建或更新密钥令牌
- 在主菜单中查找Fleet或使用全局搜索字段。
- 在Agent策略选项卡下,选择要配置的策略。
- 找到 Elastic APM 集成并选择操作 → 编辑集成。
- 导航到Agent 授权 → 密钥令牌并设置令牌的值。
- 单击保存集成。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 代理并从而检测您的应用程序就像安装库并添加几行代码一样简单。
选择您的应用程序的语言以获取详细信息
安装代理
安装 Go 的 APM 代理包。
go get go.elastic.co/apm
检测您的应用程序
使用提供的检测模块之一或直接使用跟踪器 API 来检测您的 Go 应用程序。
import ( "net/http" "go.elastic.co/apm/module/apmhttp" ) func main() { mux := http.NewServeMux() ... http.ListenAndServe(":8080", apmhttp.Wrap(mux)) }
配置代理
使用环境变量配置代理
# ... - 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: "service-name-goes-here"
在代理参考中了解更多信息
附加代理
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']
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
配置代理
使用环境变量配置代理
# ... - 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
默认为 |
|
从先前创建的 |
|
允许的字符:a-z、A-Z、0-9、-、_ 和空格 |
|
用于确定堆栈跟踪帧是应用内帧还是库帧。 |
|
前面已解释 |
在代理参考中了解更多信息
这些说明适用于 .NET Core v2.2+。所有其他用例都需要从 NuGet 下载代理并将其添加到您的应用程序。有关完整详细信息,请参阅设置代理。代理设置完成后,跳转到此页面上的配置代理部分。
使用 init 容器下载并解压缩代理
.Net 代理会自动检测 .NET Core 2.2 及更高版本,无需任何应用程序代码更改。为此,您需要一个init 容器来提取并解压缩最新的代理版本
# ... spec: volumes: - name: elastic-apm-agent emptyDir: {} initContainers: - name: elastic-dotnet-agent image: busybox command: ["/bin/sh","-c"] args: - wget -qO './elastic-apm-agent/ElasticApmAgent.zip' https://github.com/elastic/apm-agent-dotnet/releases/download/1.7.0/ElasticApmAgent_1.7.0.zip; cd elastic-apm-agent; cat ElasticApmAgent.zip | busybox unzip -; volumeMounts: - mountPath: /elastic-apm-agent name: elastic-apm-agent
共享卷。 |
|
运行 shell 并执行提供的 |
|
获取最新的 |
要将代理连接到您的应用程序,请将 DOTNET_STARTUP_HOOKS
环境变量指向现在存在于 elastic-apm-agent
卷的 /elastic-apm-agent
目录中的 ElasticApmAgentStartupHook.dll
文件。
# ... containers: - name: your-app-container volumeMounts: - mountPath: /elastic-apm-agent name: elastic-apm-agent env: # ... - name: DOTNET_STARTUP_HOOKS value: "/elastic-apm-agent/ElasticApmAgentStartupHook.dll"
配置代理
使用环境变量配置代理
# ... - 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: DOTNET_STARTUP_HOOKS value: "/elastic-apm-agent/ElasticApmAgentStartupHook.dll"
默认为 |
|
从先前创建的 |
|
允许的字符:a-z、A-Z、0-9、-、_ 和空格 |
|
前面已解释,仅在使用无代码检测方法时才需要。 |
在代理参考中了解更多信息
安装APM代理
将APM代理作为 Node.js 应用程序的依赖项安装。
npm install elastic-apm-node --save
启动代理
重要的是,在您需要 Node.js 应用程序中的任何其他模块之前(在 express
、http
等之前)启动代理。
var apm = require('elastic-apm-node').start()
配置代理
使用环境变量配置代理
# ... - 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: "service-name-goes-here"
默认为 |
|
从先前创建的 |
|
如果未指定,则默认为 package.json 中的“name”字段。允许的字符:a-z、A-Z、0-9、-、_ 和空格 |
在代理参考中了解更多信息
安装代理
使用其中一个 已发布的软件包 安装 PHP 代理。
使用 RPM 包 (RHEL/CentOS 和 Fedora)
rpm -ivh <package-file>.rpm
使用 DEB 包 (Debian 和 Ubuntu)
dpkg -i <package-file>.deb
使用 APK 包 (Alpine)
apk add --allow-untrusted <package-file>.apk
如果您找不到您的发行版,您可以通过 从源代码构建 来安装代理。
配置代理
使用环境变量配置代理
# ... - 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: "service-name-goes-here"
在代理参考中了解更多信息
安装APM代理
将APM代理作为Python的依赖项安装
# Django pip install elastic-apm # Flask pip install elastic-apm[flask]
将代理添加到您的应用程序
对于 Django,将 elasticapm.contrib.django
添加到您设置中的 INSTALLED_APPS
INSTALLED_APPS = ( # ... 'elasticapm.contrib.django', )
对于 Flask,使用环境变量初始化应用程序的代理
from elasticapm.contrib.flask import ElasticAPM app = Flask(__name__) apm = ElasticAPM(app)
配置代理
使用环境变量配置代理
# ... - 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: "service-name-goes-here"
在代理参考中了解更多信息
安装APM代理
将代理添加到您的 Gemfile。
gem 'elastic-apm'
启动代理
Rails:APM 将在您的应用程序启动时自动启动。
Rack:包含中间件并启动和停止 Elastic APM
# config.ru app = lambda do |env| [200, {'Content-Type' => 'text/plain'}, ['ok']] end # Wraps all requests in transactions and reports exceptions use ElasticAPM::Middleware # Start an instance of the Agent ElasticAPM.start() run app # Gracefully stop the agent when process exits. # Makes sure any pending transactions have already sent. at_exit { ElasticAPM.stop }
配置代理
使用环境变量配置代理
# ... - 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: "service-name-goes-here"
在代理参考中了解更多信息
步骤 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 元数据事件字段
环境变量 | 元数据字段名称 |
---|---|
|
system.kubernetes.node.name |
|
system.kubernetes.pod.name |
|
system.kubernetes.namespace |
|
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 运行时指标。
只需点击几下即可访问应用程序级别的见解,这可以大大减少您花费在调试错误、缓慢的响应时间和崩溃上的时间。
最重要的是,由于 Kubernetes 环境变量已映射到 APM 元数据事件,您可以按 Kubernetes namespace
、node.name
、pod.name
和 pod.uid
过滤跟踪数据。
下一步
编辑- 想要保护您的端点免受安全威胁?试试 Elastic Security。添加端点保护只是您添加到代理策略的另一个集成!
- 盯着屏幕墙看得眼睛都花了?创建警报,并在泳池边啜饮您最喜欢的饮料时了解问题。
- 想要 Elastic 来完成繁重的工作?使用机器学习来 检测异常。