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

2020-02-12 21:15:00

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 pipsudo 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 LogToolpython PyTool.py

排除 LogTool 故障

在執行時會建立兩個紀錄檔檔案:Error.logRuntime.log。請在你要開啟的問題的描述中新增兩者的內容。

局限性

LogTool 進行寫死以處理最大 500 MB 的檔案。

LogTool_Python3 指令碼

github.com/zahlabut/LogTool 獲取。