将rsyslog发送到sentry进行集中日志管理 | 阿小信的博客
阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

将rsyslog发送到sentry进行集中日志管理2014-09-02 06:45

sentry默认不会处理文本日志,都是由其他地方在代码里直接发送到sentry server,要获取rsyslog要使用其他插件,我用的是:https://gist.github.com/avoine/2912777

本地先要安装所需要的模块:loggerglue,eventlet

修改脚本(dsn->upd、ip):

import logging

from raven import Client
from loggerglue.server import SyslogServer, SyslogHandler

client = Client(dsn='http://5d8f03027e9e413484d4ce4a9281e4bc:6e5a92d69a8e44b8a93f074db61e6920@localhost:9000/1') #自己sentry的api key

PRIVAL_SEVERITY = {
    0 : logging.CRITICAL,
    1 : logging.CRITICAL,
    2 : logging.CRITICAL,
    3 : logging.ERROR,
    4 : logging.WARNING,
    5 : logging.INFO,
    6 : logging.INFO,
    7 : logging.DEBUG,
}

PRIVAL_FACILITY = {
    0 : "LOG_KERN",
    1 : "LOG_USER",
    2 : "LOG_MAIL",
    3 : "LOG_DAEMON",
    4 : "LOG_AUTH",
    5 : "LOG_SYSLOG",
    6 : "LOG_LPR",
    7 : "LOG_NEWS",
    8 : "LOG_UUCP",
    9 : "LOG_CRON",
    10 : "LOG_AUTHPRIV",
    16 : "LOG_LOCAL0",
    17 : "LOG_LOCAL1",
    18 : "LOG_LOCAL2",
    19 : "LOG_LOCAL3",
    20 : "LOG_LOCAL4",
    21 : "LOG_LOCAL5",
    22 : "LOG_LOCAL6",
    23 : "LOG_LOCAL7",
}

def prival(prival):
    sev_num = prival % 8
    fac_num = (prival - sev_num) / 8
    return (PRIVAL_SEVERITY[sev_num], PRIVAL_FACILITY[fac_num])

class SimpleHandler(SyslogHandler):
    def handle_entry(self, entry):
        level, fac = prival(entry.prival)
        client.name = entry.hostname

        data = {'level': level, "culprit" : ".".join([fac, entry.app_name]),
                'logger' : ".".join([fac, entry.app_name])}

        client.capture('Message', message=entry.msg,
                            date=entry.timestamp, data=data)


s = SyslogServer(('192.168.1.101', 10514), SimpleHandler) #监听server ip      rsyslog->10514->handler->sentry
s.serve_forever()

rsyslog发送配置:

*.*       @@192.168.0.1:10514;RSYSLOG_SyslogProtocol23Format  #将所有日志用TCP发送到脚本监听的地址

loggerglue只能解析进程名后带有[PID]格式的日志:

Aug 14 09:03:31 ubuntu AptDaemon: INFO: Quitting was requested         #不能解析
Aug 14 09:17:01 ubuntu CRON[2752]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)    #可以正确解析上传到sentry

解决办法:在rsyslog的配置文件中添加$SystemLogUsePIDFromSystem on

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[1907] 评论[3]

你可能也感兴趣的文章推荐

本文最近访客

发表评论

#1 网友218.*.*.98[厦门]3191 :
这个收集的是系统日志吧, 单独的程序错误怎么做呢
2014-12-03 18:21 回复
#2 网友192.*.*.125[Forsyth]289 回复 #1 网友218.*.*.98[厦门] :
在代码里直接用sentry就可以的,这儿需求比较奇怪是因为之前的代码太多没法在代码里直接用sentry,修改太多,但是当时用log记录,所以通过syslog传到sentry上
2014-12-03 18:46 回复
#3 网友218.*.*.98[厦门]3191 回复 #2 网友192.*.*.125[Forsyth] :
好的 谢谢啊 如果要收集系统或者其他日志 用用logstash或者fluentd这种工具效果挺好
2014-12-04 09:07 回复