Sentry简介
来源:互联网 发布:linux 虚拟机不能上网 编辑:程序博客网 时间:2024/06/06 03:36
综述
sentry是一个优秀的日志搜集框架。在程序员编程的过程中,错误是不可避免的,由此产生的错误日志也就非常重要,sentry就是一个用来搜集这些错误日志的框架。
sentry的特点是支持许多语言。想象一下,java,nodejs,js,c++。。。各种语言的错误日志信息都一起出现,该如何处理?sentry提供了对于各种语言的支持,方便用户的使用,具体的支持可以去sentry的文档中心查看。https://docs.sentry.io/
实习的时候做的是基于java,scala和nodejs的,这里主要介绍基于Java的。
安装
sentry的安装有基于docker和基于python
基于docker
基于docker的安装比较简单,直接按照文档安装即可
基于python
基于python的安装比较复杂,在实习的时候做的就是基于python的安装,这里做个简单的叙述。
依赖环境
- linux
- python2.7
- pip8.1以上
- 如下组件
python-setuptools, python-dev, libxslt1-dev, gcc, libf-dev, libjpeg-dev,
libxml2-dev, libxslt-dev, libyaml-dev, libpq-dev - redis
- postgresql-9.5
安装postgresql
- 命令行安装postgresql
sudo apt-get install postgresql
在 Ubuntu 下安装 Postgresql 后,会自动添加一个名为 postgres 的操作系统用户,密码是
随机的。并且会自动生成一个名字为 postgres 的数据库,用户名也为 postgres,密码也是
随机的
- 修改postgres密码
// 打开客户端工具(psql)sudo -u postgres psql// 在客户端中修改密码ALTER USER postgres WITH PASSWORD '123456';// 修改完成,退出客户端postgres=# \q
修改postgres用户密码
修改ubuntu操作系统的postgres用户的密码(密码要与数据库用户 postgres 的密码
相同)
// 切换到 root 用户su root// 删除 PostgreSQL 用户密码sudo passwd -d postgres// 设置 PostgreSQL 系统用户的密码sudo -u postgres passwd// 在这里输入更新的密码
修改 PostgresSQL 数据库配置实现远程访问
这里需要修改两个配置文件:postgresql.conf 和 pg_hba.conf,都在 postgresql 的安装路
径下
// 修改 postgresql.confvim /etc/postgresql/9.5/main/postgresql.conf// 监听任何地址访问,修改连接权限#listen_addresses = 'localhost' 改为 listen_addresses = '*'// 启用密码验证#password_encryption = o 改为 password_encryption = o// 修改 pg_hba.confvim /etc/postgresql/9.5/main/pg_hba.conf// 在文档末尾加上以下内容host all all 0.0.0.0 0.0.0.0 md5// 然后重启/etc/init.d/postgresql restart
设置防火墙
// 设置 5432 为 postgreSQL 默认的端口iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT
安装redis
直接安装
配置和安装sentry
一般sentry安装在/www/sentry路径下,sentry的配置文件在/etc/sentry路径下
在sentry的安装目录中启动虚拟环境
pip install -U sentry// 初始化配置sentry init /etc/sentry
这时候会在/etc/sentry 下产生两个配置文件,sentry.conf.py 和 confg.yml
- 在sentry.conf.py中配置postgresql 的信息
需要注意的是密码要和postgres用户的登录密码相同
# ~/.sentry/sentry.conf.pyDATABASES = {'default': {'ENGINE': 'sentry.db.postgres','NAME': 'sentry','USER': 'postgres','PASSWORD': '','HOST': '','PORT': '',}}
- 配置生成的密码
// 该语句生成一个密码sentry confg generate-secret-key// 添加密码SENTRY_OPTIONS['system.secret-key']= '上一步生成的密码
- 运行和启动
// 在 postgresql 中创建名为 sentry 的数据库createdb -E utf-8 sentry// 初始化模式,这里也可以创建用户用于登录。// 如果提示 fe_sendauth: no password supplied,是因为在 sentry/sentry.conf.py 中的 password 一栏中没有填写密码。补充上设定的密码即可。SENTRY_CONF=/etc/sentry sentry upgrade// 在 postgresql 中创建名为 sentry 的数据库createdb -E utf-8 sentry// 初始化模式,这里也可以创建用户用于登录。// 如果提示 fe_sendauth: no password supplied,是因为在 sentry/sentry.conf.py 中的 password 一栏中没有填写密码。补充上设定的密码即可。SENTRY_CONF=/etc/sentry sentry upgrade
这里就可以运行sentry了
启动
- 启动web服务
SENTRY_CONF=/etc/sentry sentry run web
- 启动worker服务
SENTRY_CONF=/etc/sentry sentry run worker
- 启动cron
SENTRY_CONF=/etc/sentry sentry run cron
这时候可以在本机上访问 http://localhost:9000/,会出现如下画面
使用
这里用java程序作测试
下载java-raven
在java-raven中创建一个测试程序
package com.getsentry.bean;import org.apache.log4j.Logger;import org.apache.log4j.MDC;import java.text.SimpleDateFormat;import java.util.Date;public class RavenLog4j { private static final Logger logger = Logger.getLogger(RavenLog4j.class); public static void main(String[] args) { int id = 0x01050001; String logLevel = "INFO"; String date = "2017-04-19"; String user = "chenxy"; String messageInfo = "This is message test in event"; try{ int example = 1 / 0; }catch (Exception e) { logger.error("id | time | user exception!", e); } } public static void logNormalMessage() { try { int example = 1 / 0; } catch (Exception e) { logger.error("id | time | user exception!", e); } } public static void interfaceWithExtras(int id, String type, String logLevel, String user, String messageInfo) { String jiffis = ""; String date = ""; Date nowTime = new Date(System.currentTimeMillis()); SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = sdFormatter.format(nowTime); MDC.put("Id", id); MDC.put("Date", date); MDC.put("Type", type); String strId = Integer.toString(id); jiffis = String.valueOf(System.currentTimeMillis()); strId = "\n[" + strId + "]" + "[" + logLevel + "]"; strId = strId + "[" + System.currentTimeMillis() + "]"; strId = strId + "[" + date + "]"; strId = strId + "[" + user + "]"; messageInfo = strId + "[" + messageInfo + "]"; logger.error(messageInfo); } public static void interfaceWithExtras(int id, String type, String logLevel, String user, String messageInfo, Exception e) { String jiffis = ""; String date = ""; Date nowTime = new Date(System.currentTimeMillis()); SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = sdFormatter.format(nowTime); MDC.put("Id", id); MDC.put("Date", date); MDC.put("Type", type); String strId = Integer.toString(id); jiffis = String.valueOf(System.currentTimeMillis()); strId = "\n[" + strId + "]" + "[" + logLevel + "]"; strId = strId + "[" + System.currentTimeMillis() + "]"; strId = strId + "[" + date + "]"; strId = strId + "[" + user + "]"; messageInfo = strId + "[" + messageInfo + "]"; logger.error(messageInfo, e); } public static void eventInterfaceWithExtras(int id, String logLevel, String user, String messageInfo){ String type = "event"; interfaceWithExtras(id, type, logLevel, user, messageInfo); } public static void eventInterfaceWithExtras(int id, String logLevel, String user, String messageInfo, Exception e){ String type = "event"; interfaceWithExtras(id, type, logLevel, user, messageInfo, e); } public static void logInterfaceWithExtras(int id, String logLevel, String user, String messageInfo){ String type = "log"; interfaceWithExtras(id, type, logLevel, user, messageInfo); } public static void logInterfaceWithExtras(int id, String logLevel, String user, String messageInfo, Exception e){ String type = "log"; interfaceWithExtras(id, type, logLevel, user, messageInfo, e); }}
运行后就可在刚才打开的界面中看到错误信息,包括代码所属的包,错误时间,行数等信息,非常全面。
其他
Sentry目前用户类型有四种: 超级管理员, 管理员,普通用户和System agents. 超级用户只能通过命令行来创建,其他用户可以自己注册或由其他用户邀请注册加入,然后由超级管理员或管理员分配项目和权限。为了更好支持团队协助以及信息安全,新版本Sentry(5.4.2)经过了重新设计,重新设计后的Sentry以Team为中心组织权限。所谓Team就是一个团队,一些用户组织在一起对某些项目有操作权限的组织。一个项目只能属于一个Team, 一个用户却可以属于多个Team, 并可在不同Team中扮演不同角色, 如用户A在Team X是管理员而在Team Y中是System agents. Sentry对用户角色的指定只能到Team级别,不能到Project级别, 所以将某个用户加入到某个Team之后,这个用户就对所有所有属于这个Team下所有project有了相同的权限。
经过测试,sentry的性能还是可以的。sentry虽然是开源的,但是仍有收费版本,收费版会提供更长的历史记录,更多的用户等。
具体的收费标准请看官网介绍。
- Sentry简介
- sentry简介--architecture and Components
- Sentry简介—Audit Log
- Sentry简介—Getting Started with Sentry in Hive
- Sentry简介— Sentry Client Connection Pool Configuration
- sentry
- 关于Sentry
- Sentry Robots
- sentry配置
- sentry配置
- Sentry 介绍
- sentry使用方法
- sentry开发
- UVAlive 6156 Sentry Robots
- Sentry UDFWhiteList bug分析
- Impala Kerberos Sentry Doas
- Sentry介绍及使用
- log4j 集成sentry
- 【启发】求有环单链表中的环长、环起点、链表长【快 、 慢指针】
- JavaScript概述
- SSH框架整合思想
- 简单分析YYWebImage 是如何判断图片格式的原理 (附上SDWebImage)
- 阿里面试回来,想和Java程序员谈一谈
- Sentry简介
- Linux中$()和${}区别
- 块和内联
- 常用选择器
- 一个DOM元素绑定多个事件时,先执行冒泡还是捕获
- 使用Spring自定义注解实现任务路由
- 剑指offer(17)—树的子结构
- mysql获取当天,昨天,本周,本月,上周,上月的起始时间
- My-Redis