Статистика для IceCast2
03.07.2011Сегодня я расскажу вам как сделать статистику icecast2 в виде графика, используя MRTG и скрипт на php.
Для этого нам понадобится:
- Сервер IceCast2
- MRTG(программа для построения графиков)
- Доступ к серверу по ssh
Установка MRTG.
Установить MRTG в debian и ubuntu можно командой :
1 | apt-get install mrtg |
На этом собственна и вся установка, так что переходим к настройке.
Настрока MRTG
После установки файл конфигурации MRTG должен находит в /etc/mrtg.cfg, отредактируем его:
1 | nano /etc/mrtg .cfg |
ВАЖНО!
Если собираетесь использовать MRTG только для снятия статистики IceCast2, то можете смело удалять все содиржимое конфига, и вставить следующие строки:
1 2 3 4 5 6 7 8 9 | 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: |
Тут не много объясню, что к чему.
1 | Interval: 5 |
Время обновления графиков в минутах.
1 | RunAsDaemon: yes |
Стартовать MRTG как демон.
1 | WorkDir: /var/www/pipradio .net /web/statistica |
Папка куда будут складываться файлы.(можно создать например поддомен ice.pipradio.com)
1 2 | XSize[_]: 600 YSize[_]: 200 |
Размер графиков.
Теперь создаем скрипт, который будет собирать статистику радио со всех потоков:
1 | nano /etc/allstat .php |
И втсавляем следующие:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/usr/bin/php < ?php $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" ; ?> |
Если же вы хотите снимать статистику с какого-то одного потока, то скрипт будет выглядить так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/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)
Теперь даем права на выполнение скрипта:
1 | chmod 755 /etc/allstat .php |
И добавляем наш скрипт в конфиг MRTG:
1 | nano /etc/mrtg .cfg |
Вниз вставляем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
1 | env LANG=C /usr/bin/mrtg /etc/mrtg .cfg |
Если ошибок вида Target[all][_IN_] ‘ $target->[1]{$mode}
нет ,значит все хорошо, если есть, проверьте ваш сервер, и в случаи снятия статистики с отдельного потока, проверьте есть ли он.
Теперь нам нужно создать файл index.html, для этого используем команду:
1 | indexmaker mrtg.cfg > /var/www/pipradio .net /web/statistica |
После чего заходим смотреть нашу статистику по адресу pipradio.net/statistica
На этом настройка завершена, графики должны заработать.
В примере указан сайт pipradio.net , у вас должен быть другой путь и другая рабочая папка.
Если возникли вопросы пишите в комментариях.
ОС Centos 5, Icecas2 + ices (хотя последний как таковой роли не играет).
Сделал все как вы описали, кое какие команды в Centos отличаются, но да это не столь важно, если потратить немножко времени и делать все внимательно то все должно поставится, при этом лично у меня не выдало ни одной ошибки.
Значит в результате я создал директорию и индекс файл в котором по идеи будет собираться статистика:
http://viptrophy.com/web/statistica/index.html
Но статистика к большому сожалению не отображается в виде графика, не могу понять почему. Хотя проделывая все как написано выше у меня не было ни одной ошибки.
В директории в которой должна отображаться статистика есть мной созданый:
index.html
и автоматически сгенерированый index.html.meta (размером 39).
Вот немогу понять почему нет графика? Что то я сделал не правильно, или что то не работает? или нужно время что б была инфомация для формирования графика… Подскажите пожалуйста что делать ?
cron проверьте
Извините за возможно слишком примитивный вопрос. Что значит крон проверьте?
я так понимаю вся проблема в том что у меня не отрабатывает сам файл РНР
etc/mrtg/allstat.php
и по всей логике он должен работать по крону, через какое то определенное время ?
если мысль в этом направлении, пожалуйста напишите какую строчку нужно поставить в крон, центоса файл лежит etc/mrtg/allstat.php
и интереса ради, объясните — где в самой статье упоминается о кроне, или я что то пропустил или не внимательно прочел?
(Новичок, приношу извинения за назойливость, и большое спасибо за статью)!
в статье нет ничего про крон, так как прописано в конфиге, но если не работает, то можно через крон запускать, например:
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 минуть
Я выполнил команду в ПУТТИ, ничего не произошло.
после чего поставил строку :
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, но ничего в него не пишет.
Возможно я где то допускаю ошибку?
в путти выполните env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
[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 ~]#
и ничего не произошло.
на почту скинул =)
Большое, большое СПАСИБО!
все сделал как вы написали в письме. у меня почему то mrtg.cfg — содрал первоначальные настройки, заменил на те что были отправлены в письме, запустил создание ИНДЕКСА. сразу создалось несколько файлов и картинок для графика.
Еще раз спасибо, первоочередную (запланированную задачу) выполнил, в свободное время буду экспериментировать дальше.
Спасибо что помогаете, делитесь опытом! Я по вашим статьям и айскаст ставил! Удачного дня.
да незачто=) странно что айскаст у вас встал, в статье есть парочка ошибок в конфиге . Если будут вопросы пишите, постараемся помочь
Там с айскастом отдельно — много сил и экспериментов, но стал и работает ))
Посмотрите пожалуйста:
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
и кажется еще чего то не хватает
все номрально=) если задачу в крон добавили, графики будут обновлятся каждые 5 минут, и соотвественно, если кто-то слушает 5 и более минут, он будет отображен в графике, сейчас подключусь и оставлю, а вы подождите пока график обновится
Здравствуйте, поставил данную стату но выдает такую штуку:
http://www.radio/stats/all.html
В чем косяк?
в кодировки
Приветствую! Отличная статья, пока ещё не пробовал все это повторить, хочу прежде спросить: на том сервере, куда мы всё это станавливаем и настраиваем, должен быть установлен апач?
Если его там нет, то как будут выполняться php скрипты?
Спасибо.
без апача(или другова веб сервера) не будут выполняться php скрипты =)
Скажите, пожалуйста, в 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 что нужно будет дописывать под каждый поток?
Заранее спасибо!
Еще раз статью прочитайте :
Теперь создаем скрипт, который будет собирать статистику радио со всех потоков:
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]
И ещё вопрос. Пытаюсь выполнить команду для создания index.html — в ответ получаю следующее:
ERROR: no H1 line pagetop property in all section
Соответственно файл создается пустой. Что нужно поправить?
Спасибо.
В выводе ошибки есть ответ:
В секции PageTop добавить H1, например
PageTop[nonstop]:<h1>Radio Listens NONSTOP</h1>
Огромнейшее спасибо!!! Все получилось!!! Просто супер!