許鑫

人社行業的業務包括醫療、社保、工傷、生育、就業等,與民生密切相關,其中醫療結算業務更是關系到老百姓的身體健康和生活質量。人社信息中心擔負著全市醫療結算業務的核心保障職責。長期以來,醫療結算業務的運維工作,經歷了幾個階段:
一、初級階段:這個階段,醫療相關的系統還不龐大,運維工作以人工+經驗為主。出現故障時,醫院會打電話過來,根據醫院描述的故障現象,運維人員憑經驗對故障進行判斷,查找和定位故障點。這種方式對人的要求和經驗依賴程度太高,并且故障的定位和解決時間過長;
二、發展階段:在這個階段,運維人員已經開始結合監控軟件,7x24小時對設備的運行狀況進行監控,并提供設備故障告警,解決了運維人員總是被動感知的問題。但隨著業務系統越來越復雜,系統越來越龐大,需要監控的指標越來越多,運維人員不斷增加監控項,如監控中間件、數據庫等等。這又帶來了新的問題:告警信息太多,誤報激增,運維人員已經被這些誤報淹沒,不勝其煩,往往會在收到告警信息后直接關掉。而當醫院真的不能刷卡時,有用的告警信息不是被忽略了,就是根本沒有告警。
是繼續增加監控指標,還是設置更精確的閾值降低誤報率呢?這個問題擺在了運維人的面前。在解答這個問題之前,首先我們要想清楚一個問題:運維的本質是什么?
運維,本質上是一種服務,它包括三個屬性:服務的對象、目標和方法。
運維服務的對象,是業務,比如人社行業的醫保結算業務。
運維服務的目標,是實現業務的可控,即把業務的運行狀況控制在我們能接收的范圍內。再細分可以分為穩定性可控,性能可控,安全可控。比如業務中斷不超過1分鐘,單筆刷卡交易時長不超過5秒等等。
運維服務的方法,就是為了達到上述目標所采取的措施,監控軟件就是其中之一,但目前的監控軟件在設計和部署上存在一個誤區:只關注基礎硬件和基礎軟件的運行狀況,不能感知業務的運行狀況。舉個例子,傳統的監控軟件可以獲取系統硬件的CPU負荷、內存使用率,數據庫并發數,中間件的隊列等,但這些指標都不能反映業務運行狀況的好壞,而運維人員比較關心的實時刷卡交易量,交易耗時,交易成功率等信息,卻完全不掌握。因此,傳統的監控方法,設置再多的監控指標項,告警閾值設置的再精確,也無法解決根本問題,監控的目標要回歸本質。
首先,我們采取分析醫保結算交易日志的方式,實現了監控醫保結算交易的功能。分析日志的方式帶來了2個好處:非侵入式和完全旁路監控,對業務的影響非常小。
通過分析日志獲取的交易信息,我們發現這和傳統的基礎硬件監控相比,有很大的難度。下圖是某天的醫保結算業務的交易量統計圖,可以看到有以下幾個特點:
1.在每日的非工作時間,交易量非常少;
2.在工作時間,會有2個比較大的交易高峰,且波動較大;
3.在早8點左右,交易量會出現一個極大的增幅;
針對交易量的監控告警,就存在幾個難點:
1、不同時段交易量的告警閾值如何設置?是否要針對每個時段設置不同的閾值?
2、設置告警閾值的依據是什么?傳統的憑經驗進行設置的方法已經完全不適用了;
經過分析研究,我們制訂了醫保結算交易監控的幾個原則:
數據化原則:以歷史數據為依據,以統計結果為準則,主觀和經驗為輔;
自動化原則:告警基線可自動更新,要求根據新一天的交易信息去噪點后自動更新;
可擴展原則:告警基線的計算方式,不僅能滿足全市刷卡交易的監控告警需要,也要能滿足某一醫院、或某一區域的監控告警需要;
實用性原則:告警基線和策略的設計,要能滿足幾個特殊時段交易的特點:
22:00到07:00這段時間,交易量非常低,波動也小;
高峰時段,交易量大,波動也很大;
08:00前后這段時間,交易量有爆發性增長;
具體的實現辦法是:
1、首先我們對歷史交易數據中,同一時段的交易量、交易延時數據進行統計分析。根據統計結果,繪制散點圖,得出平均值;由于根據統計學原理,同一時段的歷史交易量呈正態曲線分布,且超過3個標準差的數據,出現比例低于0.3%,可以認為是噪點數據;
2、接下來,我們以平均值為基準,計算歷史數據的標準差,將超過3個標準差的數據標記為噪點數據。重新計算去除噪點數據后的平均線,作為基礎基線;故障時段的數據,由人工指定為噪點數據,不進入基線計算;
3、第三步,采用移動平均法對基礎基線進行平滑處理,使其可以反映交易量的未來趨勢,通過增加或減少n值對改變基礎基線對交易變動的敏感度,如針對繁忙時段,時期n取小些,如2min,增加監測的敏感度。空閑時段,時期n取大些,如lOmin,減少監測的敏感度。
4、最后,根據前幾步生成的平均線,計算預警和告警的上下限。計算原則是:超過1.5個標準差為預警線;超過2個標準差為告警線;
5、今后,通過大量的歷史數據積累,這個基線計算方法可以延展出多種基線,女口.
周一~周五和周六周日采用不同的基線;
五一、十一、春節等國定假日的基線;
針對春、夏、秋、冬四季對基線進行加權修正;
6、對非工作時間的交易量監控,因為交易量太少,造成閾值不好設置。我們通過統計學的方法,分析這一時段的交易量主要在哪個區間,作為正常區間考慮,非正常區間的數據所占的百分比作為告警的依據。
舉例說明:02:00到02:15這個時段,統計結果是:交易量的95%集中在5~10筆這個區間;有3%的數據低于5筆,則報警的閾值定為3%和5筆;
這一時段的告警策略就是:當出現小于5筆的次數低于3次時,只做預警,超過3次,則進行故障報警;
通過以上方式,我們很好的解決的醫保結算業務的監控告警問題,運維人員在接收到告警時,可以第一時間知道業務受影響的范圍,從而有針對性的采取分級響應的措施,真正做到運維服務回歸本質。