• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 測試環境管理之線上日志實時收集過濾轉發

    發表于:2013-01-15來源:Anjuke QA Team作者:sdhou點擊數: 標簽:管理
    測試環境管理之線上日志實時收集過濾轉發。 生產環境的每臺服務器每時每刻都在產生大量日志,每個工程師或多或少需要關注,我們希望為工程師提供方便快速的查看生產環境日志工具,還能為用log計算數據的job提供實時日志信息,我們為這個工具起名為 warden.

      生產環境的每臺服務器每時每刻都在產生大量日志,每個工程師或多或少需要關注,我們希望為工程師提供方便快速的查看生產環境日志工具,還能為用log計算數據的job提供實時日志信息,我們為這個工具起名為 warden.

      開發warden用到的工具:

      -python 簡潔實用的語言,很多人喜歡他,我們的口號是沒有$,沒有花括號.

      -zeromq 快速簡潔的異步消息隊列,相關使用后面還有詳細介紹.

      -supervisord 用來做生產環境守護進程

      -yaml 表達性很強的配置文件格式,還有很好用的支持庫PyYAML,不用自己實現配置文件解析.

      (啊什么?你安裝python環境很麻煩?zeromq運行不了?你還在用windows?趕快投入linux的懷抱吧,強烈推薦ubuntu.)

      warden的三個部件

      wardend:收到日志消息后廣播給中間節點,用系統標準輸入stdin接收日志信息,與中間節點socket connect模式連接,用zeromq pub模式廣播消息,當然消息發出來前做了一次壓縮.

      sample code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Wardend:

        __sock = None
        __hostname = None

        def __init__(self, connectInfo):
            self.__hostname = socket.gethostname()
            context = zmq.Context()
            self.__sock = context.socket(zmq.PUB)
            self.__sock.setsockopt(zmq.IDENTITY, socket.gethostname())
            self.__sock.connect(connectInfo)

        def loop(self):
            while 1:
                msg = sys.stdin.readline()
                zmsg = zlib.compress(msg, 9)
                self.__sock.send_multipart([self.__hostname, zmsg])

      warden-aggr:中間節點,在需要的地方轉發和過濾消息,與wardend建立socket bind連接,使用zeromq sub模式接收wardend廣播的消息后轉發給warden.

      sample code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class WardenAggr:
       
        __sockpub = None
        __socksub = None

        def __init__(self, bindRecv, bindSend):
            context = zmq.Context()

            self.__socksub = context.socket(zmq.SUB)
            self.__socksub.bind(bindRecv)

            self.__socksub.setsockopt(zmq.SUBSCRIBE, '')
            self.__sockpub = context.socket(zmq.PUB)
            self.__sockpub.bind(bindSend)

        def loop(self):
            while 1:
                self.__sockpub.send_multipart(self.__socksub.recv_multipart())

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>