supervisor+rsyslog+sentry日志管理
来源:互联网 发布:微谱 知乎 编辑:程序博客网 时间:2024/05/01 13:35
使用supervisor+rsyslog+sentry进行日志管理配置方法
首先我想说,真他么太折腾了,终于搞定了,尼玛啊啊啊啊啊啊啊啊啊啊啊啊!为了折腾这个差不多花了一个星期的时间,从最开始的syslog开始,完全不了解,文章又少,我连俄语文章都拜读了啊,太佩服自己了,用英语提了下问,结果没人鸟,刚开始看的时候,感觉文章都是一堆天书,机器上也根本没有syslog,折腾了几天知道了rsyslog的基本使用,才发现自己的os尼玛syslog有问题根本就不记录,到处折腾不好,都想放弃了,期间又重装系统,必须感谢胡哥,陪我一起解决问题,一起研究rsyslog的用法,给我刻盘,昨晚1点了我都打算睡了还来敲门说他知道不能上传日志到sentry是什么原因了,1点了啊早上7点起床有么有啊,我穿条内裤又跑去他寝室看是咋回事,我看他也困的不行,说话声音都沙了,辛苦了。好基友,一被子啊!草!
环境:
Sentry Server:ubuntu 12.04 desktop(192.168.1.101)Test PC:ubuntu 12.04 desktop(192.168.1.106)
在产生日志的机器(Test PC)上安装Supervisor:
$ sudo pip install supervisor
配置Supervisor:
首先需要使用echo_supervisord_conf
命令生成配置文件
# echo_supervisord_conf > /etc/supervisord.conf
或者:
$ echo_supervisord_conf |sudo tee /etc/supervisord.conf
配置文件可以自行指定文件所在位置,/etc/supervisord.conf
是supervisor会默认查找的位置,报错信息中可以查看到还有其他几个路径也是默认位置。
按照conf文件示例内容修改配置,添加监控任务。其中;
为注释
[program:THE_PROGRAM_NAME]command=COMMAND_TO_RUN_THE_PROGRAMautorestart=truestdout_logfile=syslogredirect_stderr=true
THE_PROGRAM_NAME为要监控的程序名称,可随意设置,会在syslog日志中显示
COMMAND_TO_RUN_THE_PROGRAM为启动这个被监控程序的命令,自动重启时用到
stdout_logfile的值设置为特殊值syslog
,否则会以此值为本地文本文件名保存
配置好后启动supervisor:
# supervisord
修改产生日志机器上的rsyslog配置:
在/etc/rsyslog.d/下新建你的xxx.conf文件,内容为:
$SystemLogUsePIDFromSystem onif $programname == 'supervisord' then @@192.168.1.101:10514;RSYSLOG_SyslogProtocol23Format
便会将supervisor产生的日志用tcp方式发送到Sentry Server的10514端口
Sentry Server上安装Sentry:
PS:因为sentry依赖django,且最新版必须依赖1.5.1以上版本,本地如果有django环境请使用virtualenv安装。
$ virtualenv --no-site-packages venv$ cd venv/$ source bin/activate$ pip install sentry$ pip install loggerglue$ pip install MySQL-python #虚拟环境没有mysql,sentry默认是sqlite,要用到mysql需要安装上,安装mysql-python报错的话检查mysql-server mysql-client libmysqlclient15-dev python-dev等是否安装
配置Sentry
生成默认路径的配置文件:
$ sentry init #--config自定义文件名Configuration file created at '/home/ashin/.sentry/sentry.conf.py'
修改配置sentry.conf.py:
SENTRY_URL_PREFIX的值设置为什么那么Sentry的访问地址就必须是什么,如以localhost为例,设置为'http://localhost:9000'
那么浏览器访问就必须是http://localhost:9000 ,而不能使用http://127.0.0.1:9000 进行访问。其他配置和Django的settings.py类似。
运行Sentry:
$ sentry start #--config自定义文件名
如果是在Running service: 'http'时报错 [ERROR] Connection in use: ('0.0.0.0', 9000),请检查9000端口是否被占用。
如果报错:SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): localhost:9000,需要在settings中配置ALLOWED_HOSTS=['localhost']。
访问web界面,登陆后按步骤设置下后会生成一个dsn key
测试下是否配置成功:raven test <DSN_KEY>
Sentry Server上运行Bridge to send rsyslog logs to sentry
使用https://gist.github.com/avoine/2912777/raw/c5f151fe701d58c33120118daa87c8cee95a7a46/gistfile1.py 插件,修改其中的dsn和监听ip,当Test PC发送syslog到Sentry Server的10514端口时,该脚本通过监听10514端口,通过handler调用raven的api将日志内容发送到sentry
import loggingfrom raven import Clientfrom loggerglue.server import SyslogServer, SyslogHandlerclient = Client(dsn='http://5d8f03027e9e413484d4ce4a9281e4bc:6e5a92d69a8e44b8a93f074db61e6920@localhost:9000/2') #自己sentry的api keyPRIVAL_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) # rsyslog->10514->handler->sentrys.serve_forever()
这样在Test PC上由supervisor产生的日志就会通过rsyslog发送给这个脚本,这个脚本再统一发给Sentry,最后同样的方法将Sentry和该脚本也加入到supervisor中进行监控。
详细参考:
http://ashin.sinaapp.com/article/139/http://ashin.sinaapp.com/article/143/http://ashin.sinaapp.com/article/144/http://ashin.sinaapp.com/article/145/
- supervisor+rsyslog+sentry日志管理
- rsyslog管理分布式日志
- Linux环境下使用rsyslog管理日志
- Graylog2+rsyslog+log4j 全过程日志管理环境搭建
- supervisor管理
- 【服务器集群日志监控管理】RHEL.x搭建rsyslog日志服务器和loganalyzer日志分析工具
- Sentry日志收集系统修复
- Sentry--错误日志收集框架
- Rsyslog 日志服务器
- 日志服务器Rsyslog
- rsyslog日志系统
- rsyslog 传输日志
- rsyslog 传输mysql 日志
- rsyslog 日志服务器端配置
- rsyslog 收集系统日志
- rsyslog收集网络设备日志
- 集中日志服务器Rsyslog
- Rsyslog日志采集
- BestCoder Round #53
- HDOJ 4454 Stealing a Cake 计算几何
- Mac 安装phpmyadmin提示无法登陆 mysql服务器解决办法
- redis 与关系型数据库的适合场景
- QQ音乐/酷狗音乐锁屏控制实现原理
- supervisor+rsyslog+sentry日志管理
- String的一点小东西
- continue语句
- 【ITOO高校云平台】——Html.RenderPartial&Html.RenderAction
- Swift - 字符和字符串
- Linux进程通信---信号量 代码实现
- UVA 10340 All in All
- Swift入门(十二)——利用Extension添加逆序输出字符串方法
- Android加速度传感器