TWI740886B - 日誌收集客戶端及其升級方法 - Google Patents
日誌收集客戶端及其升級方法 Download PDFInfo
- Publication number
- TWI740886B TWI740886B TW106102497A TW106102497A TWI740886B TW I740886 B TWI740886 B TW I740886B TW 106102497 A TW106102497 A TW 106102497A TW 106102497 A TW106102497 A TW 106102497A TW I740886 B TWI740886 B TW I740886B
- Authority
- TW
- Taiwan
- Prior art keywords
- upgrade
- guard
- version
- program
- trip
- Prior art date
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本發明公開了一種日誌收集客戶端及其升級方法,該方法首先向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應,隨後根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求,並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,採用下載的升級檔案進行升級,並檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。本發明日誌收集客戶端包括心跳請求模組、升級響應模組和升級檢查模組。本發明升級過程中資料收集無丟失,新版程式異常時可以自動轉返。
Description
本發明屬於電腦技術領域,尤其關於一種日誌收集客戶端及其升級方法。
隨著電子資訊技術的發展,大數據時代已經到來。日誌是一種分佈廣泛且重要的資料資源,基於日誌可以完成系統監控、運營審計、資料分析等工作。日誌收集客戶端是運行在設備作業系統上的程式,可以根據採集配置讀取指定日誌檔案內容、處理後發送到日誌服務端。
為了規避已知程式bug的潛在風險、提供更好的功能體驗,客戶端程式往往需要升級為更高的版本。然而在實際業務場景下,日誌每時每刻在產生,客戶端程式升級不可避免要更換可執行檔案並重啟行程,因此在升級的過程中容易造成日誌採集進度的丟失。
現有技術方案在解決日誌收集客戶端升級的問題上,業內主要有兩類方案。方案一為冷升級,例如Logstash(1.5.4版本)、fluentd(2.2.1版本)等開源日誌收集軟體,其程式版本升級過程分為三個步驟: 在設備上執行控制腳本停止正在運行的舊版本行程;通過yum或tar包等方式安裝新版本程式檔案到設備;在設備上執行控制腳本啟動新版本行程並完成升級。
方案二為雙程式檔案熱升級,這類客戶端軟體會在設備上運行兩個程式檔案,分別對應兩個行程:一個是日誌收集行程,該行程安裝SIGTERM信號並在信號處理函數中執行程式退出的準備操作;另一個是守護行程,負責下載新的程式檔案並完成從舊到新的版本切換。其升級過程包括四步:守護行程在一次輪詢中檢測到有新的客戶端程式安裝包可用,並將其下載到本機;守護行程向日誌收集行程發出SIGTERM信號;一般情況下,日誌收集行程在接收到SIGTERM信號後,完成退出準備操作並記錄日誌採集進度到本地後主動退出。若日誌收集行程的退出動作超時(比如行程接受SIGTERM後一分鐘沒有完成退出準備操作),守護行程將發出SIGKILL強制結束日誌收集行程運行。
守護行程檢測到舊版本日誌收集行程已退出,啟動新版本程式並完成升級。
然而現有的冷升級方案,需要人工參與升級過程,運維成本高,並且程式升級過程中會強制殺死舊行程造成日誌採集進度的丟失,程式版本升級對資料收集的完整性有影響;假如新版本程式檔案不可用(如啟動後發生 crash),也沒有自動的版本回退機制。現有雙程式熱升級方案中,日誌收集程式與守護程式相結合,支援自動化操作,但升級過程中,守護行程通過信號與日誌收集行程單向通信,日誌收集行程在收到SIGTERM信號後,若短時間無法正常退出(比如沒有完成日誌採集進度的持久化),守護行程在超時後會再次發出SIGKILL信號並被強制終止其運行。這樣新版本程式啟動後無法獲取升級前的日誌採集進度,造成資料收集的丟失。並且在守護行程發出SIGTERM後,舊版本日誌收集行程正常退出,但是隨後啟動的新採集程式無法正常啟動時,日誌收集中斷,需要人工運維介入。
本發明的目的是提供一種日誌收集客戶端及其升級方法,通過單程式檔案、雙行程運行的方式完成程式自身升級,解決了升級過程中可能出現的資料丟失問題和升級失敗時的版本回退問題。
為了實現上述目的,本發明技術方案如下:一種日誌收集客戶端升級方法,應用於日誌收集客戶端,該方法包括:向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應;根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求,並停止收集新的日誌資料,將已經 收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,採用下載的升級檔案進行升級;檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。
其中,該日誌收集客戶端啟動後,創建有守護行程和工作行程,則該向配置伺服器發送心跳請求,包括:工作行程定期向配置伺服器發送心跳請求,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
進一步地,該日誌收集客戶端升級方法在採用下載的升級檔案進行升級之前,還包括:該工作行程向守護行程發出通知升級操作的信號SIGUSR1。
進一步地,該守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成 功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗。
進一步地,該採用下載的升級檔案進行升級,包括:守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE;守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;守護行程發送SIGKILL信號給工作行程,工作行程退出。
進一步地,該採用下載的升級檔案進行升級,還包括步驟:執行升級後的日誌收集客戶端程式,創建新版本下的守護行程和工作行程;新版本下的守護行程週期迴圈檢測全域狀態;如果新版本下的工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的守護行程。
進一步地,該檢查是否升級成功,包括: 原版本下的守護行程週期迴圈檢查來自新版本下的守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的守護行程的SIGUSR2,原版本下的守護行程認為啟動新版本超時並向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的守護行程向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的守護行程退出,升級成功。
本發明還提出了一種日誌收集客戶端,該日誌收集客戶端包括:心跳請求模組,用於向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應;升級響應模組,用於根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,採用下載的升級檔案進行升級;升級檢查模組,用於檢查是否升級成功,如果升級成 功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。
進一步地,該日誌收集客戶端啟動後,創建有守護行程和工作行程,該心跳請求模組在向配置伺服器發送心跳請求時,執行如下操作:工作行程定期向配置伺服器發送心跳請求,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
進一步地,該升級響應模組在採用下載的升級檔案進行升級之前,還執行如下操作:該工作行程向守護行程發出通知升級操作的信號SIGUSR1。
進一步地,該守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級 工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗。
進一步地,該升級響應模組在採用下載的升級檔案進行升級時,執行如下操作:守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE;守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;守護行程發送SIGKILL信號給工作行程,工作行程退出。
進一步地,該升級響應模組在採用下載的升級檔案進行升級時,還執行如下操作:執行升級後的日誌收集客戶端程式,創建新版本下的守護行程和工作行程;新版本下的守護行程週期迴圈檢測全域狀態;如果新版本下的工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的守護行程。
進一步地,該升級檢查模組在檢查是否升級成功時,執行如下操作: 原版本下的守護行程週期迴圈檢查來自新版本下的守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的守護行程的SIGUSR2,原版本下的守護行程認為啟動新版本超時並向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的守護行程向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的守護行程退出,升級成功。
本發明提出的一種日誌收集客戶端及其升級方法,升級過程無需人工運維干預,升級過程中的父子行程雙向通信,協商一致後執行升級操作,升級前後資料不丟失;如果新程式啟動異常,守護行程可以快速發現並自動執行版本回退操作。
S1‧‧‧步驟
S2‧‧‧步驟
S3‧‧‧步驟
圖1為本發明日誌收集客戶端升級方法流程圖;圖2為本發明原版本客戶端運行流程圖; 圖3為本發明新版本客戶端運行流程圖;圖4為本發明日誌收集客戶端結構示意圖。
下面結合附圖和實施例對本發明技術方案做進一步詳細說明,以下實施例不構成對本發明的限定。
日誌系統一般包括安裝在主機上的日誌收集客戶端Client,以及用於管理所有主機上運行的日誌收集客戶端的配置伺服器ConfigServer,以及接收日誌收集客戶端採集到的日誌資料的資料伺服器DataServer。主機就是日誌系統所要記錄日誌的設備,每個主機上都安裝有日誌收集客戶端。
主機的日誌收集客戶端啟動後,有兩個行程開始運行,一個是守護行程DaemonProcess,一個是工作行程WorkerProcess。在開機記錄收集客戶端時,先創建父行程DaemonProcess,然後調用系統調用fork,創建子行程WorkerProcess。子行程WorkerProcess根據使用者的收集配置採集指定日誌檔案內容並通過網路發送到資料伺服器,同時子行程WorkerProcess還通過定時(例如1分鐘)向配置伺服器發送心跳請求,通過心跳請求的響應內容來接受配置伺服器的指令。父行程DaemonProcess為守護行程,在發現WorkerProcess意外退出後會重啟子行程,在發現Client版本升級指令時觸發升級流程。
如圖1所示,本實施例一種日誌收集客戶端升級方 法,應用於日誌收集客戶端,包括:
步驟S1、向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應。
主機上Client啟動後,WorkerProcess每1分鐘向ConfigServer發送一次心跳請求,請求內容包括目前程式檔案版本號v_1和主機ip_1。在沒有升級操作時,ConfigServer在心跳請求的響應中返回空內容給WorkerProcess。
假設對於主機ip_1有新的Client版本v_2,運維人員通過升級API向ConfigServer發出請求,ConfigServer在收到升級API請求後,設置主機ip_1的狀態:目前版本v_1,待升級版本v_2。
則ConfigServer在心跳請求的響應中返回升級指令,升級指令包括v_2版本號、v_2程式升級檔案(HTTP下載地址)和可執行檔案的md5sum。
步驟S2、根據心跳請求響應中攜帶的升級指令,暫停發送心跳請求並停止收集新的日誌資料,將已經收集的日誌資料寫入本地檔案,記錄目前進度點,下載升級檔案開始升級。
為便於描述,本實施例將版本v_1的日誌收集客戶端稱為ClientV1,其對應的兩個行程為WorkerProcessV1和DaemonProcessV1。將升級為版本v_2的日誌收集客戶端稱為ClientV2,其對應的兩個行程為WorkerProcessV2和DaemonProcessV2。
則在ClientV1運行後,WorkerProcessV1發現心跳請求的響應中有升級指令時,開始準備升級操作:下載程式升級檔案到本機,解壓縮後並驗證可執行檔案md5sum。
停止讀取新的日誌資料。
記憶體中已讀到的日誌資料完成解析後寫入本地檔案BuffeFile,寫入BuffeFil的日誌資料是已經收集但是未完成發送的日誌資料,BufferFile會在升級完成後由ClientV2發送到DataServer。寫BufferFile可以大大減少網路發送延時導致的升級時間長問題。
記錄進度點CheckPoint。日誌採集是有進度的,CheckPoint保存該狀態並會持久化到檔案。內容包括:日誌目錄,日誌檔案案名,日誌檔案簽名,日誌檔案目前採集到的位置。
WorkerProcessV1向DaemonProcessV1發出SIGUSR1,通知升級操作。
本實施例對於DaemonProcess行程,定義了5種全域狀態,用於表示DaemonProcess的行程狀態,分別為:
1、DAEMON_INIT
DaemonProcess準備執行初始化工作。
2、DAEMON_INIT_FAIL
DaemonProcess初始化執行失敗。
3、DAEMON_NORMAL
DaemonProcess初始化執行成功,並開始守護工作。
4、DAEMON_UPDATE
DaemonProcess準備執行程式升級工作。
5、DAEMON_UPDATE_FAIL
DaemonProcess執行程式升級工作失敗。
同時DaemonProcess行程有如下信號處理函數:
1)、DaemonProcess的SIGCHLD信號處理函數。
SIGCHLD信號表明其子行程WorkerProcess異常退出,若全域狀態為DAEMON_INIT,則狀態改變為DAEMON_INIT_FAIL。
2)、DaemonProcess的SIGUSR1信號處理函數。
本實施例自訂SIGUSR1是WorkerProcess發送給DaemonProcess用以通知升級操作的信號,DaemonProcess收到該信號後設置全域狀態為DAEMON_UPDATE。
3)、DaemonProcess的SIGUSR2信號處理函數
本實施例自訂SIGUSR2是升級啟動的新版DaemonProcess發送給舊版DaemonProcess的信號。若信號附帶消息DaemonStartSuccess(新版本DaemonProcess、WorkerProcess啟動成功),則DaemonProcess主動退出;若信號消息為DaemonStartFail(新版本DaemonProcess或WorkerProcess啟動失敗),則設置DaemonProcess全域狀態為DAEMON_UPDATE_FAIL。
4、SIGKILL,向行程發出SIGKILL後,接收到該信號的行程終止運行。
從而在WorkerProcessV1向DaemonProcessV1發出 SIGUSR1後,DaemonProcessV1處理SIGUSR1信號,進入中斷,信號處理函數將全域狀態設置為DAEMON_UPDATE。
如圖2所示,ClientV1在啟動後,設置DaemonProcessV1為DAEMON_INIT狀態,並安裝SIGCHLD信號,隨後fork出WorkerProcessV1進行日誌採集迴圈,DaemonProcessV1安裝SIGUSR1信號,設置狀態為DAEMON_NORMAL。當ConfigServer在返回的心跳請求響應中攜帶升級指令後,WorkerProcessV1發送SIGUSR1給DaemonProcessV1,DaemonProcessV1在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE,開始升級。
DaemonProcessV1發送SIGKILL給WorkerProcessV1,此時WorkerProcessV1的記憶體佇列是空的,隨後WorkerProcessV1退出,無資料丟失。
DaemonProcessV1安裝SIGUSR2信號:若安裝失敗,則設置目前狀態為DAEMON_NORMAL並執行回退,重新fork出WorkerProcessV1運行,結束升級操作並恢復到升級前狀態;若SIGUSR2安裝成功,則fork一個子行程,在子行程目前行程空間下執行新版本程式檔案ClientV2,並開始迴圈檢測是否升級成功。
步驟S3、檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則 回退到升級前的版本。
如圖3所示,在執行新版本程式檔案ClientV2後,DaemonProcessV2執行初始化工作。
設置目前狀態為DAEMON_INIT。
安裝SIGUSR2信號、SIGCHLD信號。
DaemonProcessV2 fork出WorkerProcessV2執行,並進入5秒的迴圈等待,DaemonProcessV2檢測全域狀態:若發現狀態變為DAEMON_INIT_FAIL(WorkerProcessV2啟動後異常退出,中斷處理SIGCHLD信號導致全域狀態變化),則發送信號SIGUSR2給DaemonProcessV1,附上消息DaemonStaftFail。
若發現狀態保持為DAEMON_INIT,5秒內WorkerProcessV2未有異常發生,則發送SIGUSR2信號和消息DaemonStartSuccess給DaemonProcessV1。
接圖2,而DaemonProcessV1等待15秒鐘時間,檢查來自DaemonProcessV2的信號。分三種情況:若15秒內沒有來自DaemonProcessV2的SIGUSR2,DaemonProcessV1認為啟動新版本超時並向DaemonProcessV2所在行程組發送SIGKILL命令,結束新程式的運行,隨後DaemonProcessV1重新啟動WorkerProcessV1並回退至升級前狀態。
若15秒內收到SIGUSR2信號並得到消息DaemonStartFail,則DaemonProcessV1向DaemonProcessV2所在行程組發送SIGKILL命令,結束新 程式的運行,隨後DaemonProcessV1重新啟動WorkerProcessV1並回退至升級前狀態。即DaemonProcessV1將清理ClientV2的行程組並回退到V1版本工作。
若15秒內收到SIGUSR2信號且得到消息DaemonStartSuccess,則DaemonProcessV1執行exit退出,即DaemonProcessV1在收到信號後將主動退出,DaemonProcessV1退出後,DaemonProcessV2和WorkerProcessV2完全接管,升級完成,此後只有V2版本的兩個行程在機器上運行,升級過程成功結束。
應用本發明的日誌收集客戶端在十幾萬台伺服器上部署,通過升級API可以在10分鐘完成所有機器客戶端版本的升級。單台機器的客戶端升級一般可以在5秒內完成,過程中資料收集無丟失,新版程式異常時可以自動轉返。
如圖4所示,本實施例一種日誌收集客戶端,包括心跳請求模組、升級響應模組和升級檢查模組。本實施例的日誌收集客戶端安裝在主機上,用於進行日誌資料的採集,與配置伺服器交互完成程式的升級。
其中,心跳請求模組,用於向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應;升級響應模組,用於根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前 進度點,採用下載的升級檔案進行升級;升級檢查模組,用於檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。
本實施例日誌收集客戶端啟動後,創建有守護行程和工作行程,以下分別闡述各模組在升級過程中所做的操作。
心跳請求模組在向配置伺服器發送心跳請求時,執行如下操作:工作行程定期向配置伺服器發送心跳請求,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
本實施例中,升級響應模組在採用下載的升級檔案進行升級之前,還執行如下操作:工作行程向守護行程發出通知升級操作的信號SIGUSR1。
本實施例中,升級響應模組在採用下載的升級檔案進行升級時,執行如下操作:守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE; 守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;守護行程發送SIGKILL信號給工作行程,工作行程退出。
本實施例中,升級響應模組在採用下載的升級檔案進行升級時,還執行如下操作:執行升級後的日誌收集客戶端程式,創建新版本下的守護行程和工作行程;新版本下的守護行程週期迴圈檢測全域狀態;如果新版本下的工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的守護行程。
本實施例中,升級檢查模組在檢查是否升級成功時,執行如下操作:原版本下的守護行程週期迴圈檢查來自新版本下的守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的守護行程的SIGUSR2,原版本下的守護行程認為啟動新版本超時並向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態; 若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的守護行程向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的守護行程退出,升級成功。
以上實施例僅用以說明本發明的技術方案而非對其進行限制,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員當可根據本發明作出各種相應的改變和變形,但這些相應的改變和變形都應屬於本發明所附的申請專利範圍的保護範圍。
Claims (4)
- 一種日誌收集客戶端升級方法,應用於日誌收集客戶端,其特徵在於,該方法包括:該日誌收集客戶端啟動後,創建有第一守護行程和第一工作行程,該第一守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗;該第一工作行程定期向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應,根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求,並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,下載升級檔案到本地;該第一工作行程向第一守護行程發出通知升級操作的信號SIGUSR1,第一守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE; 該第一守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;該第一守護行程發送SIGKILL信號給第一工作行程,第一工作行程退出;執行升級後的日誌收集客戶端程式,創建新版本下的第二守護行程和第二工作行程;該第二守護行程週期迴圈檢測全域狀態;如果第二工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的第一守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的第二工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的第一守護行程;原版本下的第一守護行程週期迴圈檢查來自新版本下的第二守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的第二守護行程的SIGUSR2,原版本下的第一守護行程認為啟動新版本超時並向新版本下的第二守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的第一守護行程重新啟動第一工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的第二守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的第一守護行程向新版本下的第二守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的第一 守護行程重新啟動第一工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的第二守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的第一守護行程退出,升級成功。
- 根據申請專利範圍第1項所述的日誌收集客戶端升級方法,其中,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
- 一種日誌收集客戶端,其特徵在於,該日誌收集客戶端執行如下操作:該日誌收集客戶端啟動後,創建有第一守護行程和第一工作行程,該第一守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗; 該第一工作行程定期向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應,根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求,並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,下載升級檔案到本地;該第一工作行程向第一守護行程發出通知升級操作的信號SIGUSR1,第一守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE;該第一守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;該第一守護行程發送SIGKILL信號給第一工作行程,第一工作行程退出;執行升級後的日誌收集客戶端程式,創建新版本下的第二守護行程和第二工作行程;該第二守護行程週期迴圈檢測全域狀態;如果第二工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的第一守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的第二工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的第一守護行程;原版本下的第一守護行程週期迴圈檢查來自新版本下的第二守護行程的通知信號SIGUSR2; 若在迴圈週期內沒有來自新版本下的第二守護行程的SIGUSR2,原版本下的第一守護行程認為啟動新版本超時並向新版本下的第二守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的第一守護行程重新啟動第一工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的第二守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的第一守護行程向新版本下的第二守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的第一守護行程重新啟動第一工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的第二守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的第一守護行程退出,升級成功。
- 根據申請專利範圍第3項所述的日誌收集客戶端,其中,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106102497A TWI740886B (zh) | 2017-01-23 | 2017-01-23 | 日誌收集客戶端及其升級方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106102497A TWI740886B (zh) | 2017-01-23 | 2017-01-23 | 日誌收集客戶端及其升級方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201828057A TW201828057A (zh) | 2018-08-01 |
TWI740886B true TWI740886B (zh) | 2021-10-01 |
Family
ID=63960538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106102497A TWI740886B (zh) | 2017-01-23 | 2017-01-23 | 日誌收集客戶端及其升級方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI740886B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113141263B (zh) * | 2020-01-02 | 2022-09-27 | 广东博智林机器人有限公司 | 一种升级方法、装置、***和存储介质 |
CN111796842A (zh) * | 2020-06-10 | 2020-10-20 | 云南电网有限责任公司 | 一种日志客户端软件远程升级方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200405202A (en) * | 2002-09-20 | 2004-04-01 | Ibm | Method and apparatus for automatic updating and testing of software |
TW201108115A (en) * | 2009-08-28 | 2011-03-01 | Hon Hai Prec Ind Co Ltd | A method for upgrading software of gateways |
US20120174085A1 (en) * | 2010-12-30 | 2012-07-05 | Volker Driesen | Tenant Move Upgrade |
CN103677870A (zh) * | 2012-09-10 | 2014-03-26 | 腾讯科技(深圳)有限公司 | ***升级方法及采用该方法升级的*** |
CN105187262A (zh) * | 2015-10-27 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种路由器升级方法及*** |
US20160019043A1 (en) * | 2014-07-15 | 2016-01-21 | Oracle International Corporation | Automatic generation and execution of server update processes |
-
2017
- 2017-01-23 TW TW106102497A patent/TWI740886B/zh active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200405202A (en) * | 2002-09-20 | 2004-04-01 | Ibm | Method and apparatus for automatic updating and testing of software |
TW201108115A (en) * | 2009-08-28 | 2011-03-01 | Hon Hai Prec Ind Co Ltd | A method for upgrading software of gateways |
US20120174085A1 (en) * | 2010-12-30 | 2012-07-05 | Volker Driesen | Tenant Move Upgrade |
CN103677870A (zh) * | 2012-09-10 | 2014-03-26 | 腾讯科技(深圳)有限公司 | ***升级方法及采用该方法升级的*** |
US20160019043A1 (en) * | 2014-07-15 | 2016-01-21 | Oracle International Corporation | Automatic generation and execution of server update processes |
CN105187262A (zh) * | 2015-10-27 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种路由器升级方法及*** |
Also Published As
Publication number | Publication date |
---|---|
TW201828057A (zh) | 2018-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017118334A1 (zh) | 一种日志收集客户端及其升级方法 | |
US8146060B2 (en) | Data processing system and method for execution of a test routine in connection with an operating system | |
US8412984B2 (en) | Debugging in a cluster processing network | |
KR102047216B1 (ko) | 서비스의 2차 위치에서의 작업의 재생 기법 | |
CN110895484A (zh) | 任务调度方法及装置 | |
JP5579650B2 (ja) | 監視対象プロセスを実行する装置及び方法 | |
CN110895487B (zh) | 分布式任务调度*** | |
EP2008400A1 (en) | Method, system and computer program for the centralized system management on endpoints of a distributed data processing system | |
JP5444178B2 (ja) | バックアップ・リストア処理装置とバックアップ・リストア処理方法およびプログラム | |
CN110895488B (zh) | 任务调度方法及装置 | |
CN110895486B (zh) | 分布式任务调度*** | |
CN110895483A (zh) | 任务恢复方法及装置 | |
CN111800304A (zh) | 进程运行的监测方法、存储介质和虚拟装置 | |
TW200426571A (en) | Policy-based response to system errors occurring during os runtime | |
TWI740886B (zh) | 日誌收集客戶端及其升級方法 | |
CN110196749B (zh) | 虚拟机的恢复方法及装置、存储介质及电子装置 | |
CN112099825B (zh) | 组件进行升级的方法、装置、设备及存储介质 | |
CN110268378A (zh) | 创建虚拟自动化解决方案的数据备份的方法,实施方法的计算机程序和按方法运行的虚拟服务器 | |
CN110895485A (zh) | 任务调度*** | |
CA2152329C (en) | Apparatus and methods for software rejuvenation | |
US11290330B1 (en) | Reconciliation of the edge state in a telemetry platform | |
CN112948008B (zh) | 一种基于Ironic管理物理裸机的方法 | |
WO2016131294A1 (zh) | 版本升级处理方法及装置 | |
CN110188008B (zh) | 作业调度主备切换方法、装置、计算机设备及存储介质 | |
EP3993353A2 (en) | System and method for managing clusters in an edge network |