用 Python 指令碼發現 OpenStack Overcloud 中的問題
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.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
訂閱“Linux 中國”官方小程式來檢視
相關文章
- OpenStack 介面開發中的排序問題排序
- OpenStack 介面開發中response.body的中文編碼問題
- 寫python指令碼遇到的些許小問題Python指令碼
- 用現代 js 開發碼良指令碼JS指令碼
- 用python指令碼監控併發量Python指令碼
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- 使用nohup執行迴圈指令碼插入發現資料重複的問題指令碼
- shell 指令碼的除錯問題指令碼除錯
- 用greenlet實現Python中的併發Python
- Python的學習(八)----py指令碼中呼叫應用程式Python指令碼
- 通過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 透過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 用Python開發自動化測試指令碼Python指令碼
- 如何呼叫python中的shell指令碼?Python指令碼
- 程式碼實現中卡了很久的問題
- Web應用開發中的幾個問題Web
- 工程中JavaCodeReview發現的問題彙總JavaView
- Struts原始碼研究發現的一個問題原始碼
- SOLIDWORKS啟動時出現指令碼錯誤問題Solid指令碼
- ftp命令在指令碼中的運用FTP指令碼
- 如何解決OpenStack雲的互聯問題?
- 用 Python 指令碼實現對 Linux 伺服器的監控Python指令碼Linux伺服器
- 用HtmlWebpackPlugin解決靜態指令碼更新之後的快取問題HTMLWebPlugin指令碼快取
- Laravel 中執行 Python 指令碼LaravelPython指令碼
- LoadRunner錄製指令碼亂碼問題指令碼
- 在jbuilder中開發ejb出現的問題求救!UI
- MySql用Windows命令列中亂碼問題MySqlWindows命令列
- 發現問題,解決問題
- Python的中文編碼問題Python
- springweb開發中編碼亂碼問題解析SpringWeb
- 快速搭建主從的指令碼和問題排查指令碼
- iOS——寫一個快速定位問題的指令碼iOS指令碼
- 70個經典的 Shell 指令碼面試問題指令碼面試
- 【python】用python指令碼實現ansible的推送、下載、上傳檔案功能Python指令碼
- javaweb 中的亂碼問題JavaWeb
- shell指令碼中的變數及應用指令碼變數
- OpenStack 多臺計算節點時的問題
- ORACLE問題處理十個指令碼Oracle指令碼