Основы внешнего мониторинга — Docker + Sentry для создания внешней системы мониторинга

монитор
Основы внешнего мониторинга — Docker + Sentry для создания внешней системы мониторинга

предисловие

Фронтенд-мониторинг всегда был важной частью разработки и производства.Поскольку первоначальный механизм мониторинга проекта в группе не может использоваться повсеместно, а новый проект еще не имеет идеального фронт-энд-мониторинга, я подумал о том, чтобы исследовать и построить осуществимый фронт-энд. -конечное решение для мониторинга самостоятельно. Итак, есть эта статья, небольшие компании экономят расходы, и план мониторинга зарядки не рассматривается, и принимается самый популярный часовой в бесплатном плане ~😄

Рекомендуется читать эту статью вместе со следующей статьей.В этой статье сначала рассматриваются основные технологии решения для внешнего мониторинга, а следующая — подробные сведения об использовании и практические примеры решения для мониторинга~

Мониторинг интерфейса 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