Category Archives: Администрирование

Мониторинг графиков cacti и оповещение

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

Указывается имя rrd файла и задаются границы, если значения из rrd файла выходят за его пределы то отправляется уведомление.

balance_071813_122633_PM

 

Выше показан пример, когда задана только нижняя критическая граница.

balance_071813_123457_PM

 

А это пример когда заданы две нижние границы. При достижении значения ниже 10к создается ошибка уровня WARNING, когда значение доходит ниже порога в 5к, ошибка получает уровень CRITICAL.

Код команды в конфиге нагиоса:

define command{
    command_name    level_check
    command_line    /usr/bin/env bash /usr/local/etc/nagios/scripts/rrd_level_checker.sh $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$
}

Параметры такие же как и для скрипта по проверке соотношения.

Конфиг для сервиса в конфиге нагиоса:

define service{                
    use main-service   
    host_name levelCheck
    service_description your text
    check_command level_check!file_114.rrd!0.5!2.3
}

В этом случае заданы только по одной верхней и нижней границе (CRITICAL).

Вот пример когда заданы по две границы:

define service{                
    use main-service   
    host_name levelCheck
    service_description your text
    check_command level_check!file_114.rrd!0.5!0.8!2.3!2
}

Для примера который отображен на второй картинке параметры выглядят так:

check_command fall_check!file_114.rrd!5!10!0!0

Настройка автоматического обновления баз GeoIP

В дополнение к предыдущей статье по теме GeoIP (определяем страну посетителя через nginx) настроим автоматическое обновление базы.

Для этого пишем простой скрипт на баше:

#!/usr/local/bin/bash

echo Start update at `/bin/date`
cd /usr/local/etc/nginx/data/geo/
/usr/local/bin/wget -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
echo Saved, unzip..
/usr/bin/gunzip -f GeoIP.dat.gz
echo Unziped, reload nginx
/usr/local/etc/rc.d/nginx reload
echo

Пути к файлам при необходимости нужно подправить естественно.

После этого сохраняем в файл и добавляем в крон, для примера так:

10 3 * * * /usr/local/bin/bash /usr/local/etc/geoip_update/update.sh >> /usr/log/script/geoip_update.log

В данном случае базы будут обновляться ежедневно в 03:10.

Оповещение о падении графиков Cacti через плагин для Nagios

Написал простой плагин для nagios который работает по простому принципу: берутся значения с rrd файла за последний час и значения за этот же промежуток день назад.

После чего вычисляються соотношения текущих ко вчерашним точкам и если какое то значение выходит за заданные пределы (минимальный и максивальный уровень) — плагин сигнализирует об ошибке.

(на рисунку прозрачным цветом нарисован график за предыдущий день)

Для nagios нужно прописать в objects/commands.cfg следующие строки

define command{
    command_name    fall_check
    command_line    /usr/bin/env bash /usr/local/etc/nagios/scripts/rrd_fall_checker.sh $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$
}

ARG1 — имя rrd файла (без абсолютного пути, он настраивается в самом файле плагина)

А дальше возможны варианты:

Если указаны только аргументы 2 и 3:

  • ARG2 — минимальный критический порог
  • ARG3 — максивальный критический порог (0 или пусто -верхней границы не задано)

Если указаны все аргументы то задаются отдельно значения для уровня критического уровня и предупреждения (нагиос будет показывать статус CRITICAL, WARNING соответственно):

  • ARG2 — минимальный критический порог
  • ARG3 — минимальный порог предупреждения
  • ARG4 — максивальный критический порог (0 или пусто -верхней границы не задано)
  • ARG5 — максимальный порог предупреждения

Конфиг для сервиса на проверку выглядит примерно так:

define service{                
    use main-service   
    host_name fallCheck
    service_description your text
    check_command fall_check!file_114.rrd!0.5!2.3
}

В данном случае задан порог с 0.5 до 2.3 и при выходе за заданные границы будет критическое уведомление.

Либо так:

define service{                
    use main-service   
    host_name fallCheck
    service_description your text
    check_command fall_check!file_114.rrd!0.5!0.8!2.3!2
}

В этом случае, если ратио опустится ниже 0.8 — будет ошибка уровня WARNING. Если ниже 0.5 то уже CRITICAL. Аналогично и для верхней границы.

Если нужно указать только нижние границы то можно использовать такую запись:

check_command fall_check!file_114.rrd!0.5!0.8!0!0

Сам плагин доступен на гитхабе: https://github.com/unkn0wn404/Nagios.FallChecker

Требует наличия bash и php. Можно было бы обойтись и без пхп конечно, но было лень маяться с логикой проверки ратио в баше.

Update: изначально логика была такова, что при выходе за границы получалась критическая ошибка, а если для последние значения находятся в норме, то показывался ворнинг, пока предыдущие значения за полчаса тоже вернуться в нормальные границы. Как показала практика такой подход неправильный и теперь границы для разных ошибок задаются по разному, а если не заданы то используется только критическое уведомление.

Настройка тунельного vpn на freebsd

Если у вас есть свой сервачок/впска не особо загруженная задачами, почему бы не поднять на ней впн сервер для себя? Пригодится например при работе в открытых вайфай сетях что бы обезопасить свой трафик.

Впн будем поднимать типа pptp с использованием mpd5. Я бы не писал эту статью если бы не один затык — настроив по типовому примеру мпд, впн у меня подключался, но доступен был только сервер на котором этот самый впн стоит. А дело все в том, что нужно было еще настроить NAT на сервере.

Итак ставим mpd5:

cd /usr/ports/net/mpd5 && make install clean
echo 'mpd_enable="YES"' >> /etc/rc.conf
# Если не делали этого раньше, то еще это:
echo 'gateway_enable="YES"' >> /etc/rc.conf

В /usr/local/etc/mpd5/ переименовываем все файлы удаляя с них .sample

Конфиг mpd.conf:

startup:
    #set user foo bar admin
    #set user foo1 bar1
    set console self 127.0.0.1 5005
    set console open
    set web self 127.0.0.1 5006
    set web open
default:
    load pptp_server
pptp_server:
    set ippool add pool1 192.168.10.100 192.168.10.200
    # Create clonable bundle template named B
    create bundle template B
    set iface enable proxy-arp
    set iface idle 1800
    set iface enable tcpmssfix
    set ipcp yes vjcomp
    # Specify IP address pool for dynamic assigment.
    set ipcp ranges 192.168.10.1/32 ippool pool1
    set ipcp dns 8.8.8.8 8.8.4.4
    # The five lines below enable Microsoft Point-to-Point encryption
    # (MPPE) using the ng_mppc(8) netgraph node type.
    set bundle enable compression
    set ccp yes mppc
    set mppc yes e40
    set mppc yes e128
    set mppc yes stateless
    # Create clonable link template named L
    create link template L pptp
    # Set bundle template to use
    set link action bundle B
    # Multilink adds some overhead, but gives full 1500 MTU.
    set link enable multilink
    set link yes acfcomp protocomp
    set link no pap chap
    set link enable chap
    set link keep-alive 10 60
    # We reducing link mtu to avoid GRE packet fragmentation
    set link mtu 1460
    # Configure PPTP
    # Внешний айпи
    set pptp self 1.1.1.1
    # Allow to accept calls
    set link enable incoming

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

Вместо 1.1.1.1 задайте внешний айпи сервера — куда вы будете подключаться.

Далее, в mpd.secret задайте логины/пароли пользователей впна по примеру.

Настройка впна завершена. Запускайте.

service mpd5 start

Проверим еще айпи форвардинг.

sysctl -a | grep ip.forward
# если получили ответ net.inet.ip.forwarding: 0
# то выполняем
sysctl net.inet.ip.forwarding=1

После этого нужно настроить NAT. Делаем это с использованием ipnat:

Добавим следующее в /etc/rc.conf:

ipnat_enable="YES"
ipnat_program="/sbin/ipnat"
ipnat_rules="/etc/ipnat.rules"
ipnat_flags=""

И создадим файл /etc/ipnat.rules с таким содержимым:

map re0 from 192.168.10.0/24 to any -> 1.1.1.1/32

Где вместо 1.1.1.1 подставляете внешний айпи сервера. А вместо re0 — интерфейс на котором этот айпи висит. Посмотреть можно через команду ifconfig:

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:16:3e:bd:1b:fd
        inet 1.1.1.1 netmask 0xffffff00 broadcast 212.71.10.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active

Все готово, запускаем ipnat и пробуем подключаться к впн.

service ipnat start

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

P.S. впн такого типа можно настроить так же най айфонах/айпадах для тех же целей.

RSync — классная штука.

Хотел просто поделиться радостью от работы с утилитой rsync.

Очень удобно, например, для релиза проекта. Сначала подготавливаете на локальной машине нужные файл, как вы это будете делать это уже зависит от стиля разработки. А потом запускаете rsync что бы закинуть файлы на удаленную машину. При этом еще настраиваете авторизацию ssh по ключу (что бы не вводить пароль каждый раз) и все происходит по одному запуску скрипта.

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

Только  надо помнить что на удаленной машине тоже должен быть установлен rsync. Это меня несколько огорчило, но пока проблем не доставило, но вообще возможно доставит.

Такие пироги.