TW201828057A - 日誌收集客戶端及其升級方法 - Google Patents

日誌收集客戶端及其升級方法 Download PDF

Info

Publication number
TW201828057A
TW201828057A TW106102497A TW106102497A TW201828057A TW 201828057 A TW201828057 A TW 201828057A TW 106102497 A TW106102497 A TW 106102497A TW 106102497 A TW106102497 A TW 106102497A TW 201828057 A TW201828057 A TW 201828057A
Authority
TW
Taiwan
Prior art keywords
upgrade
daemon
version
guard
log collection
Prior art date
Application number
TW106102497A
Other languages
English (en)
Other versions
TWI740886B (zh
Inventor
唐愷
Original Assignee
阿里巴巴集團服務有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 阿里巴巴集團服務有限公司 filed Critical 阿里巴巴集團服務有限公司
Priority to TW106102497A priority Critical patent/TWI740886B/zh
Publication of TW201828057A publication Critical patent/TW201828057A/zh
Application granted granted Critical
Publication of TWI740886B publication Critical patent/TWI740886B/zh

Links

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 (14)

  1. 一種日誌收集客戶端升級方法,應用於日誌收集客戶端,其特徵在於,該方法包括:向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應;根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求,並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,採用下載的升級檔案進行升級;檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。
  2. 根據申請專利範圍第1項所述的日誌收集客戶端升級方法,其中,該日誌收集客戶端啟動後,創建有守護行程和工作行程,該向配置伺服器發送心跳請求,包括:工作行程定期向配置伺服器發送心跳請求,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
  3. 根據申請專利範圍第2項所述的日誌收集客戶端升級方法,其中,該日誌收集客戶端升級方法在採用下載 的升級檔案進行升級之前,還包括:該工作行程向守護行程發出通知升級操作的信號SIGUSR1。
  4. 根據申請專利範圍第3項所述的日誌收集客戶端升級方法,其中,該守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗。
  5. 根據申請專利範圍第4項所述的日誌收集客戶端升級方法,其中,該採用下載的升級檔案進行升級,包括:守護行程接收SIGUSR1信號後設置全域狀態為DAEMON_UPDATE;守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;守護行程發送SIGKILL信號給工作行程,工作行程退出。
  6. 根據申請專利範圍第5項所述的日誌收集客戶端升級方法,其中,該採用下載的升級檔案進行升級,還包括步驟:執行升級後的日誌收集客戶端程式,創建新版本下的守護行程和工作行程;新版本下的守護行程週期迴圈檢測全域狀態;如果新版本下的工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的守護行程。
  7. 根據申請專利範圍第6項所述的日誌收集客戶端升級方法,其中,該檢查是否升級成功,包括:原版本下的守護行程週期迴圈檢查來自新版本下的守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的守護行程的SIGUSR2,原版本下的守護行程認為啟動新版本超時並向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的守護行程向新版本下的守護行程所在行程組發送SIGKILL命 令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的守護行程退出,升級成功。
  8. 一種日誌收集客戶端,其特徵在於,該日誌收集客戶端包括:心跳請求模組,用於向配置伺服器發送心跳請求,接收配置伺服器返回的心跳請求響應;升級響應模組,用於根據心跳請求響應中攜帶的升級指令,下載升級檔案並暫停發送心跳請求並停止收集新的日誌資料,將已經收集但未完成發送的日誌資料寫入本地檔案,記錄目前進度點,採用下載的升級檔案進行升級;升級檢查模組,用於檢查是否升級成功,如果升級成功則將寫入本地檔案的日誌資料發送到資料伺服器,並從記錄的進度點開始收集日誌資料,以升級後的版本開始工作,否則回退到升級前的版本進行工作。
  9. 根據申請專利範圍第8項所述的日誌收集客戶端,其中,該日誌收集客戶端啟動後,創建有守護行程和工作行程,該心跳請求模組在向配置伺服器發送心跳請求時,執行如下操作:工作行程定期向配置伺服器發送心跳請求,該心跳請求中攜帶目前日誌收集客戶端的版本號和主機的IP位址,以便配置伺服器在沒有升級API請求的情況下發送空 的心跳請求響應,在有升級API請求的情況下發送攜帶升級指令的心跳請求響應,該升級指令包括待升級日誌收集客戶端的版本號及其下載地址。
  10. 根據申請專利範圍第9項所述的日誌收集客戶端,其中,該升級響應模組在採用下載的升級檔案進行升級之前,還執行如下操作:該工作行程向守護行程發出通知升級操作的信號SIGUSR1。
  11. 根據申請專利範圍第10項所述的日誌收集客戶端,其中,該守護行程具有如下全域狀態:A、DAEMON_INIT,守護行程準備執行初始化工作;B、DAEMON_INIT_FAIL,守護行程初始化執行失敗;C、DAEMON_NORMAL,守護行程初始化執行成功,並開始守護工作;D、DAEMON_UPDATE,守護行程準備執行程式升級工作;E、DAEMON_UPDATE_FAIL,守護行程執行程式升級工作失敗。
  12. 根據申請專利範圍第11項所述的日誌收集客戶端,其中,該升級響應模組在採用下載的升級檔案進行升級時,執行如下操作:守護行程接收SIGUSR1信號後設置全域狀態為 DAEMON_UPDATE;守護行程在守護迴圈中檢測到目前全域狀態為DAEMON_UPDATE時,採用下載的升級檔案進行升級;守護行程發送SIGKILL信號給工作行程,工作行程退出。
  13. 根據申請專利範圍第12項所述的日誌收集客戶端,其中,該升級響應模組在採用下載的升級檔案進行升級時,還執行如下操作:執行升級後的日誌收集客戶端程式,創建新版本下的守護行程和工作行程;新版本下的守護行程週期迴圈檢測全域狀態;如果新版本下的工作行程啟動後異常退出,導致全域狀態變為DAEMON_UPDATE_FAIL,則發送通知信號SIGUSR2給原版本下的守護行程,附上啟動失敗消息;若發現狀態保持為DAEMON_INIT,迴圈週期內新版本下的工作行程未有異常發生,則發送通知信號SIGUSR2和啟動成功消息給原版本下的守護行程。
  14. 根據申請專利範圍第13項所述的日誌收集客戶端,其中,該升級檢查模組在檢查是否升級成功時,執行如下操作:原版本下的守護行程週期迴圈檢查來自新版本下的守護行程的通知信號SIGUSR2;若在迴圈週期內沒有來自新版本下的守護行程的SIGUSR2,原版本下的守護行程認為啟動新版本超時並向 新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號並得到啟動失敗消息,則原版本下的守護行程向新版本下的守護行程所在行程組發送SIGKILL命令,結束新程式的運行,隨後原版本下的守護行程重新開機工作行程並回退至升級前狀態;若在迴圈週期內收到來自新版本下的守護行程的SIGUSR2信號且得到啟動成功消息,則原版本下的守護行程退出,升級成功。
TW106102497A 2017-01-23 2017-01-23 日誌收集客戶端及其升級方法 TWI740886B (zh)

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 true TW201828057A (zh) 2018-08-01
TWI740886B 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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111796842A (zh) * 2020-06-10 2020-10-20 云南电网有限责任公司 一种日志客户端软件远程升级方法及装置
CN113141263A (zh) * 2020-01-02 2021-07-20 广东博智林机器人有限公司 一种升级方法、装置、系统和存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7216343B2 (en) * 2002-09-20 2007-05-08 International Business Machines Corporation 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
US8875122B2 (en) * 2010-12-30 2014-10-28 Sap Se Tenant move upgrade
CN103677870B (zh) * 2012-09-10 2018-01-30 腾讯科技(深圳)有限公司 系统升级方法及采用该方法升级的系统
US9483248B2 (en) * 2014-07-15 2016-11-01 Oracle International Corporation Automatic generation and execution of server update processes
CN105187262A (zh) * 2015-10-27 2015-12-23 上海斐讯数据通信技术有限公司 一种路由器升级方法及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113141263A (zh) * 2020-01-02 2021-07-20 广东博智林机器人有限公司 一种升级方法、装置、系统和存储介质
CN113141263B (zh) * 2020-01-02 2022-09-27 广东博智林机器人有限公司 一种升级方法、装置、系统和存储介质
CN111796842A (zh) * 2020-06-10 2020-10-20 云南电网有限责任公司 一种日志客户端软件远程升级方法及装置

Also Published As

Publication number Publication date
TWI740886B (zh) 2021-10-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
US10642599B1 (en) Preemptive deployment in software deployment pipelines
US9311199B2 (en) Replaying jobs at a secondary location of a service
US9424021B2 (en) Capturing updates to applications and operating systems
US6971095B2 (en) Automatic firmware version upgrade system
EP3121726B1 (en) Fault processing method, related device and computer
JP6291248B2 (ja) ファームウェアアップグレードエラー検出および自動ロールバック
US10379922B1 (en) Error recovery in a virtual machine-based development environment
CN110895487B (zh) 分布式任务调度系统
CN110895484A (zh) 任务调度方法及装置
CN110895488B (zh) 任务调度方法及装置
CN110895486B (zh) 分布式任务调度系统
CN110895483A (zh) 任务恢复方法及装置
CN111800304A (zh) 进程运行的监测方法、存储介质和虚拟装置
TW200426571A (en) Policy-based response to system errors occurring during os runtime
US10353729B1 (en) Managing service dependencies across virtual machines in a development environment
TWI740886B (zh) 日誌收集客戶端及其升級方法
CN112948008B (zh) 一种基于Ironic管理物理裸机的方法
CN110196749B (zh) 虚拟机的恢复方法及装置、存储介质及电子装置
JP2001344130A (ja) リモートメンテナンス装置と、その装置に接続される端末と、リモートメンテナンス処理用プログラム及びそのプログラムの記録媒体
CN110188008B (zh) 作业调度主备切换方法、装置、计算机设备及存储介质
CN106970860B (zh) 一种复现centos7操作系统故障的系统及方法
CN114064348A (zh) 一种备份还原方法、装置、设备及计算机可读存储介质
JP2007073069A (ja) 計算機、資源自動適用処理プログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体