返回
搭建一套你的专属前端监控系统: Sentry
前端
2023-09-23 14:14:28
搭建自己的 Sentry 私有实例:监控应用程序问题
简介
Sentry 是一款强大的开源应用程序监控工具,可帮助您实时监控和管理应用程序的错误和性能问题。本文将指导您逐步搭建一个 Sentry 私有实例,让您可以轻松监控您的应用程序并保持其平稳运行。
1. 安装 Docker
Sentry 在 Docker 容器中运行,因此第一步是安装 Docker。前往 Docker 官网下载并安装 Docker,按照其提供的说明进行操作。
2. 创建 Sentry Docker 容器
安装 Docker 后,创建一个 Sentry 容器:
docker run -d --name sentry -p 9000:9000 -e SENTRY_DB_HOST=db -e SENTRY_DB_NAME=sentry -e SENTRY_DB_PASSWORD=password -e SENTRY_DB_USER=sentry sentry:latest
参数 | |
---|---|
-d |
以守护进程模式运行容器 |
--name sentry |
容器名称 |
-p 9000:9000 |
容器端口映射到主机端口 |
-e SENTRY_DB_HOST=db |
数据库主机名 |
-e SENTRY_DB_NAME=sentry |
数据库名称 |
-e SENTRY_DB_PASSWORD=password |
数据库密码 |
-e SENTRY_DB_USER=sentry |
数据库用户名 |
sentry:latest |
Sentry 镜像名称和版本 |
3. 创建 Sentry 数据库
进入容器并创建 Sentry 数据库:
docker exec -it sentry psql -U sentry -d sentry
执行以下命令创建数据库表:
CREATE EXTENSION pgcrypto;
CREATE TABLE sentry_release (
id uuid PRIMARY KEY,
version text UNIQUE NOT NULL,
date timestamptz NOT NULL
);
CREATE TABLE sentry_event (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
release_id uuid,
event_id text NOT NULL,
timestamp timestamptz NOT NULL,
platform text,
sdk text,
sdk_version text,
environment text,
fingerprint text,
user_id text,
tags jsonb,
data jsonb,
exception jsonb,
message text,
is_errored boolean NOT NULL,
is_fatal boolean NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id),
FOREIGN KEY (release_id) REFERENCES sentry_release (id)
);
CREATE TABLE sentry_project (
id uuid PRIMARY KEY,
name text UNIQUE NOT NULL,
slug text UNIQUE NOT NULL,
date_created timestamptz NOT NULL
);
CREATE TABLE sentry_team (
id uuid PRIMARY KEY,
name text UNIQUE NOT NULL,
slug text UNIQUE NOT NULL,
organization_id uuid NOT NULL,
date_created timestamptz NOT NULL,
FOREIGN KEY (organization_id) REFERENCES sentry_organization (id)
);
CREATE TABLE sentry_organization (
id uuid PRIMARY KEY,
name text UNIQUE NOT NULL,
slug text UNIQUE NOT NULL,
date_created timestamptz NOT NULL
);
CREATE TABLE sentry_user (
id uuid PRIMARY KEY,
email text UNIQUE NOT NULL,
username text UNIQUE NOT NULL,
password text NOT NULL,
is_superuser boolean NOT NULL,
is_active boolean NOT NULL,
is_staff boolean NOT NULL,
date_joined timestamptz NOT NULL,
last_login timestamptz,
FOREIGN KEY (organization_id) REFERENCES sentry_organization (id)
);
CREATE TABLE sentry_team_membership (
team_id uuid NOT NULL,
user_id uuid NOT NULL,
date_joined timestamptz NOT NULL,
FOREIGN KEY (team_id) REFERENCES sentry_team (id),
FOREIGN KEY (user_id) REFERENCES sentry_user (id)
);
CREATE TABLE sentry_project_team (
project_id uuid NOT NULL,
team_id uuid NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id),
FOREIGN KEY (team_id) REFERENCES sentry_team (id)
);
CREATE TABLE sentry_event_user (
event_id uuid NOT NULL,
user_id uuid,
is_anonymous boolean NOT NULL,
FOREIGN KEY (event_id) REFERENCES sentry_event (id),
FOREIGN KEY (user_id) REFERENCES sentry_user (id)
);
CREATE TABLE sentry_activity (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
group_id uuid,
event_id uuid,
user_id uuid,
type text,
data jsonb,
datetime timestamptz NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id),
FOREIGN KEY (group_id) REFERENCES sentry_groupedmessage (id),
FOREIGN KEY (event_id) REFERENCES sentry_event (id),
FOREIGN KEY (user_id) REFERENCES sentry_user (id)
);
CREATE TABLE sentry_groupedmessage (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
message text,
times_seen bigint NOT NULL,
first_seen timestamptz NOT NULL,
last_seen timestamptz NOT NULL,
status text NOT NULL,
is_public boolean NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id)
);
CREATE TABLE sentry_filterrule (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
name text NOT NULL,
data jsonb NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id)
);
CREATE TABLE sentry_filtervalue (
id uuid PRIMARY KEY,
filter_id uuid NOT NULL,
key text NOT NULL,
value text NOT NULL,
FOREIGN KEY (filter_id) REFERENCES sentry_filterrule (id)
);
CREATE TABLE sentry_plugin (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
plugin_id text UNIQUE NOT NULL,
config jsonb,
FOREIGN KEY (project_id) REFERENCES sentry_project (id)
);
CREATE TABLE sentry_releaseproject (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
release_id uuid NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id),
FOREIGN KEY (release_id) REFERENCES sentry_release (id)
);
CREATE TABLE sentry_projectkey (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
public_key text NOT NULL,
secret_key text NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id)
);
CREATE TABLE sentry_auditlogentry (
id uuid PRIMARY KEY,
organization_id uuid,
team_id uuid,
project_id uuid,
user_id uuid,
ip_address text,
user_agent text,
action text,
data jsonb,
datetime timestamptz NOT NULL,
FOREIGN KEY (organization_id) REFERENCES sentry_organization (id),
FOREIGN KEY (team_id) REFERENCES sentry_team (id),
FOREIGN KEY (project_id) REFERENCES sentry_project (id),
FOREIGN KEY (user_id) REFERENCES sentry_user (id)
);
CREATE TABLE sentry_workflow (
id uuid PRIMARY KEY,
project_id uuid NOT NULL,
name text NOT NULL,
status text NOT NULL,
rules jsonb,
error_threshold float NOT NULL,
FOREIGN KEY (project_id) REFERENCES sentry_project (id)
);
CREATE TABLE sentry_rule (
id uuid PRIMARY KEY,
workflow_id uuid NOT NULL,
conditions jsonb NOT NULL,
actions jsonb NOT NULL,
FOREIGN KEY (workflow_id) REFERENCES sentry_workflow (id)
);
CREATE TABLE sentry_workflowrun (
id uuid PRIMARY KEY,
workflow_id uuid NOT NULL,
status text NOT NULL,
error_message text,
date_started timestamptz NOT NULL,
date_finished timestamptz,
FOREIGN KEY (workflow_id) REFERENCES sentry_workflow (id)
);
4. 验证 Sentry 安装
访问 Sentry 界面:http://localhost:9000/
。
- 默认用户名:
admin
- 默认密码:
secret
您应该会看到 Sentry 仪表板,其中显示了有关您的应用程序的事件和错误的信息。
常见问题解答
1. 如何配置 Sentry 以监视我的应用程序?
- 集成 Sentry SDK 到您的应用程序。
- 创建 Sentry 项目并关联您的 SDK。
- 将应用程序错误和事件报告给 Sentry。
2. Sentry 如何帮助我调试错误?
- Sentry 记录错误堆栈跟踪、上下文数据和环境信息。
- 它提供了一个用户友好的界面,便于