对通用分析代理部署进行故障排除

编辑

对通用分析代理部署进行故障排除编辑

您可以使用通用分析代理日志查找错误。

以下是_正常_通用分析代理输出的示例

time="..." level=info msg="Starting Prodfiler Host Agent v2.4.0 (revision develop-5cce978a, build timestamp 12345678910)"
time="..." level=info msg="Interpreter tracers: perl,php,python,hotspot,ruby,v8"
time="..." level=info msg="Automatically determining environment and machine ID ..."
time="..." level=warning msg="Environment tester (gcp) failed: failed to get GCP metadata: Get \"http://169.254.169.254/computeMetadata/v1/instance/id\": dial tcp 169.254.169.254:80: i/o timeout"
time="..." level=warning msg="Environment tester (azure) failed: failed to get azure metadata: Get \"http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01&format=json\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)"
time="..." level=warning msg="Environment tester (aws) failed: failed to get aws metadata: EC2MetadataRequestError: failed to get EC2 instance identity document\ncaused by: RequestError: send request failed\ncaused by: Get \"http://169.254.169.254/latest/dynamic/instance-identity/document\": context deadline exceeded (Client.Timeout exceeded while awaiting headers)"
time="..." level=info msg="Environment: hardware, machine ID: 0xdeadbeefdeadbeef"
time="..." level=info msg="Assigned ProjectID: 5"
time="..." level=info msg="Start CPU metrics"
time="..." level=info msg="Start I/O metrics"
time="..." level=info msg="Found tpbase offset: 9320 (via x86_fsbase_write_task)"
time="..." level=info msg="Environment variable KUBERNETES_SERVICE_HOST not set"
time="..." level=info msg="Supports eBPF map batch operations"
time="..." level=info msg="eBPF tracer loaded"
time="..." level=info msg="Attached tracer program"
time="..." level=info msg="Attached sched monitor"

如果以下命令的输出为空,则表示通用分析代理部署正常工作

head host-agent.log -n 15 | grep "level=error"

如果运行此命令输出错误级别日志,则可能的原因如下

  • 通用分析代理正在不受支持的 Linux 内核版本上运行,或者缺少其内核功能。

    如果通用分析代理正在不受支持的内核版本上运行,则会记录以下内容

    Universal Profiling Agent requires kernel version 4.19 or newer but got 3.10.0

    如果内核中没有 eBPF 功能,则通用分析代理将无法启动,并且会记录以下内容之一

    Failed to probe eBPF syscall

    Failed to probe tracepoint
  • 通用分析代理无法连接到 Elastic Cloud。在这种情况下,会记录类似于以下内容的消息

    Failed to setup gRPC connection (retrying...): context deadline exceeded

    验证 collection-agent 配置值是否已设置,并且是否与在 Kibana 中单击 添加数据 时打印的内容相同。

  • 密钥令牌无效或已更改。在这种情况下,通用分析代理将关闭,并记录类似于以下内容的消息

    rpc error: code = Unauthenticated desc = authentication failed
  • 通用分析代理无法将数据发送到您的部署。在这种情况下,会记录类似于以下内容的消息

    Failed to report hostinfo (retrying...): rpc error: code = Unimplemented desc = unknown service collectionagent.CollectionAgent"

    这通常意味着您的 Elastic Cloud 集群尚未针对通用分析进行配置。要配置您的 Elastic Cloud 集群,请按照配置数据摄取中的步骤操作。

  • 收集器(Elastic Cloud 中接收来自通用分析代理数据的后端的一部分)内存不足。在这种情况下,会记录类似于以下内容的消息

    Error: failed to invoke XXX(): Unavailable rpc error: code = Unavailable desc = unexpected HTTP status code received from server: 502 (Bad Gateway); transport: received unexpected content-type "application/json; charset=UTF-8"

    通过导航到 Elastic Cloud 中的 Elastic Cloud → 部署 → <部署名称> → 集成服务器 来验证收集器是否正在运行。如果 分析 旁边的 复制端点 链接灰显,则需要通过单击 集成服务器管理 下的 强制重启 来重启收集器。

    对于非演示工作负载,请验证集成服务器是否至少具有建议的 4GB RAM。您可以在 实例 下的“集成服务器”页面上查看。

  • 通用分析代理与 Elastic Stack 版本不兼容。在这种情况下,会记录以下消息

    rpc error: code = FailedPrecondition desc= HostAgent version is unsupported, please upgrade to the latest version

    请按照 Kibana 中显示的通用分析代理部署说明进行操作,这些说明始终适用于您正在使用的 Elastic Stack 版本。

  • 您正在使用来自较新 Elastic Stack 版本的通用分析代理,该代理配置为连接到较旧的 Elastic Stack 版本集群。在这种情况下,会记录以下消息

    rpc error: code = FailedPrecondition desc= Backend is incompatible with HostAgent, please check your configuration

    请按照 Kibana 中显示的通用分析代理部署说明进行操作,这些说明始终适用于您正在使用的 Elastic Stack 版本。

如果您无法找到通用分析代理故障的解决方案,则可以提出支持请求,指明 通用分析通用分析代理 是问题的根源。

在通用分析代理中启用详细日志记录编辑

在支持过程中,您可能会被要求从部署中的一台通用分析代理安装中提供调试日志。

要启用调试日志,请添加 -verbose 命令行标志或配置文件中的 verbose true 设置。

我们建议仅在通用分析代理的单个实例上启用调试日志,而不是在整个部署上启用,以限制生成的日志量。

改进加载时间编辑

在使用慢速连接(例如 DSL 或移动网络)时,为火焰图、topN 函数和跟踪视图加载的数据量可能会导致延迟。

设置 Kibana 集群选项 server.compression.brotli.enabled: true 可以减少传输的数据量,从而缩短加载时间。

对通用分析代理 Kubernetes 部署进行故障排除编辑

Helm 图表安装完成后,输出中将包含有关如何检查通用分析代理 Pod 状态和读取日志的说明。以下部分介绍了通用分析代理安装 不正常 时的潜在情况。

污点编辑

Kubernetes 集群通常在其设置中包含污点和容忍度。在这些情况下,即使对于大型集群,通用分析代理安装也可能显示没有 Pod 或只有很少的 Pod 正在运行。

这是因为污点会阻止在节点上执行 Pod,除非工作负载已被容忍。Helm 图表 values.yaml 中的 tolerations 键使用官方 Kubernetes 调度 API 格式设置污点的容忍度。

以下示例提供了一个 tolerations 配置,您可以将其添加到 Helm 图表 values.yaml

  • 要在所有具有污点 workload=python:NoExecute 的节点上部署通用分析代理,请将以下内容添加到 values.yaml

    tolerations:
    - key: "workload"
      value: "python"
      effect: "NoExecute"
  • 要在所有具有_键_ production 和效果 NoSchedule(未提供值)的节点上部署通用分析代理,请将以下内容添加到 values.yaml

    tolerations:
      - key: "production"
        effect: "NoSchedule"
        operator: Exists
  • 要在所有节点上部署通用分析代理,容忍所有污点,请将以下内容添加到 values.yaml

    tolerations:
      - effect: NoSchedule
        operator: Exists
      - effect: NoExecute
        operator: Exists
安全策略实施编辑

某些 Kubernetes 集群配置了强化安全插件,以限制应用程序漏洞利用的影响范围。不同的强化方法可能会损害通用分析代理的操作,例如,可能会导致 Pod 在显示 CrashLoopBackoff 状态后不断重启。

Kubernetes PodSecurityPolicy(已弃用编辑

此 Kubernetes API 已被弃用,但仍有一些人在使用它。PodSecurityPolicy (PSP) 可以明确阻止在整个集群中执行 privileged 容器。

由于通用分析代理在大多数内核/CRI 中_需要_权限,因此您需要构建一个 PSP 以允许通用分析代理 DaemonSet 运行。

Kubernetes 策略引擎编辑

SIG-Security 文档中详细了解 Kubernetes 策略引擎。

以下工具_可能_会阻止通用分析代理 Pod 的执行,因为 Helm 图表会构建集群角色并将其绑定到通用分析代理服务帐户(我们将其用于容器元数据)

  • Open Policy Agent Gatekeeper
  • Kyverno
  • Fairwinds Polaris

如果您有策略引擎,请将其配置为允许通用分析代理执行和 RBAC 配置。

网络配置编辑

在某些情况下,您的通用分析代理 Pod 可能运行良好,但它们不会连接到远程数据收集器 gRPC 接口,并停留在启动阶段,同时尝试定期连接。

以下是可能的原因

  • Kubernetes NetworkPolicies 定义了连接规则,这些规则会阻止所有传出流量,除非明确列入允许列表。
  • 云或数据中心提供商网络规则仅将出口流量限制到允许的目标(ACL)。
操作系统级安全编辑

这些设置_不是 Kubernetes 的一部分_,并且可能已包含在节点设置中。它们可能会阻止通用分析代理正常工作,因为它们会拦截从通用分析代理到内核的系统调用并对其进行修改或阻止。

如果您已实施安全强化(下面列出了一些提供商),则应了解通用分析代理所需的权限。

  • GKE 上的 gVisor
  • seccomp 过滤器
  • AppArmor LSM

提交支持请求编辑

您可以在 Elastic Cloud 控制台中从支持请求页面提交支持请求。

在支持请求中,请说明您的问题是与通用分析代理有关还是与 Kibana 应用程序有关。

发送反馈编辑

如果故障排除和支持无法解决您的问题,或者您想分享有关该产品的任何其他反馈,请发送电子邮件至 [email protected],联系通用分析团队。