测试环境管理之线上日志实时收集过滤转发
作者:网络转载 发布时间:[ 2013/1/17 10:29:57 ] 推荐标签:
生产环境的每台服务器每时每刻都在产生大量日志,每个工程师或多或少需要关注,我们希望为工程师提供方便快速的查看生产环境日志工具,还能为用log计算数据的job提供实时日志信息,我们为这个工具起名为 warden.
开发warden用到的工具:
-python 简洁实用的语言,很多人喜欢他,我们的口号是没有$,没有花括号.
-zeromq 快速简洁的异步消息队列,相关使用后面还有详细介绍.
-supervisord 用来做生产环境守护进程
-yaml 表达性很强的配置文件格式,还有很好用的支持库PyYAML,不用自己实现配置文件解析.
(啊什么?你安装python环境很麻烦?zeromq运行不了?你还在用windows?赶快投入linux的怀抱吧,强烈推荐ubuntu.)
warden的三个部件
wardend:收到日志消息后广播给中间节点,用系统标准输入stdin接收日志信息,与中间节点socket connect模式连接,用zeromq pub模式广播消息,当然消息发出来前做了一次压缩.
sample code:
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:
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())

sales@spasvo.com