2009
12.04

ОБЩЕЕ

Зачем это надо ?

1. Все настройки в одном конфиге, согласно меткам slaves= каждый слейв получит свой конфиг

2. Все отображение в одном месте, на быстром сервере.

3. Лично мне понадобилось – надо пинговать девайсы с нереальными ип, строить роутинг от веб-сервера, где стоит смок, к ним не хочется.
Поскольку уже есть сервер с коннективити к девайсам, решил на нем поднять слейв смока. На нем _не_ ставится апач и ррдтул.

4. На сайте смокпинга пишут что таким образом можно оценивать задержку к одному и тому же хосту с разных точек (слейвов). Т.е. пинговать хост будет мастер и все слейвы. Примеры таких графиков можно посмотреть на сайте разработчика [3].

Идеология работы

Один мастер, много слейвов.

Слейвы описываются в соответсвующем разделе конфига мастера. Каждому слейву назначается пароль. Далее для таргетов выставляется с каких слейвов они будут пинговаться. Привязка слейвов к хостам наследуется по дереву хостов, т.е. слейв можно указать один раз при описании хостов и они все будут опрашиваться этим слейвом. Пустое поле слейва отменяет наследование.

Протокол

Слейв общается с мастером по HTTP. Запросы инициирует только слейв.

При запуске слейв передает свое имя и пароль мастеру. При каждом запросе передается и время последней модификации конфига. Мастер отдаст слейву новый конфиг если он обновился.
В первом запросе время = 0 и слейв получает стартовый конфиг от мастера. В конфиге описаны переменные, пробы и дерево хостов этого слейва.
Слейв запускает пробы с указанным интервалом и отправляет данные обратно на сервер. В ответе может получить новый конфиг.

Вот пример отправки результатов со слейва на мастер

POST /smokeping.cgi HTTP/1.1
 TE: deflate,gzip;q=0.3
 Connection: TE, close
 Host: smokeping.local
 User-Agent: smokeping-slave/1.0
 Content-Length: 1057
 Content-Type: multipart/form-data; boundary=xYzZY
 
--xYzZY
 Content-Disposition: form-data; name="slave"
 
border
 --xYzZY
 Content-Disposition: form-data; name="key"
 
1111111111111111111111111111111111
 --xYzZY
 Content-Disposition: form-data; name="protocol"
 
2
 --xYzZY
 Content-Disposition: form-data; name="data"
 
/Private_net/10_5_47_x/10_5_47_7     1259932521
 U:3:6.8282000000e-01:U:6.0810000000e-01:6.5105000000e-01:6.6579000000e-01
 :6.6731000000e-01:6.6934000000e-01:6.7052000000e-01:6.7159000000e-01
 :6.8247000000e-01:6.8282000000e-01:6.8563000000e-01:6.8909000000e-01
 :6.9390000000e-01:7.3333000000e-01:7.3340000000e-01:7.6951000000e-01
 :8.8933000000e-01:9.6087000000e-01:U:U
 --xYzZY
 Content-Disposition: form-data; name="config_time"
 
1259931976

НАСТРОЙКА

Исходные данные

Есть веб сервер с установленым апачем и смокпингом. Что-то с него уже пингуется. Необходимо пинговать хосты в некой приватной сети. Связывать веб сервер с приватной сетью нежелательно. Есть сервер на границе приватной сети. Связь от него до веб сервера есть.

Сервера на FreeBSD, у вас могут отличаться пути.

Задача

Установить на пограничном сервере смокпинг и поключить
в режиме слейва к смокпингу на веб сервере.

Мастер

Прописываем слейв с именем border

*** Slaves ***
 secrets=/usr/local/etc/smokeping/secrets
 
+border
 display_name=keeper
 color=0000ff

Описание группы хостов, которые будут пинговаться со слейва.
Чтобы их не пинговал мастер указано «nomasterpoll= yes»

++ Private_net
 menu= Private net
 title= Private net
 probe= FPing
 nomasterpoll= yes
 slaves= border
 
+++ 10_5_47_x
 menu= 10.5.47.x
 title= 10.5.47.x
 
++++ 10_5_47_7
 menu= 10.5.47.7
 title= 10.5.47.7
 host= 10.5.47.7

В файле /usr/local/etc/smokeping/secrets для каждого слейва пишем строку логин:пароль

border:pass123

Слейв

Ставим smokeping.

cd /usr/ports/net-mgmt/smokeping/
make install clean

В файл /etc/rc.conf добавляем
smokeping_enable=»YES»

Правим /usr/local/etc/rc.d/smokeping
Вместо
command_args=»–logfile=${smokeping_logfile}»
пишем
command_args=»–logfile=${smokeping_logfile} –slave-name=border –master-url=http://smokeping.local/smokeping.cgi –cache-dir=/usr/local/var/smokeping/ –shared-secret=/usr/local/etc/smokeping/secrets»

–slave-name=border – имя слейва, по дефолту `hostname`, указано явно для удобства,
короче чем полное и нету привязки

http://smokeping.local/smokeping.cgi – адрес рабочего смокпинга

/usr/local/var/smokeping/ – временная папка

Взлетаем – /usr/local/etc/rc.d/smokeping start

Чтобы изменить конфиг (и на слейвах тоже) правим его только! на мастере.
Потом /usr/local/etc/rc.d/smokeping reload
Теперь слейв получит новый конфиг когда будет сливать
на мастер результаты своих пингов, обычно раз в 5 минут.

ПРОБЛЕМЫ

установка

При установке из портов также ставятся порты smnp и rrdtool, которые при работе в режиме слейва не нужны. Как этого избежать пока не понял. Скачал smokeping в виде package, развернул и скопировал куда надо. Убрал ссылки на snmp и rrd. Потом из портов доставил p5-Digest-HMAC и p5-libwww-5.805.

права доступа

rrd файлы создаются процессом smokeping,
данные от слейвов вносятся smokeping.cgi из-под апача.
Для внесения данных нужны права для записи в файл и
директорию, где файл находится (для локов)
Директория с базами ррд /usr/local/var/smokeping/

RemoteFPing

У меня на мастере настроен RemoteFPing.
Ходит через ssh (авторизация по ключам) на другой сервер
и оттуда пингует хосты.

На слейве ключей нету, но он получает в конфиге описание пробы RemoteFPing и пытается ломиться по ssh
Пока отключил правкой в файле /usr/local/smokeping/lib/Smokeping/probes/RemoteFPing.pm :

sub binary {
  my $self = shift;
  return $self->{properties}{rbinary};
}

Позже на том сервере подниму еще один слейв и уберу RemoteFPing,
чем и решу проблему.

Ссылки

  1. Сайт смокпинга
  2. Описание мастер/слейв
  3. Пример работы

No Comment.

Add Your Comment