捕获诊断信息

edit

Elasticsearch 的 Support Diagnostic 工具捕获集群统计信息和大多数设置的即时快照。 它适用于所有 Elasticsearch 版本。

此信息可用于排查集群问题。有关可以使用支持诊断工具输出进行故障排除的问题示例,请参阅Elastic 博客

在联系 Elastic SupportElastic Discuss 之前,您可以使用此工具生成诊断信息,以最大限度地减少周转时间。

要求

edit
  • Java 运行时环境或 Java 开发工具包 v1.8 或更高版本

访问工具

edit

支持诊断工具作为子库包含在某些 Elastic 部署中:

  • Elastic Cloud Enterprise: 位于 Elastic Cloud Enterprise > 部署 > 操作 > 准备捆绑包 > Elasticsearch
  • Elastic Cloud on Kubernetes: 运行 eck-diagnostics

您也可以直接下载最新支持诊断版本的 diagnostics-X.X.X-dist.zip 文件,来自 the support-diagnostic 仓库

捕获诊断信息

edit

捕获 Elasticsearch 诊断:

  1. 在终端中,通过轮询集群的健康状态,验证您的网络和用户权限是否足以连接到您的Elasticsearch集群。

    例如,使用参数 host:localhostport:9200username:elastic,您可以使用以下 curl 请求:

    curl -X GET -k -u elastic -p https://localhost:9200/_cluster/health

    如果你收到一个HTTP 200 OK响应,那么你可以继续下一步。如果你收到一个不同的响应代码,那么在继续之前诊断问题

  2. 使用相同的环境参数,运行诊断工具脚本。

    有关您可以传递给工具的参数的信息,请参阅诊断参数参考

    以下命令选项是推荐的:

    基于Unix的系统

    sudo ./diagnostics.sh --type local --host localhost --port 9200 -u elastic -p --bypassDiagVerify --ssl --noVerify

    Windows

    sudo .\diagnostics.bat --type local --host localhost --port 9200 -u elastic -p --bypassDiagVerify --ssl --noVerify

    脚本执行模式

    您可以在三种模式下执行脚本:

    • local (默认, 推荐): 轮询Elasticsearch API, 收集操作系统信息,并捕获集群和GC日志。
    • remote: 建立一个ssh会话 到适用的目标服务器以拉取与local相同的信息。
    • api: 轮询Elasticsearch API。所有其他数据必须 手动收集。
  3. 当脚本完成后,验证是否没有错误记录到diagnostic.log。 如果日志文件包含错误,请参考诊断diagnostic.log中的错误
  4. 如果脚本完成且没有错误,则在工作目录或您指定的输出目录中会创建一个格式为-diagnostics-.zip的归档文件。您可以根据需要查看或共享诊断归档文件。

诊断非200集群健康响应

edit

当您轮询集群健康状况时,如果收到的响应不是200 OK,那么诊断工具可能无法按预期工作。以下是可能的错误代码及其解决方案:

HTTP 401 UNAUTHENTICATED
错误中的附加信息通常会指出您的用户名:密码对无效,或者您的.security索引不可用,您需要设置一个具有角色:超级用户基于文件的领域用户来进行认证。
HTTP 403 UNAUTHORIZED
您的用户名已被识别,但权限不足,无法运行诊断。请使用不同的用户名或提升用户的权限。
HTTP 429 TOO_MANY_REQUESTS (for example, circuit_breaking_exception)
您的用户名已通过身份验证和授权,但集群处于高负载状态,无法响应API调用。这些响应通常是间歇性的。您可以继续运行诊断,但诊断结果可能不完整。
HTTP 504 BAD_GATEWAY
您的网络在访问集群时遇到问题。您可能正在使用代理或防火墙。 建议您从不同位置运行诊断工具,确认您的端口,或使用IP地址代替URL域名。
HTTP 503 SERVICE_UNAVAILABLE (for example, master_not_discovered_exception)
您的集群当前没有选举出主节点,这对于其API响应是必需的。这可能是在主节点轮换期间的暂时现象。如果问题持续存在,请在继续操作之前调查原因

诊断diagnostic.log中的错误

edit

以下是您在运行诊断工具时可能会遇到的常见错误:

  • 错误:找不到或无法加载主类 com.elastic.support.diagnostics.DiagnosticApp

    这表明您不小心下载了源代码文件,而不是从发布页面下载了diagnostics-X.X.X-dist.zip

  • 由于系统或网络错误,无法检索 Elasticsearch 版本 - 无法继续。

    这表明诊断无法对集群运行命令。再次轮询集群的健康状况,并确保在运行诊断批处理或shell文件时使用相同的参数。

  • 一个包含is unauthorized for usersecurity_exception

    提供的用户没有足够的管理员权限来运行诊断工具。请使用另一个用户,或者授予该用户role:superuser权限。