Sentry搭建和使用

前言

Sentry是一个开源的实时错误收集工具,github代码仓库地址:
https://github.com/getsentry/onpremise.git
本人借助sentry工具实时监控线上vue项目异常报错,以便第一时间发现bug,提高软件质量,提升用户体验。

安装步骤

1.准备环境(linux)

准备一台linux机器,安装好git,然后把Sentry代码仓库Clone下来,切换到最老的分支remotes/origin/releases/9.1.x,至于为什么要用最老的版本,主要是最新的版本,对机器性能和环境要求很高,本人试了好几次都无法顺利安装好,无奈使用最老的版本,安装成功了。仔细阅读代码仓库的README.md文件,将docker和docker-compose安装好。

在这里插入图片描述

查看docker和docker-compose版本

在这里插入图片描述

根据README.md说明,只需要执行代码仓库的install.sh文件即可一键完成安装,实际上在跑的过程中报错了,具体错误往下看

2.开始安装

第一次安装报错,错误信息
[root@VM-10-184-centos ~/xxx/onpremise]# ./install.sh 
Checking minimum requirements...
./install.sh: line 40: [: : integer expression expected

Creating volumes for persistent storage...
Created sentry-data.
Created sentry-postgres.

Creating .env...

Building and tagging Docker images...

smtp uses an image, skipping
memcached uses an image, skipping
redis uses an image, skipping
postgres uses an image, skipping
Building web
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
ERROR: Service 'web' failed to build: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
Cleaning up...
上网查了一下,出现这个错误是因为docker hub限流了,需要登陆一下自己的账号
[root@VM-10-184-centos ~/xxx/onpremise]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: lg993372246
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
然后继续安装,第二次安装依然没有成功,安装信息如下
[root@VM-10-184-centos ~/xxx/onpremise]# ./install.sh 
Checking minimum requirements...

Creating volumes for persistent storage...
Created sentry-data.
Created sentry-postgres.

.env already exists, skipped creation.

Building and tagging Docker images...

smtp uses an image, skipping
memcached uses an image, skipping
redis uses an image, skipping
postgres uses an image, skipping
Building web
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
9.1.2-onbuild: Pulling from library/sentry
80369df48736: Pull complete
684650382ab1: Pull complete
693ec1bac9c9: Pull complete
02072b04b48a: Pull complete
703fa75ef1c6: Pull complete
c7ad76dc3b70: Pull complete
c7a2613e3378: Pull complete
a1f216cd6d7d: Pull complete
ff4815cd5a07: Pull complete
e6dda00f7eb5: Pull complete
e3721e3e14e0: Pull complete
774dbc6b76a9: Pull complete
9fbfcac87a10: Pull complete
f12f2e45fc41: Pull complete
a9db39a63e0f: Pull complete
Digest: sha256:150cb1a7c5733d392117d0c83bb550478b2619dc7977f1c478950049c7ad3e9c
Status: Downloaded newer image for sentry:9.1.2-onbuild
# Executing 4 build triggers
 ---> Running in a078a47c3022
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Removing intermediate container a078a47c3022
 ---> Running in 132705b7d8bb
Removing intermediate container 132705b7d8bb
 ---> Running in 60f0079109b2
Removing intermediate container 60f0079109b2
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_web:latest
Building cron
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
# Executing 4 build triggers
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_cron:latest
Building worker
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
# Executing 4 build triggers
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_worker:latest

Docker images built.

Generating secret key...
Secret key written to .env

Setting up database...
Creating network "onpremise_default" with the default driver
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
Cleaning up...
上网查了一下,说是自定义网络过多导致的,解决办法就是修改docker-compose.yml文件,使多个服务共享同一个自定义网络,修改之后的docker-compose.yml内容如下
# NOTE: This docker-compose.yml is meant to be just an example of how
# you could accomplish this on your own. It is not intended to work in
# all use-cases and must be adapted to fit your needs. This is merely
# a guideline.

# See docs.getsentry.com/on-premise/server/ for full
# instructions

version: '3.4'

x-defaults: &defaults
  restart: unless-stopped
  build:
    context: .
  depends_on:
    - redis
    - postgres
    - memcached
    - smtp
  env_file: .env
  environment:
    SENTRY_MEMCACHED_HOST: memcached
    SENTRY_REDIS_HOST: redis
    SENTRY_POSTGRES_HOST: postgres
    SENTRY_EMAIL_HOST: smtp
  volumes:
    - sentry-data:/var/lib/sentry/files
  networks:
    - server_net


services:
  smtp:
    restart: unless-stopped
    image: tianon/exim4
    networks:
      - server_net

  memcached:
    restart: unless-stopped
    image: memcached:1.5-alpine
    networks:
      - server_net

  redis:
    restart: unless-stopped
    image: redis:3.2-alpine
    networks:
      - server_net

  postgres:
    restart: unless-stopped
    image: postgres:9.5
    environment:
      POSTGRES_HOST_AUTH_METHOD: 'trust'
    volumes:
      - sentry-postgres:/var/lib/postgresql/data
    networks:
      - server_net

  web:
    <<: *defaults
    ports:
      - '9000:9000'
    networks:
      - server_net

  cron:
    <<: *defaults
    command: run cron
    networks:
      - server_net

  worker:
    <<: *defaults
    command: run worker
    networks:
      - server_net

volumes:
    sentry-data:
      external: true
    sentry-postgres:
      external: true


networks:
  server_net:
    ipam:
      driver: default
      config:
        - subnet: "192.168.11.0/24"
第三次安装,信息如下
[root@VM-10-184-centos ~/xxx/onpremise]# ./install.sh 
Checking minimum requirements...

Creating volumes for persistent storage...
Created sentry-data.
Created sentry-postgres.

.env already exists, skipped creation.

Building and tagging Docker images...

smtp uses an image, skipping
memcached uses an image, skipping
redis uses an image, skipping
postgres uses an image, skipping
Building web
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
# Executing 4 build triggers
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_web:latest
Building cron
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
# Executing 4 build triggers
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_cron:latest
Building worker
Step 1/2 : ARG SENTRY_IMAGE
Step 2/2 : FROM ${SENTRY_IMAGE:-sentry:9.1.2}-onbuild
# Executing 4 build triggers
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> Using cache
 ---> 0a65cb5a5105

Successfully built 0a65cb5a5105
Successfully tagged onpremise_worker:latest

Docker images built.

Generating secret key...
Secret key written to .env

Setting up database...
Starting onpremise_memcached_1 ... 
Starting onpremise_memcached_1 ... done
Starting onpremise_redis_1 ... done

11:03:12 [WARNING] sentry.utils.geo: settings.GEOIP_PATH_MMDB not configured.
11:03:15 [INFO] sentry.plugins.github: apps-not-configured
Syncing...
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table south_migrationhistory
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
Migrating...
Running migrations for sentry:
 - Migrating forwards to 0472_auto__add_field_sentryapp_author.
 > sentry:0001_initial
 > sentry:0002_auto__del_field_groupedmessage_url__chg_field_groupedmessage_view__chg
 > sentry:0003_auto__add_field_message_group__del_field_groupedmessage_server_name
 > sentry:0004_auto__add_filtervalue__add_unique_filtervalue_key_value
 > sentry:0005_auto
 > sentry:0006_auto
 > sentry:0007_auto__add_field_message_site
 > sentry:0008_auto__chg_field_message_view__add_field_groupedmessage_data__chg_field
 > sentry:0009_auto__add_field_message_message_id
 > sentry:0010_auto__add_messageindex__add_unique_messageindex_column_value_object_id
 > sentry:0011_auto__add_field_groupedmessage_score
 > sentry:0012_auto
 > sentry:0013_auto__add_messagecountbyminute__add_unique_messagecountbyminute_group_
 > sentry:0014_auto
 > sentry:0014_auto__add_project__add_projectmember__add_unique_projectmember_project
 > sentry:0015_auto__add_field_message_project__add_field_messagecountbyminute_projec
 > sentry:0016_auto__add_field_projectmember_is_superuser
 > sentry:0017_auto__add_field_projectmember_api_key
 > sentry:0018_auto__chg_field_project_owner
 > sentry:0019_auto__del_field_projectmember_api_key__add_field_projectmember_public_
 > sentry:0020_auto__add_projectdomain__add_unique_projectdomain_project_domain
 > sentry:0021_auto__del_message__del_groupedmessage__del_unique_groupedmessage_proje
 > sentry:0022_auto__del_field_group_class_name__del_field_group_traceback__del_field
 > sentry:0023_auto__add_field_event_time_spent
 > sentry:0024_auto__add_field_group_time_spent_total__add_field_group_time_spent_cou
 > sentry:0025_auto__add_field_messagecountbyminute_time_spent_total__add_field_messa
 > sentry:0026_auto__add_field_project_status
 > sentry:0027_auto__chg_field_event_server_name
 > sentry:0028_auto__add_projectoptions__add_unique_projectoptions_project_key_value
 > sentry:0029_auto__del_field_projectmember_is_superuser__del_field_projectmember_pe
 > sentry:0030_auto__add_view__chg_field_event_group
 > sentry:0031_auto__add_field_view_verbose_name__add_field_view_verbose_name_plural_
 > sentry:0032_auto__add_eventmeta
 > sentry:0033_auto__add_option__add_unique_option_key_value
 > sentry:0034_auto__add_groupbookmark__add_unique_groupbookmark_project_user_group
 > sentry:0034_auto__add_unique_option_key__del_unique_option_value_key__del_unique_g
 > sentry:0036_auto__chg_field_option_value__chg_field_projectoption_value
 > sentry:0037_auto__add_unique_option_key__del_unique_option_value_key__del_unique_g
 > sentry:0038_auto__add_searchtoken__add_unique_searchtoken_document_field_token__ad
 > sentry:0039_auto__add_field_searchdocument_status
 > sentry:0040_auto__del_unique_event_event_id__add_unique_event_project_event_id
 > sentry:0041_auto__add_field_messagefiltervalue_last_seen__add_field_messagefilterv
 > sentry:0042_auto__add_projectcountbyminute__add_unique_projectcountbyminute_projec
 > sentry:0043_auto__chg_field_option_value__chg_field_projectoption_value
 > sentry:0044_auto__add_field_projectmember_is_active
 > sentry:0045_auto__add_pendingprojectmember__add_unique_pendingprojectmember_projec
 > sentry:0046_auto__add_teammember__add_unique_teammember_team_user__add_team__add_p
 > sentry:0047_migrate_project_slugs
 > sentry:0048_migrate_project_keys
 > sentry:0049_create_default_project_keys
 > sentry:0050_remove_project_keys_from_members
 > sentry:0051_auto__del_pendingprojectmember__del_unique_pendingprojectmember_projec
 > sentry:0052_migrate_project_members
 > sentry:0053_auto__del_projectmember__del_unique_projectmember_project_user
 > sentry:0054_fix_project_keys
 > sentry:0055_auto__del_projectdomain__del_unique_projectdomain_project_domain
 > sentry:0056_auto__add_field_group_resolved_at
 > sentry:0057_auto__add_field_group_active_at
 > sentry:0058_auto__add_useroption__add_unique_useroption_user_project_key
 > sentry:0059_auto__add_filterkey__add_unique_filterkey_project_key
 > sentry:0060_fill_filter_key
 > sentry:0061_auto__add_field_group_group_id__add_field_group_is_public
 > sentry:0062_correct_del_index_sentry_groupedmessage_logger__view__checksum
 > sentry:0063_auto
 > sentry:0064_index_checksum
 > sentry:0065_create_default_project_key
 > sentry:0066_auto__del_view
 > sentry:0067_auto__add_field_group_platform__add_field_event_platform
 > sentry:0068_auto__add_field_projectkey_user_added__add_field_projectkey_date_added
 > sentry:0069_auto__add_lostpasswordhash
 > sentry:0070_projectoption_key_length
 > sentry:0071_auto__add_field_group_users_seen
 > sentry:0072_auto__add_affecteduserbygroup__add_unique_affecteduserbygroup_project_
 > sentry:0073_auto__add_field_project_platform
 > sentry:0074_correct_filtervalue_index
 > sentry:0075_add_groupbookmark_index
 > sentry:0076_add_groupmeta_index
 > sentry:0077_auto__add_trackeduser__add_unique_trackeduser_project_ident
 > sentry:0078_auto__add_field_affecteduserbygroup_tuser
 > sentry:0079_auto__del_unique_affecteduserbygroup_project_ident_group__add_unique_a
 > sentry:0080_auto__chg_field_affecteduserbygroup_ident
 > sentry:0081_fill_trackeduser
 > sentry:0082_auto__add_activity__add_field_group_num_comments__add_field_event_num_
 > sentry:0083_migrate_dupe_groups
 > sentry:0084_auto__del_unique_group_project_checksum_logger_culprit__add_unique_gro
 > sentry:0085_auto__del_unique_project_slug__add_unique_project_slug_team
 > sentry:0086_auto__add_field_team_date_added
 > sentry:0087_auto__del_messagefiltervalue__del_unique_messagefiltervalue_project_ke
 > sentry:0088_auto__del_messagecountbyminute__del_unique_messagecountbyminute_projec
 > sentry:0089_auto__add_accessgroup__add_unique_accessgroup_team_name
 > sentry:0090_auto__add_grouptagkey__add_unique_grouptagkey_project_group_key__add_f
 > sentry:0091_auto__add_alert
 > sentry:0092_auto__add_alertrelatedgroup__add_unique_alertrelatedgroup_group_alert
 > sentry:0093_auto__add_field_alert_status
 > sentry:0094_auto__add_eventmapping__add_unique_eventmapping_project_event_id
 > sentry:0095_rebase
 > sentry:0096_auto__add_field_tagvalue_data
 > sentry:0097_auto__del_affecteduserbygroup__del_unique_affecteduserbygroup_project_
 > sentry:0098_auto__add_user__chg_field_team_owner__chg_field_activity_user__chg_fie
 > sentry:0099_auto__del_field_teammember_is_active
 > sentry:0100_auto__add_field_tagkey_label
 > sentry:0101_ensure_teams
 > sentry:0102_ensure_slugs
 > sentry:0103_ensure_non_empty_slugs
 > sentry:0104_auto__add_groupseen__add_unique_groupseen_group_user
 > sentry:0105_auto__chg_field_projectcountbyminute_time_spent_total__chg_field_group
 > sentry:0106_auto__del_searchtoken__del_unique_searchtoken_document_field_token__de
 > sentry:0107_expand_user
 > sentry:0108_fix_user
 > sentry:0109_index_filtervalue_times_seen
 > sentry:0110_index_filtervalue_last_seen
 > sentry:0111_index_filtervalue_first_seen
 > sentry:0112_auto__chg_field_option_value__chg_field_useroption_value__chg_field_pr
 > sentry:0113_auto__add_field_team_status
 > sentry:0114_auto__add_field_projectkey_roles
 > sentry:0115_auto__del_projectcountbyminute__del_unique_projectcountbyminute_projec
 > sentry:0116_auto__del_field_event_server_name__del_field_event_culprit__del_field_
 > sentry:0117_auto__add_rule
 > sentry:0118_create_default_rules
 > sentry:0119_auto__add_field_projectkey_label
 > sentry:0120_auto__add_grouprulestatus
 > sentry:0121_auto__add_unique_grouprulestatus_rule_group
 > sentry:0122_add_event_group_id_datetime_index
 > sentry:0123_auto__add_groupassignee__add_index_event_group_datetime
 > sentry:0124_auto__add_grouphash__add_unique_grouphash_project_hash
 > sentry:0125_auto__add_field_user_is_managed
 > sentry:0126_auto__add_field_option_last_updated
 > sentry:0127_auto__add_release__add_unique_release_project_version
 > sentry:0128_auto__add_broadcast
 > sentry:0129_auto__chg_field_release_id__chg_field_pendingteammember_id__chg_field_
 > sentry:0130_auto__del_field_project_owner
 > sentry:0131_auto__add_organizationmember__add_unique_organizationmember_organizati
 > sentry:0132_add_default_orgs
 > sentry:0133_add_org_members
 > sentry:0134_auto__chg_field_team_organization
 > sentry:0135_auto__chg_field_project_team
 > sentry:0136_auto__add_field_organizationmember_email__chg_field_organizationmember
 > sentry:0137_auto__add_field_organizationmember_has_global_access
 > sentry:0138_migrate_team_members
 > sentry:0139_auto__add_auditlogentry
 > sentry:0140_auto__add_field_organization_slug
 > sentry:0141_fill_org_slugs
 > sentry:0142_auto__add_field_project_organization__add_unique_project_organization_
 > sentry:0143_fill_project_orgs
 > sentry:0144_auto__chg_field_project_organization
 > sentry:0145_auto__chg_field_organization_slug
 > sentry:0146_auto__add_field_auditlogentry_ip_address
 > sentry:0147_auto__del_unique_team_slug__add_unique_team_organization_slug
 > sentry:0148_auto__add_helppage
 > sentry:0149_auto__chg_field_groupseen_project__chg_field_groupseen_user__chg_field
 > sentry:0150_fix_broken_rules
 > sentry:0151_auto__add_file
 > sentry:0152_auto__add_field_file_checksum__chg_field_file_name__add_unique_file_na
 > sentry:0153_auto__add_field_grouprulestatus_last_active
 > sentry:0154_auto__add_field_tagkey_status
 > sentry:0155_auto__add_field_projectkey_status
 > sentry:0156_auto__add_apikey
 > sentry:0157_auto__add_authidentity__add_unique_authidentity_auth_provider_ident__a
 > sentry:0158_auto__add_unique_authidentity_auth_provider_user
 > sentry:0159_auto__add_field_authidentity_last_verified__add_field_organizationmemb
 > sentry:0160_auto__add_field_authprovider_default_global_access
 > sentry:0161_auto__chg_field_authprovider_config
 > sentry:0162_auto__chg_field_authidentity_data
 > sentry:0163_auto__add_field_authidentity_last_synced
 > sentry:0164_auto__add_releasefile__add_unique_releasefile_release_ident__add_field
 > sentry:0165_auto__del_unique_file_name_checksum
 > sentry:0166_auto__chg_field_user_id__add_field_apikey_allowed_origins
 > sentry:0167_auto__add_field_authprovider_flags
 > sentry:0168_unfill_projectkey_user
 > sentry:0169_auto__del_field_projectkey_user
 > sentry:0170_auto__add_organizationmemberteam__add_unique_organizationmemberteam_te
 > sentry:0171_auto__chg_field_team_owner
 > sentry:0172_auto__del_field_team_owner
 > sentry:0173_auto__del_teammember__del_unique_teammember_team_user
 > sentry:0174_auto__del_field_projectkey_user_added
 > sentry:0175_auto__del_pendingteammember__del_unique_pendingteammember_team_email
 > sentry:0176_auto__add_field_organizationmember_counter__add_unique_organizationmem
 > sentry:0177_fill_member_counters
 > sentry:0178_auto__del_unique_organizationmember_organization_counter
 > sentry:0179_auto__add_field_release_date_released
 > sentry:0180_auto__add_field_release_environment__add_field_release_ref__add_field_
 > sentry:0181_auto__del_field_release_environment__del_unique_release_project_versio
 > sentry:0182_auto__add_field_auditlogentry_actor_label__add_field_auditlogentry_act
 > sentry:0183_auto__del_index_grouphash_hash
 > sentry:0184_auto__del_field_group_checksum__del_unique_group_project_checksum__del
 > sentry:0185_auto__add_savedsearch__add_unique_savedsearch_project_name
 > sentry:0186_auto__add_field_group_first_release
 > sentry:0187_auto__add_index_group_project_first_release
 > sentry:0188_auto__add_userreport
 > sentry:0189_auto__add_index_userreport_project_event_id
 > sentry:0190_auto__add_field_release_new_groups
 > sentry:0191_auto__del_alert__del_alertrelatedgroup__del_unique_alertrelatedgroup_g
 > sentry:0192_add_model_groupemailthread
 > sentry:0193_auto__del_unique_groupemailthread_msgid__add_unique_groupemailthread_e
 > sentry:0194_auto__del_field_project_platform
 > sentry:0195_auto__chg_field_organization_owner
 > sentry:0196_auto__del_field_organization_owner
 > sentry:0197_auto__del_accessgroup__del_unique_accessgroup_team_name
 > sentry:0198_auto__add_field_release_primary_owner
 > sentry:0199_auto__add_field_project_first_event
 > sentry:0200_backfill_first_event
 > sentry:0201_auto__add_eventuser__add_unique_eventuser_project_ident__add_index_eve
 > sentry:0202_auto__add_field_eventuser_hash__add_unique_eventuser_project_hash
 > sentry:0203_auto__chg_field_eventuser_username__chg_field_eventuser_ident
 > sentry:0204_backfill_team_membership
 > sentry:0205_auto__add_field_organizationmember_role
 > sentry:0206_backfill_member_role
 > sentry:0207_auto__add_field_organization_default_role
 > sentry:0208_backfill_default_role
 > sentry:0209_auto__add_broadcastseen__add_unique_broadcastseen_broadcast_user
 > sentry:0210_auto__del_field_broadcast_badge
 > sentry:0211_auto__add_field_broadcast_title
 > sentry:0212_auto__add_fileblob__add_field_file_blob
 > sentry:0212_auto__add_organizationoption__add_unique_organizationoption_organizati
 > sentry:0213_migrate_file_blobs
Saved 0.00GB (on 0.00GB) with removal of 0 duplicate files
 > sentry:0214_auto__add_field_broadcast_upstream_id
 > sentry:0215_auto__add_field_broadcast_date_expires
 > sentry:0216_auto__add_groupsnooze
 > sentry:0217_auto__add_groupresolution
 > sentry:0218_auto__add_field_groupresolution_status
 > sentry:0219_auto__add_field_groupbookmark_date_added
 > sentry:0220_auto__del_field_fileblob_storage_options__del_field_fileblob_storage__
 > sentry:0221_auto__chg_field_user_first_name
 > sentry:0222_auto__del_field_user_last_name__del_field_user_first_name__add_field_u
 > sentry:0223_delete_old_sentry_docs_options
 > sentry:0224_auto__add_index_userreport_project_date_added
 > sentry:0225_auto__add_fileblobindex__add_unique_fileblobindex_file_blob_offset
 > sentry:0226_backfill_file_size
 > sentry:0227_auto__del_field_activity_event
 > sentry:0228_auto__del_field_event_num_comments
 > sentry:0229_drop_event_constraints
 > sentry:0230_auto__del_field_eventmapping_group__del_field_eventmapping_project__ad
 > sentry:0231_auto__add_field_savedsearch_is_default
 > sentry:0232_default_savedsearch
 > sentry:0233_add_new_savedsearch
 > sentry:0234_auto__add_savedsearchuserdefault__add_unique_savedsearchuserdefault_pr
 > sentry:0235_auto__add_projectbookmark__add_unique_projectbookmark_project_id_user_
 > sentry:0236_auto__add_organizationonboardingtask__add_unique_organizationonboardin
 > sentry:0237_auto__add_eventtag__add_unique_eventtag_event_id_key_id_value_id
 > sentry:0238_fill_org_onboarding_tasks
 > sentry:0239_auto__add_projectdsymfile__add_unique_projectdsymfile_project_uuid__ad
 > sentry:0240_fill_onboarding_option
 > sentry:0241_auto__add_counter__add_unique_counter_project_ident__add_field_group_s
 > sentry:0242_auto__add_field_project_forced_color
 > sentry:0243_remove_inactive_members
 > sentry:0244_auto__add_groupredirect
 > sentry:0245_auto__del_field_project_callsign__del_unique_project_organization_call
 > sentry:0246_auto__add_dsymsymbol__add_unique_dsymsymbol_object_address__add_dsymsd
 > sentry:0247_migrate_file_blobs
 > sentry:0248_auto__add_projectplatform__add_unique_projectplatform_project_id_platf
 > sentry:0249_auto__add_index_eventtag_project_id_key_id_value_id
 > sentry:0250_auto__add_unique_userreport_project_event_id
 > sentry:0251_auto__add_useravatar
 > sentry:0252_default_users_to_gravatar
 > sentry:0253_auto__add_field_eventtag_group_id
 > sentry:0254_auto__add_index_eventtag_group_id_key_id_value_id
 > sentry:0255_auto__add_apitoken
 > sentry:0256_auto__add_authenticator
 > sentry:0257_repair_activity
 > sentry:0258_auto__add_field_user_is_password_expired__add_field_user_last_password
 > sentry:0259_auto__add_useremail__add_unique_useremail_user_email
 > sentry:0260_populate_email_addresses
 > sentry:0261_auto__add_groupsubscription__add_unique_groupsubscription_group_user
 > sentry:0262_fix_tag_indexes
 > sentry:0263_remove_default_regression_rule
 > sentry:0264_drop_grouptagvalue_project_index
 > sentry:0265_auto__add_field_rule_status
 > sentry:0266_auto__add_grouprelease__add_unique_grouprelease_group_id_release_id_en
 > sentry:0267_auto__add_environment__add_unique_environment_project_id_name__add_rel
 > sentry:0268_fill_environment
 > sentry:0269_auto__del_helppage
 > sentry:0270_auto__add_field_organizationmember_token
 > sentry:0271_auto__del_field_organizationmember_counter
 > sentry:0272_auto__add_unique_authenticator_user_type
 > sentry:0273_auto__add_repository__add_unique_repository_organization_id_name__add_
 > sentry:0274_auto__add_index_commit_repository_id_date_added
 > sentry:0275_auto__del_index_grouptagvalue_project_key_value__add_index_grouptagval
 > sentry:0276_auto__add_field_user_session_nonce
 > sentry:0277_auto__add_commitfilechange__add_unique_commitfilechange_commit_filenam
 > sentry:0278_auto__add_releaseproject__add_unique_releaseproject_project_release__a
 > sentry:0279_populate_release_orgs_and_projects
 > sentry:0280_auto__add_field_releasecommit_organization_id
 > sentry:0281_populate_release_commit_organization_id
 > sentry:0282_auto__add_field_releasefile_organization__add_field_releaseenvironment
 > sentry:0283_populate_release_environment_and_release_file_organization
 > sentry:0284_auto__del_field_release_project__add_field_release_project_id__chg_fie
 > sentry:0285_auto__chg_field_release_project_id__chg_field_releasefile_project_id
 > sentry:0286_drop_project_fk_release_release_file
 > sentry:0287_auto__add_field_releaseproject_new_groups
 > sentry:0288_set_release_project_new_groups_to_zero
 > sentry:0289_auto__add_organizationavatar
 > sentry:0290_populate_release_project_new_groups
 > sentry:0291_merge_legacy_releases
 > sentry:0292_auto__add_unique_release_organization_version
 > sentry:0293_auto__del_unique_release_project_id_version
 > sentry:0294_auto__add_groupcommitresolution__add_unique_groupcommitresolution_grou
 > sentry:0295_auto__add_environmentproject__add_unique_environmentproject_project_en
 > sentry:0296_populate_environment_organization_and_projects
 > sentry:0297_auto__add_field_project_flags
 > sentry:0298_backfill_project_has_releases
 > sentry:0299_auto__chg_field_environment_organization_id
 > sentry:0300_auto__add_processingissue__add_unique_processingissue_project_checksum
 > sentry:0301_auto__chg_field_environment_project_id__chg_field_releaseenvironment_p
 > sentry:0302_merge_environments
 > sentry:0303_fix_release_new_group_counts
 > sentry:0304_auto__add_deploy
 > sentry:0305_auto__chg_field_authidentity_data__chg_field_useroption_value__chg_fie
 > sentry:0306_auto__add_apigrant__add_apiauthorization__add_unique_apiauthorization_
 > sentry:0307_auto__add_field_apigrant_scope_list__add_field_apitoken_scope_list__ad
 > sentry:0308_auto__add_versiondsymfile__add_unique_versiondsymfile_dsym_file_versio
 > sentry:0308_backfill_scopes_list
 > sentry:0309_fix_application_state
 > sentry:0310_auto__add_field_savedsearch_owner
 > sentry:0311_auto__add_releaseheadcommit__add_unique_releaseheadcommit_repository_i
 > sentry:0312_create_missing_emails
 > sentry:0313_auto__add_field_commitauthor_external_id__add_unique_commitauthor_orga
 > sentry:0314_auto__add_distribution__add_unique_distribution_release_name__add_fiel
 > sentry:0315_auto__add_field_useroption_organization__add_unique_useroption_user_or
 > sentry:0316_auto__del_field_grouptagvalue_project__del_field_grouptagvalue_group__
 > sentry:0317_drop_grouptagvalue_constraints
 > sentry:0318_auto__add_field_deploy_notified
 > sentry:0319_auto__add_index_deploy_notified
 > sentry:0320_auto__add_index_eventtag_date_added
 > sentry:0321_auto__add_field_projectkey_rate_limit_count__add_field_projectkey_rate
 > sentry:0321_auto__add_unique_environment_organization_id_name
 > sentry:0322_merge_0321_migrations
 > sentry:0323_auto__add_unique_releaseenvironment_organization_id_release_id_environ
 > sentry:0324_auto__add_field_eventuser_name__add_field_userreport_event_user_id
 > sentry:0325_auto__add_scheduleddeletion__add_unique_scheduleddeletion_app_label_mo
 > sentry:0326_auto__add_field_groupsnooze_count__add_field_groupsnooze_window__add_f
 > sentry:0327_auto__add_field_release_commit_count__add_field_release_last_commit_id
 > sentry:0328_backfill_release_stats
 > sentry:0329_auto__del_dsymsymbol__del_unique_dsymsymbol_object_address__del_global
 > sentry:0330_auto__add_field_grouphash_state
 > sentry:0331_auto__del_index_releasecommit_project_id__del_index_releaseenvironment
 > sentry:0332_auto__add_featureadoption__add_unique_featureadoption_organization_fea
 > sentry:0333_auto__add_field_groupresolution_type__add_field_groupresolution_actor_
 > sentry:0334_auto__add_field_project_platform
 > sentry:0334_auto__add_scheduledjob
 > sentry:0335_auto__add_field_groupsnooze_actor_id
 > sentry:0336_auto__add_field_user_last_active
 > sentry:0337_fix_out_of_order_migrations
 > sentry:0338_fix_null_user_last_active
 > sentry:0339_backfill_first_project_feature
 > sentry:0340_auto__add_grouptombstone__add_field_grouphash_group_tombstone_id
 > sentry:0341_auto__add_organizationintegration__add_unique_organizationintegration_
 > sentry:0342_projectplatform
 > sentry:0343_auto__add_index_groupcommitresolution_commit_id
 > sentry:0344_add_index_ProjectPlatform_last_seen
 > sentry:0345_add_citext
 > sentry:0346_auto__del_field_tagkey_project__add_field_tagkey_project_id__del_uniqu
 > sentry:0347_auto__add_index_grouptagvalue_project_id__add_index_grouptagvalue_grou
 > sentry:0348_fix_project_key_rate_limit_window_unit
 > sentry:0349_drop_constraints_filterkey_filtervalue_grouptagkey
 > sentry:0350_auto__add_email
 > sentry:0351_backfillemail
 > sentry:0352_add_index_release_coalesce_date_released_date_added
 > sentry:0353_auto__del_field_eventuser_project__add_field_eventuser_project_id__del
 > sentry:0354_auto__chg_field_commitfilechange_filename
 > sentry:0355_auto__add_field_organizationintegration_config__add_field_organization
 > sentry:0356_auto__add_useridentity__add_unique_useridentity_user_identity__add_ide
 > sentry:0357_auto__add_projectteam__add_unique_projectteam_project_team
 > sentry:0358_auto__add_projectsymcachefile__add_unique_projectsymcachefile_project_
 > sentry:0359_auto__add_index_tagvalue_project_id_key_last_seen
 > sentry:0360_auto__add_groupshare
 > sentry:0361_auto__add_minidumpfile
 > sentry:0362_auto__add_userip__add_unique_userip_user_ip_address
 > sentry:0363_auto__add_grouplink__add_unique_grouplink_group_id_linked_type_linked_
 > sentry:0364_backfill_grouplink_from_groupcommitresolution
 > sentry:0365_auto__del_index_eventtag_project_id_key_id_value_id
 > sentry:0366_backfill_first_project_heroku
 > sentry:0367_auto__chg_field_release_ref__chg_field_release_version
 > sentry:0368_auto__add_deletedorganization__add_deletedteam__add_deletedproject
 > sentry:0369_remove_old_grouphash_last_processed_event_data
Cleaning obsolete data from <HostInfo db='0' host='redis' host_id=0 password='' port='6379' ssl=False ssl_options=None unix_socket_path=None>...
Done cleaning 0 obsolete entries from <HostInfo db='0' host='redis' host_id=0 password='' port='6379' ssl=False ssl_options=None unix_socket_path=None>.
 > sentry:0370_correct_groupsnooze_windows
 > sentry:0371_auto__add_servicehook
 > sentry:0371_auto__del_minidumpfile
 > sentry:0372_resolve_migration_conflict
 > sentry:0373_backfill_projectteam
 > sentry:0374_auto__del_useridentity__del_unique_useridentity_user_identity__del_ide
 > sentry:0375_auto__add_identityprovider__add_unique_identityprovider_type_organizat
 > sentry:0376_auto__add_userpermission__add_unique_userpermission_user_permission
 > sentry:0377_auto__add_pullrequest__add_unique_pullrequest_repository_id_key__add_i
 > sentry:0378_delete_outdated_projectteam
 > sentry:0379_auto__add_unique_projectteam_project
 > sentry:0380_auto__chg_field_servicehook_url
 > sentry:0381_auto__del_field_deletedproject_team_name__del_field_deletedproject_tea
 > sentry:0382_auto__add_groupenvironment__add_unique_groupenvironment_group_id_envir
 > sentry:0383_auto__chg_field_project_team
 > sentry:0384_auto__del_unique_projectteam_project
 > sentry:0385_auto__add_field_rule_environment_id
 > sentry:0386_auto__del_unique_project_team_slug
 > sentry:0387_auto__add_field_groupassignee_team__chg_field_groupassignee_user
 > sentry:0388_auto__add_field_environmentproject_is_hidden
 > sentry:0389_auto__add_field_groupenvironment_first_release_id__add_index_groupenvi
 > sentry:0390_auto__add_field_userreport_environment
 > sentry:0391_auto__add_fileblobowner__add_unique_fileblobowner_blob_organization__a
 > sentry:0392_auto__add_projectownership
 > sentry:0393_auto__add_assistantactivity__add_unique_assistantactivity_user_guide_i
 > sentry:0394_auto__chg_field_project_team
 > sentry:0395_auto__add_releaseprojectenvironment__add_unique_releaseprojectenvironm
 > sentry:0396_auto__del_field_project_team
 > sentry:0397_auto__add_latestrelease__add_unique_latestrelease_repository_id_enviro
 > sentry:0397_auto__add_unique_identity_idp_user
 > sentry:0398_auto__add_pullrequestcommit__add_unique_pullrequestcommit_pull_request
 > sentry:0399_auto__chg_field_user_last_login__add_unique_identity_idp_user
 > sentry:0400_auto__add_projectredirect__add_unique_projectredirect_organization_red
 > sentry:0401_auto__chg_field_projectdsymfile_uuid
 > sentry:0402_auto__add_field_organizationintegration_date_added__add_field_identity
 > sentry:0403_auto__add_teamavatar
 > sentry:0404_auto__del_unique_environment_project_id_name
 > sentry:0405_auto__add_field_user_flags
 > sentry:0406_auto__add_projectavatar
 > sentry:0407_auto__add_field_identityprovider_external_id__add_unique_identityprovi
 > sentry:0408_identity_provider_external_id
 > sentry:0409_auto__add_field_releaseprojectenvironment_last_deploy_id
 > sentry:0410_auto__del_unique_identityprovider_type_organization
 > sentry:0411_auto__add_field_projectkey_data
 > sentry:0412_auto__chg_field_file_name
 > sentry:0413_auto__add_externalissue__add_unique_externalissue_organization_id_inte
 > sentry:0414_backfill_release_project_environment_last_deploy_id
 > sentry:0415_auto__add_relay
 > sentry:0416_auto__del_field_identityprovider_organization__add_field_identityprovi
 > sentry:0417_migrate_identities
Deleting 0 idps with no external_id
0 idps left
0 identities
Deleting 0 bad ids
0 identities left
0 new IDPs and 0 new IDs
 > sentry:0418_delete_old_idps
 > sentry:0419_auto__add_unique_identityprovider_type_external_id
 > sentry:0420_auto__chg_field_identityprovider_organization_id
 > sentry:0421_auto__del_field_identityprovider_organization_id__del_unique_identityp
 > sentry:0422_auto__add_grouphashtombstone__add_unique_grouphashtombstone_project_ha
 > sentry:0423_auto__add_index_grouphashtombstone_deleted_at
 > sentry:0424_auto__add_field_integration_status
 > sentry:0425_auto__add_index_pullrequest_organization_id_merge_commit_sha
 > sentry:0425_remove_invalid_github_idps
 > sentry:0426_auto__add_sentryappinstallation__add_sentryapp__add_field_user_is_sent
 > sentry:0427_auto__add_eventattachment__add_unique_eventattachment_project_id_event
 > sentry:0428_auto__add_index_eventattachment_project_id_date_added
 > sentry:0429_auto__add_integrationexternalproject__add_unique_integrationexternalpr
 > sentry:0430_auto__add_field_organizationintegration_status
 > sentry:0431_auto__add_field_externalissue_metadata
 > sentry:0432_auto__add_field_relay_is_internal
 > sentry:0432_auto__add_index_userreport_date_added__add_index_eventattachment_date_
 > sentry:0433_auto__add_field_relay_is_internal__add_field_userip_country_code__add_
 > sentry:0434_auto__add_discoversavedqueryproject__add_unique_discoversavedqueryproj
 > sentry:0435_auto__add_field_discoversavedquery_created_by
 > sentry:0436_rename_projectdsymfile_to_projectdebugfile
 > sentry:0437_auto__add_field_sentryapp_status
 > sentry:0438_auto__add_index_sentryapp_status__chg_field_sentryapp_proxy_user__chg_
 > sentry:0439_auto__chg_field_sentryapp_owner
 > sentry:0440_auto__del_unique_projectdebugfile_project_debug_id__add_index_projectd
 > sentry:0441_auto__add_field_projectdebugfile_data
 > sentry:0442_auto__add_projectcficachefile__add_unique_projectcficachefile_project_
 > sentry:0443_auto__add_field_organizationmember_token_expires_at
 > sentry:0443_auto__del_dsymapp__del_unique_dsymapp_project_platform_app_id__del_ver
 > sentry:0444_auto__add_sentryappavatar__add_field_sentryapp_redirect_url__add_field
 > sentry:0445_auto__add_promptsactivity__add_unique_promptsactivity_user_feature_org
 > sentry:0446_auto__add_index_promptsactivity_project_id
 > sentry:0447_auto__del_field_promptsactivity_organization__add_field_promptsactivit
 > sentry:0448_auto__add_field_sentryapp_is_alertable
 > sentry:0449_auto__chg_field_release_owner
 > sentry:0450_auto__del_grouphashtombstone__del_unique_grouphashtombstone_project_ha
 > sentry:0451_auto__del_field_projectbookmark_project_id__add_field_projectbookmark_
 > sentry:0452_auto__add_field_sentryapp_events
 > sentry:0452_auto__del_field_releaseenvironment_organization_id__del_field_releasee
 > sentry:0453_auto__add_index_releasefile_release_name
 > sentry:0454_resolve_duplicate_0452
 > sentry:0455_auto__add_field_groupenvironment_first_seen
 > sentry:0456_auto__add_dashboard__add_unique_dashboard_organization_title__add_widg
 > sentry:0457_auto__add_field_savedsearch_is_global__chg_field_savedsearch_project__
 > sentry:0457_auto__add_monitorcheckin__add_monitor__add_index_monitor_type_next_che
 > sentry:0458_global_searches_data_migration
 > sentry:0459_global_searches_unique_constraint
 > sentry:0460_auto__add_field_servicehook_organization_id
 > sentry:0461_event_attachment_indexes
 > sentry:0462_auto__add_servicehookproject
 > sentry:0462_releaseenvironment_project_id
 > sentry:0463_backfill_service_hook_project
 > sentry:0464_auto__add_sentryappcomponent__add_field_sentryapp_schema
 > sentry:0464_groupenvironment_foreignkeys
 > sentry:0465_sync
 > sentry:0466_auto__add_platformexternalissue__add_unique_platformexternalissue_grou
 > sentry:0467_backfill_integration_status
 > sentry:0468_auto__add_field_projectdebugfile_code_id__add_index_projectdebugfile_p
 > sentry:0468_recent_search
 > sentry:0469_fix_state
 > sentry:0470_org_saved_search
 > sentry:0471_global_saved_search_types
 > sentry:0472_auto__add_field_sentryapp_author
Created internal Sentry project (slug=internal, id=1)

Would you like to create a user account now? [Y/n]: y
看到创建账号的提示,基本就快安装完成了,输入y,开始创建登录账号
Email: xxx
Password: 
Repeat for confirmation: 
User created: xxx@xxx.com
Added to organization: sentry
Running migrations for sentry.nodestore:
 - Migrating forwards to 0001_initial.
 > sentry.nodestore:0001_initial
Running migrations for sentry.search:
 - Migrating forwards to 0002_auto__del_searchtoken__del_unique_searchtoken_document_field_token__de.
 > sentry.search:0001_initial
 > sentry.search:0002_auto__del_searchtoken__del_unique_searchtoken_document_field_token__de
Running migrations for social_auth:
 - Migrating forwards to 0004_auto__del_unique_usersocialauth_provider_uid__add_unique_usersocialaut.
 > social_auth:0001_initial
 > social_auth:0002_auto__add_unique_nonce_timestamp_salt_server_url__add_unique_associati
 > social_auth:0003_auto__del_nonce__del_unique_nonce_server_url_timestamp_salt__del_assoc
 > social_auth:0004_auto__del_unique_usersocialauth_provider_uid__add_unique_usersocialaut
Running migrations for sentry.tagstore:
 - Migrating forwards to 0008_auto__chg_field_tagkey_environment_id.
 > sentry.tagstore:0001_initial
 > sentry.tagstore:0002_auto__del_tagkey__del_unique_tagkey_project_id_environment_id_key__del
 > sentry.tagstore:0003_auto__add_tagkey__add_unique_tagkey_project_id_environment_id_key__add
 > sentry.tagstore:0004_auto__del_tagkey__del_unique_tagkey_project_id_environment_id_key__del
 > sentry.tagstore:0005_auto__add_tagvalue__add_unique_tagvalue_project_id__key_value__add_ind
 > sentry.tagstore:0006_auto__del_unique_eventtag_event_id_key_value__add_unique_eventtag_proj
 > sentry.tagstore:0007_auto__chg_field_tagkey_environment_id__chg_field_tagkey_project_id__ch
 > sentry.tagstore:0008_auto__chg_field_tagkey_environment_id
Running migrations for sentry_plugins.hipchat_ac:
 - Migrating forwards to 0002_auto__del_mentionedevent.
 > sentry_plugins.hipchat_ac:0001_initial
 > sentry_plugins.hipchat_ac:0002_auto__del_mentionedevent
Running migrations for sentry_plugins.jira_ac:
 - Migrating forwards to 0001_initial.
 > sentry_plugins.jira_ac:0001_initial

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.messages
 > django.contrib.sessions
 > django.contrib.sites
 > django.contrib.staticfiles
 > crispy_forms
 > debug_toolbar
 > rest_framework
 > sentry.plugins.sentry_interface_types
 > sentry.plugins.sentry_mail
 > sentry.plugins.sentry_urls
 > sentry.plugins.sentry_useragents
 > sentry.plugins.sentry_webhooks
 > sudo
 > south

Migrated:
 - sentry
 - sentry.nodestore
 - sentry.search
 - social_auth
 - sentry.tagstore
 - sentry_plugins.hipchat_ac
 - sentry_plugins.jira_ac
Creating missing DSNs
Correcting Group.num_comments counter
Cleaning up...
Creating onpremise_smtp_1      ... done
----------------
You're all done! Run the following command get Sentry running:

  docker-compose up -d

Creating onpremise_memcached_1 ... done

Creating onpremise_postgres_1  ... done
Creating onpremise_memcached_1 ... 
Creating onpremise_redis_1     ... 
Creating onpremise_postgres_1  ... 
Creating onpremise_web_1       ... done
Creating onpremise_cron_1      ... done
Creating onpremise_worker_1    ... done
提示输入docker-compose up -d就可以启动服务了,执行docker ps就可以看到启动了那些服务
root@VM-10-184-centos ~/xxx/onpremise]# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
bf613799ffad        onpremise_worker       "/entrypoint.sh run …"   5 seconds ago       Up 4 seconds        9000/tcp                 onpremise_worker_1
92f3eb4d1a09        onpremise_web          "/entrypoint.sh run …"   5 seconds ago       Up 4 seconds        0.0.0.0:9000->9000/tcp   onpremise_web_1
9a29aa568322        onpremise_cron         "/entrypoint.sh run …"   5 seconds ago       Up 3 seconds        9000/tcp                 onpremise_cron_1
12c1c595af95        postgres:9.5           "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        5432/tcp                 onpremise_postgres_1
e68325d710b9        redis:3.2-alpine       "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        6379/tcp                 onpremise_redis_1
21aece470bcf        memcached:1.5-alpine   "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        11211/tcp                onpremise_memcached_1
117331d3c5d1        tianon/exim4           "docker-entrypoint.s…"   7 seconds ago       Up 5 seconds        25/tcp                   onpremise_smtp_1

3.访问Sentry

通过docker ps可以看到启动了一个web服务,占用端口号是9000,去浏览器访问Sentry,看到如下登录页面,就表明Sentry部署完成

在这里插入图片描述

vue项目配置Sentry

1.Sentry端配置

Sentry部署完成之后,需要创建一个项目,这个项目就是对应你的web项目,我的项目是vue写的,对应语言选择vue即可,旁边的team表示访问权限组

在这里插入图片描述

获取API Auth Tokens,这个token是将来vue项目上报程序异常信息到Sentry的通信凭证

在这里插入图片描述

2.vue项目端配置

上报错误信息的核心代码
import Vue from 'vue'
import * as Sentry from '@sentry/browser'
import { Vue as VueIntegration, } from '@sentry/integrations'
import { Integrations, } from '@sentry/tracing'
import store from '@/store'

Sentry.init({
   dsn: 'http://xxx@xxx.com/xxx',
   integrations: [
     new VueIntegration({
       Vue,
       attachProps: true,
     }),
     new Integrations.BrowserTracing(),
   ],
   // tracesSampleRate: 1.0,
   release: 'xxx@production',
   logErrors: true,
})
Sentry.setUser({ username: store.state.user.userNameEn, })
Sentry.setTag(store.state.user.userNameEn, store.state.user.userNameEn)
上面的代码就是当程序出现异常信息的时候,Sentry会自动捕获堆栈异常信息上报到Sentry服务端,这块代码一般放在vue项目入口文件main.js里面即可,当然我为了获取当前用户信息,我放在了axios.js里面,并且位于request方法里面。这段代码最重要的参数是dsn,dsn的获取方式如下

在这里插入图片描述
在这里插入图片描述

点进去里面就有详细的说明,另外需要安装3个依赖,分别是@sentry/browser、@sentry/integrations、@sentry/tracing,到目前为止,vue项目sentry配置已经完成,可以收集错误信息了,在sentry web端也能看到详细错误信息,但是vue项目经过打包之后,代码是经过压缩的,根据错误信息你是无法定位到源代码究竟是哪一行有问题,因此还需要上传sourcemap文件,就是将vue项目构建之后的源代码上传到sentry服务端,继续往下看

3.上传sourcemap

全局安装sentry-cli,安装命令
curl -sL https://sentry.io/get-cli/ | bash 或者 npm install sentry-cli-binary -g

详细安装方法请参考: https://www.npmjs.com/package/sentry-cli-binary

安装完成之后,执行命令:sentry-cli login,根据提示输入sentry项目token,然后就会在项目根目录下面创建一个.sentryclirc文件,里面包含了sentry项目的基本信息,用于之后上传sourcemap文件的依赖

在这里插入图片描述

上传sourcemap
$ sentry-cli releases files xxx@dev upload-sourcemaps --url-prefix '~/js' './dist/js'
> Analyzing 34 sources
> ~/js/chunk-51a1e063.b5f85bd4.js.map
> ~/js/chunk-1254e0a0.d841144d.js
> ~/js/chunk-1254e0a0.d841144d.js
> ~/js/chunk-2a3a80a4.0384e251.js.map                                                                                                                                               ░
> ~/js/chunk-2a3a80a4.0384e251.js.map                                                                                                                                               ░
> ~/js/chunk-2c359864.6561e4ae.js.map                                                                                                                                               ░
> ~/js/chunk-2c359864.6561e4ae.js.map                                                                                                                                               ░
> ~/js/chunk-42b9b872.e95ea7f3.js.map                                                                                                                                               ░
> ~/js/chunk-42b9b872.e95ea7f3.js.map                                                                                                                                               ░
> ~/js/chunk-2a3a80a4.0384e251.js                                                                                                                                                   ░
> ~/js/chunk-2a3a80a4.0384e251.js                                                                                                                                                   ░
> ~/js/chunk-2c359864.6561e4ae.js                                                                                                                                                   ░
> ~/js/chunk-2c359864.6561e4ae.js                                                                                                                                                   ░
> ~/js/chunk-14b9857b.fa32a50c.js.map                                                                                                                                               ░
> ~/js/chunk-14b9857b.fa32a50c.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js                                                                                                                                                   ░
> ~/js/chunk-3c9adc1c.d827976a.js                                                                                                                                                   ░
> ~/js/chunk-51a1e063.b5f85bd4.js                                                                                                                                                   ░
> ~/js/chunk-51a1e063.b5f85bd4.js                                                                                                                                                   ░
> ~/js/chunk-29d122d0.8afe704b.js                                                                                                                                                   ░
> ~/js/chunk-29d122d0.8afe704b.js                                                                                                                                                   ░
> ~/js/chunk-vendors.409bfdb6.js                                                                                                                                                    ░
> ~/js/chunk-vendors.409bfdb6.js                                                                                                                                                    ░
> ~/js/chunk-3c9adc1c.d827976a.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js.map                                                                                                                                               ░
> ~/js/chunk-3e47f800.99feac56.js                                                                                                                                                   ░
> ~/js/chunk-3e47f800.99feac56.js                                                                                                                                                   ░
> ~/js/chunk-067e2c8d.fe99d6bd.js                                                                                                                                                   ░
> ~/js/chunk-067e2c8d.fe99d6bd.js                                                                                                                                                   ░
> ~/js/chunk-2d2299c8.b28acaa5.js                                                                                                                                                   ░
> ~/js/chunk-2d2299c8.b28acaa5.js                                                                                                                                                   ░
> ~/js/chunk-14b9857b.fa32a50c.js                                                                                                                                                   ░
> ~/js/chunk-14b9857b.fa32a50c.js                                                                                                                                                   ░
> ~/js/chunk-6155cb0c.be8f1540.js                                                                                                                                                   ░
> ~/js/chunk-6155cb0c.be8f1540.js                                                                                                                                                   ░
> ~/js/chunk-46a0be4a.b8b122c9.js.map
> ~/js/chunk-46a0be4a.b8b122c9.js.map
> ~/js/chunk-46a0be4a.b8b122c9.js
> ~/js/chunk-46a0be4a.b8b122c9.js
> ~/js/chunk-796a636a.2411c79c.js.map
> ~/js/chunk-796a636a.2411c79c.js.map
> ~/js/app.907de196.js.map
> ~/js/app.907de196.js.map
> ~/js/chunk-vendors.409bfdb6.js.map
> ~/js/chunk-vendors.409bfdb6.js.map
> ~/js/chunk-2d2299c8.b28acaa5.js.map
> ~/js/chunk-2d2299c8.b28acaa5.js.map
> ~/js/chunk-6155cb0c.be8f1540.js.map
> ~/js/chunk-6155cb0c.be8f1540.js.map
> ~/js/chunk-796a636a.2411c79c.js
> ~/js/chunk-796a636a.2411c79c.js
> ~/js/chunk-9be644b0.a409f845.js
> ~/js/chunk-9be644b0.a409f845.js
> ~/js/app.907de196.js
> ~/js/app.907de196.js
> ~/js/chunk-1254e0a0.d841144d.js.map
> ~/js/chunk-1254e0a0.d841144d.js.map
> ~/js/chunk-42b9b872.e95ea7f3.js
> ~/js/chunk-42b9b872.e95ea7f3.js
> ~/js/chunk-9be644b0.a409f845.js.map
> ~/js/chunk-9be644b0.a409f845.js.map
> ~/js/chunk-067e2c8d.fe99d6bd.js.map
> ~/js/chunk-067e2c8d.fe99d6bd.js.map
> ~/js/chunk-29d122d0.8afe704b.js.map
> ~/js/chunk-29d122d0.8afe704b.js.map
> ~/js/chunk-3e47f800.99feac56.js.map
> ~/js/chunk-3e47f800.99feac56.js.map
> Adding source map references
> Uploading source maps for release xxx@dev
> ~/js/chunk-2a3a80a4.0384e251.js
> ~/js/chunk-2a3a80a4.0384e251.js
> ~/js/chunk-067e2c8d.fe99d6bd.js
> ~/js/chunk-067e2c8d.fe99d6bd.js
> ~/js/chunk-067e2c8d.fe99d6bd.js                                                                                                                                                   ░
> ~/js/chunk-9be644b0.a409f845.js                                                                                                                                                   ░
> ~/js/chunk-9be644b0.a409f845.js                                                                                                                                                   ░
> ~/js/chunk-9be644b0.a409f845.js                                                                                                                                                   ░
> ~/js/app.907de196.js                                                                                                                                                              ░
> ~/js/app.907de196.js                                                                                                                                                              ░
> ~/js/app.907de196.js                                                                                                                                                              ░
> ~/js/chunk-14b9857b.fa32a50c.js                                                                                                                                                   ░
> ~/js/chunk-14b9857b.fa32a50c.js                                                                                                                                                   ░
> ~/js/chunk-14b9857b.fa32a50c.js                                                                                                                                                   ░
> ~/js/chunk-46a0be4a.b8b122c9.js.map                                                                                                                                               ░
> ~/js/chunk-46a0be4a.b8b122c9.js.map                                                                                                                                               ░
> ~/js/chunk-46a0be4a.b8b122c9.js.map                                                                                                                                               ░
> ~/js/chunk-2a3a80a4.0384e251.js.map                                                                                                                                               ░
> ~/js/chunk-2a3a80a4.0384e251.js.map                                                                                                                                               ░
> ~/js/chunk-2a3a80a4.0384e251.js.map                                                                                                                                               ░
> ~/js/chunk-2c359864.6561e4ae.js.map                                                                                                                                               ░
> ~/js/chunk-2c359864.6561e4ae.js.map                                                                                                                                               ░
> ~/js/chunk-2c359864.6561e4ae.js.map                                                                                                                                               ░
> ~/js/chunk-6155cb0c.be8f1540.js.map                                                                                                                                               ░
> ~/js/chunk-6155cb0c.be8f1540.js.map                                                                                                                                               ░
> ~/js/chunk-6155cb0c.be8f1540.js.map                                                                                                                                               ░
> ~/js/app.907de196.js.map                                                                                                                                                          ░
> ~/js/app.907de196.js.map                                                                                                                                                          ░
> ~/js/app.907de196.js.map                                                                                                                                                          ░
> ~/js/chunk-vendors.409bfdb6.js.map                                                                                                                                                ░
███████████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 10/34
██████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
████████████████████████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
█████████████████████████████████████████████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░
████████████████████████████████████████████████████████████████████████████████████░░░░░░░░░░░░░
██████████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████████████████████████████████
> ~/js/chunk-vendors.409bfdb6.js.map
> ~/js/chunk-vendors.409bfdb6.js.map                                                                                                                                                ░
> ~/js/chunk-14b9857b.fa32a50c.js.map                                                                                                                                               ░
> ~/js/chunk-14b9857b.fa32a50c.js.map                                                                                                                                               ░
> ~/js/chunk-14b9857b.fa32a50c.js.map                                                                                                                                               ░
> ~/js/chunk-29d122d0.8afe704b.js                                                                                                                                                   ░
> ~/js/chunk-29d122d0.8afe704b.js                                                                                                                                                   ░
> ~/js/chunk-29d122d0.8afe704b.js                                                                                                                                                   ░
> ~/js/chunk-51a1e063.b5f85bd4.js.map                                                                                                                                               ░
> ~/js/chunk-51a1e063.b5f85bd4.js.map                                                                                                                                               ░
> ~/js/chunk-51a1e063.b5f85bd4.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js.map                                                                                                                                               ░
> ~/js/chunk-3c9adc1c.d827976a.js                                                                                                                                                   ░
> ~/js/chunk-3c9adc1c.d827976a.js                                                                                                                                                   ░
> ~/js/chunk-3c9adc1c.d827976a.js                                                                                                                                                   ░
> ~/js/chunk-2d2299c8.b28acaa5.js.map                                                                                                                                               ░
> ~/js/chunk-2d2299c8.b28acaa5.js.map                                                                                                                                               ░
> ~/js/chunk-2d2299c8.b28acaa5.js.map                                                                                                                                               ░
> ~/js/chunk-3e47f800.99feac56.js                                                                                                                                                   ░
> ~/js/chunk-3e47f800.99feac56.js                                                                                                                                                   ░
> ~/js/chunk-3e47f800.99feac56.js
> ~/js/chunk-vendors.409bfdb6.js
> ~/js/chunk-vendors.409bfdb6.js
> ~/js/chunk-vendors.409bfdb6.js
> ~/js/chunk-067e2c8d.fe99d6bd.js.map
> ~/js/chunk-067e2c8d.fe99d6bd.js.map
> ~/js/chunk-067e2c8d.fe99d6bd.js.map
> ~/js/chunk-1254e0a0.d841144d.js
> ~/js/chunk-1254e0a0.d841144d.js
> ~/js/chunk-1254e0a0.d841144d.js
> ~/js/chunk-46a0be4a.b8b122c9.js
> ~/js/chunk-46a0be4a.b8b122c9.js
> ~/js/chunk-46a0be4a.b8b122c9.js
> ~/js/chunk-6155cb0c.be8f1540.js
> ~/js/chunk-6155cb0c.be8f1540.js
> ~/js/chunk-6155cb0c.be8f1540.js
> ~/js/chunk-2c359864.6561e4ae.js
> ~/js/chunk-2c359864.6561e4ae.js
> ~/js/chunk-2c359864.6561e4ae.js
> ~/js/chunk-1254e0a0.d841144d.js.map
> ~/js/chunk-1254e0a0.d841144d.js.map
> ~/js/chunk-1254e0a0.d841144d.js.map
> ~/js/chunk-51a1e063.b5f85bd4.js
> ~/js/chunk-51a1e063.b5f85bd4.js
> ~/js/chunk-51a1e063.b5f85bd4.js
> ~/js/chunk-42b9b872.e95ea7f3.js.map
> ~/js/chunk-42b9b872.e95ea7f3.js.map
> ~/js/chunk-42b9b872.e95ea7f3.js.map
> ~/js/chunk-2d2299c8.b28acaa5.js
> ~/js/chunk-2d2299c8.b28acaa5.js
> ~/js/chunk-2d2299c8.b28acaa5.js
> ~/js/chunk-42b9b872.e95ea7f3.js
> ~/js/chunk-42b9b872.e95ea7f3.js
> ~/js/chunk-42b9b872.e95ea7f3.js
> ~/js/chunk-3e47f800.99feac56.js.map
> ~/js/chunk-3e47f800.99feac56.js.map
> ~/js/chunk-3e47f800.99feac56.js.map
> ~/js/chunk-29d122d0.8afe704b.js.map
> ~/js/chunk-29d122d0.8afe704b.js.map
> ~/js/chunk-29d122d0.8afe704b.js.map
> ~/js/chunk-796a636a.2411c79c.js
> ~/js/chunk-796a636a.2411c79c.js
> ~/js/chunk-796a636a.2411c79c.js
> ~/js/chunk-796a636a.2411c79c.js.map
> ~/js/chunk-796a636a.2411c79c.js.map
> ~/js/chunk-796a636a.2411c79c.js.map
> ~/js/chunk-9be644b0.a409f845.js.map
██████████████████████████████████████████████████████████████████████████████████████████
> ~/js/chunk-9be644b0.a409f845.js.map

Source Map Upload Report
  Minified Scripts
    ~/js/app.907de196.js (sourcemap at app.907de196.js.map)
    ~/js/chunk-067e2c8d.fe99d6bd.js (sourcemap at chunk-067e2c8d.fe99d6bd.js.map)
    ~/js/chunk-1254e0a0.d841144d.js (sourcemap at chunk-1254e0a0.d841144d.js.map)
    ~/js/chunk-14b9857b.fa32a50c.js (sourcemap at chunk-14b9857b.fa32a50c.js.map)
    ~/js/chunk-29d122d0.8afe704b.js (sourcemap at chunk-29d122d0.8afe704b.js.map)
    ~/js/chunk-2a3a80a4.0384e251.js (sourcemap at chunk-2a3a80a4.0384e251.js.map)
    ~/js/chunk-2c359864.6561e4ae.js (sourcemap at chunk-2c359864.6561e4ae.js.map)
    ~/js/chunk-2d2299c8.b28acaa5.js (sourcemap at chunk-2d2299c8.b28acaa5.js.map)
    ~/js/chunk-3c9adc1c.d827976a.js (sourcemap at chunk-3c9adc1c.d827976a.js.map)
    ~/js/chunk-3e47f800.99feac56.js (sourcemap at chunk-3e47f800.99feac56.js.map)
    ~/js/chunk-42b9b872.e95ea7f3.js (sourcemap at chunk-42b9b872.e95ea7f3.js.map)
    ~/js/chunk-46a0be4a.b8b122c9.js (sourcemap at chunk-46a0be4a.b8b122c9.js.map)
    ~/js/chunk-51a1e063.b5f85bd4.js (sourcemap at chunk-51a1e063.b5f85bd4.js.map)
    ~/js/chunk-6155cb0c.be8f1540.js (sourcemap at chunk-6155cb0c.be8f1540.js.map)
    ~/js/chunk-796a636a.2411c79c.js (sourcemap at chunk-796a636a.2411c79c.js.map)
    ~/js/chunk-9be644b0.a409f845.js (sourcemap at chunk-9be644b0.a409f845.js.map)
    ~/js/chunk-vendors.409bfdb6.js (sourcemap at chunk-vendors.409bfdb6.js.map)
  Source Maps
    ~/js/app.907de196.js.map
    ~/js/chunk-067e2c8d.fe99d6bd.js.map
    ~/js/chunk-1254e0a0.d841144d.js.map
    ~/js/chunk-14b9857b.fa32a50c.js.map
    ~/js/chunk-29d122d0.8afe704b.js.map
    ~/js/chunk-2a3a80a4.0384e251.js.map
    ~/js/chunk-2c359864.6561e4ae.js.map
    ~/js/chunk-2d2299c8.b28acaa5.js.map
    ~/js/chunk-3c9adc1c.d827976a.js.map
    ~/js/chunk-3e47f800.99feac56.js.map
    ~/js/chunk-42b9b872.e95ea7f3.js.map
    ~/js/chunk-46a0be4a.b8b122c9.js.map
    ~/js/chunk-51a1e063.b5f85bd4.js.map
    ~/js/chunk-6155cb0c.be8f1540.js.map
    ~/js/chunk-796a636a.2411c79c.js.map
    ~/js/chunk-9be644b0.a409f845.js.map
    ~/js/chunk-vendors.409bfdb6.js.map

看到上面的输出,表明sourcemap已经成功上传到Sentry服务端了,去Sentry web看一下

在这里插入图片描述

4.配置@sentry/webpack-plugin插件构建完成自动上传sourcemap

上面上传sourcemap文件,是在构建完成,执行 sentry-cli releases files xxx@dev upload-sourcemaps --url-prefix '~/js' './dist/js' 手动上传的,配置了@sentry/webpack-plugin插件就可以在构建之后自动上传了,打开vue.config.js文件,在plugins里面加入如下代码
 new SentryWebpackPlugin({
	release: 'ams-exp-web-pc@dev', // 版本号
	include: path.join(__dirname, './dist/js/'), // 需要上传到sentry服务器的资源目录,会自动匹配js以及map文件
	ignore: [ 'node_modules', 'vue.config.js', ], // 忽略文件目录,当然我们在inlcude中制定了文件路径,这个忽略目录可以不加
	configFile: '.sentryclirc',
	urlPrefix: '~/js', //  线上对应的url资源的相对路径,比如我的域名是 http://xxx.com/,静态资源都在js文件夹里面,
}),
上面是在windows平台上可以通过安装插件实现自动上传sourcemap,不过在linux平台上貌似不行,始终报下面这个错误
0 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'build' ]
1 info using npm@7.0.8
2 info using node@v15.2.1
3 timing config:load:defaults Completed in 1ms
4 timing config:load:file:/usr/local/lib/node_modules/npm/npmrc Completed in 0ms
5 timing config:load:builtin Completed in 0ms
6 timing config:load:cli Completed in 2ms
7 timing config:load:env Completed in 0ms
8 timing config:load:file:/root/exp_server/static/pc/.npmrc Completed in 0ms
9 timing config:load:project Completed in 0ms
10 timing config:load:file:/root/.npmrc Completed in 1ms
11 timing config:load:user Completed in 1ms
12 timing config:load:file:/usr/local/etc/npmrc Completed in 0ms
13 timing config:load:global Completed in 0ms
14 timing config:load:cafile Completed in 0ms
15 timing config:load:validate Completed in 0ms
16 timing config:load:setUserAgent Completed in 0ms
17 timing config:load:setEnvs Completed in 1ms
18 timing config:load Completed in 5ms
19 verbose npm-session b232f57e1b0751b1
20 timing npm:load Completed in 11ms
21 timing command:run-script Completed in 15150ms
22 verbose stack Error: command failed
22 verbose stack at ChildProcess. (/usr/local/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27)
22 verbose stack at ChildProcess.emit (node:events:329:20)
22 verbose stack at maybeClose (node:internal/child_process:1055:16)
22 verbose stack at Process.ChildProcess._handle.onexit (node:internal/child_process:288:5)
23 verbose pkgid ams-exp-web-pc@2.0.0
24 verbose cwd /root/exp_server/static/pc
25 verbose Linux 3.10.107-1-tlinux2_kvm_guest-0049
26 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "build"
27 verbose node v15.2.1
28 verbose npm v7.0.8
29 error code 1
30 error path /root/exp_server/static/pc
31 error command failed
32 error command sh -c vue-cli-service build
33 verbose exit 1
小编也不知道这个错误如何解决,找遍了google也没发现解决办法,所以在linux平台上只能在构建完成之后,通过执行 sentry-cli releases files xxx@dev upload-sourcemaps --url-prefix '~/js' './dist/js' 来上传,不过可以写一个脚本,把构建和上传一起办了,也是一个解决办法。下面截一个图来看看上报到Sentry上的错误信息

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Sentry和Ranger是CDH中常用的细粒度授权管理工具,下面分别介绍它们的使用方法: 1. Sentry使用 (1)安装和配置Sentry 首先需要在CDH集群中安装和配置Sentry服务。具体安装和配置步骤可以参考CDH文档中的说明。 (2)创建角色和授权 可以使用Sentry提供的命令行工具或Web界面来创建角色和授权。例如,以下命令可以创建一个名为“finance_analyst”的角色,并将其授权访问表“my_table”: ``` $ sentry --command create-role --role finance_analyst $ sentry --command grant --role finance_analyst --privilege "server=server1->db=my_database->table=my_table->action=select" ``` (3)验证授权 创建角色和授权之后,可以使用授权用户的身份来验证授权是否生效。例如,可以使用以下命令来验证用户“user1”是否可以访问表“my_table”: ``` $ beeline -u jdbc:hive2://localhost:10000 -n user1 -e "select * from my_table" ``` 2. Ranger的使用 (1)安装和配置Ranger 首先需要在CDH集群中安装和配置Ranger服务。具体安装和配置步骤可以参考CDH文档中的说明。 (2)创建策略和条件 可以使用Ranger提供的Web界面来创建策略和条件。例如,可以创建一个策略,仅允许特定用户访问表“my_table”。在创建策略时,可以指定访问条件,例如“user=user1”。 (3)验证授权 创建策略之后,可以使用授权用户的身份来验证授权是否生效。例如,可以使用以下命令来验证用户“user1”是否可以访问表“my_table”: ``` $ beeline -u jdbc:hive2://localhost:10000 -n user1 -e "select * from my_table" ``` 综上所述,Sentry和Ranger的使用方法都比较简单,可以根据实际需求选择合适的工具来管理Hive数据表的访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值