使用此 Python 脚本查找 Overcloud 中的错误

LogTool 是一组 Python 脚本,可帮助您调查 Overcloud 节点中问题的根本原因。
93 位读者喜欢这篇文章。
Searching for code

Opensource.com

OpenStack 在其 Overcloud 节点和 Undercloud 主机上存储和管理大量日志文件。因此,使用 OSP 日志文件来调查您遇到的问题并不容易,特别是当您甚至不知道可能导致问题的原因时。

如果那是您的情况,LogTool 将使您的生活轻松得多!它可以节省您手动调查根本原因所需的时间和工作。基于模糊字符串匹配算法,LogTool 提供了过去发生的所有唯一错误和警告消息。您可以根据日志中的时间戳导出特定时间段(例如 10 分钟前、一小时前、一天前等等)的这些消息。

LogTool 是一组 Python 脚本,其主模块 PyTool.py 在 Undercloud 主机上执行。某些操作模式使用在 Overcloud 节点上直接执行的附加脚本,例如从 Overcloud 日志导出错误和警告。

LogTool 支持 Python 2 和 3,您可以根据需要更改工作目录:LogTool_Python2LogTool_Python3

操作模式

1. 从 Overcloud 日志导出错误和警告

此模式用于从 Overcloud 节点提取过去发生的所有唯一的 ERRORWARNING 消息。作为用户,系统会提示您提供“起始时间”和调试级别,用于提取错误或警告。例如,如果在过去 10 分钟内出现问题,您将能够仅提取该时间段内的错误和警告消息。

此操作模式生成一个目录,其中包含每个 Overcloud 节点的result 文件。result 文件是一个简单的文本文件,经过压缩 (*.gz) 以减少从 Overcloud 节点下载它所需的时间。要将压缩文件转换为常规文本文件,您可以使用 zcat 或类似的工具。此外,某些版本的 Vi 和任何最新版本的 Emacs 都支持读取压缩数据。result 文件分为多个部分,底部包含目录。

LogTool 会动态检测两种类型的日志文件:标准非标准。在标准日志中,每行日志都具有已知且定义的结构:时间戳、调试级别、消息等等。在非标准日志中,日志的结构未知;例如,它可能是第三方的日志。在目录中,您会找到每个部分的“节名称 --> 行号”,例如

  • 原始数据 - 自以下时间起从标准 OSP 日志中提取的错误/警告: 本节包含所有提取的错误/警告消息,保持原样,没有任何修改或更改。这些消息是 LogTool 用于模糊匹配分析的原始数据。
  • 统计信息 - 自以下时间起每个标准 OSP 日志中的错误/警告数量: 在本节中,您可以找到每个标准日志文件中的错误和警告数量。这可能有助于您了解用于搜索问题根本原因的潜在组件。
  • 统计信息 - 自您提供的时间戳起,每个标准 OSP 日志文件的唯一消息: 本节介绍自您提供的时间戳以来的唯一错误和警告消息。有关每个唯一错误或警告的更多详细信息,请在“原始数据”部分中搜索相同的消息。
  • 统计信息 - 自任何时间起,每个非标准日志文件的唯一消息: 本节包含非标准日志文件中的唯一消息。遗憾的是,LogTool 无法以与标准日志文件相同的方式处理这些日志文件;因此,您在提取时提供的“起始时间”将被忽略,您将看到有史以来创建的所有唯一错误/警告消息。因此,首先,向下滚动到 result 文件底部的目录并查看其各节——使用目录中的行索引跳转到相关部分,其中数字 3、4 和 5 最重要。

2. 从 Overcloud 节点下载所有日志

来自所有 Overcloud 节点的日志将被压缩并下载到 Undercloud 主机上的本地目录。

3. 在所有 Overcloud 日志中 Grep 字符串

此模式在所有 Overcloud 日志中“grep”(搜索)用户提供的字符串。例如,您可能想查看特定请求 ID 的所有日志消息,例如“创建 VM”失败的请求 ID。

4. 检查 Overcloud 上的当前 CPU、RAM 和磁盘

此模式显示每个 Overcloud 节点上的当前 CPU、RAM 和磁盘信息。

5. 执行用户脚本

这使用户能够在 Overcloud 节点上运行自己的脚本。例如,假设 Overcloud 部署失败,因此您需要在每个控制器节点上执行相同的过程来修复它。您可以实现一个“变通方法”脚本,并使用此模式在控制器上运行它。

6. 仅按给定的时间戳下载相关日志

此模式仅下载 “上次修改时间” > “用户给定的时间戳” 的 Overcloud 日志。例如,如果您在 10 分钟前收到错误,则旧日志文件将不相关,因此无需下载它们。此外,您不能(或不应该)在某些错误报告工具中附加大型文件,因此此模式可能有助于制作错误报告。

7. 从 Undercloud 日志导出错误和警告

这与上面的模式 #1 相同,但用于 Undercloud 日志。

8. 检查 Overcloud 上不健康的 Docker

此模式用于搜索节点上不健康的 Docker。

9. 下载 OSP 日志并在本地运行 LogTool

此模式允许您从 Jenkins 或日志存储(例如,cougar11.scl.lab.tlv.redhat.com)下载 OSP 日志,并在本地分析下载的日志。

10. 分析 Undercloud 上的部署日志

此模式可以帮助您了解 Overcloud 或 Undercloud 部署期间出了什么问题。部署日志在使用 --log 选项时生成,例如,在 overcloud_deploy.sh 脚本内部;问题是此类日志不“友好”,并且很难理解出了什么问题,特别是当详细级别设置为 vv 或更高时,因为这会使日志变得不可读,其中包含大量数据。此模式提供有关所有失败任务的一些详细信息。

11. 分析 Gerrit(Zuul) 失败的 gate 日志

此模式用于分析 Gerrit(Zuul) 日志文件。它自动从远程 Gerrit gate(HTTP 下载)下载所有文件,并在本地分析所有文件。

安装

LogTool 在 GitHub 上可用。使用以下命令将其克隆到您的 Undercloud 主机:

git clone https://github.com/zahlabut/LogTool.git

该工具还使用了一些外部 Python 模块

Paramiko

此 SSH 模块通常默认安装在 Undercloud 上。使用以下命令验证是否已安装

ls -a /usr/lib/python2.7/site-packages | grep paramiko 

如果您需要安装该模块,请在您的 Undercloud 上执行以下命令

sudo easy_install pip
sudo pip install paramiko==2.1.1

BeautifulSoup

此 HTML 解析器模块仅在使用 HTTP 下载日志文件的模式下使用。它用于解析 Artifacts HTML 页面以获取其中的所有链接。要安装 BeautifulSoup,请输入此命令

pip install beautifulsoup4

您还可以使用 requirements.txt 文件通过执行以下命令来安装所有必需的模块

pip install -r requirements.txt

配置

所有必需的参数都直接在 PyTool.py 脚本内部设置。默认值为

overcloud_logs_dir = '/var/log/containers'
overcloud_ssh_user = 'heat-admin'
overcloud_ssh_key = '/home/stack/.ssh/id_rsa'
undercloud_logs_dir ='/var/log/containers'
source_rc_file_path='/home/stack/'

用法

此工具是交互式的,因此要启动它,只需输入

cd LogTool
python PyTool.py

LogTool 故障排除

运行时会创建两个日志文件:Error.log 和 Runtime.log请在您要打开的问题的描述中添加这两个文件的内容。

限制

LogTool 硬编码为处理最大 500 MB 的文件。

LogTool_Python3 脚本

github.com/zahlabut/LogTool 获取

接下来阅读什么
标签
User profile image.
我在 2018 年初加入了 RedHat,担任 QE 工程师。根据我之前在其他公司的工作经验,我发现处理日志文件并非易事,尤其是在测试产品包含:多台主机 + 每台主机上都有大量日志文件时。

2 条评论

有用的信息

我最近对 LogTool 进行了一些更改
1) result 文件中不再有“原始数据”部分。
2) 模式 #1,从现在开始,您将能够在两个选项之间进行选择
1 - 分析所有日志。
2 - 仅分析标准 OSP 日志。
3) 处理所有标准 Python 异常(总共约 50 个),例如:ValueError、SystemError、ImportError ... 等等,当“错误”级别用于提取时。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.