Установка Webalizer

Webalizer — программа составления отчетов и статистики по log файлам.

Допустим есть установленный веб-севрер Apache2, например как я описывал в этой статье — Установка и настройка веб-сервера Apache2

Читать далее Установка Webalizer

Оповещения Zabbix по телефону через Asterisk

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

Наведу пример варианта оповещений Zabbix используя телефонный вызов через Asterisk.

У Asterisk должен быть загружен модуль, для этого откроем файл конфигурации модулей, например в редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/asterisk/modules.conf

И проверим есть ли cтрока, если нет — добавим:

load => pbx_spool.so

А также подгрузим его в данный момент:

sudo asterisk -rvv
module load pbx_spool
quit

В моем случае Zabbix и Asterisk находятся на разных серверах.

На сервере с Asterisk я написал русский текст уведомления в текстовый файл high_temperature.txt которое должно воспроизвестись при звонке.

Установил festival, русский мужской голос чтобы конвертировать текст в звуковой файл и rsync чтобы копировать файл звонка на сервер Asterisk:

sudo apt-get install festival festvox-ru rsync

Собственно команда конвертации текста в звуковой файл:

text2wave -eval '(voice_msu_ru_nsh_clunits)' < high_temperature.txt > high_temperature.wav

Далее конвертировал формат файла wav в ulaw, так как у меня используется он:

sox -V high_temperature.wav -r 8000 -c 1 -t ul high_temperature.ulaw

И переместил готовый звуковой файл в директорию со звуковыми файлами Asterisk:

sudo mv high_temperature.ulaw /usr/share/asterisk/sounds/ru_RU/high_temperature.ulaw

Смотрите также — Как конвертировать звуковые файлы в ulaw, alaw, gsm, g722 и т.д. для Asterisk

На сервере с Zabbix используя текстовый редактор nano я создал файл:

sudo nano /etc/zabbix/zabbix.call

И добавил в него содержимое (где 0670000000 номер телефона на который нужно звонить, а цифра 4 это номер канала Goip4 GSM шлюза с которого будет совершен звонок):

Channel: SIP/goip4/40670000000
Application: Playback
Data: high_temperature
MaxRetries: 10
RetryTime: 60
WaitTime: 30

На файл я установил права 777 чтобы разрешить доступ всем, пользователь zabbix будет его копировать, а на другом сервере пользователь asterisk прочитает и удалит после звонка:

sudo chmod 777 /etc/zabbix/zabbix.call

Также нужно создать сам файл скрипта, который будет выполнять Zabbix (я создал в директорий со скриптами zabbix/alert.d/asterisk_call.sh):

rsync -avh -e "ssh -p 22" /etc/zabbix/zabbix.call root@192.168.1.5:/var/spool/asterisk/outgoing/zabbix.call

Скрипт просто копирует файл zabbix.call на сервер с Asterisk в директорию /var/spool/asterisk/outgoing/, после попадания в которую, Asterisk сразу обрабатывает его и совершает звонок.
По сути скрипту можно передавать номер звонящего и составлять файл zabbix.call, но мне это не нужно было.

Если Asterisk и Zabbix на одном сервере, то строку в скрипте заменим на:

cp /etc/zabbix/zabbix.call /var/spool/asterisk/outgoing/zabbix.call

Или:

rsync -avh /etc/zabbix/zabbix.call /var/spool/asterisk/outgoing/zabbix.call

Чтобы rsync выполнял копирование без запроса пароля, нужно сгенерировать SSH ключ и скопировать его на сервер Astersik, как это делать я описывал в конце статьи — Установка и настройка SSH

Если доступ к серверу по SSH предоставляется пользователю root, то в целях безопасности можно ограничить доступ по IP средствами SSH:

sudo nano /etc/ssh/sshd_config
AllowUsers user1 user2 root@192.168.1.4
sudo service ssh restart

Если проблемы с правами на сервере с Zabbix, например при копировании call файла, можно в файле конфигурации /etc/zabbix/zabbix_server.conf указать следующий параметр:

AllowRoot=1

Осталось добавить новый тип оповещения в панели Zabbix («Администрирование» — «Способы оповещений»).
Далее создал новую группу узлов и добавил устройство для которого отрабатывает триггер о высокой температуре.
Создал отдельного пользователя, указал ему созданный тип оповещения и добавил в созданную группу узлов.
Также добавил действие в «Настройка» — «Действия» указав отправку сообщений через скрипт.

Все, после срабатывания триггера, Zabbix выполнит скрипт который скопирует готовый call файл на сервер Asterisk, а он уже обработает его и совершит звонок, как указано в файле — «MaxRetries: 10», будет пытаться дозвонится 10 раз.

Установка и использование WPScan в Linux

WPScan — утилита для тестирования WordPress, поиска уязвимостей.

Установим необходимые компоненты (для Ubuntu новее 14.04):

sudo apt-get install libcurl4-openssl-dev libopenssl-ruby libxml2 libxml2-dev libxslt1-dev ruby-dev git

Установим необходимые компоненты (для Ubuntu 14.04):

sudo apt-get install libcurl4-openssl-dev libxml2 libxml2-dev libxslt1-dev ruby-dev git build-essential libgmp-dev

Скачаем файлы WPScan:

sudo git clone https://github.com/wpscanteam/wpscan.git

Перейдем в директорию со скачанными файлами и установим необходимые ruby gems:

cd wpscan
gem install bundler
bundle install

Посмотрим справку по WPScan:

ruby ./wpscan.rb --help

Обновим WPScan:

ruby ./wpscan.rb --update

Пример запуска простого теста:

ruby ./wpscan.rb --url example.com

Пример запуска подбора паролей:

ruby ./wpscan.rb --url example.com --wordlist pswd.txt --username admin --threads 30

Вывод подробной информации в файл:

ruby ./wpscan.rb --url example.com --debug-output 2>debug.log

Запуск с использованием HTTP прокси:

ruby ./wpscan.rb --url example.com --proxy 127.0.0.1:8080

Установка и использование Conky в Linux

Conky — системный монитор.

Команда установки в Ubuntu:

sudo apt-get install conky

В CentOS/Fedora:

sudo yum install conky

Команда запуска:

conky

При первом запуске у меня отобразилось вот такое окно:
conky

Конфигурационные файлы находятся в директории /etc/conky/

Прочитать встроенную документацию можно выполнив команду:

man conky

Пример запуска в фоне с интервалом обновления 2 сек.:

conky -d -u 2

Для остановки можно использовать команду:

pkill conky

Установка Ostinato в Ubuntu

Ostinato — программа для анализа сети и генерации трафика.

Команда установки Ostinato в Ubuntu:

sudo apt-get install ostinato

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

sudo ostinato

Чтобы удалить Ostinato можно выполнить команду:

sudo apt-get purge ostinato

Журналирование активности средствами IPTables

С помощью iptables можно записывать в лог-файл сетевую активность, то есть какие данные куда передаются и откуда приходят.
Пример команды:

sudo iptables -t filter -A FORWARD -s 192.168.1.0/24 -m tcp -p tcp --dport 80 -j LOG --log-prefix "iptables: "

Чтобы информация писалась не в rsyslog файл, а отдельно, создадим файл:

sudo nano /etc/rsyslog.d/10-iptables.conf

И добавим в него следующее:

:msg, contains, "iptables: " -/var/log/iptables.log
& ~

Чтобы применить изменения перезапустим rsyslog:

sudo /etc/init.d/rsyslog reload

Готово, указанная в первом правиле сетевая активность будет записываться в файл /var/log/iptables.log.

Также желательно настроить logrotate для удаления старых логов, для экономии места на диске.

Смотрите также:
Настройка logrotate для ротации логов
Настройка IPTables

Мониторинг параметров Apache2 в Zabbix

Установим необходимые компоненты:

sudo apt-get install curl

Активируем модуль информации об apache2 (обычно он активирован изначально):

sudo a2enmod info

Откроем файл конфигурации модуля и укажем IP-адрес zabbix сервера чтобы разрешить ему просмотр информации об apache2 (если apache2 на локальной машине, то доступ обычно разрешен, указанием local или 127.0.0.1):

sudo nano /etc/apache2/mods-enabled/status.conf

В редакторе nano CTRL+X используются для выхода и y/n для сохранения или отмены изменений. Пример указания IP:

<Location /server-status>
    SetHandler server-status
    Require local
    Require ip 192.168.1.5
</Location>

Перезапустим web-сервер чтобы применить изменения:

sudo service apache2 restart

Теперь информация об apache2 доступна через браузер по ссылке http://HOST/server-status

Перейдем к Zabbix. Создадим папку для скриптов если ее нету:

mkdir /etc/zabbix/scripts/
chown root:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/

В файле конфигурации zabbix сервера укажем путь к этой папке:

sudo nano /etc/zabbix/zabbix_server.conf
ExternalScripts=ПУТЬ

Теперь приведу содержимое самого скрипта:

#!/bin/bash
if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
  exit 1
fi
##### PARAMETERS #####
RESERVED="$1"
METRIC="$2"
URL="$3"
STATSURL="${URL}?auto"
#
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.apache2.`echo ${URL} | md5sum | cut -d" " -f1`.cache"
EXEC_TIMEOUT="2"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ -s "${CACHE_FILE}" ]; then
  CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
  CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
  sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
  echo "" >> "${CACHE_FILE}" # !!!
  DATACACHE=`curl -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1`
  echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
  echo "URL=${URL}"  >> "${CACHE_FILE}" # !!!
  chmod 640 "${CACHE_FILE}"
fi
#
if [ "${METRIC}" = "accesses" ]; then
  cat "${CACHE_FILE}" | grep -i "accesses" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "kbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "kbytes" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "cpuload" ]; then
  cat "${CACHE_FILE}" | grep -i "cpuload" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "uptime" ]; then
  cat "${CACHE_FILE}" | grep -i "uptime" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreq" ]; then
  cat "${CACHE_FILE}" | grep -i "ReqPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreqbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerReq" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "busyworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "BusyWorkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "idleworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "idleworkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "totalslots" ]; then
  cat "${CACHE_FILE}" | grep -i "Scoreboard" | cut -d':' -f2 | sed -e 's/ //g' | wc -c | awk '{print $1-1}'
fi
#
exit 0

Сделаем файл скрипта исполняемым:

chown root:zabbix /etc/zabbix/scripts/apache2-status.sh
chmod 550 /etc/zabbix/scripts/apache2-status.sh

Пример проверки скрипта:

sudo -u zabbix /etc/zabbix/scripts/apache2-status.sh none accesses http://HOST/server-status

Откроем файл конфигурации zabbix агента в редакторе:

sudo nano /etc/zabbix/zabbix_agentd.conf

И укажем следующие параметры:

UserParameter=apache2[*],/etc/zabbix/scripts/apache2-status.sh "none" "$1" "$2"

Некоторыми командами можно посмотреть количество процессов apache2 и соединений на 80 порт, для этого не нужен скрипт, например можно еще указать:

UserParameter=apache2.count_processes,ps aux | grep apache | wc -l
UserParameter=connections_on_80_port,netstat -na | grep :80 | wc -l

Перезапустим zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

Проверим:

zabbix_get -s 127.0.0.1 -k "apache2[accesses,http://HOST/server-status]"

Теперь создадим шаблон и добавим элементы данных, пример создаваемых элементов данных:

apache2[КЛЮЧ,http://HOST/server-status]

Экспортировал готовый шаблон — apache2-status

К наблюдаемому хосту также обязательно добавим макрос:

Макрос: {$APACHE_STATS_URL}
Значение: http://HOST/server-status

Готово.

Количество процессов apache2 можно получать от Zabbix-агента создав на Zabbix-сервере элемент данных с ключом:

proc.num[apache2]

Установка и использование Vnstat и Vnstati

Vnstat — простой инструмент для учёта трафика.
Vnstati — утилита для визуализации статистики.

Установка в Ubuntu:

sudo apt-get install vnstat vnstati

Пример запуска подсчета трафика указанного сетевого интерфейса:

sudo vnstat -u -i eth0

Удаление из базы и остановка подсчета трафика указанного сетевого интерфейса:

vnstat -i eth0 --delete

Пример просмотра статистики:

vnstat

Пример просмотра статистики на указанном интерфейсе:

vnstat -i eth0

Проверить работает ли vnstat можно командой:

ps -f | grep vnst

Опишу возможные ключи запуска:
-h (по часам)
-d (за день)
-m (за месяц)
-w (за неделю)
-t (топ10)
-s (краткий вывод)
-l (в реальном времени)

Пример создания картинки используя vnstati:

vnstati -vs -i eth0 -o ~/img.png

Установка и использование collectl в Linux

collectl — консольный инструмент для мониторинга производительности системы и записи результатов.

Установка в Ubuntu или Debian:

sudo apt-get install collectl

Команда отображения документации:

man collectl

Пример запуска:

collectl
collectl -top
collectl -scmd

Пример мониторинга загрузки процессора:

collectl -sc
collectl -sС

Пример мониторинга памяти:

collectl -sm
collectl -sM

Пример мониторинга диска:

collectl -sd
collectl -sD

Можно также просматривать статистику в виде графиков через браузер если установить colplot.

Установка и использование ifstat в Linux

ifstat — программа для сбора статистики загрузки сетевых интерфейсов

Установка в Ubuntu:

sudo apt-get install ifstat

Запуск:

sudo ifstat

Опишу некоторые ключи запуска:
-h (краткая справка)
-q (тихий режим, отображается меньше информации)
-b (отображение в кбит/сек, а не кбайт/сек)
-t (добавление времени в начале каждой строки)
-T (общая пропускная способность для всех отслеживаемых интерфейсов)
-w (фиксированная ширина колонок)
-W (укорачивать линии которые длиннее ширины терминала)
-n (не отображать заголовки)
-v (просмотр версии)
-S (данные обновляются в той же строке если возможно, вместо прокрутки)
-z (скрыть неиспользуемые интерфейсы с нулевыми счетчиками)
-a (мониторинг всех интерфейсов)
-i (указывается список интерфейсов для мониторинга, через запятую)
-s (опрос удаленного интерфейса по SNMP)
-l (мониторить также loopback интерфейсы, которые по умолчанию не мониторятся)
-A (отключение использования индекса интерфейсов (snmp, ifmib))