常见问题
编辑常见问题编辑
本节介绍在使用 Fleet 管理的 APM 服务器时可能遇到的常见问题。
没有数据被索引编辑
如果 Elasticsearch 中没有显示任何数据,请首先确保您的 APM 组件已正确连接。
Elastic Agent 是否正常?
在 Kibana 中打开 Fleet 并找到运行 APM 集成的主机;确认其状态为 正常。如果不是,请检查 Elastic Agent 日志以诊断潜在原因。请参阅 监控 Elastic Agent 了解更多信息。
APM 服务器是否正常?
在 Kibana 中,打开 Fleet 并选择运行 APM 集成的主机。打开 日志 选项卡并选择 elastic_agent.apm_server
数据集。查找任何可以帮助诊断问题的 APM 服务器错误。
APM 代理是否可以连接到 APM 服务器
要确定 APM 代理是否可以连接到 APM 服务器,请向检测的服务发送请求,并在 APM 服务器日志中查找包含 [request]
的行。
如果没有记录任何请求,请确认
- SSL 没有 配置错误。
- 主机是正确的。例如,如果您使用的是 Docker,请确保绑定到正确的接口(例如,设置
apm-server.host = 0.0.0.0:8200
以匹配任何 IP),并相应地在 APM 代理中设置SERVER_URL
设置。
如果您看到请求通过 APM 服务器,但未被接受(响应代码不是 202
),请参阅 APM 服务器响应代码 以缩小可能的原因范围。
检测差距
APM 代理为许多流行的框架和库提供自动检测。如果 APM 代理没有自动检测您期望的内容,则数据将不会发送到 Elastic Stack。有关自动检测内容的详细信息,请参阅相关的 APM 代理文档。
如果 Elasticsearch 中没有显示任何数据,请首先检查 APM 组件是否已正确连接。
要确保 APM 服务器配置有效并且可以连接到配置的输出(默认情况下为 Elasticsearch),请运行以下命令
apm-server test config apm-server test output
要查看代理是否可以连接到 APM 服务器,请向检测的服务发送请求,并在 APM 服务器日志中查找包含 [request]
的行。
如果没有记录任何请求,则可能是 SSL 配置错误 或主机错误。特别是,如果您使用的是 Docker,请确保绑定到正确的接口(例如,设置 apm-server.host = 0.0.0.0:8200
以匹配任何 IP),并相应地在代理中设置 SERVER_URL
设置。
如果您看到请求通过 APM 服务器,但未被接受(响应代码不是 202
),请考虑使用响应代码来缩小可能的原因范围(请参阅以下部分)。
数据未显示的另一个原因是代理没有自动检测您期望的内容,请查看 代理文档 以详细了解自动检测的内容。
APM 服务器当前依赖 Elasticsearch 来创建不存在的索引。因此,必须将 Elasticsearch 配置为允许为 APM 索引 自动创建索引。
数据已编入索引,但未出现在 APM 应用中编辑
APM 应用依赖索引映射来查询和显示数据。如果您的 APM 数据未显示在 APM 应用中,而是显示在 Kibana 的其他位置(如 Discover 应用),则可能是缺少索引映射。
您可以使用 _mapping
API 确定字段是否已正确映射。例如,在 Kibana 控制台 中运行以下命令。这将显示 service.name
字段的字段数据类型。
GET *apm*/_mapping/field/service.name
如果 mapping.name.type
为 "text"
,则您的 APM 索引未正确设置。
".ds-metrics-apm.transaction.1m-default-2023.04.12-000038": { "mappings": { "service.name": { "full_name": "service.name", "mapping": { "name": { "type": "text" } } } } }
要解决此问题,请按照以下步骤安装 APM 集成
如果您有互联网连接
需要互联网连接才能通过 Kibana 中的 Fleet UI 安装 APM 集成。
- 打开 Kibana 并选择 添加集成 > Elastic APM。
- 单击 APM 集成。
- 单击 添加 Elastic APM。
- 单击 保存并继续。
- 单击 稍后添加 Elastic Agent。您无需运行 Elastic Agent 即可完成设置。
如果您没有互联网连接
如果您的环境有网络流量限制,则可以通过其他方式安装 APM 集成。有关更多信息,请参阅 无互联网环境。
-
选项 1:更新
kibana.yml
-
更新
kibana.yml
以包含以下内容,然后重新启动 Kibana。xpack.fleet.packages: - name: apm version: latest
有关如何编辑 Kibana 配置文件的更多信息,请参阅 配置 Kibana。
- 选项 2:使用 Fleet API
-
使用 Fleet API 安装 APM 集成。要成功执行此操作,需要针对 Kibana API 运行,而不是针对 Elasticsearch API 运行。
POST kbn:/api/fleet/epm/packages/apm/8.14.2 { "force": true }
有关如何使用 Kibana API 的更多信息,请参阅 Kibana API。
这将重新安装 APM 索引模板并触发数据流索引滚动更新。
您可以通过在 Kibana 控制台中运行以下命令来验证是否已安装正确的索引模板
GET /_index_template/traces-apm
常见的 SSL 相关问题编辑
SSL 客户端无法连接编辑
目标主机可能无法访问,或者证书可能无效。要解决此问题
-
确保目标主机上的 APM 服务器进程正在运行,并且您可以连接到它。尝试 ping 目标主机以验证您可以从运行 APM 服务器的主机访问它。然后使用
nc
或telnet
确保端口可用。例如ping <hostname or IP> telnet <hostname or IP> 5044
- 验证证书是否有效,以及主机名和 IP 是否匹配。
- 使用 OpenSSL 测试与目标服务器的连接并诊断问题。有关更多信息,请参阅 OpenSSL 文档。
x509:无法验证 <IP 地址> 的证书,因为它不包含任何 IP SAN编辑
发生这种情况是因为您的证书仅对“主题”字段中存在的主机名有效。要解决此问题,请尝试以下解决方案之一
- 为主机名创建一个 DNS 条目,将其映射到服务器的 IP。
- 在
/etc/hosts
中为主机名创建一个条目。或者,在 Windows 上,将条目添加到C:\Windows\System32\drivers\etc\hosts
。 - 重新创建服务器证书并为服务器的 IP 地址添加一个主题备用名称 (SAN)。这会使服务器的证书对主机名和 IP 地址都有效。
getsockopt:没有到主机的路由编辑
这不是 SSL 问题。这是一个网络问题。确保两台主机可以通信。
getsockopt:连接被拒绝编辑
这不是 SSL 问题。确保 Logstash 正在运行,并且没有防火墙阻止流量。
无法建立连接,因为目标计算机主动拒绝了它编辑
防火墙拒绝连接。检查防火墙是否在客户端、网络或目标主机上阻止了流量。
I/O 超时编辑
当您的堆栈中的超时设置配置不正确时(尤其是在使用负载均衡器时),可能会发生 I/O 超时。
您可能会在 APM 代理日志中看到如下错误,以及/或者在 APM 服务器端看到类似错误
[ElasticAPM] APM Server responded with an error: "read tcp 123.34.22.313:8200->123.34.22.40:41602: i/o timeout"
要解决此问题,请确保超时从 APM 代理、负载均衡器到 APM 服务器递增。
默认情况下,代理超时设置为 10 秒,服务器超时设置为 3600 秒。您的负载均衡器应该设置在这些数字之间。
例如
APM agent --> Load Balancer --> APM Server 10s 15s 3600s
可以通过更新读取整个请求的最长时间来配置 APM 服务器超时。
字段限制超出编辑
当在事务或跨度上添加太多不同的标签键时,您可能会面临映射爆炸的风险。
例如,您应该避免将用户指定的数据(如 URL 参数)用作标签键。同样,使用当前时间戳或用户 ID 作为标签键也不是一个好主意。但是,具有高基数的标签值不是问题。尽量将不同标签键的数量保持在最低限度。
映射爆炸的症状是,在一段时间后,事务和跨度不再被索引。通常,在第二天,跨度和事务将再次被索引,因为每天都会创建一个新索引。但是,一旦达到字段限制,索引就会再次停止。
在代理日志中,您不会看到任何失败迹象,因为 APM 服务器会异步地将从代理接收到的数据发送到 Elasticsearch。但是,APM 服务器和 Elasticsearch 会记录如下警告
{\"type\":\"illegal_argument_exception\",\"reason\":\"Limit of total fields [1000] in [INDEX_NAME] has been exceeded\"}
基于尾部的采样导致系统内存使用率高和磁盘 IO 高编辑
基于尾部的采样只需要最少的内存即可运行,并且 RSS 内存使用量不会明显增加。但是,由于基于尾部的采样会将数据写入磁盘,因此由于磁盘 IO,可能会看到操作系统页面缓存内存使用量显着增加。如果在启用基于尾部的采样后发现吞吐量下降和磁盘活动过多,请确保系统中有足够的内存空间供操作系统页面缓存有效地执行磁盘 IO。