返回

搭建一套你的专属前端监控系统: Sentry

前端

搭建自己的 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 记录错误堆栈跟踪、上下文数据和环境信息。
  • 它提供了一个用户友好的界面,便于