Статистика для 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 , у вас должен быть другой путь и другая рабочая папка.
Если возникли вопросы пишите в комментариях.
ОС 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, например
Огромнейшее спасибо!!! Все получилось!!! Просто супер!