Статистика для IceCast2
03.07.2011Сегодня я расскажу вам как сделать статистику 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 , у вас должен быть другой путь и другая рабочая папка.
Если возникли вопросы пишите в комментариях.
Столкнулся с проблемой… После того как добавил в конфиг все станции и под каждую сделал свой скрипт все перестало работать. Вот ссылка:
http://fr2.makradio.ru:81/stat/
Не отрисовываются графики. В php скриптах под каждую станцию у меня все так же, кроме последней строчки.
У вас: echo «/all»;
У меня: echo «/tophit»; (то есть название станции, которое описывается в конфиге mrtg.
Что может быть?
Спасибо.
И что означает синий график?
Извините за спам. 🙂 все мои вопросы можно снять с повестки дня. я во всем смог разобраться. Ещё раз спасибо!
Добрый день! ребята есть проблема которую не могу решить! система работает шикарно! и графики выдает! но вот в графиках сам вывод информации не могу поменять! а то график показывает до 14 мб а выше то что идет он скидывает на ноль и поднимается заново! а можно чтоб график был фиксировано на 300 мб
Какие мб ? Вы о чем?
у меня график строит до 14 мбайт /с и падает на ноль а по коммутатору проверяю там около 23 мбайт/с тоесть мне приходится считать траффик (14 мбайт/с + остальное начиная с нуля то что по новой шкала в графике пошла) мне нужно было чтоб график был статичкский на оси Y чтоб сразу 50 мбайт/с показывала а сама шкала бегала по ее нагрузке,
я вас все равно не понял=))) напишите на почту support@pipradio.com , постараюсь помочь
Доброе время суток.
http://93.81.239.10/mtrg
http://93.81.239.10:8000/status2.xsl
Allstate.PHP не снимает правильно статистику. Делал все по мануалу.
#!/usr/bin/php
Где может быть проблема?
Доброе время суток.
http://93.81.239.10/mrtg
http://93.81.239.10:8000/status2.xsl
Allstate.PHP не снимает правильно статистику. Делал все по мануалу.
#!/usr/bin/php
Где может быть проблема?
много в чем=) какой дистрибутив? скрипт статистики в точности с мануала брали?
allstat.php
#!/usr/bin/php
<?php
$file_name='http://93.81.239.10:8000/status2.xsl?mount=/live2.mp3';
$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
$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 …
ну ответ как бы есть в ошибке
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]:
#!/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"; ?>
Разобрался в моем случае это был параметр
Target[live2.mp3]: `/etc/allstat.php`
Точнее скобки « а у меня были »
Спасибо за прекрасную статью.
Застрял на последнем действии:
administrator@administrator:~$ sudo indexmaker /etc/mrtg.cfg > /home/administrator/radio/index.html
ERROR: no H1 line pagetop property in all section
Не понял что требуется исправить, прошу помочь.
в начале конфига есть теги в h1 проверьте их
Конфиги брал с вашей статьи, может дело тогда в отсутствии этих тегов?
h1 в самом начале /etc/mrtg.cfg
Суть в том, что в PageTop нужно было указать h1 теги, а не PageTop[all]:All Listens и в итоге ошибка данная отпала.
В итоге имею mrtg.cfg:
Interval: 5
RunAsDaemon: yes
Refresh: 300
Language: russian
WorkDir: /home/administrator/radio/statistica
WriteExpires: Yes
WithPeak[_]: dwmy
XSize[_]: 600
YSize[_]: 200
Title[^]: Graphs:
Target[all]: `/etc/allstat.php`
Options[all]: nopercent, integer, gauge
MaxBytes[all]: 1000
AbsMax[all]: 1000
Title[all]: Listens
PageTop[all]: Staticstics
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]
А allstat.php такой:
#!/usr/bin/php
И в статистике данные стали появляться, но только неправдоподобные, т.к в IceCast в админке показано одно кол-во подключенных слушателей, а на графике данные неизменны уже 2 часа и равны почти 200-м.
Не могу понять в чем состоит ошибка.
задачу в крон добавили? крон рестартнули?
Cron у меня не стоит, радио вещаю с домашнего компа с Убунту 12.04
Вопрос — зачем крон, если прописано в конфиге mrtg
Interval: 5
RunAsDaemon: yes
И если все же крон нужен, то как его настроить обновлять статистику в mrtg?