Статистика для IceCast2

Статистика для  IceCast2

Сегодня я расскажу вам как сделать статистику icecast2 в виде графика, используя MRTG и скрипт на php.

Для этого нам понадобится:

  • Сервер IceCast2
  • MRTG(программа для построения графиков)
  • Доступ к серверу по ssh

Установка MRTG.

Установить MRTG в debian и ubuntu можно командой :

apt-get install mrtg

На этом собственна и вся установка, так что переходим к настройке.

Настрока MRTG

После установки файл конфигурации MRTG должен находит в /etc/mrtg.cfg, отредактируем его:

nano /etc/mrtg.cfg

ВАЖНО!

Если собираетесь использовать MRTG только для снятия статистики IceCast2, то можете смело удалять все содиржимое конфига, и вставить следующие строки:

Interval: 5
RunAsDaemon: yes
Refresh: 300
Language: russian
WorkDir: /var/www/pipradio.net/web/statistica
WriteExpires: Yes
WithPeak[_]: dwmy
XSize[_]: 600
YSize[_]: 200
Title[^]: Graphs:

Тут не много объясню, что к чему.

Interval: 5

Время обновления графиков в минутах.

RunAsDaemon: yes

Стартовать MRTG как демон.

WorkDir: /var/www/pipradio.net/web/statistica

Папка куда будут складываться файлы.(можно создать например поддомен ice.pipradio.com)

XSize[_]: 600
YSize[_]: 200

Размер графиков.

Теперь создаем скрипт, который будет собирать статистику радио со всех потоков:

nano /etc/allstat.php

И втсавляем следующие:

#!/usr/bin/php
< ?php
$file_name='http://pipradio.net:9500/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$list=$mass [9];
$mas=explode (" ", $mass [7]);
$ti=substr($mas [0],7);
$day=floor($ti/86500);
$he=floor(($ti-$day*86500)/3600);
$mi=floor(($ti-$day*86500-$he*3600)/60);
$upt="".$day." days, ".$he." hours, ".$mi." minutes.";
$s=0;
echo $list."\n";
echo $s."\n";
echo $upt."\n";
echo "/all";

?>

Если же вы хотите снимать статистику с какого-то одного потока, то скрипт будет выглядить так:

#!/usr/bin/php
< ?php
$file_name='http://pipradio.net:9500/status2.xsl?mount=/nonstop;
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$list=$mass [14];
$mas=explode (" ", $mass [7]);
$ti=substr($mas [0],7);
$day=floor($ti/86500);
$he=floor(($ti-$day*86500)/3600);
$mi=floor(($ti-$day*86500-$he*3600)/60);
$upt="".$day." days, ".$he." hours, ".$mi." minutes.";
$s=0;
echo $list."\n";
echo $s."\n";
echo $upt."\n";
echo "/all";

?>

Где ?mount=/nonstop’; название потока(точки монтирования icecast)

Теперь даем права на выполнение скрипта:

chmod 755 /etc/allstat.php

И добавляем наш скрипт в конфиг MRTG:

nano /etc/mrtg.cfg

Вниз вставляем:

Target[all]: `/etc/allstat.php`
Options[all]: nopercent, integer, gauge
MaxBytes[all]: 1000
AbsMax[all]: 1000
Title[all]: Listens
PageTop[all]:All Listens
YLegend[all]: # of connections
ShortLegend[all]: L/s
Legend1[all]: # of listeners
Legend2[all]:
Legend3[all]: Maximal # of listeners
Legend4[all]:
LegendI[all]:  # of listeners:
LegendO[all]

ВАЖНО!
Если хотите видеть статистику по потокам, обратите внимание на [all] это индификатор графика, он должен быть разным для каждого потока

Попробуем запустить MRTG

env LANG=C /usr/bin/mrtg /etc/mrtg.cfg

Если ошибок вида Target[all][_IN_] ‘ $target->[1]{$mode}
нет ,значит все хорошо, если есть, проверьте ваш сервер, и в случаи снятия статистики с отдельного потока, проверьте есть ли он.
Теперь нам нужно создать файл index.html, для этого используем команду:

indexmaker mrtg.cfg > /var/www/pipradio.net/web/statistica

После чего заходим смотреть нашу статистику по адресу pipradio.net/statistica

На этом настройка завершена, графики должны заработать.

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

Если возникли вопросы пишите в комментариях.

Метки: , , , , ,

37 коммент. к записи “Статистика для IceCast2”

  1. Анатолий:

    ОС Centos 5, Icecas2 + ices (хотя последний как таковой роли не играет).
    Сделал все как вы описали, кое какие команды в Centos отличаются, но да это не столь важно, если потратить немножко времени и делать все внимательно то все должно поставится, при этом лично у меня не выдало ни одной ошибки.

    Значит в результате я создал директорию и индекс файл в котором по идеи будет собираться статистика:

    http://viptrophy.com/web/statistica/index.html

    Но статистика к большому сожалению не отображается в виде графика, не могу понять почему. Хотя проделывая все как написано выше у меня не было ни одной ошибки.
    В директории в которой должна отображаться статистика есть мной созданый:
    index.html
    и автоматически сгенерированый index.html.meta (размером 39).

    Вот немогу понять почему нет графика? Что то я сделал не правильно, или что то не работает? или нужно время что б была инфомация для формирования графика… Подскажите пожалуйста что делать ?

  2. Анатолий:

    Извините за возможно слишком примитивный вопрос. Что значит крон проверьте?
    я так понимаю вся проблема в том что у меня не отрабатывает сам файл РНР

    etc/mrtg/allstat.php
    и по всей логике он должен работать по крону, через какое то определенное время ?

    если мысль в этом направлении, пожалуйста напишите какую строчку нужно поставить в крон, центоса файл лежит etc/mrtg/allstat.php

    и интереса ради, объясните — где в самой статье упоминается о кроне, или я что то пропустил или не внимательно прочел?
    (Новичок, приношу извинения за назойливость, и большое спасибо за статью)!

    • admin:

      в статье нет ничего про крон, так как прописано в конфиге, но если не работает, то можно через крон запускать, например:
      crontabe -e
      if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi

      каждые 5 минуть

  3. Анатолий:

    Я выполнил команду в ПУТТИ, ничего не произошло.
    после чего поставил строку :

    if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi

    в крон на выполнение каждые 5 минут, ничего не происходит.

    Посмотрел наличие папки /var/log/mrtg/mrtg.log — у меня нет такой папки, создал папку, предоставил права 777, выполнил крон — ничего. Создал файл — mrtg.log — предоставил права 777, но ничего в него не пишет.

    Возможно я где то допускаю ошибку?

  4. Анатолий:

    [root@88 ~]#
    [root@88 ~]# env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
    ERROR: unable to open config file: /etc/mrtg.cfg
    [root@88 ~]# env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg
    [root@88 ~]#

    и ничего не произошло.

    • admin:

      на почту скинул =)

      • Анатолий:

        Большое, большое СПАСИБО!

        все сделал как вы написали в письме. у меня почему то mrtg.cfg — содрал первоначальные настройки, заменил на те что были отправлены в письме, запустил создание ИНДЕКСА. сразу создалось несколько файлов и картинок для графика.

        Еще раз спасибо, первоочередную (запланированную задачу) выполнил, в свободное время буду экспериментировать дальше.

        Спасибо что помогаете, делитесь опытом! Я по вашим статьям и айскаст ставил! Удачного дня.

        • admin:

          да незачто=) странно что айскаст у вас встал, в статье есть парочка ошибок в конфиге . Если будут вопросы пишите, постараемся помочь

  5. Анатолий:

    Там с айскастом отдельно — много сил и экспериментов, но стал и работает ))

    Посмотрите пожалуйста:
    http://viptrophy.com/web/statistica/all.html — Сама статистика.

    http://viptrophy.com:8000/status2.xsl — Линк с которого я ее читаю.

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

    В файле all.log — что в директории откуда смотрим статистику, вот такие записи:

    ………………
    1247616000 0 0 0 0
    1247529600 0 0 0 0
    1247443200 0 0 0 0
    1247356800 0 0 0 0
    1247270400 0 0 0 0

    и кажется еще чего то не хватает :(

    • admin:

      все номрально=) если задачу в крон добавили, графики будут обновлятся каждые 5 минут, и соотвественно, если кто-то слушает 5 и более минут, он будет отображен в графике, сейчас подключусь и оставлю, а вы подождите пока график обновится

  6. Тараканов Вадим Сергеевич:

    Здравствуйте, поставил данную стату но выдает такую штуку:
    http://www.radio/stats/all.html
    В чем косяк?

  7. Kirill:

    Приветствую! Отличная статья, пока ещё не пробовал все это повторить, хочу прежде спросить: на том сервере, куда мы всё это станавливаем и настраиваем, должен быть установлен апач?
    Если его там нет, то как будут выполняться php скрипты?

    Спасибо.

  8. Kirill:

    Скажите, пожалуйста, в mrtg.cfg мы вставляем:
    Target[all]: `/etc/allstat.php`
    Options[all]: nopercent, integer, gauge
    MaxBytes[all]: 1000
    AbsMax[all]: 1000
    Title[all]: Listens
    PageTop[all]:All Listens
    YLegend[all]: # of connections
    ShortLegend[all]: L/s
    Legend1[all]: # of listeners
    Legend2[all]:
    Legend3[all]: Maximal # of listeners
    Legend4[all]:
    LegendI[all]: # of listeners:
    LegendO[all]

    Это для all (all — это что? то что в конце php скрипта /all? ) в случае если я хочу для каждого потока сделать свой график и т.д., то что нужно и как сделать?

    Для каждого потока сделать свой php, а в mrtg.cfg что нужно будет дописывать под каждый поток?

    Заранее спасибо!

    • admin:

      Еще раз статью прочитайте :

      Теперь создаем скрипт, который будет собирать статистику радио со всех потоков:
      nano /etc/allstat.php
      И втсавляем следующие:
      #!/usr/bin/php
      < ?php
      $file_name='http://pipradio.net:9500/status2.xsl';
      $r=fopen($file_name,'r');
      $text=fread($r,1000);
      fclose($r);
      $mass=explode(",", $text);
      $list=$mass [9];
      $mas=explode (" ", $mass [7]);
      $ti=substr($mas [0],7);
      $day=floor($ti/86500);
      $he=floor(($ti-$day*86500)/3600);
      $mi=floor(($ti-$day*86500-$he*3600)/60);
      $upt="".$day." days, ".$he." hours, ".$mi." minutes.";
      $s=0;
      echo $list."\n";
      echo $s."\n";
      echo $upt."\n";
      echo "/all";
      ?>

      И сразу ниже:

      #!/usr/bin/php
      < ?php
      $file_name='http://pipradio.net:9500/status2.xsl?mount=/nonstop;
      $r=fopen($file_name,'r');
      $text=fread($r,1000);
      fclose($r);
      $mass=explode(",", $text);
      $list=$mass [14];
      $mas=explode (" ", $mass [7]);
      $ti=substr($mas [0],7);
      $day=floor($ti/86500);
      $he=floor(($ti-$day*86500)/3600);
      $mi=floor(($ti-$day*86500-$he*3600)/60);
      $upt="".$day." days, ".$he." hours, ".$mi." minutes.";
      $s=0;
      echo $list."\n";
      echo $s."\n";
      echo $upt."\n";
      echo "/all";
      ?>
      Где ?mount=/nonstop’; название потока(точки монтирования icecast)

      Прописываем в mrtg :
      для всех каналов

      Target[all]: `/etc/allstat.php`
      Options[all]: nopercent, integer, gauge
      MaxBytes[all]: 1000
      AbsMax[all]: 1000
      Title[all]: Listens
      PageTop[all]:All Listens
      YLegend[all]: # of connections
      ShortLegend[all]: L/s
      Legend1[all]: # of listeners
      Legend2[all]:
      Legend3[all]: Maximal # of listeners
      Legend4[all]:
      LegendI[all]: # of listeners:
      LegendO[all]

      для канала например нонстоп

      Target[nonstop]: `/etc/allstat.php`
      Options[nonstop]: nopercent, integer, gauge
      MaxBytes[nonstop]: 1000
      AbsMax[nonstop]: 1000
      Title[nonstop]: Listens
      PageTop[nonstop]:All Listens
      YLegend[nonstop]: # of connections
      ShortLegend[nonstop]: L/s
      Legend1[nonstop]: # of listeners
      Legend2[nonstop]:
      Legend3[nonstop]: Maximal # of listeners
      Legend4[nonstop:
      LegendI[nonstop]: # of listeners:
      LegendO[nonstop]

  9. Kirill:

    И ещё вопрос. Пытаюсь выполнить команду для создания index.html — в ответ получаю следующее:
    ERROR: no H1 line pagetop property in all section

    Соответственно файл создается пустой. Что нужно поправить?

    Спасибо.

  10. Kirill:

    Огромнейшее спасибо!!! Все получилось!!! Просто супер!

  11. Kirill:

    Столкнулся с проблемой… После того как добавил в конфиг все станции и под каждую сделал свой скрипт все перестало работать. Вот ссылка:
    http://fr2.makradio.ru:81/stat/
    Не отрисовываются графики. В php скриптах под каждую станцию у меня все так же, кроме последней строчки.
    У вас: echo «/all»;
    У меня: echo «/tophit»; (то есть название станции, которое описывается в конфиге mrtg.

    Что может быть?

    Спасибо.

  12. Kirill:

    И что означает синий график?

  13. Kirill:

    Извините за спам. :) все мои вопросы можно снять с повестки дня. я во всем смог разобраться. Ещё раз спасибо!

  14. magomed:

    Добрый день! ребята есть проблема которую не могу решить! система работает шикарно! и графики выдает! но вот в графиках сам вывод информации не могу поменять! а то график показывает до 14 мб а выше то что идет он скидывает на ноль и поднимается заново! а можно чтоб график был фиксировано на 300 мб

  15. magomed:

    у меня график строит до 14 мбайт /с и падает на ноль а по коммутатору проверяю там около 23 мбайт/с тоесть мне приходится считать траффик (14 мбайт/с + остальное начиная с нуля то что по новой шкала в графике пошла) мне нужно было чтоб график был статичкский на оси Y чтоб сразу 50 мбайт/с показывала а сама шкала бегала по ее нагрузке,

  16. dimon:

    Доброе время суток.
    http://93.81.239.10/mtrg
    http://93.81.239.10:8000/status2.xsl
    Allstate.PHP не снимает правильно статистику. Делал все по мануалу.

    #!/usr/bin/php
    Где может быть проблема?

  17. dimon:

    Доброе время суток.
    http://93.81.239.10/mrtg
    http://93.81.239.10:8000/status2.xsl
    Allstate.PHP не снимает правильно статистику. Делал все по мануалу.

    #!/usr/bin/php
    Где может быть проблема?

    • admin:

      много в чем=) какой дистрибутив? скрипт статистики в точности с мануала брали?

      • dimonw900:

        allstat.php

        #!/usr/bin/php
        <?php
        $file_name='http://93.81.239.10:8000/status2.xsl?mount=/live2.mp3&#039;;
        $r=fopen($file_name,'r');
        $text=fread($r,1000);
        fclose($r);
        $mass=explode(",", $text);
        $list=$mass [15];
        $mas=explode (" ", $mass [7]);
        $ti=substr($mas [0],7);
        $day=floor($ti/86500);
        $he=floor(($ti-$day*86500)/3600);
        $mi=floor(($ti-$day*86500-$he*3600)/60);
        $upt="".$day." days, ".$he." hours, ".$mi." minutes.";
        $s=0;
        echo $list."\n";
        echo $s."\n";
        echo $upt."\n";
        echo "/live2.mp3";
        =======================
        mrtg.cfg
        Options[live2.mp3]: nopercent, integer, gauge
        MaxBytes[live2.mp3]: 1000
        AbsMax[live2.mp3]: 1000
        Title[live2.mp3]: Listens
        PageTop[live2.mp3]: Radio Blues-Farwater-Live2
        YLegend[live2.mp3]: # of connections
        ShortLegend[live2.mp3]: L/s
        Legend1[live2.mp3]: # of listeners
        Legend2[live2.mp3]:
        Legend3[live2.mp3]: Maximal # of listeners
        Legend4[live2.mp3]:
        LegendI[live2.mp3]: # of listeners:
        LegendO[live2.mp3]:

        Linux Debian

        • dimonw900:

          $list=$mass [15];

          Этот параметр менял и на 9 и на 14.. Все равно ничего не выдает…

          var/log/mrtg
          ERROR: I Quit! Another copy of mrtg seems to be running. Check /etc/mrtg.pid
          Daemonizing MRTG …

        • dimonw900:

          mrtg.cfg

          Interval: 5
          RunAsDaemon: yes
          Refresh: 300
          Language: russian
          WorkDir: /var/www/mrtg
          WriteExpires: Yes
          WithPeak[_]: dwmy
          XSize[_]: 600
          YSize[_]: 200
          Title[^]: Graphs:

          Options[live2.mp3]: nopercent, integer, gauge
          MaxBytes[live2.mp3]: 1000
          AbsMax[live2.mp3]: 1000
          Title[live2.mp3]: Listens
          PageTop[live2.mp3]: Radio Blues-Farwater-Live2
          YLegend[live2.mp3]: # of connections
          ShortLegend[live2.mp3]: L/s
          Legend1[live2.mp3]: # of listeners
          Legend2[live2.mp3]:
          Legend3[live2.mp3]: Maximal # of listeners
          Legend4[live2.mp3]:
          LegendI[live2.mp3]: # of listeners:
          LegendO[live2.mp3]:

        • admin:

          #!/usr/bin/php
          < ?php
          $file_name='http://93.81.239.10:8000/status2.xsl';
          $r=fopen($file_name,'r');
          $text=fread($r,1000);
          fclose($r);
          $mass=explode(",", $text);
          $list=$mass [9];
          $mas=explode (" ", $mass [7]);
          $ti=substr($mas [0],7);
          $day=floor($ti/86500);
          $he=floor(($ti-$day*86500)/3600);
          $mi=floor(($ti-$day*86500-$he*3600)/60);
          $upt="".$day." days, ".$he." hours, ".$mi." minutes.";
          $s=0;
          echo $list."\n";
          echo $s."\n";
          echo $upt."\n";
          echo "/all";
          ?>

  18. dimonw900:

    Разобрался в моем случае это был параметр
    Target[live2.mp3]: `/etc/allstat.php`
    Точнее скобки « а у меня были »
    Спасибо за прекрасную статью.

Прокомментировать

XHTML: Вы можете использовать эти тэги для форматирования текста: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>