• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python內(nèi)建庫的分布式日志系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

      2020-10-09 10:23:04秦子實(shí)
      電腦知識與技術(shù) 2020年18期
      關(guān)鍵詞:分布式

      秦子實(shí)

      摘要:隨著Python腳本在企業(yè)lT自動化運(yùn)維中的逐步應(yīng)用,腳本數(shù)量越來越多,功能覆蓋也越來越廣泛,在提高運(yùn)維效率的同時,自動運(yùn)維腳本的管理難度也逐步提高。因此,需要一套架構(gòu)簡單、易于編寫、方便部署的分布式日志系統(tǒng),對自動運(yùn)維腳本的運(yùn)行進(jìn)行統(tǒng)一記錄,以便進(jìn)行調(diào)試或故障追溯。該文設(shè)計(jì)并實(shí)現(xiàn)了一種僅基于Python內(nèi)建庫即可部署的分布式日志系統(tǒng),日志客戶端與服務(wù)端僅需要極少的代碼即可實(shí)現(xiàn),具有庫依賴關(guān)系簡單、部署方便的特點(diǎn),可以以較低的成本對現(xiàn)有運(yùn)維腳本進(jìn)行改造,以實(shí)現(xiàn)日志的集中管理。

      關(guān)鍵詞:分布式;日志系統(tǒng);Python

      中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A

      文章編號:1009-3044(2020)18-0082-02

      開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):

      1 概述

      Py thon語言因具有強(qiáng)大的表達(dá)能力、豐富的第三方庫等特點(diǎn),被廣泛地應(yīng)用于企業(yè)IT自動化運(yùn)維體系中。Pthon通常以簡單腳本的形式,存在于各個業(yè)務(wù)系統(tǒng)中,承擔(dān)著諸如應(yīng)用系統(tǒng)啟停準(zhǔn)備、數(shù)據(jù)備份管理、系統(tǒng)服務(wù)管理、系統(tǒng)版本管理、API管理等基礎(chǔ)運(yùn)維工作。腳本通常分散在各服務(wù)器的各應(yīng)用系統(tǒng)中,種類繁多,維護(hù)人員也各不相同。而隨著企業(yè)IT系統(tǒng)的增多,腳本數(shù)量也會隨之增長,這種現(xiàn)象對企業(yè)運(yùn)維管理、故障排查帶來了較大的挑戰(zhàn)。運(yùn)維人員需要一種能夠低成本改造現(xiàn)有腳本,同時也能夠在今后編寫的腳本中穩(wěn)定應(yīng)用的分布式日志記錄系統(tǒng)。

      基于該需求,本文設(shè)計(jì)并實(shí)現(xiàn)了一種僅使用Python內(nèi)建庫,基于內(nèi)建socket庫進(jìn)行通信并使用內(nèi)建logging庫進(jìn)行記錄的簡單分布式日志系統(tǒng)。

      2 系統(tǒng)結(jié)構(gòu)

      鑒于低成本改造現(xiàn)有腳本的需要,本文采用PVthon默認(rèn)的socketserver用作日志服務(wù),通過默認(rèn)logging模塊的SocketH-andler進(jìn)行分布式日志寫入。采用logging.getLogger的name參數(shù)指定遠(yuǎn)端日志服務(wù)器中的特定logger進(jìn)行記錄,并利用name參數(shù)類似命名空間的分級特性,詳細(xì)記錄每條日志產(chǎn)生的服務(wù)器、所屬服務(wù)、所在腳本及函數(shù),用以區(qū)別各腳本產(chǎn)生的日志。

      該架構(gòu)在日志前端避免使用了消息隊(duì)列等第三方系統(tǒng),有效地控制了現(xiàn)有腳本的改造成本,此外,服務(wù)端利用Thread-ingTCPServer加速讀取速度。該架構(gòu)能夠有效地將現(xiàn)有腳本的日志改造代碼量控制在極小的范圍內(nèi)。

      3 系統(tǒng)設(shè)計(jì)

      3.1 日志服務(wù)端

      分布式日志服務(wù)端采用Python內(nèi)建的socketserver.Thread-ingTCPServer作為socket服務(wù)器。

      利用socket上的select模型實(shí)現(xiàn)端口復(fù)用,使用非阻塞函數(shù)提升1/0效率。上文socketserver指定的讀取socket的handler編寫大致如下:

      使用內(nèi)建pickle模塊載入讀取的字節(jié)進(jìn)行反序列化,之后通過makeLogRecord還原接收到的遠(yuǎn)端日志記錄。之后,在服務(wù)端通過記錄的name屬性設(shè)置指定的logger,并記錄日志信息。最后,根據(jù)需要在服務(wù)端配置各種logger,并使用serve—un-til_stopped啟動服務(wù)即可。

      例如客戶端需要一個debug級別的logger,并希望handler按時間自動循環(huán)保存日志文件,logger可以按如下方式配置:

      其指定的按時間自動循環(huán)保存文件的handler可以按如下方式配置:

      如此,便可以方便地在客戶端使用這個DebugLogger了。

      3.2 日志客戶端

      為了降低現(xiàn)有腳本改造代價(jià),客戶端僅需要引入一個log-ger配置文件,或添加幾行l(wèi)ogger設(shè)置即可,按如下方式設(shè)置log-ger:

      可以在配置文件中編寫幫助函數(shù),以方便各類不同腳本使用日志服務(wù)端。例如,在某使用多進(jìn)程處理業(yè)務(wù)的腳本中,我們可以通過將進(jìn)程ID寫入logger的name屬性來區(qū)別各個work-er的日志記錄,該幫助函數(shù)可以編寫為:

      通過在腳本中引入該幫助函數(shù)返回的三個logger,便可以利用相應(yīng)的logger將日志記錄寫入服務(wù)端。例如使用服務(wù)端名為“DebugLogger”的logger記錄debug級別的日志:debugLogger.debug(f'... -些日志記錄…')。

      4 結(jié)束語

      本文介紹了僅使用PYthon原生庫搭建分布式日志服務(wù)的方法,使得對現(xiàn)有腳本的改造僅需要引入約十行代碼,即可實(shí)現(xiàn)在日志服務(wù)器上寫入日志的功能。該方法結(jié)構(gòu)簡單,性能優(yōu)良,具備良好的可擴(kuò)展性,后期可以通過改造服務(wù)端寫入han-dler的方法進(jìn)一步增強(qiáng)日志服務(wù)端的性能,是一種易開發(fā)、易部署、易維護(hù)的日志服務(wù)。

      【通聯(lián)編輯:梁書】

      猜你喜歡
      分布式
      分布式光伏發(fā)展的四大矛盾
      能源(2017年7期)2018-01-19 05:05:03
      分布式光伏熱錢洶涌
      能源(2017年10期)2017-12-20 05:54:07
      基于預(yù)處理MUSIC算法的分布式陣列DOA估計(jì)
      分布式光伏:爆發(fā)還是徘徊
      能源(2017年5期)2017-07-06 09:25:54
      西門子 分布式I/O Simatic ET 200AL
      家庭分布式儲能的發(fā)展前景
      汽車電器(2014年5期)2014-02-28 12:14:10
      呼玛县| 乐平市| 三门峡市| 广州市| 同江市| 龙川县| 温泉县| 同心县| 福清市| 辛集市| 高密市| 钟山县| 新龙县| 昌邑市| 通河县| 来安县| 陆河县| 武鸣县| 嵊泗县| 铜陵市| 上杭县| 怀远县| 辽宁省| 通河县| 庄浪县| 德兴市| 锡林郭勒盟| 四子王旗| 赤峰市| 馆陶县| 共和县| 惠东县| 建昌县| 西盟| 德阳市| 洪泽县| 皋兰县| 汶上县| 阜康市| 镇沅| 昌江|