測試環境管理之線上日志實時收集過濾轉發

發表于: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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97