前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elastic Stack最佳实践系列:用官方诊断工具,故障排查,快人一步

Elastic Stack最佳实践系列:用官方诊断工具,故障排查,快人一步

原创
作者头像
点火三周
修改2022-05-09 21:44:50
1.9K4
修改2022-05-09 21:44:50
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

国内应该大部分用户都没有在Elastic原厂开工单的经历,但如果您曾联系过Elastic的售后寻求帮助,很可能他们会要求您运行支持诊断工具support-diagnostics)并在您的支持案例中提供诊断输出。这是一种常见的做法,但很多人可能不知道为什么,也不知道这个工具能干什么。因此,本博客将为大家介绍support-diagnostics的作用,及其输出的内容。 

简而言之,support-diagnostics有助于我们了解集群的状态。例如,它有助于:

  • 隔离集群性能问题
  • 优化集群配置
  • 字段映射问题疑难解答
  • 收集有关集群状态的一般信息

运行该工具虽然无法保证帮助我们解决每个 Elasticsearch 上的问题,但它确是故障排除过程中的一大利器,一旦掌握,故障排查,快人一步。

优先考虑数据隐私和安全

在我们开始之前,先简要介绍一下隐私。support-diagnostics会收集有关节点健康状况和其他集群元数据的运行时信息。但它不会收集存储在集群中的实际源事件或文档数据。

而在本博客的后面,我们还会介绍如何清除您可能也认为敏感的元数据(IP、主机名、索引名称等)来进一步清理这些文件。

安装和设置

运行要求

  • JDK - Oracle 或 OpenJDK,1.8-13。
    • 由于可能导致 TLS 错误的 JSSE 相关问题,不支持 IBM JDK。
    • Elasticsearch 版本 7 的重要说明: Elasticsearch 现在包含一个默认使用的捆绑 JVM。对于通过 Jstack它检索线程转储的诊断,必须使用与运行 Elasticsearch 相同的 JVM 执行。诊断实用程序将尝试查找用于运行它正在询问的进程的 JVM 的位置。如果无法这样做,您可能需要通过设置JAVA_HOME/bin包含包含的 JDK 目录的目录来手动配置位置。例如,<path to Elasticsearch 7 deployment>/jdk/Contents/Home
  • 该主机的系统用户帐户(不是 elasticsearch 登录名)必须具有足够的权限才能运行这些命令并访问日志(通常在/var/log/elasticsearch 中)以获得完整的诊断集合。
  • 如果您使用内置安全性进行身份验证,则提供的用户 ID 必须具有执行诊断 URL 的权限。除非您对定制您自己的帐户和角色的调用非常熟悉,否则建议使用超级用户角色。

下载和安装

  • 找到最新版本
  • 将下载的文件解压缩到您要运行的目录中。这可以与您希望询问的 Elasticsearch、Kibana 或 Logstash 主机位于同一主机上,也可以位于远程服务器或工作站上。您也可以在 Docker 容器中运行它。

使用单个命令运行大量API 调用

Elasticsearch 提供了许多 API 可以查询集群信息。因此,当我们对问题进行故障排除时,从这些 API 中转储尽可能多的信息而不是手动运行它们是非常有用且方便的。support-diagnostics能帮助我们做到这一点。 

运行单一的支持诊断命令可以避免用户从几十个不同的单独API调用中收集输出。把这个输出压缩成一个单一的压缩文件,们可以使用这些文件来诊断分片问题、性能瓶颈、字段映射问题以及更多。

由于它是一个 Java 应用程序,因此诊断对操作系统没有要求,因此它几乎可以在安装了 Java 虚拟机 (JVM) 的任何地方运行。

我们可以通过以下命令

代码语言:javascript
复制
./diagnostics.sh

or

代码语言:javascript
复制
.\diagnostics.bat

运行诊断工具。具体的各种命令可以参阅: https://github.com/elastic/support-diagnostics#running-from-the-command-line,运行后将提示一些用户输入并查询多个 Elasticsearch API 以生成文本和 json 文件的压缩 zip 存档。您可以在Support Diagnostic .yml 文件中查看它创建的文件的完整列表以及填充它们的 API 。

如果您想了解有关创建这些文件的 API 的更多信息,请参阅REST API 文档。 

使用压缩文件的工具分析集群健康

此时,您将得到一个可能有几 MB 大小的输出 zip,表示执行诊断时 Elasticsearch 集群的配置和状态。解压之后的文件,包含了几乎所有我们分析问题时需要的资料

我们可以使用可视化分析工具(原厂特有,不对外提供),对结果进行分析:

可以查看集群与节点的基础配置,注意,所有有问题的项,这个工具都很贴心的用黄色和红色警示,告诉我们需要注意或者修复

查看集群和节点信息
查看集群和节点信息

也可以查看索引和分片的信息。未分配或者状态异常的分片都会被提示

索引和分片
索引和分片

还可以查看类似Hot Threads这种性能排错时需要关注的内容,并且可以快速的过滤关键信息:

Hot Threads
Hot Threads

上面能做的东西不少,主要看我们在不同的场景下需要哪些数据进行分析。如果这里没有的内容,我们可以直接到压缩文件里找。

快速批量优化

我们甚至可以通过这些文件帮助我们做快速优化。

比如,我们要批量修改某个配置项,这里的例子是修改索引生命周期,我们可以找到这个ilm_policies.json,在里面统一修改后,重新import到集群当中:

批量修改
批量修改

如果我们将某些最佳实践固化,完全可以通过这种方式批量的在所有管理集群中进行修改。

脱敏能力

对你们中的一些人来说,元数据隐私可能和操作数据隐私一样重要。如果你是这种情况,诊断器可以在其输出中用自动生成的字符混淆特定字符或 "标记",并在输出文件中保持一致。只需在 yml 文件中的标记列表中定义您希望清理的字符,然后执行scrub命令:

Example tokens in a yml file

代码语言:javascript
复制
tokens: 
  - 'node-[\d?]*' 
  - 'cluster-630' 
  - 'disk1' 
  - 'data-one'

Example scrub command

代码语言:javascript
复制
./scrub.sh -a /path/to/my/diagoutput/diagnostics-20180621-161231.tar.gz -o /home/adminuser/sanitized-diags -c /home/adminuser/sanitized-diags/scrub.yml

诊断工具将用生成的脱敏字符替换在诊断中找到的每个标记。例如data-one,将会被some_string_value_1替代并贯穿诊断输出。更多文件脱敏选项可以在诊断程序库的文件清理部分中找到。

最后

Support Diagnostic 是一个“实时”的实用程序,它始终在更新。尝试使用最新版本来访问来自新 API 调用的内容,修改新的监控数据导出等实验性功能,或者只是从所做的一般改进中受益。

希望这有助于解释什么是支持诊断,您可以使用它做什么,以及它如何帮助支持确保您的集群以最佳性能运行。进一步探索其 API,在存储库中提供反馈,或将其用于您自己的 Elastic 故障排除目的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优先考虑数据隐私和安全
  • 安装和设置
    • 运行要求
      • 下载和安装
      • 使用单个命令运行大量API 调用
      • 使用压缩文件的工具分析集群健康
      • 快速批量优化
      • 脱敏能力
        • Example tokens in a yml file
          • Example scrub command
          • 最后
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档