Как я могу хранить статистику уровня приложения на лету в приложении, работающем под Apache? - PullRequest
3 голосов
/ 22 января 2010

У меня есть приложение, работающее под Apache, и я хочу вести статистику «в данный момент». Я хочу, чтобы приложение сообщало мне такие вещи, как:

  • запросов в секунду, с разбивкой по типам запросов
  • задержка для выполнения запросов к различным бэкэнд-сервисам через экономию (с разбивкой по сервису и серверу)
  • количество ошибок в секунду
  • и т.д.

Я хочу сделать это без каких-либо внешних зависимостей. Однако, я сталкиваюсь с проблемами, разделяющими статистику между процессами apache. Очевидно, я не могу просто использовать глобальную память. Что является хорошим примером для такого рода проблем?

Приложение написано на python с использованием пилонов, хотя я подозреваю, что это скорее вопрос проектирования "связи между процессами", чем то, что специфично для python.

Ответы [ 3 ]

1 голос
/ 26 января 2010

Я хочу сделать это без каких-либо внешних зависимостей.

Что, если ваш апач умрет? (Разделение проблем?)

Лично я использую (избыточно) Nagios для мониторинга самого оборудования, служб, и метрик приложений . Таким образом, я могу легко / автоматически составлять графики «запросов в секунду / пользователей в сети», «загрузка процессора / пользовательская активность X в секунду» и т. Д., Которые помогают во многом.

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

Мониторинг Apache

Я наблюдаю за Apache, извлекая необходимую информацию со страницы apache mod_status через плагин nagios.

Пример ответа плагина:

APACHE OK - 0.080 sec. response time, Busy/Idle 18/16, open 766/800, ReqPerSec 12.4, BytesPerReq 3074, BytesPerSec 38034

Мониторинг приложений

Я использовал mod_status в качестве примера для списка того, что вы хотите отслеживать.

Для нашего приложения у нас есть очень маленькая структура для плагинов Nagios, так что в основном каждая проверка nagios - это небольшой класс, который выполняет свою проверку кеша или базы данных и возвращает свое значение nagios (небольшой и простой скрипт командной строки).

больше примеров:

Memcache:
OK - consumption: 82.88% (106.1 MBytes/128.0 MBytes), connections: 2, requests/s: 10.99, hitrate: 95.2% (34601210/36346999), getrate: 50.1% (36346999/72542987)

Application feature #1 usage:
OK - last 5m: 22 last 24h: 655 ever: 26121

Application feature #2 usage:
OK - last 5m: 39 last 24h: 11011

Other applications metrics:
OK - users online: 556

Что я хочу сказать: расширить Nagios для мониторинга приложений очень просто. С моей маленькой структурой, которая заняла у меня 3-4 часа, любая проверка, которую я добавляю, занимает у меня всего несколько минут.

Руководство по разработке плагина Nagios

1 голос
/ 22 января 2010

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

0 голосов
/ 22 января 2010

Использовать объект pylons.g. Это экземпляр класса Globals в файле lib / app_globals.py вашего приложения Pylons. Изменения в его состоянии будут видны всем потокам, поэтому вещи в нем должны быть безопасными для потоков.

Библиотека / app_globals.py:

class Globals(object):
    def __init__(self):
        self.requests_served = 0

Контроллеры / status.py:

from pylons import g

class StatusController(BaseController):
    def status(self):
        g.requests_served += 1
        return "Served %d requests." % g.requests_served
...