После миграции с transmission версии 1.20 на версию 1.33, я понял, что мне не хватает графиков загрузки проца+отдача+загрузка. Попробовал rrdtool, не понравилось, что он каждые пять минут нагружает проц на 90%. В связи с этим написал скриптик для сбора данных от transmission, и прикрутил его к gnuplot, который использовался в версии 1.20.
Логика работы:
- По cron`у, раз в пять минут запускается скрипт.
- В скипте у трансмиссии запрашивается данные по торрентам(transmission-remote -l). В файл transfer.log кладутся данные для обычного просмотра(можно удалять), в файл transfer.data - для рисования. Здесь используется awk.
- Раз в час cron запускает gnuplot для создания графика. Лучше это сделать при вызове из интерфейса, но я пока не разобрался в веб-интерфейсе transmission 1.33.
- Раз в день cron запускает logrotate, который текущие файлы с данными сжимает, а старые удаляет. Делается для того, чтобы не было переполнения диска.
Внимание:
- Работает только с целыми часовыми поясами. Если нужно что-то другое то меняйте руками параметр timezone.
- В том виде, как здесь приведено, создается файл для создания графика и для обычного просмотра. Второй можно не создавать, тогда нужно удалить секцию из скрипта и конфигурационного файла logrotat`а.
Считаю, что человек, который будет делать то, что написано далее, умеет редактировать скрипты (например, при помощи vi), имеет установленный и настроеный transmission, соот-но есть /opt.
Инструкция по установке:
- Необходимые пакеты, ест-но, кроме transmission; в скобках указываю версию, на которой у меня работает:
- awk - утилита для обработки текста(gawk - 3.1.6-1);
- cron - программа для запуска чего-либо по расписанию (cron - 4.1-7);
- gnuplot - программа для создания рисунков из текстовых файлов с данными(gnuplot - 4.2.2-2).
- logrotate - утилита для ротации логов (logrotate - 3.7.1-4).
Наличие установленого пакета проверять командой ipkg list_installed | grep 'cron':
Установку пакетов осуществлять в штатном порядке, утилитой ipkg.Code:[admin@dtr_rout nbdmsan]$ ipkg list_installed | grep 'cron' cron - 4.1-7 - Standard vixie cron, with cron.d addition- Проверяем наличие всех необходимых каталогов
Если какого-то каталога нет, то создаем его при помощи команды mkdir:Code:[admin@dtr_rout nbdmsan]$ ls /opt/etc/transmlog/ transfer.gnuplot transfer.png [admin@dtr_rout nbdmsan]$ ls /opt/etc/cron.5mins/ tr_load.sh [admin@dtr_rout nbdmsan]$ ls /opt/var/log/ messages messages.1.gz messages.3.gz messages.5.gz messages.7.gz messages.9.gz transfer.data transfer.log messages.0 messages.2.gz messages.4.gz messages.6.gz messages.8.gz transfer.data.1.gz transfer.log.1gz [admin@dtr_rout nbdmsan]$ ls /opt/etc/logrotate.d transmlog.conf
Code:mkdir /opt/etc/transmlog/- B каталоге /opt/etc/cron.5mins/ создаем скрипт следующего содержания:
Если не разбираетесь в скриптах, то набивать руками не советую (копируйте) - очень важно соответствие следующих символов '"`{. Я очень долго их подбирал :-).Code:#!/bin/sh plotdata="/opt/var/log/transfer.data" textdata="/opt/var/log/transfer.log" timezone=`/bin/date +%z | /opt/bin/awk '{print int($1)/100}'` #data for text load=`cat /proc/loadavg | /opt/bin/awk '{print $1}'` time=`/bin/date '+%Y.%m.%d %T'` upload=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($4,".")) {total+=int($4)} else {total+=int($5)}}; END { print total }'` download=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($4,".")) {total+=int($5)} else {total+=int($6)}}; END { print total }'` /bin/echo $time " " "LOAD" " " $load " " "UP" " " $upload " " "DOWN" " " $download >> $textdata #data for gnuplot # load=`cat /proc/loadavg | /opt/bin/awk '{print $1}'` time=`/bin/date '+%s'` let "time = $time + ( 3600 * $timezone )" # upload=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($4,".")) {total+=int($4)} else {total+=int($5)}}; END { print total }'` # download=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($4,".")) {total+=int($5)} else {total+=int($6)}}; END { print total }'` let "download = 0 - $download" /bin/echo $time $download $upload $load >> $plotdata
В строке
то, что между "" должно быть табуляцией, при копировании вставляется как пробелы.Code:/bin/echo $time " " "LOAD" " " $load " " "UP" " " $upload " " "DOWN" " " $download >> $textdata
Если Вам не нужны данные в тектовом виде, то можно удалить секцию ##data for text, но тогда нужно раскоментировать строки, начинающиеся с "# ".
UPD. В версии Transmission 1.50 немного поменяли вывод transmission-remote -l, соответственно в скрипте должно быть:
Code:upload=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($5,".")) {total+=int($5)} else {total+=int($6)}}; END { print total }'` download=`/opt/bin/transmission-remote -l | /opt/bin/awk '{if (index($4,".")) {total+=int($6)} else {total+=int($7)}}; END { print total }'`- Ставим скрипту атрибуты на выполнение
Code:chmod +x /opt/etc/cron.5mins/tr_load.sh- Создаем файл настроек для gnuplot - /opt/etc/transmlog/transfer.gnuplot со следующим содержанием:
/opt/etc/transmlog/transfer.png - куда генерировать график. /opt/var/log/transfer.data - откуда брать данные.Code:set terminal png small size 800,320 set output '/opt/etc/transmlog/transfer.png' set xdata time set timefmt "%s" set format x "%H:%M\n%m/%d" set ytics nomirror set y2tics nomirror set y2range [0:] set ylabel "Transmission transfer rate [kB/s]" set y2label "System load" set y2tics 1 set xlabel "Time" plot '/opt/var/log/transfer.data' using ($1):2 title 'download' axis x1y1 with impulses, '/opt/var/log/transfer.data' using ($1):3 title 'upload' with impulses, '/opt/var/log/transfer.data' using ($1):4 axis x1y2 title 'load' with lines quit- Основной файл конфигурации /opt/etc/logrotate.conf у меня выглядит так:
Его цель - ротация основного лога. Основной лог у меня слинкован на /opt/var/log/messages при помощи командыCode:compress /opt/var/log/messages { size 1024k weekly rotate 9 postrotate killall -HUP syslogd endscript } include /opt/etc/logrotate.d
Создаем файл /opt/etc/logrotate.d/transmlog.conf с содержимым:Code:ln -s /tmp/syslog.log /opt/var/log/messages
Code:/opt/var/log/transfer.data { compress size 1024k daily rotate 9 } /opt/var/log/transfer.log { compress size 1024k daily rotate 9 }- Добавляем в /opt/etc/crontab строки
Code:*/5 * * * * admin /opt/etc/cron.5mins/tr_load.sh 1 * * * * admin /opt/bin/gnuplot /opt/etc/transmlog/transfer.gnuplot 0 0 * * * admin /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null- Проверяем что работает
Code:[admin@dtr_rout root]$ /opt/etc/cron.5mins/tr_load.sh [admin@dtr_rout root]$ ls /opt/var/log/transfer.* /opt/var/log/transfer.data /opt/var/log/transfer.log [admin@dtr_rout root]$ date Mon Sep 22 15:23:06 UCT 2008 [admin@dtr_rout root]$ tail /opt/var/log/transfer.log 2008.09.22 14:45:02 LOAD 0.26 UP 94 DOWN 0 2008.09.22 14:50:02 LOAD 0.08 UP 70 DOWN 0 2008.09.22 14:55:02 LOAD 0.04 UP 72 DOWN 0 2008.09.22 15:00:01 LOAD 0.00 UP 66 DOWN 0 2008.09.22 15:05:02 LOAD 0.15 UP 42 DOWN 0 2008.09.22 15:10:02 LOAD 0.03 UP 54 DOWN 0 2008.09.22 15:15:01 LOAD 0.02 UP 40 DOWN 0 2008.09.22 15:20:01 LOAD 0.07 UP 80 DOWN 0 2008.09.22 15:20:37 LOAD 0.19 UP 100 DOWN 0 2008.09.22 15:23:02 LOAD 0.01 UP 60 DOWN 0 [admin@dtr_rout root]$ /opt/bin/gnuplot /opt/etc/transmlog/transfer.gnuplot [admin@dtr_rout root]$ ls -la /opt/etc/transmlog/ total 20 drwxr-xr-x 2 admin root 4096 2008-09-22 14:17 . drwxr-xr-x 12 admin root 4096 2008-09-22 08:18 .. -rwxr--r-- 1 admin root 554 2008-09-22 14:20 transfer.gnuplot -rw-r--r-- 1 admin root 5711 2008-09-22 15:25 transfer.png
После этого можно смотреть график в /opt/etc/transmlog/transfer.png.
Осталось внедрить эту картинку в web-морду transmission и буду я доволен.
Может кто-нибудь помочь с JSON и внедрением картинки?
UPD. после обновления до transmission - 1.41b4-1 работает.