Рубрики
Uncategorized

Структурирование данных мониторинга в монолитных применениях с пространствами имен

Что такое пространства имен? Все, что происходит в приложении для мониторинга Appsignal, является Logg … Теги с DevOps, мониторингом, архитектурой.

Что такое пространства имен?

Все, что происходит в приложении к приложению Appsignal, регистрируется под пространством имен. Пространства имен работают как папки, группировка событий, проблем и мониторинга данных в управляемые куски.

По умолчанию каждое приложение начинается с трех пространств имен по умолчанию: Веб , Фон и Frontend Отказ

  • Интерфейс веб-пространства проводит все ваши HTTP-запросы. В MVC-ориентированные рамки, такие как Rails или Sinatra, это включает в себя действия контроллера.
  • Пространство имен фона удерживает активность с фоновых заданий, библиотек и задач.
  • Пространство имен Frontend регистрирует события, отправленные по Appsignal для JavaScript Интеграция.

Appsignal Maps входящие события с использованием встроенного применения и правила для каждого интеграции. Однако вы можете изменить эти отображения в любое время и даже создавать новые пространства имен для моделирования вашей структуры приложений.

Пробовать пространства имен в Ruby

Давайте попробуем пространства имен на приложении Ruby on Rails (ROR). После создания проекта свежего рельсов с Rails New и создание Интеграция рельсов , вы найдете Веб пространство имен на вашей приборной панели.

AppSignal показывает пространство имен, как только он получает транзакции из любого из контроллеров.

Остальные пространства имен по умолчанию не появятся до тех пор, пока в них есть некоторая активность. Давайте добавим что-то в пространстве имен фона, чтобы сделать вещи более интересными. Вот как приборная панель смотрит после добавления Sidekiq к проекту (проверьте код в Примеры репозитория ).

AppSignal назначает действие в пространство именных данных, потому что он распознает Sidekiq в качестве процессора задания. Appsignal интегрируется с большинством популярных фоновых процессоров там, но если у вас опущено, вы всегда можете Добавить приборов на вашу работу вручную.

Создание пользовательских пространств имен

На больших монолитных приложениях пространства имен по умолчанию могут чувствовать себя слишком общемысленным. Большой сайт обычно обслуживает статический контент, динамические страницы, конечные точки API, среди других веб-сервисов. Большая часть этого все будет в конечном итоге на Веб пространство имен.

Кроме того, каждая часть приложения имеет другой приоритет. Проблема страницы входа в систему — это намного более срочно, чем на внутренней панели администрирования. Тем не менее, Appsignal относится к всем вопросам в пространстве имен в качестве равных. Когда есть много активности, может быть трудно определить самые критические проблемы.

Итак, мы должны организовывать пространства имен по приоритетным и областям ответственности. Тогда мы можем прикрепить отдельные политики уведомления и предупреждать только заинтересованные стороны. После этого рассуждения мы могли бы создавать пользовательские пространства имен для login_page , API_ENDPOINTS и admin_panel Отказ

Создать Новое пространство имен в Ruby мы будем использовать Appsignal.set_nameSpace Отказ Взгляните на следующий код, который создает работу в пространстве имен под названием urgent_background :

class FetchPricesWorker
    include Sidekiq::Worker

    def perform
        Appsignal.set_namespace("urgent_background")

        # worker code ...

    end
end

Как только мы сделали это изменение и перезапустили приложение, эти новые задания будут отображаться в недавно созданном пространстве имен:

Мы можем подтвердить, что фактическая работа была зарегистрирована путем проверки имени действия в приборной панели:

Пользовательские пространства имен также работают в Все интеграции Отказ

Игнорирование пространств имен

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

Игнорирование пространства имен занимает три шага:

  1. Назначьте детали, которые мы не хотим контролировать на пользовательском пространстве имен.
  2. Настройте интеграцию, чтобы игнорировать пространство имен.
  3. Перезапустите свое приложение.

Для Ruby добавьте lightore_namepsaces Опция в файле Appsignal Config:

production:
  ignore_namespaces:
    - "admin_panel"

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

Интеграции Elixir и JavaScript имеют аналогичные варианты. Для более подробной информации проверьте Игнорирование направляющих пространств имен Отказ

Пространства имен для монолитных приложений

Теперь, когда мы знаем, как работают пространства имен, давайте рассмотрим несколько способов использовать их для раздела монолитного приложения.

Хотя нет набора правил, разбиение сводится к двум стратегиям. Вы можете выбрать один из них или смесь как отправной точкой:

  • По рофе : Мы назначаем пространства имен на функциональные или логические единицы в рамках проекта. Таким образом, мы можем найти его разумным для определения пространств имен, как Биллинг , sign_in или sign_up , admin_panel и Главная страница Отказ Один взгляд на приборную панель Appsigal, и вы поймете, что происходит в каждой части приложения. Этот подход работает хорошо, когда код может быть прекрасно разбит четкими границами.
  • По тяжести Здесь мы используем пространства имен в качестве приоритеты устройства. Вам решать, чтобы установить, какие части кода являются критический , важно С средний или Низкий Отказ Этот подход позволяет вам сразу разбирать, какие проблемы вы хотите сначала решить.

Предположим, что у нас есть контроллеры, которые обрабатывают вход пользователя и регистрацию. При выборе разбиения по роли мы могли бы сопоставить их на user_login пространство имен.

# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
    before_action :set_appsignal_namespace

    def set_appsignal_namespace
        # Sets the namespace
        Appsignal.set_namespace("user_login")
    end

    # controller actions ...
end

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

class BillingPageController < ApplicationController
    before_action :set_appsignal_namespace

    def set_appsignal_namespace
        Appsignal.set_namespace("critical")
    end
end

Контроллеры, которые наследуют из них, имеют одно и то же пространство имен, что и их родители:

# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController

    # there's no need for before_action here
    # this controller already reports to the parent's namespace

end

Как мы уже видели, рабочие задания и задачи автоматически назначаются на Фон пространство имен. По возможности, мы должны назначить их в более конкретные. Например, задание очистки базы данных может перейти в база данных пространство имен, как это:

class ActiveJobDatabaseCleanupJob < ActiveJob::Base
  queue_as :default

  def perform(argument = nil, options = {})
    Appsignal.set_namespace("database")

Приоритеты также работают на рабочие места. Мы могли бы назначить неважных задач на низкий Например, как в этой задаче грабля:

task :unimportant_job do

  # Run this rake job in the low namespace
  Appsignal.set_namespace("low")

  # job code ...

end

В некоторых случаях вы захотите регистрировать действия с использованием ручной транзакции. Вы можете определить пространство имен при создании его, как в следующем примере, которые кодируют пользовательскую почтовую задачу:

class Job
    def perform

        # Create a transaction for this job and set the namespace
        transaction = Appsignal::Transaction.create(
            SecureRandom.uuid,
            "mailer",
            Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
        )

        # job code ...

    end
end

Пространства и уведомления имен

Не все в команде должны быть уведомлены о каждой проблеме. Специалисты Frontend не заботятся о фоновых работах столько же, сколько разработчиков Backend. Тем не менее, они могут захотеть знать, когда в бэкере есть проблема. Backeng Developers, безусловно, любит получать уведомления о проблемах производительности на Веб пространство имен. Пространства имен позволяют нам направлять уведомления для нужных людей.

Настройка уведомлений для каждого имен

Мы можем создавать группы уведомлений, которые активны только для конкретных пространств имен. Например, мы могли бы отправить электронные письма для ошибок в Веб пространство имен, или отправить сообщение в канал #frontend Slack для проблем в Frontend пространство имен.

Чтобы создать группы уведомлений PER-IMAN, перейдите в настройки приложений> Уведомления> Уведомлями и нажмите на Добавить интеграцию Отказ

Выберите одну из интеграций и введите его имя. Выберите тип сообщения для отправки и для какого пространства имен. Например, давайте создадим уведомление о слабым состоянии для #frontend канал.

Хотя мы все еще здесь, создайте второе уведомление для разрабатывателей Backend:

Вы можете настроить как можно больше уведомлений, сколько нужно, чтобы команда была на сегодняшний день со всем, что происходит.

Изменение уведомлений о пространстве имен

Когда инцидент создан, AppSignal будет применять политику уведомления. Эта политика основана на пространстве имен, от. Мы можем определить отдельные политики для каждого пространства имен.

Чтобы увидеть пространство имен по умолчанию Для вашего приложения перейдите в Настройки приложения> Уведомления> Пространство имен по умолчанию Отказ

Здесь вы найдете варианты настроить уведомления об ошибках и производительности для каждого пространства имен:

  • Каждая встреча : Отправляет уведомления каждый раз, когда инцидент срабатывает, с 5-минутным восстановлением.
  • Сначала на развертывании : Уведомляет вас о первой ошибке после развертывания приложения.
  • Сначала после закрытия : Отправляет уведомление, в первый раз закрытый вопрос вновь открыт.
  • Никогда не уведомить : В целом отключает уведомления.

Создание триггеров перспективного пространства

Триггеры говорят Appsignal, чтобы создать инцидент и отправлять уведомления, когда метрика переходит или ниже предварительно определенного значения. Поскольку разные части приложения могут иметь разные пороги, мы должны создавать отдельные триггеры для каждого пространства имен. Классический пример — это триггер, который предупреждает нас при пропускной способности слишком низок в Веб пространство имен.

Создать триггер, перейдите в Обнаружение аномалии> Триггеры и нажмите на Добавьте свой первый триггер Отказ

Выберите тип триггера действий в левом меню и выберите соответствующее пространство имен. Затем установите пороговые значения, которые вызывают предупреждение.

Здесь вы также можете определить, какие группы должны быть уведомлены. Чтобы доработать, нажмите Сохранить триггер Отказ

Заключение

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

После проверки того, как работают пользовательские пространства имен на Ruby , Node.js и Эликсир Прочитайте следующие, чтобы продолжить обучение, как использовать пространства имен:

Наш гостевой автор Tomas провел 10 лет, работая в IBM, где он сделал немного всего: разработка, доставку услуг, администрирование базы данных и облачный инжиниринг. Сейчас он независимый консультант и технический писатель.

Оригинал: «https://dev.to/appsignal/structuring-monitoring-data-in-monolithic-applications-with-namespaces-59lo»