疑难解答 Universal Profiling 代理部署
编辑疑难解答 Universal Profiling 代理部署
编辑您可以使用 Universal Profiling 代理日志查找错误。
以下是一个正常的 Universal Profiling 代理输出示例
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"
如果以下命令的输出为空,则表示 Universal Profiling 代理部署正在工作
head host-agent.log -n 15 | grep "level=error"
如果运行此命令输出错误级日志,则可能原因如下
-
Universal Profiling 代理正在不受支持的 Linux 内核版本上运行,或者缺少内核功能。
如果 Universal Profiling 代理在不受支持的内核版本上运行,则会记录以下内容
Universal Profiling Agent requires kernel version 4.19 or newer but got 3.10.0
如果内核中没有可用的 eBPF 功能,则 Universal Profiling 代理无法启动,并且会记录以下内容之一
Failed to probe eBPF syscall
或
Failed to probe tracepoint
-
Universal Profiling 代理无法连接到 Elastic Cloud。在这种情况下,会记录类似以下的消息
Failed to setup gRPC connection (retrying...): context deadline exceeded
验证
collection-agent
配置值是否已设置,并且是否等于在 Kibana 中单击添加数据时打印的内容。 -
密钥令牌无效或已更改。在这种情况下,Universal Profiling 代理会关闭并记录类似以下的消息
rpc error: code = Unauthenticated desc = authentication failed
-
Universal Profiling 代理无法将数据发送到您的部署。在这种情况下,会记录类似以下的消息
Failed to report hostinfo (retrying...): rpc error: code = Unimplemented desc = unknown service collectionagent.CollectionAgent"
这通常表示您的 Elastic Cloud 集群尚未配置为 Universal Profiling。要配置您的 Elastic Cloud 集群,请按照配置数据摄取中的步骤操作。
-
收集器(Elastic Cloud 中接收来自 Universal Profiling 代理的数据的后端的一部分)内存不足。在这种情况下,会记录类似以下的消息
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 → 部署 →
<部署名称>
→ 集成服务器来验证收集器是否正在运行。如果Profiling旁边的复制端点链接呈灰色,则需要通过单击集成服务器管理下的强制重启来重新启动收集器。对于非演示工作负载,请验证集成服务器是否至少具有建议的 4GB RAM。您可以在“集成服务器”页面上的实例下查看此信息。
-
Universal Profiling 代理与 Elastic Stack 版本不兼容。在这种情况下,会记录以下消息
rpc error: code = FailedPrecondition desc= HostAgent version is unsupported, please upgrade to the latest version
按照 Kibana 中显示的 Universal Profiling 代理部署说明操作,这些说明始终适用于您使用的 Elastic Stack 版本。
-
您正在使用来自较新 Elastic Stack 版本的 Universal Profiling 代理,该代理配置为连接到较旧的 Elastic Stack 版本集群。在这种情况下,会记录以下消息
rpc error: code = FailedPrecondition desc= Backend is incompatible with HostAgent, please check your configuration
按照 Kibana 中显示的 Universal Profiling 代理部署说明操作,这些说明始终适用于您使用的 Elastic Stack 版本。
如果您无法找到 Universal Profiling 代理故障的解决方案,您可以提出支持请求,并将Universal Profiling
和Universal Profiling Agent
作为问题的来源。
在 Universal Profiling 代理中启用详细日志记录
编辑在支持过程中,可能会要求您提供来自部署中一个 Universal Profiling 代理安装的调试日志。
要启用调试日志,请添加-verbose
命令行标志或在配置文件中添加verbose true
设置。
我们建议仅在 Universal Profiling 代理的一个实例上启用调试日志,而不是在整个部署中启用,以限制生成的日志数量。
改进加载时间
编辑为火焰图、topN 函数和跟踪视图加载的数据量可能会导致在使用慢速连接(例如 DSL 或移动设备)时出现延迟。
设置 Kibana 集群选项server.compression.brotli.enabled: true
可减少传输的数据量,并应缩短加载时间。
疑难解答 Universal Profiling 代理 Kubernetes 部署
编辑Helm 图表安装完成后,输出中将包含有关如何检查 Universal Profiling 代理 Pod 状态和读取日志的说明。以下部分提供了 Universal Profiling 代理安装不健康时的潜在场景。
污点
编辑Kubernetes 集群通常在其设置中包含污点和容忍。在这些情况下,即使对于大型集群,Universal Profiling 代理安装也可能显示没有 Pod 或很少有 Pod 正在运行。
这是因为污点会阻止在节点上执行 Pod,除非工作负载已被容忍。Helm 图表values.yaml
中的tolerations
键使用官方 Kubernetes 调度 API 格式设置污点的容忍。
以下示例提供了您可以添加到 Helm 图表values.yaml
中的tolerations
配置
-
要在所有带有污点
workload=python:NoExecute
的节点上部署 Universal Profiling 代理,请将以下内容添加到values.yaml
中tolerations: - key: "workload" value: "python" effect: "NoExecute"
-
要在所有带有键
production
和效果NoSchedule
(未提供值)的污点的节点上部署 Universal Profiling 代理,请将以下内容添加到values.yaml
中tolerations: - key: "production" effect: "NoSchedule" operator: Exists
-
要在所有节点上部署 Universal Profiling 代理,并容忍所有污点,请将以下内容添加到
values.yaml
中tolerations: - effect: NoSchedule operator: Exists - effect: NoExecute operator: Exists
安全策略执行
编辑一些 Kubernetes 集群配置了强化安全附加组件,以限制被利用的应用程序漏洞的爆炸半径。不同的强化方法会影响 Universal Profiling 代理的操作,例如,可能导致 Pod 在显示CrashLoopBackoff
状态后不断重启。
此 Kubernetes API 已弃用,但有些人仍在使用它。PodSecurityPolicy (PSP) 可能明确禁止在整个集群中执行privileged
容器。
由于 Universal Profiling 代理在大多数内核/CRI 中需要权限,因此您需要构建一个 PSP 以允许 Universal Profiling 代理 DaemonSet 运行。
在SIG-Security 文档中详细了解 Kubernetes 策略引擎。
以下工具可能会阻止 Universal Profiling 代理 Pod 的执行,因为 Helm 图表会构建一个集群角色并将其绑定到 Universal Profiling 代理服务帐户(我们将其用于容器元数据)
- Open Policy Agent Gatekeeper
- Kyverno
- Fairwinds Polaris
如果您已实施策略引擎,请将其配置为允许 Universal Profiling 代理执行和 RBAC 配置。
在某些情况下,您的 Universal Profiling 代理 Pod 可能运行良好,但它们不会连接到远程数据收集器 gRPC 接口,并且会停留在启动阶段,同时尝试定期连接。
以下是可能的原因
- Kubernetes
NetworkPolicies
定义连接规则,除非显式允许列表中列出,否则会阻止所有出站流量。 - 云或数据中心提供商网络规则仅将出站流量限制为允许的目标(ACL)。
这些设置不是 Kubernetes 的一部分,可能已包含在节点设置中。它们可能会阻止 Universal Profiling 代理正常工作,因为它们会拦截来自 Universal Profiling 代理到内核的系统调用并修改或阻止它们。
如果您已实施安全强化(以下列出了一些提供商),则应了解 Universal Profiling 代理所需的权限。
- GKE 上的 gVisor
- seccomp 过滤器
- AppArmor LSM
提交支持请求
编辑您可以从 Elastic Cloud 控制台中的支持请求页面提交支持请求。
在支持请求中,请指定您的问题是否与 Universal Profiling 代理或 Kibana 应用程序有关。
发送反馈
编辑如果疑难解答和支持无法解决您的问题,或者您有任何其他有关产品的反馈意见,请发送电子邮件至[email protected]
与 Universal Profiling 团队联系。