Подключение отправки метрик

Итак, вы хотите поучаствовать в программе сбора метрик? Хорошо, мы постараемся вам в этом помочь:

  1. Для начала, вам нужно добавить в settings.py несколько настроек:

    • METRICS_HOST - IP-адрес или доменное имя сервера, на котором запущен демон statsd,
    • METRICS_PORT - порт сервера statsd (по умолчанию: 8125),
    • METRICS_PREFIX - префикс, который будет добавлен к каждой отправляемой метрике.
    • METRICS_CONTEXTS_URL - URL сервера хранения контекстов (по умолчанию: http://localhost:1942/register).
    • ENABLE_METRICS_COLLECTION - флаг включения автоматической отправки метрик по времени выполнения запроса.

    Значения для некоторых настроек:

    METRICS_HOST = '91.203.194.148'
    METRICS_CONTEXTS_URL = 'http://91.203.194.148:1942/register'
    METRICS_PORT = 8125
    

    Значение METRICS_PREFIX нужно получить в отделе m3, и оно должно выглядеть следующим образом:

    v1.tatar.bars.test.instance_test.
    
  2. Попросите администратора вашего сервера открыть доступ по портам 1942 (tcp) и 8125 (udp) на указанные вам хосты.

  3. Далее, обновитесь на версию m3 не ниже 2.0.9.5

    $ pip install m3-core>=2.0.9.1
    

    .и установите пакет pystatsd:

    $ pip install pystatsd
    

    Если у вас в settings.py настройка ENABLE_METRICS_COLLECTION стоит в True, то с этого момента на каждый пришедший к контроллеру m3-core запрос будет отправляться UDP-пакет к statsd, содержащий в себе время выполнения запроса.

  4. Для отправки контекстных данных по метрикам (список URL контроллеров), необходимо один раз при старте программы вызвать функцию send_controllers_context():

    from m3.metrics import send_controllers_contexts
    send_controllers_contexts()
    

    Хорошим местом для помещения вызова этой функции будет являться urls.py, прямо после сбора паттернов контроллеров. При вызове этой функции будет произведен блокирующий (!) HTTP-запрос на сервер контекстов, содержащий в себе карту URL контроллеров и их хэшей.

  5. Если вы хотите собирать статистику по количеству пользователей Django и их входам/выходам из системы, то по такому же принципу надо добавить вызов функции capture_users_metrics() с параметром None:

    from m3.metrics import capture_users_metrics
    capture_users_metrics(None)
    

    Перед этим очень рекомендуется сделать команду очистки сессий:

    $ python ./manage.py cleanup
    

    Причина этого состоит в том, что Django по-умолчанию не удаляет сессии с истекшим сроком жизни, а первоначальное значение счетчика активных пользователей равно количеству хранимых сессий. Рекомендуется периодически запускать эту команду в cron'е.

  6. ..."That's all, folks!"

Проверка подключения

Установите ngrep:

$ sudo apt-get install ngrep

Проверить, что метрики уходят на сервер statsd:

$ sudo ngrep -qd any . udp dst port 8125

Проверить, что при старте приложения контексты уходят на сервер:

$ sudo ngrep -qd any . tcp dst port 1942
Contents © 2014 БАРС Груп - Powered by Nikola