Колхозное нагрузочное тестирование

Июнь 27, 2015 · Posted in Без рубрики · Comment 

Дано:
Приложение (на golang,в данном случае, но не суть важно).
Нужно:
Протестировать его под нагрузой. В частности, время ответа.

Простой способ, как протестировать приложение и получить график результата, без заморочек с graphite и ему подобных:

Идем на xively.com (бывший cosm) и регистрируем там девайс и канал.
Запускаем наше приложение на локале.
Пример скрипта проверки приложения и отсылки результата в xively:

#!/bin/bash
# file testing.sh

TIME=`curl -s -w "#"%{time_total}   -XPOST -H 'Content-type: application/json' -d"{\"session_id\":\"sess\", \"chan\":\"channel\"}" http://localhost:8000/api/v1/get_data | cut -d'#' -f2`
VALUE=`echo "$TIME*1000" | bc`
POSTDATA="{\"version\":\"1.0.0\", \"datastreams\" : [{\"id\" : \"ch\", \"current_value\" : \"$VALUE\"}]}"
echo $POSTDATA
curl -XPUT -H 'X-ApiKey: DSFewrwewWEDVdfsdfsfdsf' -d"$POSTDATA" https://api.xively.com/v2/feeds/24234342

и запускаем это:

watch -n 1 ./testing.sh

Идем на сайт xively и смотрим на наш график.
Добавляем нагрузку:

#!/bin/bash
#file run_ab.sh
ab -T POST  -c20 -n20 -p ab.txt http://localhost:8000/api/v1/get_data

Тут, думаю, все понятно. Утилита apache ab tester из пакета apache-utils, файл с post-данными и параметры.
Запскаем нагрузку:

watch -n 1 ./run_ab.sh

Вуаля.
Получаем какой-то более-менее, правдивый график, типа такого:
Screenshot from 2015-06-29 10:08:30

Полезное

Январь 13, 2013 · Posted in Без рубрики · Comment 

Фейсбук для графиков

Для построения графиков можно поставить где-то на хостинге Munin И написать к нему плагинчик.

Или пойти более олдскульным путем и заюзать rrdtool напрямую. А можно не заморачиваться, и скормить свои данные полезному сервису, который нарисует и сохранит все Ваши графики.

Я, для примера, вывел данные о посещаемости RO-сервера: https://cosm.com/feeds/97476


Для начала хватит и этой доки: https://cosm.com/docs/v2/feed/update.html

PS: попутно нашел хороший сервис для проверки (GET, POST) запросов: http://www.hurl.it/

Проверить почту из bash

Скрипт, нарытый на просторах и немного доработанный. Возвращает количество непрочитанных сообщений.

atomlines=`wget -T 3 -t 1 -q --secure-protocol=TLSv1 --no-check-certificate --user=USERNAME@gmail.com --password=PASSWORD \ https://mail.google.com/mail/feed/atom/LABEL -O - | grep -Po '^.*?\K(?).*?(?=
echo $atomlines 

LABEL — это новые письма по метке, можно убрать, тогда будет просто инбокс

https://api.cosm.com/v2/feeds/97476/datastreams/players.png?width=730&height=250&colour=%23f15a24&duration=1day&show_axis_labels=true&detailed_grid=true&scale=auto&timezone=UTC

SSH, ограничение домашним каталогом

Сентябрь 4, 2010 · Posted in Без рубрики · Comment 

Проще говоря, ssh chroot.

Имеем сервер FreeBSD  7.2-RELEASE

Нужно дать ssh под один проект, но не хочется, чтоб там лишнее путалось под ногами, пусть ему будет доступна только его домашняя директория и Павлик Аштеэмэл. Поэтому копаем Гугль.

Из сотен похожих способов решения, находим один, который работает и отлично описан.

http://www.hilik.org.ua/chroot-ssh-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0/

Из дополнительных действий — это лишь копирование bash, который у меня в качестве шела юзеру.

На всякий случай, продублирую сам скрипт

#!/bin/sh
# В скрипт нужно передавать имя пользователя для которого создаем chroot окружение
if [ "$1" = "" ] ; then
  echo "    Usage: $0 [ username ]"
  exit
fi

USER=$1
GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4`
HOME=/home/$USER

# Задаем список бинарей, нужных для работы в chroot

BINS="
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/csh \
/bin/date \
/bin/df \
/bin/echo \
/bin/expr \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/usr/bin/awk \
/usr/bin/bzip2 \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/ee \
/usr/bin/fetch \
/usr/bin/find \
/usr/bin/grep \
/usr/bin/gunzip \
/usr/bin/gzip \
/usr/bin/less \
/usr/bin/sed \
/usr/bin/sort \
/usr/bin/scp \
/usr/bin/ssh \
/usr/bin/tail \
/usr/bin/tar \
/usr/bin/touch \
/usr/bin/vi \
/usr/bin/uname \
/usr/bin/uptime \
/usr/local/bin/mc \
/usr/local/bin/mcedit \
/usr/local/bin/mcmfmt \
/usr/local/bin/unrar \
/usr/local/bin/unzip \

"

# Создаем структуру каталогов chroot окружения
mkdir $HOME/bin
mkdir $HOME/etc
mkdir $HOME/home
mkdir $HOME/home/$USER
mkdir $HOME/lib
mkdir $HOME/libexec
mkdir $HOME/tmp
mkdir $HOME/usr
mkdir $HOME/usr/bin
mkdir $HOME/usr/local
mkdir $HOME/usr/local/bin
mkdir $HOME/usr/local/etc
mkdir $HOME/usr/local/share

# Копируем бинарники в chroot окружение
for item in $BINS;
do
  cp $item $HOME$item
done

# Определяем какие библиотеки необходимо скопировать chroot
for item in $BINS;
do
  ldd $item |awk '{print $3}'|grep "."  >> /tmp/libs
done

# Копируем библиотеки
for item in `cat /tmp/libs|sort|uniq`;
do
  cp $item $HOME/lib/
done

# Копируем оставшиеся необходимые файлы и библиотеки
cp /etc/termcap $HOME/etc/termcap
cp /etc/resolv.conf $HOME/etc/resolv.conf
cp /etc/nsswitch.conf $HOME/etc/nsswitch.conf
cp -R /usr/local/share/mc $HOME/usr/local/share/mc
cp /libexec/ld-elf.so.1 $HOME/libexec/ld-elf.so.1

# Создадим /etc/motd для пользователя
echo "Welcome $USER" > $HOME/etc/motd

# Теперь /etc/profile для него же
echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile
echo 'export PS1="$ "' >> $HOME/etc/profile

# /etc/group тоже нужен свой
cat /etc/group | grep $GID > $HOME/etc/group

# Теперь внутри chroot создадим пользователя
cat /etc/master.passwd|grep "^$USER:" > $HOME/etc/master.passwd
pwd_mkdb -d $HOME/etc $HOME/etc/master.passwd

# Выставляем права
chown root:wheel  $HOME
chmod 755 $HOME
chmod 755 $HOME
chown -R $USER:$GID $HOME/bin
chown -R $USER:$GID $HOME/etc
chown -R $USER:$GID $HOME/home
chown -R $USER:$GID $HOME/lib
chown -R $USER:$GID $HOME/libexec
chown -R $USER:$GID $HOME/tmp
chown -R $USER:$GID $HOME/usr
chmod 777 $HOME/tmp

# Убираем за собой
rm /tmp/libs

Ну и часть конфига ssh для этого юзера:

Match User пользователь
ChrootDirectory /home/%u