用 Python 指令碼發現 OpenStack Overcloud 中的問題

Arkady Shtempler發表於2020-02-12

LogTool 是一組 Python 指令碼,可幫助你找出 Overcloud 節點中問題的根本原因。

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 主機:

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.logRuntime.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中國 榮譽推出

用 Python 指令碼發現 OpenStack Overcloud 中的問題

相關文章