предисловие
Фронтенд-мониторинг всегда был важной частью разработки и производства.Поскольку первоначальный механизм мониторинга проекта в группе не может использоваться повсеместно, а новый проект еще не имеет идеального фронт-энд-мониторинга, я подумал о том, чтобы исследовать и построить осуществимый фронт-энд. -конечное решение для мониторинга самостоятельно. Итак, есть эта статья, небольшие компании экономят расходы, и план мониторинга зарядки не рассматривается, и принимается самый популярный часовой в бесплатном плане ~😄
Рекомендуется читать эту статью вместе со следующей статьей.В этой статье сначала рассматриваются основные технологии решения для внешнего мониторинга, а следующая — подробные сведения об использовании и практические примеры решения для мониторинга~
Мониторинг интерфейса Sentry расширенные статьи - Практика мониторинга проекта Next.js
[Примечание️]: Если вы успешно собрали Sentry локально (сервер), пожалуйста, нажмите кнопку закрытия в верхнем левом углу (верхний правый угол), эта статья будет пустой тратой вашего времени~
Docker
О знаниях, связанных с Docker, я ничего не могу вам сказать, пока пишу и изучаю.Если вы хотите узнать больше, вы можете перейти в сообщество, чтобы прочитать больше статей ~ Я порекомендую несколько статей в конце, поэтому я просто записываю собственный процесс использования здесь. , потому что среда Docker необходима для сборки Sentry, а Docker сейчас очень популярен во внешнем интерфейсе ~
Шаг 1: Установите Докер
Я следовал инструкциям на официальном веб-сайте, зарегистрировал учетную запись и шел шаг за шагом.Официальный предоставляет очень удобное вводное руководство, поэтому я не буду много говорить здесь, пока вы, наконец, следуете официальным рекомендациям и выполняете шаги. показано ниже, это означает, что Наш уровень был таким же, неважно, знаете ли вы почему, я все равно бегу (маленькая голова поднята, хм~😄):
Шаг 2. Разверните приложение Node.js с помощью Docker.
Возвращаясь к сути, изучение Docker — это мониторинг Sentry, а контент для мониторинга — фронтенд-приложение, в качестве примера я беру проект Next.js, так что по сути это Node.js-приложение.
На самом деле, это может быть любой тип приложения.
Dockerfile
Ядром приложения развертывания Docker является файл Dockerfile, в основном все элементы конфигурации записываются здесь, и соответствующие команды развертывания Docker найдут файл для выполнения соответствующей команды. Здесь я используюnext-antd-scaffoldСоздание шаблонов для демонстрации локального развертывания приложений Node.js в Docker.
# Dockerfile
FROM node:8.14 As builder # 基础依赖
LABEL maintainer="luffyZh" # Label - 项目维护者
COPY . . # 本机根目录所有文件拷贝到容器的根目录下 这个可以根据喜好调节路径
RUN yarn install # 安装依赖
CMD yarn start # 在容器环境运行的命令
построить образ
# 构建镜像的命令
docker build -t [imageName]:[imageVersion] . // 注意,必须带着最后的 .(表示当前工程目录)
Процесс сборки показан на картинке выше, эмм, не волнуйтесь, красная часть - это предупреждение в скаффолдинге, это не ошибка, я сделал прыжок в первой сборке, надеюсь, докер может изменить цвет предупреждение 😄. Наконец успешно указывает, что сборка прошла успешно. использоватьdocker imagesДавайте посмотрим на список локальных зеркал:
Как видите, изображение, которое вы только что построили, появится в списке.
работать локально
# 运行命令
docker run -it -p 8080:3006 luffyzh/next-antd-scaffold:v1
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口,这里将容器的3006端口与宿主机的8080端口映射
-it: -i -t 的合并命令
-d: -it 在 ctrl + c 的时候退出控制台容器也就关闭了,程序也就关闭了,如果想要后台运行,将 -it 换成 -d 命令
Вывод программы показан на картинке, но помните! ! ! Адрес, который мы хотим посетить,http://localhost:8080вместоhttp://localhost:3006, поскольку мы выполнили сопоставление портов, вывод консоли — это вывод псевдотерминала, запущенного в контейнере докеров, а запуск программы показан на следующем рисунке:
Вышеупомянутое является средой разработки.Обычно мы должны быть развернуты в производственной среде.Тогда возникает проблема,среда разработкиyarn install + yarn startПроект запущен, производственная средаyarn install + yarn build + yarn prod. Наша команда запуска — CMD, а как насчет двух предыдущих команд? хорошо, иди проверьДокументация
Обнаружено, что исходную команду RUN можно использовать непрерывно для многократного выполнения сверху вниз, а затем изменить Dockerfile.
# Dockerfile
FROM node:8.14 As builder
LABEL maintainer="luffyZh"
COPY . .
RUN yarn install
RUN yarn build
CMD yarn prod
Небольшое исследование по смежным вопросам
Для трех изображений выше я выполнил три из них соответственно.docker runЗаказ:
# 第一个,不带端口号
结果:容器内成功启动项目,但是本地浏览器无法访问,5999或者其他端口都不行,
也就是说需要设置 -p [宿主端口]:[容器端口] 的映射
# 第二个,映射容器错误的端口
结果:容器内成功启动项目在5999端口,而映射的是5888端口到本地8080,
访问本地8080并没有服务启动
# 第三个,正确映射
结果:容器内成功启动5999 -> 本地8080,启动后程序正常运行。
то есть это-pКоманда просто необходима, вы должны сопоставить порты хоста и контейнера, чтобы извне мог получить доступ ~
отправить в репозиторий докеров
Наш первый образ узла, показанный выше, был успешно сгенерирован. Этот образ пока существует только локально. Если вы хотите, чтобы все его извлекли и запустили, вам нужно отправить его в концентратор докеров. Команда push.
## 命令
docker push [OPTIONS] NAME[:TAG]
Команда, используемая для обнаружения докера, очень похожа на git, конечно же, это репозиторий.
использоватьdocker push luffyzh/next-antd-scaffold:v1Локальный образ передается на удаленный компьютер, и вывод командной строки выглядит следующим образом:
После того, как отправка будет завершена, перейдите в Docker Hub, чтобы увидеть ее, и, конечно же, отправка прошла успешно, и каждый может ее использовать.
Итак, если это зеркало чужого склада, как его найти? доступно здесьdocker searchдля поиска, например, следующее изображение:
При поиске «luffyzh» будут распечатаны все совпадающие изображения. Чем точнее соответствует ключевое слово, тем точнее будет результат, и изображение, которое мы только что отправили, будет видно в результатах запроса.
Sentry
Вышеупомянутое простое изучение Docker завершено, и теперь мы начнем создавать основную часть фронтенд-системы мониторинга контента Sentry.
Что ж, правильно, сборка Sentry опирается на среду Docker, и приведенного выше контента в принципе достаточно.
Перейдите на официальный сайт Sentry и попробуйте бесплатную версию, чтобы увидеть, как она работает. все еще используется здесьПроект Next.jsкак практика.
Официальный мониторинг
- Шаг 1: Зарегистрируйте учетную запись, войдите в систему, создайте новый проект
Как показано выше, здесь я решил создать новое приложение node.js, вы можете создать приложение любого типа.
- Шаг 2: Вставьте код Sentry в программу
После создания нового проекта Sentry предоставит нам адрес DSN, что очень важно для идентификации каждого приложения и загрузки информации об ошибках. Встраиваем код в проект.
Конкретный код находится впроект, я не буду вставлять его, потому что в следующей статье он будет представлен более подробно.
- Напишите исключение ошибки, чтобы увидеть
Приведенный выше проект построен и вставлен код, поэтому мы можем проверить эффект мониторинга.Давайте напишем несколько исключений, чтобы увидеть конкретный эффект, как показано ниже:
Как видно из приведенного выше рисунка, Sentry перехватил исключение, которое мы сгенерировали, а также имеет подробную информацию о контексте ошибки, а также предоставляет службу напоминаний по электронной почте, что на самом деле не то, что NB может сделать. Действительно ароматный ~ люблю его! !
Официальный Sentry на самом деле предоставляет нам очень полный сервис мониторинга, но,Дело в том, что он платный., поэтому для небольших компаний или отдельных разработчиков это может быть не по карману Sentry, возможно, принял это во внимание, предоставляя бесплатные услуги с открытым исходным кодом, а документация и учебные пособия действительно идеальны и удобны ~
Здесь есть немного чувства.Сильная команда разработчиков имеет ответственную команду разработчиков.Даже документы по разработке и документы по развертыванию хорошо написаны. Ощущение тут действительно никак не связано с языком, то есть неважно китайский или английский, разрыва поколений нет, и в принципе можно добиться успеха по основным инструкциям, которые стоит выучить ~ Docker и Sentry одинаковы.
Локальная сборка Sentry с помощью Docker
Теперь, когда мы проложили путь, нам, наконец, нужно приступить к созданию собственной локальной службы Sentry. На самом деле между локальной и серверной конструкцией нет большой разницы, поэтому для удобства объяснения мы будем использовать для объяснения локальную среду.
Автор - система Mac OS, другие системы могут иметь расхождения, в основном на основании официальных документов~
Официальный адрес блога:docker install sentry
Подготовка перед установкой
- Docker 17.05.0+
- Docker Compose 1.19.0+
- A dedicated (sub)domain to host Sentry on (for example, sentry.yourcompany.com).
- At least 2400MB memory
- 2 CPU Cores
Вышеуказанные требования в основном удовлетворяются после установки Docker, после чего мы можем использовать Docker для локального развертывания службы Sentry.
Шаг 1: Загрузите официальный репозиторий и установите его.
git clone https://github.com/getsentry/onpremise.git
Поскольку официальный помог упаковать установочный файл, в отличие от других предыдущих руководств, выполнить файл очень просто:
Эта версия напрямую и автоматически устанавливается официальным обновлением примерно в июле 2019 года. До июля вам необходимо выполнить некоторые связанные операции самостоятельно.
# 安装配置
cd onpremise && ./install.sh
Если вы не сообщаете об ошибках после выполнения, то это очень хорошо.Автор сообщил о следующих ошибках здесь, а сила по морде.Я просто сказал, что основные условия соблюдены 😂:
Checking minimum requirements...
FAIL: Expected minimum RAM available to Docker to be 2400 MB but found 1998 MB
использоватьdocker infoОбнаружено, что максимальная память, доступная для докера, действительно составляет всего 1,952 ГБ = 1998 МБ на компьютере.
После долгих поисков я только знаю, что памяти докера недостаточно, но памяти компьютера все еще много.После консультации с различной информацией (Baidu/Google/Stack Overflow) нет ответа, как установить docker memory Наконец, я обнаружил, что Mac OS должна быть установлена таким образом:
После того, как вы настроили его, как показано выше, вы можете продолжить установку. В конце концов, если ничего другого, это должно быть следующим образом.
Если не будет аварии, а авария все равно будет.Конкретную аварию я указал автору.install.sh Issue, и она тоже решена.Если вы начнете установку после прочтения статьи, вы не должны сталкиваться с этим снова~ Кстати, в процессе установки будет процесс регистрации учетной записи, просто введите свой адрес электронной почты и пароль ~
После успешной установки, как показано на рисунке, выполните командуdocker-compose up -d, затем посетитеhttp://localhost:9000(Sentry по умолчанию запускает номер порта 9000) Как показано на рисунке ниже, это означает, что наш локальный
Служба Sentry построена:
Затем войдите в систему с именем пользователя и паролем, которые мы только что создали.
Шаг 2. Настройте почтовый сервис
На самом деле, мы можем полностью покрыть простые потребности в мониторинге с помощью журналов.Более мощная функция Sentry заключается в оповещениях об ошибках, таких как отправка аварийного электронного письма для онлайн-ошибок, автоматический запуск Jira и так далее. Просто настройте почтовый сервис здесь, потому что здесь есть некоторые подводные камни.
Здесь я использую SMTP-сервис почтового ящика 163, поэтому сначала мне нужно открыть код авторизации SMTP почтового ящика 163. Я не буду его здесь представлять, это очень просто~
Затем снова откройте вышеуказанноеonpremiseсодержание:
# 第一步
cd onpremise && cd sentry
# 第二步
vi config.xml
Затем найдите Mail Server и измените соответствующую службу на свою собственную почтовую службу:
###############
# Mail Server #
###############
# mail.backend: 'smtp' # Use dummy if you want to disable email entirely
mail.host: 'smtp.163.com'
mail.port: 465 // 开启 TLS,不开的话邮件服务默认 25
mail.username: 'your@163.com' // 你的邮箱地址
mail.password: 'your smtp secret' // 这里是你的 SMTP 授权码
mail.use-tls: true // 开启 TLS
# The email address to send on behalf of
mail.from: 'your@163.com' // 发件人是谁,一般和 mail.username 一致
После настройки нужно переустановитьcd onpremise && ./install.sh, после завершения установки мы можем перейти кAdmin/Manage/Mailстраница для просмотра:
Нажмите, чтобы отправить тестовую электронную почту, если нет проблем, тестовая электронная почта будет отправлена на ваш почтовый ящик. Конечно, я также сказал, что если нет никаких проблем, дорога в жизни ухабистая, как может быть так легко однажды добиться успеха... Фактический эффект, неудача, как показано ниже:
Не бойтесь, если что-то пойдет не так, давайте не будем стыдно спрашивать (вонюче бесстыдно), поэтому я пошел к следующему человеку, чтобы снова поднять вопрос.Mail Issue, затем дружески обменяйтесь мнениями и просмотрите соответствующую литературу и, наконец, найдите решение - используйтеdjango_smtp_sslОтправляйте электронные письма в качестве почтового сервера:
- Шаг 1: Установка
django_smtp_ssl
# 1 - 进入目录
cd onpremise && cd sentry
# 2 - 编辑依赖文件
vi requirements.txt
# 3 - 键入如下内容:
# Add plugins here
# 发邮件支持SSL协议
django-smtp-ssl~=1.0
redis-py-cluster==1.3.4
- Шаг 2: Изменить
config.yml
# mail.backend: 'smtp' # Use dummy if you want to disable email entirely
mail.backend: 'django_smtp_ssl.SSLEmailBackend' // 新的邮件后台
mail.host: 'smtp.163.com'
mail.port: 587 // 465 -> 587(465/587 两个是 163 合法的端口,但是确实只有 587 正常使用,具体 issue里有解释)
mail.username: 'your@163.com'
mail.password: 'your smpt sceret' // 注意,不是你的邮箱密码
mail.use-tls: true
# The email address to send on behalf of
mail.from: 'your@163.com'
- Шаг 3. Переустановите
cd onpremise && ./install.sh
Затем мы отправляем его снова:
Это успешно~ Здесь в принципе достаточно. Однако на самом деле иногда могут возникать следующие проблемы:
После проверки показывает, что почтовый сервис действительно проходит, но ящик 163 считает спамом, поэтому не отправляет. Однако после долгих испытаний я обнаружил, что это связано с сетью.Если вы используете внутреннюю сеть в компании, легко могут возникнуть проблемы.Если вы используете личную точку доступа для мобильного телефона, вы можете отправить. Это может быть связано с ограничениями порта шлюза интрасети или т. п. Любой, кто изучил его, может прокомментировать и оставить сообщение, поэтому я могу добавить его ~
Здесь необходимо использовать TLS, поскольку обычные серверы Linux не открывают порт SMTP:25, а использование TLS более безопасно.
рекомендуемая статья
Docker
Моя статья не является вводной статьей о докере, а является записью моего собственного процесса использования 😁, и вышеперечисленные статьи все очень хорошо написаны, если вам интересно, вы можете пойти и посмотреть, если вы большой парень, пожалуйста, пропустите это. , когда мне нечего сказать.
Sentry
Про Sentry, на самом деле, написано почти то же самое, потому что официальные документы очень подробные, здесь я думаю, что каждый должен зайти прямо на официальный сайт, чтобы посмотреть~
Суммировать
Эта статья является лишь первой пробой воды, а конкретная практика мониторинга развертывания проекта будет представлена более подробно в следующей статье ~ Войска и лошади не перемещаются, еда и трава в первую очередь, по крайней мере, мы должны установить сначала займись окружающей средой~😄
Мониторинг интерфейса Sentry расширенные статьи - Практика мониторинга проекта Next.js