IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用sentry来反馈您的系统问题

    longhao (longtask@gmail.com)发表于 2013-09-02 19:16:09
    love 0

    日志分析相关的操作,小公司没有实例去开发,当让程序员到线上不断关注日志又太依赖于人,很多问题不能很好的统计,不能反馈核心问题。没有错误日志的反馈,在关键路径的操作上,研发存在不少的盲点,遇到问题只有用户反馈的时候才去被动的修改,这不利于系统的演进。所以我们需要一个日志收集的系统。

    Sentry 是一个实时的事件日志和聚合平台,基于 Django 构建。Sentry 可以帮助你将 Python 程序的所有 exception 自动记录下来,然后在一个好用的 UI 上呈现和搜索。处理 exception 是每个程序的必要部分,所以 Sentry 也几乎可以说是所有项目的必备组件。

    1:安装sentry

    安装sentry最开始没有在virtualenv下面,直接安装在自己的开发配置中,发现django是1.6和sentry6.1.2的版本是不兼容的,各种问题不断出现,“Internal Server Error” 的错误这样的情况下基本无解了,然后配置了N久的日志,打印不出来错误日志。各种纠结,折腾之后,还是不想卸载django1.6(因为有相关开发的内容是基于1.6的),只能在virtualenv环境安装sentry了。

    1.1:安装virtualenv:

    easy_install -UZ virtualenv

    1.2:选择一个本地环境,执行virtualenv命令

    virtualenv /opt/sentry/

    1.3:激活你的virtualenv:

    source /opt/sentry/bin/activate

    1.4:安装sentry

    easy_install -UZ sentry

    注意:安装的过程中,遇到pytz这个包,安装流程会卡在这个地方。我是从pypi.python.org/pypi/pytz/2013b下周的文件,然后通过easy_install pytz_*.egg来安装这个包。在安装的过程中,网络一直timeout,需要不断的执行安装命令,后续会自动安装完毕。

    1.5:安装sentry-mysql

    easy_install -UZ sentry[mysql]

    当然,其他数据库也可以根据配置选择安装,本人直接安装的MySQL-python就可以直接启动了,^_^

    1.6:配置sentry.conf.py

    --后面的路径配置过程中不是必须的,如果没有路径,将在用户的home的.sentry这个目录中生成sentry.conf.py

    sentry init /etc/sentry.conf.py

    生成完毕之后,注意到sentry.conf.py中去更改相关的DB配置,mysql的配置是:

    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'sentry',
            #'NAME': os.path.join(CONF_ROOT, 'sentry.db'),
            'USER': 'root',
            'PASSWORD': '',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    

    2:Sentry的相关操作

    2.1:启动服务

    sentry --config=/etc/sentry.conf.py start

    如果你用的是默认目录,则可以直接用sentry start来启动;

    启动过程中如果报错,注意在sentry.conf.py中加入:

    ALLOWED_HOSTS=['*']

    一些其他配置的问题可以到文档中去搜一下,地址: https://sentry.readthedocs.org/en/latest/quickstart/index.html

    2.2:添加用户:

    添加工程

    sentry --config=/etc/sentry.conf.py createsuperuser

    2.3:添加teams

    到右边菜单中,添加不同的团队的分组;

    添加工程

    2.4:添加工程

    添加工程

    注意:每个团队下属的工程,各自添加,然后每个工程会有自己的API keys,拿着这个key配置不同模块的日志;

    3:JAVA环境配置日志到sentry

    3.1:pom文件的修改

    各项目根目录下面的 pom.xml文件的依赖:

    
            
                sonatype-nexus-snapshots
                Sonatype Nexus Snapshots
                https://oss.sonatype.org/content/repositories/snapshots
                
                    false
                
                
                    true
                
            
    
    

    dependencyManagement中添加raven的依赖

    
        net.kencochrane.raven
        raven
        4.0
    
    
        net.kencochrane.raven
        raven-log4j
        4.0
    
    

    因为没有相关的应用,所以需要在跟pom.xml中添加dependencies来保证把raven的jar打到我们的发布包中;

    
                
                  net.kencochrane.raven
                  raven
                
                
                    net.kencochrane.raven
                    raven-log4j
                    
                        
                            log4j
                            log4j
                        
                    
                
    
    

    3.2:log4j的配置添加

    注意:dsn就是工程的API Keys,每个工程的都不一样。

    
            
            
                
            
    
    

    在相关的error日志配置中添加:

    
    

    例如:

    
            
            
            
            
    
    

    如果系统有错误日志产生,就会在sentry中看到相关的错误日志的分析结果了。

    错误日志的展示结果:

    错误日志展示

    4:nginx的配置

    使用sentrylogs来监控nginx的日志,到https://github.com/mdgart/sentrylogs 去了解一下源码,通过 easy_install sentrylog就可以安装,然后设置sentry的dsn 启动的时候注意几个参数的指定。

    • --sentrydsn SENTRYDSN, -s SENTRYDSN 指定dsn的路径
    • --daemonize, -d 静默启动
    • --nginxerrorpath NGINXERRORPATH, -n NGINXERRORPATH Nginx错误日志的目录

    5:其他系统的配置

    在project的setting中可以找到相关模块的不同语言的example,可以通过案例来配置不同的语言,其他语言后续会不断补充……



沪ICP备19023445号-2号
友情链接