Ad Widget

Collapse

отслеживание кол-ва обращений к странице

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • vakym
    Junior Member
    • Aug 2013
    • 3

    #1

    отслеживание кол-ва обращений к странице

    Добрый день!

    Имеется сервер nginx+phpfpm+бд.

    Необходимо отслеживать количество обращений к конкретной странице на сайте.

    Адрес страницы выглядит примерно так:
    http://domain.com/somefolder/somescrip.php

    Думал сделать это через пользовательские элементы данных. В заббикс_агенте создал элемент данных который мониторит аксес логи nginxa и выводит количество изменений в логах в секунду за последние 30 сек:

    Code:
    serparametr=statistic,tail -f /var/log/nginx/site.access.log | grep 'v12' | pv -lr -i 30
    Однако этот элемент данных не возвращает никакого значения. Т.е. в заббиксе ошибок нет, но ответы от агента приходят пустые.

    Попробовал через:
    Code:
    system.run[tail -f /var/log/nginx/site.access.log | grep 'v12' | pv -lr -i 30,wait]
    Результат такой же. Хотя:
    Code:
    system.run[date,wait]
    отрабатывает корректно.

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

    Тогда появляется вопрос, как можно ещё получить количество обращений к странице?

    Заранее спасибо.
    Last edited by vakym; 08-08-2013, 19:51.
  • bga83
    Senior Member
    • Sep 2011
    • 268

    #2
    Если выдача прав на чтение этого лога связана с повышением прав заббика, можно для данного лога создасть хардлинк, на который дасть заббиксу права чтения. Больше ни что в системе это не повляет

    Comment

    • ableev
      Senior Member
      Zabbix Certified Specialist
      • Oct 2012
      • 276

      #3
      Originally posted by vakym
      Тогда появляется вопрос, как можно ещё получить количество обращений к странице?
      Мнение, сразу замечу, личное. Но вы делаете это неправильно. А если у вас будет через год два хоста с параллельной нагрузкой?
      Это решается на уровне php кода, чтобы при каждом заходе куда-то что-то записывалось (например, счетчик в базу). Тогда заббиксом можно будет просто населектить это значение.
      Парсить лог каждый раз заббиксом - оверхед.

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Originally posted by vakym
        Думал сделать это через пользовательские элементы данных. В заббикс_агенте создал элемент данных который мониторит аксес логи nginxa и выводит количество изменений в логах в секунду за последние 30 сек:

        Code:
        serparametr=statistic,tail -f /var/log/nginx/site.access.log | grep 'v12' | pv -lr -i 30
        Однако этот элемент данных не возвращает никакого значения. Т.е. в заббиксе ошибок нет, но ответы от агента приходят пустые.
        Зачем написали tail -f ? UserParametr должен возвращать одно значение и за конечное время. Максимально возможное 30 секунд.
        Дело может быть в Timeout.
        Попробуйте увеличить таймауты для zabbix_agent и zabbix_server
        /etc/zabbix/zabbix_agentd.conf
        Timeout=30
        /etc/zabbix/zabbix_server.conf
        Code:
        ### Option: Timeout
        #       Specifies how long we wait for agent, SNMP device or external check (in seconds).
        #
        # Mandatory: no
        # Range: 1-30
        # Default:
        Timeout=30
        И рестартовать zabbix_agent и zabbix_server
        По умолчанию там 3 сек Timeout

        Не забываете перезапускать zabbix_agentd и zabbix_server после каждого изменения конфигурации!!!!
        P.S. Но концептуально правильнее решить эту задачу так, как предложил ableev.
        Last edited by dima_dm; 13-08-2013, 08:19.

        Comment

        • vakym
          Junior Member
          • Aug 2013
          • 3

          #5
          Спасибо за ответы.


          Зачем написали tail -f ? UserParametr должен возвращать одно значение и за конечное время. Максимально возможное 30 секунд.
          Дело может быть в Timeout.
          Попробуйте увеличить таймауты для zabbix_agent и zabbix_server
          /etc/zabbix/zabbix_agentd.conf
          Timeout=30
          /etc/zabbix/zabbix_server.conf
          Я изменял данные параметры.

          На самом деле команда в итоге выглядит вот так:
          Code:
          tail -f /var/log/nginx/site.access.log | grep 'v12' | pv -lr -i 30 [B]>> /dev/null[/B]
          Нам не важно что выводит tail -f, поэтому всё что она выводит в dev/null. Нам важно что выводит pv(man pv) и по идее эта команда должна выполняться 30 сек(пробовал на меньшее значение) и в выводе должно быть одно единственное значение.

          Однако при проверке из консоли,на заббикс агенте, отваливается по таймауту.(при любых значениях таймаута в конфиге)

          К сожелению, добавить что-то в код приложения нет возможности
          Буду думать дальше.

          bga83

          Спасибо за подсказку про хардлинк.

          Comment

          • dima_dm
            Senior Member
            • Dec 2009
            • 2697

            #6
            Originally posted by vakym
            по идее эта команда должна выполняться 30 сек(пробовал на меньшее значение) и в выводе должно быть одно единственное значение.

            Однако при проверке из консоли,на заббикс агенте, отваливается по таймауту.(при любых значениях таймаута в конфиге)
            Плохо читали описание pv
            its standard output and progress will be shown on standard error.
            А zabbix_agentd ждёт данные из stdout.

            Comment

            • vakym
              Junior Member
              • Aug 2013
              • 3

              #7
              Цели я таки добился. Правда немного коряво, но работает.

              Было сделано два скрипта:

              Code:
              #!/bin/sh
              
              tail -f /path/to/log | grep 'pattern' > /path/to/save
              и

              Code:
              #!/bin/sh
              
              wc -l /path/to/save | awk '{print $1}'
              cp /dev/null /path/to/save

              Первый скрипт вешается в фоне и все новые записи из нужного лога фильтрует по нужной маске и записывает в файл.

              Второй скрипт считает кол-во строк записанных в файле и чистит его.

              Т.к. при мониторинге nginx у нас один запрос записывается на одну строку в access логе, то кол-во строк = кол-ву запросов к нужной странице.

              После чего создаём UserParameter, который вызывает скрипт считающий кол-во строк.


              dima_dm
              Да, вы правы.

              Comment

              Working...