Статьи

Отслеживание показателей отказов для Rails-приложений в новой версии с использованием Redis

Это сообщение от Ли Атчисона из Нового Реликтового Блога.

Redis логотипПоказатели отказов являются ключевым показателем для отслеживания качества и полезности контента на вашем сайте. Используя New Relic для измерения показателей отказов с течением времени, вы можете увидеть, как изменения на вашем сайте, включая изменения в эффективности вашего сайта, могут влиять на первые впечатления ваших посетителей.

Использовать New Relic довольно просто, чтобы отслеживать показатели отказов для приложения Rails. Для начала все, что вам нужно, это полупостоянный кеш, такой как Redis. Вот как это сделать.

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

Теперь нам нужно пометить каждый запрос страницы в нашем приложении Rails идентификатором посетителя. Самый простой способ сделать это — добавить before_filter в контроллер приложения. Вот пример:

class ApplicationController < ActionController::Base
    before_filter :mark_hit_by_visitor
 
    def mark_hit_by_visitor
        visitor_id=
        record_hit visitor_id
    end
 
end

Отслеживание
попаданий в Redis Вот где Redis входит. Мы будем использовать Redis HASH для отслеживания попаданий в наше приложение. Мы делаем это с помощью команды Redis HINCRBY. Посмотрите на реализацию record_hit:

#
# Connect to your Redis instance
#
def redis
    @redis||=Redis.new host: “my_redis_server”
end
 
#
# Record a website hit
#
def record_hit visitor_id
    key=”daily_visitors_#{Date.today.strftime('%Y-%m-%d')}”
    redis.hincrby key,visitor_id,1
    redis.expire key,30*24*60*60 # Expire key after 30 days
end

Команда Redis HINCRBY требует трех параметров:

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

* Второй — это ключ хеша. Используйте visitor_id как ключ к хешу.

* Третье значение хеша. Он представлен целым числом, которое начинается с 0 и увеличивается на указанное количество. В этом случае мы просто хотим записать количество попаданий, поэтому мы увеличиваем их на единицу.

Команда Redis EXPIRE используется для удаления ключей после того, как они больше не нужны. В этом примере мы будем использовать 30 дней.

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

def bounce_rate_for_day the_day=Date.today
    key=”daily_visitors_#{the_day.strftime('%Y-%m-%d')}”
    vals=redis.hvals key
    #
    # Count the number of “1” entries in the vals array.
    # (note that the results are strings)
    #
    num_bounces=vals.count(“1”)
    num_visits=vals.count
    #
    # Return the ratio (as a float). This is the bounce rate
    #
    num_bounces.to_f/num_visits.to_f
end
 
# Get the bounce rate for yesterday:
bounce_rate_for_day(Date.today-1)

Отправка данных в новую реликвию
Далее нам нужно сообщить об этом в новую реликвию. Это легко сделать:

def report_to_newrelic
    # Get yesterday’s bounce rate (most recent complete day)
    bounce_rate=bounce_rate_for_day(Date.today-1)
 
    # Upload it to New Relic
    ::NewRelic::Agent.agent.stats_engine.
            get_stats_no_scope('Custom/Visitor/BounceRate').
            record_data_point(bounce_rate)
end

Эта процедура берет показатель отказов за предыдущие дни и загружает его в New Relic в качестве пользовательского показателя. Метод get_stats_no_scope — это метод агента New Relic Ruby, который записывает пользовательскую метрику. Значение Custom / Visitor / BounceRate является уникальным именем для этого показателя, используемого в New Relic. (Все созданные пользователем метрики начинаются со слова «Пользовательский».)

Хотя это значение меняется только ежедневно, стоит регулярно сообщать в New Relic как пользовательский показатель. (Таким образом, мы можем получить хорошие, полезные графики.) При использовании New Relic мы часто смотрим на данные за короткий период времени (30 минут), а не за более длительный период времени (дни.) Но мы хотим убедиться, что метрические данные появляются в течение любого периода времени. Это может быть легко выполнено в работе cron. Лично я отправляю данные в New Relic раз в минуту, поэтому у меня есть действительные данные независимо от того, какой временной интервал я выбрал в продукте. Немного излишне, но стоимость минимальна.

Создание пользовательской панели инструментов
Теперь, когда данные попадают в New Relic, давайте создадим диаграмму, где мы сможем их просмотреть. Сначала мы создадим новую пользовательскую панель инструментов. Вменю Dashboards выберите « Создать пользовательскую панель мониторинга» .

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

Введите имя для новой панели, выберите макет и нажмите « Создать» .

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

Далее мы создадим новую диаграмму, заполнив следующую информацию в конфигурации диаграммы:

Редактировать диаграмму

Обязательно добавьте Custom / Visitor / BounceRate в качестве метрики и выберите Среднее значение в качестве значения и В процентах в качестве числового формата .

Результаты
Как только это будет завершено, вы увидите диаграмму, которая выглядит следующим образом:

Диаграмма отказов

Ось Y — это показатель отказов в процентах от посещений. Ось X — это время, которое будет соответствовать указанному выбранному интервалу времени.

Мы можем добавить другие диаграммы на эту же страницу, что позволит нам сравнить показатель отказов с другой датой о приложении, которое было собрано с помощью New Relic (например, задержка загрузки страницы, частота ошибок и т. Д.)