常见问题排查

编辑

我们收集了最常见的已知问题并列在此处。如果此处未描述您的问题,请查看以下 GitHub 仓库中的未解决问题

仓库 查看或报告关于以下方面的问题

elastic/kibana

Fleet 和集成 UI

elastic/elastic-agent

Elastic Agent

elastic/beats

Beats 发货器

elastic/fleet-server

Fleet Server

elastic/package-registry

Elastic 包注册表

elastic/observability-docs

文档问题

有问题?请阅读我们的 常见问题解答,或在 讨论论坛 联系我们。您的反馈对我们非常宝贵。

独立运行 Elastic Agent?另请参考 调试独立 Elastic Agent

疑难解答内容

编辑

在以下文档中查找有关 Fleet、Fleet Server 和 Elastic Agent 的疑难解答信息

Elastic Agent 注销失败

编辑

在 Fleet 中,如果您删除与一个或多个非活动已注册 Agent 关联的 Elastic Agent 策略,当 Agent 返回到 HealthyOffline 状态时,它将无法注销。尝试注销 Agent 会导致 Error unenrolling agent 消息,并且注销失败。

要解决此问题,您可以使用 Kibana Fleet API 强制注销 Agent。

卸载单个 Elastic Agent

POST kbn:/api/fleet/agents/<agent_id>/unenroll
{
  "force": true,
  "revoke": true
}

批量卸载一组 Elastic Agent

POST kbn:/api/fleet/agents/bulk_unenroll
{ "agents": ["<agent_id1>", "<agent-id2>"],
  "force": true,
  "revoke": true
}

我们还在更新 Fleet UI,以防止删除当前与任何非活动 Agent 关联的 Elastic Agent 策略。

启用 TSDB 时出现 illegal_argument_exception

编辑

当您使用启用了 TSDB(时间序列数据库)的 Elastic Agent 集成时,您可能会在 Fleet UI 中遇到 illegal_argument_exception 错误。

如果您定义了包含 _source 属性的组件模板,这与启用 TSDB 时使用的 _source: synthetic 设置冲突,则可能发生这种情况。

有关错误以及如何解决错误的详细信息,请参阅 Innovation Hub 文章 Elastic Agent 的 TSDB 启用集成 中的 运行时字段不能用于 TSDB 索引 部分。

托管在 Elastic Cloud 上的 Elastic Agent 卡在 UpdatingOffline 状态

编辑

在 Elastic Cloud 中,在 升级 Fleet Server 及其集成策略后,注册到 Elastic Cloud Agent 策略中的 Agent 可能会遇到更新问题。要解决此问题

  1. 在终端窗口中,运行以下 cURL 请求,提供您的 Kibana 超级用户凭据以重置 Elastic Cloud Agent 策略。

    • 在 Kibana 8.11 及更高版本上运行:

      curl -u <username>:<password> --request POST \
        --url <kibana_url>/internal/fleet/reset_preconfigured_agent_policies/policy-elastic-agent-on-cloud \
        --header 'content-type: application/json' \
        --header 'kbn-xsrf: xyz' \
        --header 'elastic-api-version: 1'
    • 在 Kibana 8.11 之前的版本上运行:

      curl -u <username>:<password> --request POST \
        --url <kibana_url>/internal/fleet/reset_preconfigured_agent_policies/policy-elastic-agent-on-cloud \
        --header 'content-type: application/json' \
        --header 'kbn-xsrf: xyz'
  2. 强制注销卡在 Updating 状态的 Agent

    1. 要查找 Agent 的 ID,请转到 Fleet > Agents 并单击 Agent 以查看其详细信息。复制 Agent ID。
    2. 在终端窗口中,运行:

      curl -u <username>:<password> --request POST \
        --url <kibana_url>/api/fleet/agents/<agentID>/unenroll \
        --header 'content-type: application/json' \
        --header 'kbn-xsrf: xx' \
        --data-raw '{"force":true,"revoke":true}' \
        --compressed

      其中 <agentID> 是您在上一步中复制的 ID。

  3. 重启集成服务器

    在 Elastic Cloud 控制台中,在集成服务器下,单击 强制重启

使用 Elastic Cloud 时,Kibana 中未列出 Fleet Server

编辑

如果您无法在 Kibana 中看到 Fleet Server,请确保已将其设置好。

在 Elastic Cloud 上设置 Fleet Server

  1. 转到 Elastic Cloud 上的部署。
  2. 按照 Elastic Cloud 的提示设置 集成服务器。完成后,Fleet Server Elastic Agent 将显示在 Fleet 中。

在自管理集群上启用 Fleet 并设置 Fleet Server

  1. 在 Elasticsearch 配置文件 config/elasticsearch.yml 中,设置以下安全设置以启用安全性和 API 密钥

    xpack.security.enabled: true
    xpack.security.authc.api_key.enabled: true
  2. 在 Kibana 配置文件 config/kibana.yml 中,启用 Fleet 并指定您的用户凭据

    xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"
    elasticsearch.username: "my_username" 
    elasticsearch.password: "my_password"

    指定有权使用 Fleet 的用户。

    要设置密码,您可以使用已记录的 Elasticsearch API 或 elasticsearch-setup-passwords 命令。例如,./bin/elasticsearch-setup-passwords auto

    运行命令后

    1. 将 Elastic 用户名复制到 Kibana 配置文件。
    2. 重启 Kibana。
    3. 按照设置自管理 Fleet Server 的已记录步骤操作。有关更多信息,请参阅 什么是 Fleet Server?

/api/fleet/setup 端点无法访问包注册表

编辑

要安装集成,Fleet 应用需要连接到名为 Elastic 包注册表的外部服务。

要使此功能正常工作,Kibana 服务器必须连接到 https://epr.elastic.co443 端口。

Kibana 无法连接到隔离环境中的 Elastic 包注册表

编辑

在隔离环境中,如果您使用 Kibana 无法访问的自定义证书颁发机构 (CA),则可能会遇到以下错误

{"type":"log","@timestamp":"2022-03-02T09:58:36-05:00","tags":["error","plugins","fleet"],"pid":58716,"message":"Error connecting to package registry: request to https://customer.server.name:8443/categories?experimental=true&include_policy_templates=true&kibana.version=7.17.0 failed, reason: self signed certificate in certificate chain"}

要解决此问题,请通过定义 NODE_EXTRA_CA_CERTS 环境变量将您的 CA 证书文件路径添加到 Kibana 启动文件中。有关此方面的更多信息,请参阅 Elastic 包注册表的 TLS 配置 部分。

Kibana 中的 Fleet 崩溃

编辑
  1. 要调查错误,请打开浏览器的开发者控制台。
  2. 选择 网络 选项卡,然后刷新页面。

    对 Fleet API 的其中一个请求很可能会返回错误。如果错误消息没有提供足够的修复问题信息,请联系 讨论论坛

Elastic Agent 在主机上注册失败,并显示 x509: certificate signed by unknown authority 消息

编辑

为确保与 Fleet Server 的通信已加密,Fleet Server 需要 Elastic Agent 出示签名证书。在自管理集群中,如果您在设置 Fleet Server 时未指定证书,则会自动生成自签名证书。

如果您尝试在具有自签名证书的 Fleet Server 中注册 Elastic Agent,则会遇到以下错误

Error: fail to enroll: fail to execute request to fleet-server: x509: certificate signed by unknown authority
Error: enroll command failed with exit code: 1

要解决此问题,请将 --insecure 标志与 enrollinstall 命令一起传递。例如

sudo ./elastic-agent install --url=https://<fleet-server-ip>:8220 --enrollment-token=<token> --insecure

Elastic Agent 和 Fleet Server 之间的 HTTPS 通信将被加密;您只是承认您了解证书链无法验证。

允许 Fleet Server 生成自签名证书对于在开发中运行很有用,但不建议在生产环境中使用。

有关更多信息,请参阅 为自管理 Fleet Server 配置 SSL/TLS

Elastic Agent 在主机上注册失败,并显示 x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs 消息

编辑

为确保与 Elasticsearch 的通信已加密,Fleet Server 需要 Elasticsearch 出示签名证书。

当您使用带有 IP 作为公用名 (CN) 的自签名证书与 Elasticsearch 一起使用时,会发生此错误。使用 IP 作为 CN 时,Fleet Server 会查看主题备用名称 (SAN),该名称为空。要解决此问题,请使用 --fleet-server-es-insecure 标志禁用证书验证。

您还需要在 Fleet 和集成 UI 中的输出设置中设置 ssl.verification_mode: none

Elastic Agent 在主机上注册失败,并显示 Client.Timeout exceeded 消息

编辑

要注册到 Fleet,Elastic Agent 必须连接到 Fleet Server 实例。如果 Agent 无法连接,您将看到以下失败

fail to enroll: fail to execute request to {fleet-server}:Post http://fleet-server:8220/api/fleet/agents/enroll?: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

以下是一些帮助您排查问题的步骤。

  1. 检查网络问题。从主机运行 ping 命令以确认它可以访问 Fleet Server 实例。
  2. 此外,curl Fleet Server 的 /status API

    curl -f http://<fleet-server-url>:8220/api/status
  3. 请验证您是否为您的环境指定了正确的 Kibana Fleet 设置 URL 和端口。

    默认情况下,除非您显式设置了其他值,否则 Fleet 服务器期望使用 HTTPS 协议和 8220 端口与 Elasticsearch 通信。

  4. 检查您在注册期间是否指定了有效的注册密钥。为此,请执行以下操作:

    1. 在 Fleet 中,选择 注册令牌
    2. 要查看密钥,请单击眼睛图标。该密钥应与您用于在主机上注册 Elastic Agent 的字符串匹配。
    3. 如果密钥不匹配,请创建一个新的注册令牌,并在运行 elastic-agent enroll 命令时使用此令牌。

许多 Fleet 服务器问题都可以通过以下提示进行排查和修复

编辑

创建问题或发送支持论坛沟通时,本节可以帮助您确定所需内容。

Fleet 服务器允许 Elastic Agent 连接到 Elasticsearch,这与先前版本中与 Kibana 的连接相同。但是,由于 Fleet 服务器位于边缘主机上,因此可能会导致额外的网络设置和故障排除。

检索 Elastic Agent 版本
编辑
  1. 如果您安装了 Elastic Agent,请运行以下命令(此示例适用于基于 POSIX 的系统)

    elastic-agent version
  2. 如果您没有安装 Elastic Agent,并且正在将其作为临时进程运行,您可以运行

    ./elastic-agent version

    上述两个命令都可通过 Windows 或 macOS 访问,它们在调用方式上略有不同。如有需要,请参考 安装 Elastic Agent 以了解如何调整它们。

检查 Elastic Agent 状态
编辑

运行以下命令以查看 Elastic Agent 的当前状态。

elastic-agent status

根据返回的信息,您可以采取进一步的操作。

如果 Elastic Agent 正在运行,但您没有看到预期的结果,以下是一些需要检查的项目:

  1. 在 Fleet 中,单击 Agent。检查哪个策略与正在运行的 Elastic Agent 相关联。如果它不是您预期的策略,您可以更改它。
  2. 在 Fleet 中,单击 Agent,然后选择 Elastic Agent 策略。检查应包含的集成。

    例如,如果您想包含系统数据,请确保策略中包含 系统 集成。

  3. 确认是否选择了 收集 Agent 日志收集 Agent 指标 选项。

    1. 在 Fleet 中,单击 Agent,然后选择 Elastic Agent 策略。
    2. 选择 设置 选项卡。如果您想收集 Agent 日志或指标,请选择这些选项。

      Elastic Cloud Agent 策略 仅在 Elastic Cloud 部署中创建,默认情况下不包括日志或指标的收集。

收集 Elastic Agent 诊断包
编辑

Elastic Agent 诊断包收集以下信息:

  1. Elastic Agent 版本号
  2. Beats(和其他进程)版本号和进程元数据
  3. 本地配置、elastic-agent 策略以及呈现并传递给 Beats 和其他进程的配置
  4. Elastic Agent 的本地日志文件
  5. Elastic Agent 和 Beats pprof 配置文件

请注意,诊断包仅用于调试目的,其结构可能会在不同版本之间发生更改。

Elastic Agent 在创建诊断时尝试自动删除凭据和 API 密钥。请在共享之前查看存档的内容,以确保没有明文凭据。

包含诊断信息的 ZIP 存档将包括发送到 Elastic Agent 输出的文档的原始事件。默认情况下,它只将失败的事件记录为 warn。启用 debug 日志级别时,将记录所有事件。请在共享之前查看存档的内容,以确保没有包含敏感信息。

使用 CLI 获取诊断包

运行以下命令以生成包含 Elastic 团队可用于调试案例的诊断信息的 zip 存档。

elastic-agent diagnostics

如果您想省略诊断中的原始事件,请添加标志 --exclude-events

通过 Fleet 获取诊断包

Fleet 提供远程生成和收集 Elastic Agent 诊断包的功能。如果 Agent 在线且状态为 HealthyUnhealthy,则它可以收集并上传诊断信息。诊断信息将发送到 Fleet 服务器,然后 Fleet 服务器将其添加到 Elasticsearch 中。因此,即使对于未使用 Elasticsearch 输出的 Elastic Agent,此方法也能正常工作。要下载诊断包以进行本地查看,请执行以下操作:

  1. 在 Fleet 中,打开 Agent 选项卡。
  2. 主机 列中,单击 Agent 的名称。
  3. 单击 诊断 选项卡。
  4. 单击 请求诊断 .zip 按钮。

    Collect agent diagnostics under agent details

此页面将列出 Elastic Agent 的任何正在进行或以前收集的包。

请注意,这些包存储在 Elasticsearch 中,并在 7 天后自动删除。您也可以通过单击 垃圾桶 图标来删除任何先前创建的包。

某些问题发生得太早,以至于没有足够的日志可用

编辑

如果某些问题发生得太早,并且日志不足,请运行以下命令:

./elastic-agent install -f

独立安装命令会安装 Elastic Agent,并设置所有服务配置。现在您可以运行 *注册* 命令。例如:

elastic-agent enroll --fleet-server-es=https://<es-url>:443 --fleet-server-service-token=<token> --fleet-server-policy=<policy-id>

注意:Elastic Cloud 通常使用 443 端口。但是,对于自管理部署,您的 Elasticsearch 可能会在 9200 端口或其他完全不同的端口上运行。

有关查找 Agent 日志位置的信息,请参阅我们的 常见问题解答

Elastic Agent 显示为 Healthy,但仍然存在将数据发送到 Elasticsearch 的设置问题

编辑
  1. 要确认 Elastic Agent 正在运行且其状态为 Healthy,请选择 Agent 选项卡。

    如果您之前选择了 收集 Agent 日志 选项,您现在可以查看 Agent 日志。

  2. 单击 Agent 名称,然后选择 日志 选项卡。

    如果没有显示日志,则表示主机和 Elasticsearch 之间存在通信问题。这可能是因为端口已被占用。

  3. 您可以使用 Wireshark 或 netstat 等工具检查端口使用情况。在 POSIX 系统上,您可以运行以下命令:

    netstat -nat | grep :8220

    任何响应数据都表明端口正在使用中。如果您打算卸载 Fleet 服务器,则这可能是正确的或不正确的。在这种情况下,请重新检查并继续。

Elastic Agent 卡在 Updating 状态

编辑

从 Elastic Stack 8.11 版本开始,卡住的 Elastic Agent 升级应该会自动检测到,您可以从 Fleet 重新启动升级

Fleet 服务器正在运行且状态良好,并有数据,但其他 Agent 无法使用它连接到 Elasticsearch

编辑

某些设置仅在您有多个 Elastic Agent 时才使用。如果是这种情况,检查主机是否可以与 Fleet 服务器通信可能会有所帮助。

从非 Fleet 服务器主机运行以下命令:

curl -f http://<fleet-server-ip>:8220/api/status

响应可能会产生可以进一步调试的错误,或者它可能有效并显示通信端口和网络不是问题。

一个常见的问题是,Fleet 服务器的默认端口 8220 在 Fleet 服务器主机上未打开以进行通信。您可以使用符合您可能存在的任何网络和安全问题的常用工具来检查和纠正此问题。

Elasticsearch 身份验证服务失败,并显示 Authentication using apikey failed 消息

编辑

为了保存 API 密钥并在 Elasticsearch 中加密它们,Fleet 需要一个加密密钥。

要在 kibana.yml 配置文件中提供 API 密钥,请设置 xpack.encryptedSavedObjects.encryptionKey 属性。

xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"

Elastic Agent 失败,并显示 Agent process is not root/admin or validation failed 消息

编辑

确保运行 Elastic Agent 的用户具有 root 权限,因为某些集成需要 root 权限才能收集敏感数据。

如果您在 Linux 或 macOS 上以前台方式(而不是作为服务)运行 Elastic Agent,请在 root 用户下运行 Agent:sudosu

如果您使用的是 Elastic Defend 集成,请确保您在 SYSTEM 帐户下运行 Elastic Agent。

如果您按照 安装 Elastic Agent 中的说明将 Elastic Agent 安装为服务,则 Elastic Agent 默认情况下会在 SYSTEM 帐户下运行。

要在 SYSTEM 帐户下运行 Elastic Agent,您可以执行以下操作:

  1. 下载 PsExec 并将其内容解压缩到一个文件夹中。例如,d:\tools
  2. 以管理员身份打开命令提示符(右键单击命令提示符图标,然后选择 以管理员身份运行)。
  3. 在命令提示符下,在 SYSTEM 帐户下运行 Elastic Agent:

    d:\tools\psexec.exe -sid "C:\Program Files\Elastic-Agent\elastic-agent.exe" run

集成策略升级冲突过多

编辑

如果您尝试升级一个版本较旧的集成策略,可能会出现大量的冲突或配置问题。与其尝试解决这些问题,不如创建一个新的策略,对其进行测试,然后将集成升级推广到其他主机,这可能会更快。

升级集成之后

  1. 创建新的策略.
  2. 向策略添加集成。将自动使用较新的版本。
  3. 将策略应用于 Elastic Agent。

    在大规模部署中,您应该在推广大规模升级之前,在一个示例 Elastic Agent 上测试集成升级。只有在小型试用被认为成功后,才应将更新的策略推广到所有主机。

  4. 将集成更新推广到其他主机

    1. 在 Fleet 中,单击Agent 策略。单击要编辑的策略的名称。
    2. 搜索或滚动到特定的集成。打开操作菜单并选择删除集成
    3. 单击添加集成并重新添加刚刚删除的集成。将使用更新的版本并将其应用于所有 Elastic Agent。
    4. 对每个包含过期集成的策略重复此过程。

      在某些情况下,例如,当有数百或数千个需要更新的不同 Elastic Agent 和策略时,此升级路径不可行。在这种情况下,更新一个策略并使用复制策略操作将更新的策略版本应用于其他策略。这种方法的缺点是失去了单独评估跨策略的各个集成版本更改的粒度。

取消注册时 Elastic Agent 冻结

编辑

取消注册 Elastic Agent 时,Fleet 会等待来自 Agent 的确认,然后才能完成取消注册过程。如果 Fleet 没有收到确认,状态将停留在unenrolling

您可以取消注册 Agent 以使与该 Agent 相关的所有 API 密钥失效并将状态更改为inactive,以便该 Agent 不再显示在 Fleet 中。

  1. 在 Fleet 中,选择Agent
  2. 在 Agent 下,从要取消注册的 Agent 旁边的操作菜单中选择取消注册 Agent
  3. 单击强制取消注册

Fleet 服务器启动时,出现带有State changed to CRASHED: exited with code: 1的错误

编辑

您可能会因多种原因看到此错误消息。一个常见的原因是在尝试进行类似生产环境的使用时,传入的 ca.crt 文件找不到。要验证这是否是问题所在,请在不传递 ca.crt 文件的情况下引导 Fleet 服务器。这意味着您可以暂时使用 {fleet-sever} 自身的自签名证书来测试任何后续的 Elastic Agent 安装。

确保传入 ca.crt 文件的完整路径。相对路径不可行。

当您在 Elastic Agent 安装期间看到以下错误时,您就知道您的 Fleet 服务器已设置为使用其面向测试的自签名证书了

Error: fail to enroll: fail to execute request to fleet-server: x509: certificate signed by unknown authority
Error: enroll command failed with exit code: 1

要安装或注册针对自签名证书 Fleet 服务器 Elastic Agent,请在命令中添加--insecure选项

sudo ./elastic-agent install --url=https://<fleet-server-ip>:8220 --enrollment-token=<token> --insecure

有关更多信息,请参阅主机上 Elastic Agent 注册失败,出现x509: certificate signed by unknown authority消息

卸载 Elastic Endpoint 失败

编辑

卸载 Elastic Agent 时,Elastic Agent 管理的所有程序(例如 Elastic Endpoint)也会被删除。如果卸载失败,Elastic Endpoint 可能会保留在您的系统上。

要删除 Elastic Endpoint,请运行以下命令

cd /tmp
cp /Library/Elastic/Endpoint/elastic-endpoint elastic-endpoint
sudo ./elastic-endpoint uninstall
rm elastic-endpoint

API 密钥无权向.logs-endpoint.diagnostic.collection-*索引发送遥测数据

编辑

默认情况下,Elastic Stack 中启用了遥测功能,以帮助我们了解用户最感兴趣的功能。这有助于我们将精力集中在改进功能上。

如果您最近从版本7.10升级到7.11,则在查看 Elastic Defend 日志时可能会看到以下消息

action [indices:admin/auto_create] is unauthorized for API key id [KbvCi3YB96EBa6C9k2Cm]
of user [fleet_enroll] on indices [.logs-endpoint.diagnostic.collection-default]

以上消息表明 Elastic Endpoint 没有正确的权限来发送遥测数据。这是 7.11 中的一个已知问题,将在即将发布的补丁版本中修复。

要从日志中删除此消息,您可以关闭 Elastic Defend 集成的遥测功能,直到下一个补丁版本可用。

  1. 在 Kibana 中,单击集成,然后选择管理选项卡。
  2. 单击Elastic Defend,然后选择策略选项卡以查看所有已安装的集成。
  3. 单击集成以编辑它。
  4. 在高级设置下,将windows.advanced.diagnostic.enabled设置为false,然后保存集成。

托管的 Elastic Agent 离线

编辑

为了扩展 Fleet 服务器部署,当需要托管的 Elastic Agent 或不再需要时,Elastic Cloud 会启动新的容器或关闭旧的容器。旧的 Elastic Agent 将在 Agent 列表中显示 24 小时,然后自动消失。

Elastic Agent 无法注册到在 localhost 上运行的 Fleet 服务器。

编辑

如果您在 macOS 系统上本地使用 localhost (https://127.0.0.1:8220) 作为主机 URL 测试 Fleet 服务器,则可能会遇到此错误

Error: fail to enroll: fail to execute request to fleet-server:
lookup My-MacBook-Pro.local: no such host

这可能发生在较新的 macOS 软件上。要解决此问题,请确保在本地系统上启用了文件共享

APM 和 Fleet 无法在 Elastic Cloud 上升级到 8.x

编辑

在某些情况下,如果手动修改了 Elastic Cloud Agent 策略,则将 APM 和 Fleet 升级到 8.x 可能会失败。Kibana 中的 Fleet 应用可能会显示类似的消息

Unable to create package policy. Package 'apm' already exists on this agent policy

要解决此问题,您可以使用 API 调用重置 Elastic Cloud Agent 策略。请注意,这将删除您添加到策略中的任何自定义集成策略,例如 Synthetics 监控器。

curl -u elastic:<password> --request POST \
  --url <kibana_url>/internal/fleet/reset_preconfigured_agent_policies/policy-elastic-agent-on-cloud \
  --header 'Content-Type: application/json' \
  --header 'kbn-xsrf: xyz'

由于 PGP 密钥不可访问,脱机 Elastic Agent 升级可能会失败

编辑

在 8.9 及更高版本中,如果升级程序无法访问验证二进制签名所需的 PGP 密钥,则 Elastic Agent 升级可能会失败。有关详细信息和解决方法,请参阅 8.9.0 版本发行说明中的PGP 密钥下载在脱机环境中失败已知问题,或参阅 elastic-agent GitHub 存储库中的解决方法文档

删除 Fleet Server 集成后,Elastic Agent 无法连接

编辑

当您使用 Fleet 管理的 Elastic Agent 时,至少需要一个 Elastic Agent 运行Fleet Server 集成。如果意外地从 Elastic Agent 中删除包含此集成的策略,则所有其他 Agent 都将无法管理。但是,Elastic Agent 将继续向其配置的输出发送数据。

有两种方法可以解决此问题,具体取决于运行 Fleet Server 集成的 Elastic Agent 是否仍在安装并运行良好(但现在正在运行其他策略)。

恢复 Elastic Agent

  1. 在 Fleet 中,打开Agent选项卡并单击添加 Agent
  2. 添加 Agent弹出窗口中,选择包含Fleet Server集成的 Agent 策略。在 Elastic Cloud 上,您可以使用包含此集成的Elastic Cloud Agent 策略
  3. 按照弹出窗口中的说明操作,并在运行 CLI 命令之前停止。
  4. 根据原始 Fleet Server Elastic Agent 的状态,执行以下操作之一

    • 原始 Fleet Server Elastic Agent 仍在运行并运行良好

      在这种情况下,您只需要使用 Fleet 重新注册 Agent

      1. 从 Kibana UI 复制elastic-agent install命令。
      2. 在命令中,将install替换为enroll
      3. 在 Elastic Agent 运行的目录中(例如,Linux 上的/opt/Elastic/Agent/),以root用户身份运行该命令。

        例如,如果 Kibana 提供给您以下命令:

        sudo ./elastic-agent install --url=https://fleet-server:8220 --enrollment-token=bXktc3VwZXItc2VjcmV0LWVucm9sbWVudC10b2tlbg==

        改为运行:

        sudo ./elastic-agent enroll --url=https://fleet-server:8220 --enrollment-token=bXktc3VwZXItc2VjcmV0LWVucm9sbWVudC10b2tlbg==
    • 原始 Fleet Server Elastic Agent 已不再安装

      在这种情况下,您需要重新安装 Agent

      1. 从 Kibana UI 复制命令。无需更改命令。
      2. 按顺序运行命令。前三个命令将下载新的 Elastic Agent 安装包、展开存档并更改目录。

        最后一个命令将安装 Elastic Agent。例如:

        sudo ./elastic-agent install --url=https://fleet-server:8220 --enrollment-token=bXktc3VwZXItc2VjcmV0LWVucm9sbWVudC10b2tlbg==

运行这些步骤后,您的 Elastic Agent 应该能够再次与 Fleet 连接。

Kubernetes 上的 Elastic Agent 内存不足错误

编辑

在 Kubernetes 环境中,由于可用内存不足,Elastic Agent 可能会因OOMKilled原因而终止。

要检测此问题,请运行kubectl describe pod命令并检查结果中是否存在以下内容

       Last State:   Terminated
       Reason:       OOMKilled
       Exit Code:    137

要解决此问题,请为代理分配更多内存,然后重新启动它。

使用sudo运行Elastic Agent命令时出错

编辑

在Linux系统上,当您在无管理员权限的情况下安装Elastic Agent(即,使用--unprivileged标志)时,不应使用sudo运行Elastic Agent命令。这样做可能会导致错误,因为代理可能没有所需的权限。

例如,当您使用--unprivileged标志运行Elastic Agent时,运行elastic-agent inspect命令将导致如下所示的错误

Error: error loading agent config: error loading raw config: fail to read configuration /Library/Elastic/Agent/fleet.enc for the elastic-agent: fail to decode bytes: cipher: message authentication failed

要解决此问题,请安装Elastic Agent时不要使用--unprivileged标志,使其具有管理员访问权限,或者在运行Elastic Agent命令时不要使用sudo前缀。

使用Kustomize排查Kubernetes上Elastic Agent安装问题

编辑

Kubernetes上Elastic Agent安装期间的潜在问题可以分为两大类:

与清单中对象创建相关的问题
编辑

在排查使用Kustomize执行的安装时,检查渲染后的清单输出是一个好习惯。为此,请使用Kibana Onboarding提供的安装命令,并将最后部分| kubectl apply -f-替换为重定向到本地文件的命令。这允许更容易地分析渲染后的输出。

例如,Kibana最初为Elastic Agent独立安装提供的以下命令已修改为重定向输出以进行故障排除:

kubectl kustomize https://github.com/elastic/elastic-agent/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone\?ref\=v8.15.3 | sed -e 's/JUFQSV9LRVkl/ZDAyNnZaSUJ3eWIwSUlCT0duRGs6Q1JfYmJoVFRUQktoN2dXTkd0FNMtdw==/g' -e "s/%ES_HOST%/https:\/\/7a912e8674a34086eacd0e3d615e6048.us-west2.gcp.elastic-cloud.com:443/g" -e "s/%ONBOARDING_ID%/db687358-2c1f-4ec9-86e0-8f1baa4912ed/g" -e "s/\(docker.elastic.co\/beats\/elastic-agent:\).*$/\18.15.3/g" -e "/{CA_TRUSTED}/c\ " > elastic_agent_installation_complete_manifest.yaml

之前的命令生成一个名为elastic_agent_installation_complete_manifest.yaml的本地文件,您可以将其用于进一步分析。它包含Elastic Agent安装所需的一整套资源,包括:

  • RBAC对象(ServiceAccountsRoles等)
  • Elastic Agent配置的ConfigMapsSecrets
  • 作为DaemonSet部署的Elastic Agent独立实例
  • 作为Deployment部署的Kube-state-metrics

此文件的内容等同于您按照在 Kubernetes 上运行 Elastic Agent 独立实例步骤获得的内容,区别在于独立方法中不包含kube-state-metrics

可能出现的问题

  • 如果您的用户没有集群管理员权限,则RBAC资源创建可能会失败。
  • 某些Kubernetes安全机制(例如Pod安全标准)可能会导致清单的一部分被拒绝,因为需要hostNetwork访问和hostPath卷。
  • 如果您已经安装了kube-state-metrics,则可能会导致清单安装的一部分失败,或在未经通知的情况下更新您现有的资源。
安装后特定组件中发生的故障
编辑

如果安装正确且所有资源都已部署,但数据未按预期流动(例如,您在[指标 Kubernetes] 集群概述仪表盘上看不到任何数据),请检查以下项目:

  1. 检查资源状态,并确保它们都处于Running状态。

    kubectl get pods -n kube-system | grep elastic
    kubectl get pods -n kube-system | grep kube-state-metrics

    默认配置假设kube-state-metrics和Elastic Agent DaemonSet都部署在同一个命名空间中以进行通信。如果您更改任何组件的命名空间,则代理配置需要进一步的策略更新。

  2. 如果 Pod 处于 Pending 状态,请描述这些 Pod。

    kubectl describe -n kube-system <name_of_elastic_agent_pod>
  3. 检查 elastic-agents 和 kube-state-metrics 的日志,查找错误或警告。

    kubectl logs -n kube-system <name_of_elastic_agent_pod>
    kubectl logs -n kube-system <name_of_elastic_agent_pod> | grep -i error
    kubectl logs -n kube-system <name_of_elastic_agent_pod> | grep -i warn
    kubectl logs -n kube-system <name_of_kube-state-metrics_pod>

可能出现的问题

  • 连接到 Elasticsearch 时出现连接、授权或身份验证问题。

    确保安装期间使用的 API 密钥和 Elasticsearch 目标端点正确且可从 Pod 内访问。

    在已安装的系统中,API 密钥存储在名为elastic-agent-creds-<hash>Secret中,端点配置在ConfigMap elastic-agent-configs-<hash>中。

  • 缺少集群级指标(由kube-state-metrics提供)

    在 Kubernetes 上运行 Elastic Agent 独立实例中所述,充当leader的Elastic Agent Pod负责从kube-state-metrics检索集群级指标,并将它们传递到以metrics-kubernetes.state_<resource>为前缀的数据流。为了排查这些指标未显示的情况:

    1. 使用以下命令确定哪个 Pod 拥有集群中的领导权lease

      kubectl get lease -n kube-system elastic-agent-cluster-leader
    2. 检查该 Pod 的日志,查看连接到kube-state-metrics时是否存在错误,以及是否将state_*指标发送到 Elasticsearch。

      检查state_*指标是否已传递到Elasticsearch的一种方法是检查包含"Non-zero metrics in the last 30s"消息的日志行,并检查该行中state_*指标的值,例如:

      kubectl logs -n kube-system elastic-agent-xxxx | grep "Non-zero metrics" | grep "state_"

      如果之前的命令返回"state_pod":{"events":213,"success":213}或所有state_*指标的类似结果,则表示指标正在传递。

    3. 最后,如果您认为没有 Pod 充当领导者,您可以尝试删除lease以生成新的领导者。

      kubectl delete lease -n kube-system elastic-agent-cluster-leader
      # wait a few seconds and check for the lease again
      kubectl get lease -n kube-system elastic-agent-cluster-leader
  • 性能问题

    监控代理 Pod 的 CPU 和内存使用情况,并根据需要调整清单请求和限制。有关所需资源的更多详细信息,请参阅在 Kubernetes 上扩展 Elastic Agent

有关 Kubernetes 上 Elastic Agent 故障排除和信息的额外资源