用 Python 腳本發現 OpenStack Overcloud 中的問題

用 Python 腳本發現 OpenStack Overcloud 中的問題

LogTool 是一組 Python 腳本,可幫助你找出 Overcloud 節點中問題的根本原因。-- Arkady Shtempler(作者)


OpenStack 在其 Overcloud 節點和 Undercloud 主機上存儲和管理了一堆日誌文件。因此,使用 OSP 日誌文件來排查遇到的問題並不是一件容易的事,尤其在你甚至都不知道是什麼原因導致問題時。

如果你正處於這種情況,那麼 LogTool 可以使你的生活變得更加輕鬆!它會為你節省本需要人工排查問題所需的時間和精力。LogTool 基於模糊字符串匹配算法,可提供過去發生的所有唯一錯誤和警告信息。你可以根據日誌中的時間戳導出特定時間段(例如 10 分鐘前、一個小時前、一天前等)的這些信息。

LogTool 是一組 Python 腳本,其主要模塊 PyTool.py 在 Undercloud 主機上執行。某些操作模式使用直接在 Overcloud 節點上執行的其他腳本,例如從 Overcloud 日誌中導出錯誤和警告信息。

LogTool 支持 Python 2 和 Python 3,你可以根據需要更改工作目錄: LogTool_Python2 or LogTool_Python3 。

操作方式

1、從 Overcloud 日誌中導出錯誤和警告信息

此模式用於從過去發生的 Overcloud 節點中提取 錯誤警告 信息。作為用戶,系統將提示你提供“開始時間”和“調試級別”,以用於提取錯誤或警告消息。例如,如果在過去 10 分鐘內出了問題,你則可以只提取該時間段內的錯誤和警告消息。

此操作模式將為每個 Overcloud 節點生成一個包含結果文件的目錄。結果文件是經過壓縮的簡單文本文件(*.gz),以減少從 Overcloud 節點下載所需的時間。將壓縮文件轉換為常規文本文件,可以使用 zcat 或類似工具。此外,Vi 的某些版本和 Emacs 的任何最新版本均支持讀取壓縮數據。結果文件分為幾部分,並在底部包含目錄。

LogTool 可以即時檢測兩種日誌文件:標準和非標準。在標準文件中,每條日誌行都有一個已知的和已定義的結構:時間戳、調試級別、信息等等。在非標準文件中,日誌的結構未知。例如,它可能是第三方的日誌。在目錄中,你可以找到每個部分的“名稱 –> 行號”例如:

  • 原始數據 - 從標準 OSP 日誌中提取的錯誤/警告消息:
    這部分包含所有提取的錯誤/警告消息,沒有任何修改或更改。這些消息是 LogTool 用於模糊匹配分析的原始數據。
  • 統計信息 - 每個標準 OSP 日誌的錯誤/警告信息數量: 在此部分,你將找到每個標準日誌文件的錯誤和警告數量。這些信息可以幫助你瞭解用於排查問題根本原因的潛在組件。
  • 統計信息 - 每個標準 OSP 日誌文件的唯一消息: 這部分提供指定時間戳內的唯一的錯誤和警告消息。有關每個唯一錯誤或警告的更多詳細信息,請在“原始數據”部分中查找相同的消息。
  • 統計信息 - 每個非標準日誌文件在任意時間的唯一消息: 此部分包含非標準日誌文件中的唯一消息。遺憾的是,LogTool 無法像標準日誌文件那樣的處理方式處理這些日誌文件。因此,在你提取“特定時間”的日誌信息時會被忽略,你會看到過去創建的所有唯一的錯誤/警告消息。因此,首先,向下滾動到結果文件底部的目錄並查看其部分-使用目錄中的行索引跳到相關部分,其中第 3、4 和 5 行的信息最重要。

2、從 Overcloud 節點下載所有日誌

所有 Overcloud 節點的日誌將被壓縮並下載到 Undercloud 主機上的本地目錄。

3、所有 Overcloud 日誌中搜索字符串

該模式“grep”(搜索)由用戶在所有 Overcloud 日誌上提供的字符串。例如,你可能希望查看特定請求的所有日誌消息,例如,“Create VM”的失敗的請求 ID。

4、檢查 Overcloud 上當前的 CPU、RAM 和磁盤使用情況

該模式顯示每個 Overcloud 節點上的當前 CPU、RAM 和磁盤信息。

5、執行用戶腳本

該模式使用戶可以在 Overcloud 節點上運行自己的腳本。例如,假設 Overcloud 部署失敗,你就需要在每個控制器節點上執行相同的過程來修復該問題。你可以實現“替代方法”腳本,並使用此模式在控制器上運行它。

6、僅按給定的時間戳下載相關日誌

此模式僅下載 Overcloud 上 “給定的時間戳”的“上次修改時間”的日誌。例如,如果 10 分鐘前出現錯誤,則與舊日誌文件就沒有關係,因此無需下載。此外,你不能(或不應)在某些錯誤報告工具中附加大文件,因此此模式可能有助於編寫錯誤報告。

7、從 Undercloud 日誌中導出錯誤和警告信息

這與上面的模式 1 相同。

8、在 Overcloud 上檢查不正常的 docker

此模式用於在節點上搜索不正常的 Docker。

9、下載 OSP 日誌並在本地運行 LogTool

此模式允許你從 Jenkins 或 Log Storage 下載 OSP 日誌(例如,cougar11.scl.lab.tlv.redhat.com),並在本地分析。

10、在 Undercloud 上分析部署日誌

此模式可以幫助你瞭解 Overcloud 或 Undercloud 部署過程中出了什麼問題。例如,在overcloud_deploy.sh 腳本中,使用 --log 選項時會生成部署日誌;此類日誌的問題是“不友好”,你很難理解是什麼出了問題,尤其是當詳細程度設置為 vv 或更高時,使得日誌中的數據難以讀取。此模式提供有關所有失敗任務的詳細信息。

11、分析 Gerrit(Zuul)失敗的日誌

此模式用於分析 Gerrit(Zuul)日誌文件。它會自動從遠程 Gerrit 門下載所有文件(HTTP 下載)並在本地進行分析。

安裝

GitHub 上有 LogTool,使用以下命令將其克隆到你的 Undercloud 主機:

<code>git clone https://github.com/zahlabut/LogTool.git/<code>

該工具還使用了一些外部 Python 模塊:

Paramiko

默認情況下,SSH 模塊通常會安裝在 Undercloud 上。使用以下命令來驗證是否已安裝:

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

如果需要安裝模塊,請在 Undercloud 上執行以下命令:

<code>sudo easy_install pipsudo pip install paramiko==2.1.1/<code>

BeautifulSoup

此 HTML 解析器模塊僅在使用 HTTP 下載日誌文件的模式下使用。它用於解析 Artifacts HTML 頁面以獲取其中的所有鏈接。安裝 BeautifulSoup,請輸入以下命令:

<code>pip install beautifulsoup4/<code>

你還可以通過執行以下命令使用 requirements.txt 文件安裝所有必需的模塊:

<code>pip install -r requirements.txt/<code>

配置

所有必需的參數都直接在 PyTool.py 腳本中設置。默認值為:

<code>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/'/<code>

用法

此工具是交互式的,因此要啟動它,只需輸入:

<code>cd LogToolpython PyTool.py/<code>

排除 LogTool 故障

在運行時會創建兩個日誌文件:Error.log 和 Runtime.log。請在你要打開的問題的描述中添加兩者的內容。

侷限性

LogTool 進行硬編碼以處理最大 500 MB 的文件。

LogTool_Python3 腳本

在 github.com/zahlabut/LogTool 獲取。


via: https://opensource.com/article/20/1/logtool-root-cause-identification

作者: Arkady Shtempler 選題: lujun9972 譯者: Morisun029 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: