Развертывание и использование Sentry для внешнего мониторинга исключений

внешний интерфейс Docker Эксплуатация и техническое обслуживание

Поскольку я недавно разбирал контент, связанный с внешним аномальным мониторингом, я собрал и развернул Sentry на виртуальной машине, а также разобрал процесс сборки и некоторые ямы, на которые я наступил, следующим образом.

1. Развертывание караула

Есть два способа построить Sentry:

Я построил его локально с помощью Docker.

1. Установите докер

yum install docker -y

// 查看版本信息
docker info
或者
docker -v

2. Установите wget

// 在linux中使用wget时,若报-bash: wget: command not found,则表明没有安装wget,需要安装,安装命令如下:-->

yum -y install wget

3. Установите пип

# 如果使用 wget下载https开头的网址域名 时报错,你需要加上 --no-check-certificate (不检查证书)选项
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate  # 下载文件

python get-pip.py #执行安装

pip -V #查看pip版本

4. Установите докер-компоновку

sudo pip install docker-compose # 安装 docker-compose

docker-compose -v #查看docker-compose 版本

5. Установите git

Установить адрес учебника git

6. Постройте собственного часового

1) Сначала загрузите файл конфигурации докера sentry с github.

Обновление: Sentry обновлен.Содержимое справочного файла readme следующее.Официальный сайт имеет преимущественную силу.

sentry更新

------------------Ниже приведены шаги перед обновлением-------------------

git clone https://github.com/getsentry/onpremise.git

cd onpremise

#根据onpremise目录中的README.md 内容来操作:

cat README.md 

---------
1. `mkdir -p data/{sentry,postgres}` - Make our local database and sentry config directories.
    This directory is bind-mounted with postgres so you don't lose state!
2. `docker-compose build` - Build and tag the Docker services
3. `docker-compose run --rm web config generate-secret-key` - Generate a secret key.
    Add it to `docker-compose.yml` in `base` as `SENTRY_SECRET_KEY`.
4. `docker-compose run --rm web upgrade` - Build the database.
    Use the interactive prompts to create a user account.
5. `docker-compose up -d` - Lift all services (detached/background mode).
6. Access your instance at `localhost:9000`!
----------

2) Создайте каталог в локальной среде под клоном

mkdir -p data/{sentry,postgres}

docker-compose build # 一定执行,不然报错,然后再生成key

3) Получить ключ проекта

Этот процесс очень долгий, он может застрять на середине, или могут быть какие-то ошибки, просто выполните его еще несколько раз.

docker-compose run --rm web config generate-secret-key

生成的密匙类似这样:41dvtnqzc#g(*s8ichpp8r@gqzu(p4h(+l6qi(d9+f9ue2u+j9

4) Отредактируйте docker-compose.yml и скопируйте полученный ключ в SENTRY_SECRET_KEY

vim docker-compose.yml

5) Создайте суперпользователя проекта

В процессе нам будет предложено ввести адрес электронной почты и пароль.

docker-compose run --rm web upgrade

6) Запускаем сторожевую службу

docker-compose up -d

7) В это время введите свой http://ip:9000, чтобы войти в ваш часовой

Используйте имя пользователя и пароль из шага 5) для входа

Sentry

После входа выполните простую настройку, а затем нажмите в правом верхнем углуNew ProjectСоздайте, выберите нужный тип проекта и настройте согласно подсказкам

New Project

选择项目类型

根据提示配置

7. Меры предосторожности при строительстве:

  • 1) при выполненииdocker-compose run --rm web upgradeсообщил об ошибке.
    注意1
忘记执行 docker-compose build
  • 2) Выполнитьdocker-compose up -dошибка, закрытьdockerОткройте снова.

注意2

关闭docker: systemctl stop docker
启动docker: systemctl start docker
  • 3) Выполнитьdocker-compose run --rm web upgradeЕсли вы забыли задать имя пользователя или указали его неправильно, и не можете войти в систему после развертывания, переустановите базу данных.
删除 /var/lib/docker/volumes 下的 onpremise_sentry-postgres 文件夹。
重新执行命令 docker-compose run --rm web upgrade

注意3

  • 4) сdocker composerзапускатьdockerКластер сообщает об ошибке:
# ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

应该是docker后台服务没有开启

执行:systemctl start docker
  • 5)dockerНекоторые часто используемые операции
#查看所有容器: 
docker ps -a

#查看运行容器:
docker ps

#停用所有容器:
docker stop $(docker ps -q)

#删除所有容器:
docker rm $(docker ps -aq)

#停用和删除所有容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)

2. Использование часового

1. Установите инструмент управления командной строки sentry-cli, соответствующий Sentry.

npm i -g @sentry/cli

sentry-cli -V // 检查版本

2. Сгенерировать токен

Нажмите на левый нижний угол аватара, выберите API, сгенерируйте токен и проверьте проект: разрешение на запись.

3. Войти

$ sentry-cli --url https://myserver/ login

# 回车后输入上一步获得的 token 即可

4. Отпустите контроль

1) Создать релиз

sentry-cli releases -o 组织 -p 项目 new staging@1.0.1

# 这里的 staging@1.0.1 就是我们指定的版本号. 
# -o -p可以通过页面左上角可以看到。现在我们可以通过创建多个版本号来进行异常分类。 同时,也可以通过页面中"Releases"查看是否创建成功

2) Локальный выпуск приложения

# 安装raven-js
npm install raven-js --save

# 回到前端项目中,在config添加对应的release,指定版本后,每次上报的异常就会分类到该版本下。

import Raven from 'raven-js';

Raven.config(DSN, {
release: 'staging@1.0.1'
}).install()

3) удалить релиз

sentry-cli releases -o 组织 -p 项目 delete staging@1.0.1

# 注意 删除某个release时需要将其下的异常处理掉,并将该版本的sourcemap文件清空
# 完成上面两步可能还要等待2小时才能删除,不然会报错:该版本还有其它依赖。

5. Управление исходной картой

В настоящее время фронтенд-проекты в основном сжимают запутанный код, что делает непонятным стек исключений, перехваченный Sentry.

Мы надеемся, что когда Sentry напрямую увидит исходный код аномального кода, необходимо будет загрузить соответствующий источник и карту.

1) Загрузить исходную карту

sentry-cli releases -o 组织 -p 项目 files staging@1.0.1 upload-sourcemaps js文件所在目录 --url-prefix 线上资源URI

PS: Не забудьте не передавать файл карты в производство, он большой и небезопасный...

PS: ограничение на размер файла для бесплатного сервиса составляет 40 МБ.

2) Очистить файл SourceMap

sentry-cli releases files staging@1.0.1 delete --all

Вы также можете выбрать удаление по одному в разделе «Версия» > «Артефакты». . . .

3) Объедините конфигурацию веб-пакета в проекте для загрузки исходной карты

# 安装webpack-sentry-plugin
npm i -D webpack-sentry-plugin
var SentryPlugin = require('webpack-sentry-plugin');

plugins: [
    //...
    new SentryPlugin({
        // Sentry options are required
        baseSentryURL: 'https://sentry.mycorp.com/api/0', # 如果是内网使用需要加
        organization: 'sentry',
        project: 'react',
        apiKey: process.env.SENTRY_API_KEY,
    
        // Release version name/hash is required
        release: process.env.GIT_SHA,
        deleteAfterCompile: true,
        suppressErrors: true,
        filenameTransform: function (filename) {
            return 'http://xxx.com/' + filename
        }
    })
]

использованная литература:

  1. Расширение внешнего интерфейса Sentry (ассоциация исходной карты, ассоциация проблем, контроль выпуска)
  2. Установите и настройте Sentry на Centos 7.0 с помощью Docker.
  3. Практика использования часовых
  4. webpack-sentry-plugin
  5. Sentry поддерживает рекомендации SourceMap