Zabbix

Материал из RSU WiKi
Перейти к: навигация, поиск
Pen.pngЭта статья находится в процессе написания.
Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.
Zabbix logo.png
ZABBIX — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым

Для хранения данных используется MySQL, PostgreSQL, SQLite или Oracle. Веб-интерфейс написан на PHP. ZABBIX поддерживает несколько видов мониторинга:

  • Simple checks — может проверять доступность и реакцию стандартных сервисов, таких как SMTP или HTTP без установки какого-либо программного обеспечения на наблюдаемом хосте.
  • ZABBIX agent — может быть установлен на UNIX-подобных или Windows хостах для получения данных о нагрузке процессора, использования сети, дисковом пространстве и т. д.
  • External check — выполнение внешних программ. ZABBIX также поддерживает мониторинг через SNMP (161/UDP, 162/UDP). [1]

Содержание

Как установить zabbix?

RHEL / CentOS

Установите zabbix на сервер [2][3]

rpm -Uvh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

Установите mysql на сервер

yum -y install mysql-server && chkconfig mysqld on && service mysqld start && mysql_secure_installation

Задайте пароль пользователя root в mysql, создайте базу данных zabbix и пользователя zabbix с полными правами на нее. Запомните пароль.

mysqladmin -u root password "mysql_password"
mysql -u root -p
create database zabbix character set utf8;
grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix_password";
flush privileges;
CONNECT zabbix;
SOURCE /usr/share/doc/zabbix-server-mysql-2.0.9/create/schema.sql;
SOURCE /usr/share/doc/zabbix-server-mysql-2.0.9/create/images.sql;
SOURCE /usr/share/doc/zabbix-server-mysql-2.0.9/create/data.sql;
quit;

Настройте безопасность Откройте по TCP 80(http) и 10051(zabbix) порты на файерволе через iptables:

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
service iptables save

SELinux

yum -y install policycoreutils-python
chcon -Rv --type=httpd_sys_content_t /var/www/html/
semanage port -a -t http_port_t -p tcp 10051
vi  zabbix_fping.te
module zabbix_fping 1.0;
require {type initrc_tmp_t;
type ping_t;
class file read;
}
allow ping_t initrc_tmp_t:file read;
checkmodule -M -m -o zabbix_fping.mod zabbix_fping.te
semodule_package -o zabbix_fping.pp -m zabbix_fping.mod
semodule -i zabbix_fping.pp

Установите zabbix-agent на клиент:

rpm -Uvh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm && yum -y install zabbix-agent
chkconfig zabbix-agent on && service zabbix-agent start

SuSE

Подключите репозиторий для вашего дистрибутива SuSE с http://software.opensuse.org:

zypper ar http://download.opensuse.org/repositories/server:/monitoring/SLE_11.1 Monitoring
zypper refresh

Для сервера

  • zabbix-server
  • zabbix-server-mysql
  • zabbix-phpfrontend
  • zabbix-client

Для клиента

  • zabbix-client

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

zypper in zabbix-client zabbix-server zabbix-server-mysql zabbix-phpfrontend

Конфигурационные файлы zabbiz-server.conf, zabbiz-agentd.conf и др. находятся в папке /etc/zabbix/

Настройка zabbix-server.conf для MySQL:

DBName=zabbix
DBUser=zabbix
DBPassword=zabbix_password
DBSocket=/var/run/mysql/mysql.sock #укажите значение из файла /etc/my.cnf

Файервол

  • zabbix-agent: 10050, 10051
  • SNMP: 161, 162

Windows 2008 / 2012

Установите клиент из .msi[4]-пакета zabbix

Настройте Брандмауэр (от Администратора). Предположим, сервер Zabbix имеет адрес 198.51.100.10:

Netsh Advfirewall Firewall Add Rule name="zabbix-agent-in" dir=in action=allow description="Monitoring host health" profile=any localport=10050 protocol=tcp remoteip=198.51.100.10
Netsh Advfirewall Firewall Add Rule name="zabbix-agent-out" dir=out action=allow description="Monitoring host health" profile=any remoteport=10051 protocol=tcp remoteip=198.51.100.10

Как настроить web-сервер для zabbix?

Оптимизация конфигурации PHP для веб-интерфейса Zabbix

Файл конфигурации Apache для веб-интерфейса Zabbix размещается в /etc/httpd/conf.d/zabbix. Некоторые настройки PHP уже выполнены.

php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
# php_value date.timezone Europe/Riga

Необходимо раскомментировать настройку “date.timezone” и установить корректный часовой пояс для вас. После изменения файла конфигурации перезапустите веб-сервер apache.

Если используется работа через php-fpm, добавляем следующие строки в конец файла /etc/php-fpm.d/www.conf

; Zabbix params
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[date.timezone] = Europe/Moscow

Настройка Nginx + php-fpm

chkconfig php-fpm on
service php-fpm start

/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    autoindex on;

    if ( $http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan) ) {
	return 403;
    }

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /zabbix {
        index index.php index.html;
	try_files $uri $uri/ /zabbix/index.php?$args;
	alias /usr/share/zabbix;
	error_page 403 404  /zabbix/index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
	root /usr/share;
	try_files $uri =404;
	
	fastcgi_split_path_info ^(.+.php)(/.+)$;
	fastcgi_pass unix:/var/run/php5-fpm.sock;  
	fastcgi_index index.php; include fastcgi_params;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }

}

Настройте эскалацию ошибок

Настройте эскалацию ошибок[5] в первую очередь для того, чтобы не получать тонны сообщений о кратковременных аномалиях.

Настройте почтовый демон Postfix

В конец файла /etc/postfix/main.cf добавляем

# Throttle outgoing emails
# via http://steam.io/2013/04/01/postfix-rate-limiting/
#
smtp_destination_concurrency_limit = 2
smtp_destination_rate_delay = 30s
smtp_extra_recipient_limit = 10

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

Как добавить сервер или устройство для мониторинга?

Мониторинг через SNMP

  • порт 161

Выберите все параметры, которые устройство отдает по SNMP. Убедитесь, что в его настройках устройства community задан как public.

snmpwalk -v 1 -c public example.com

Если устройства нет в системе, для него требуется загрузить MIB с сайта производителя и разместить в папку /usr/share/snmp/mibs Перед размещением файл .mib надо переименовать, как сказано в его первой незакомментированной строке, например NETAPP-MIB.txt:

-- Add enclXXXpart
-- =======================================================  --

NETAPP-MIB DEFINITIONS ::= BEGIN

Для выборки всех параметров, указанных в NETAPP-MIB.txt

snmpwalk -v 1 -c public -m "NETAPP-MIB" example.com . > example.com

Для выборки определенного параметра с использованием NETAPP-MIB.txt используйте следующие команды:

snmpwalk -v 1 -c public -m "NETAPP-MIB" example.com 1.3.6.1.4.1.789.1.7.3.1.1.1.0
snmpget -v 1 -c public -m "NETAPP-MIB" example.com 1.3.6.1.4.1.789.1.7.3.1.1.1.0

APC

Для мониторинга параметров ибп APC вам может потребоваться APC MIB[6] (*необходимо знать тип оборудования и серийный номер изделия)

Температура °C[7] (*необходим температурный датчик)

1.3.6.1.4.1.318.1.1.10.2.3.2.1.4.1

Напряжение V

1.3.6.1.4.1.318.1.1.1.3.2.1.0

Vyatta

Для интерфейса N (идентифицировать N можно при помощи команды snmpwalk)

Байты

ifInOctets.N
ifOutOctets.N

Пакеты

ifInUcastPkts.N
ifOutUcastPkts.N

Мониторинг через zabbix_agentd

Статья Мониторинг лога[8]

Веб мониторинг

Статья Веб мониторинг[9]

Решение проблем

zabbix server is running no

Если часто встречается сообщение zabbix server is running no, а в логе присутствует ошибка

Zabbix agent item [net.tcp.service[ssh]] on host [Zabbix server] failed: first network error, wait for 15 seconds

а затем сдлужба останавливается, попробуйте увеличить параметр Timeout в конфигурационных файлах zabbix-agentd.conf и zabbix-server.conf. Например:

Timeout=15

Резервное копирование

#!/bin/bash
# NAME
#     zabbix-mysql-backupconf.sh - Configuration Backup for Zabbix 2.0 w/MySQL
# 
# SYNOPSIS
#     This is a MySQL configuration backup script for Zabbix v2.0 oder 2.2.
#     It does a full backup of all configuration tables, but only a schema
#     backup of large data tables.
#
#     The original script was written by Ricardo Santos and published at
#     http://zabbixzone.com/zabbix/backuping-only-the-zabbix-configuration/
#     and
#     https://github.com/xsbr/zabbixzone/blob/master/zabbix-mysql-backupconf.sh
#
#     Credits for some suggestions concerning the original script to:
#      - Ricardo Santos
#      - Oleksiy Zagorskyi (zalex)
#      - Petr Jendrejovsky
#      - Jonathan Bayer
# 
# HISTORY
#     v0.5 - 2013-05-13 Added table list comparison between database and script
#     v0.4 - 2012-03-02 Incorporated mysqldump options suggested by Jonathan Bayer
#     v0.3 - 2012-02-06 Backup of Zabbix 1.9.x / 2.0.0, removed unnecessary use of
#                       variables (DATEBIN etc) for commands that use to be in $PATH
#     v0.2 - 2011-11-05
#
# AUTHOR
#     Jens Berthold (maxhq), 2013
 
 
#
# CONFIGURATION
#
 
# mysql database
DBHOST="1.2.3.4"
DBNAME="zabbix"
DBUSER="zabbix"
DBPASS="password"
 
# backup target path
#MAINDIR="/var/lib/zabbix/backupconf"
# following will store the backup in a subdirectory of the current directory
MAINDIR="`dirname \"$0\"`"
 
#
# CONSTANTS
#
 
# configuration tables
CONFTABLES=( actions applications autoreg_host conditions config dbversion \
dchecks dhosts drules dservices escalations expressions functions globalmacro \
globalvars graph_discovery graph_theme graphs graphs_items groups help_items \
host_inventory hostmacro hosts hosts_groups hosts_templates housekeeper \
httpstep httpstepitem httptest httptestitem icon_map icon_mapping ids images \
interface item_discovery items items_applications maintenances \
maintenances_groups maintenances_hosts maintenances_windows mappings media \
media_type node_cksum nodes opcommand opcommand_grp opcommand_hst opconditions \
operations opgroup opmessage opmessage_grp opmessage_usr optemplate profiles \
proxy_autoreg_host proxy_dhistory proxy_history regexps rights screens \
screens_items scripts service_alarms services services_links services_times \
sessions slides slideshows sysmap_element_url sysmap_url sysmaps \
sysmaps_elements sysmaps_link_triggers sysmaps_links timeperiods \
trigger_depends trigger_discovery triggers user_history users users_groups \
usrgrp valuemaps )
 
# tables with large data
DATATABLES=( acknowledges alerts auditlog_details auditlog events \
history history_log history_str history_str_sync history_sync history_text \
history_uint history_uint_sync trends trends_uint )
 
DUMPDIR="${MAINDIR}/`date +%Y%m%d-%H%M`"
DUMPFILE="${DUMPDIR}/zabbix-conf-backup-`date +%Y%m%d-%H%M`.sql"
 
#
# CHECKS
#
if [ ! -x /usr/bin/mysqldump ]; then
	echo "mysqldump not found."
	echo "(with Debian, \"apt-get install mysql-client\" will help)"
	exit 1
fi
 
#
# compare table list between script and database
#
FILE_TABLES_LIVE=`mktemp`
FILE_TABLES=`mktemp`
 
# Get all current Zabbix tables from databse
mysql -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --batch --silent \
	-e "SELECT table_name FROM information_schema.tables WHERE table_schema = '$DBNAME'" \
	| sort >> $FILE_TABLES_LIVE
 
# Merge CONFTABLES and DATATABLES into one array
allTables=( "${CONFTABLES[@]}" "${DATATABLES[@]}" )
printf '%s\n' "${allTables[@]}" | sort >> $FILE_TABLES
 
difference=`diff --suppress-common-lines $FILE_TABLES $FILE_TABLES_LIVE | grep -v "^\w"`
 
if [ ! -z "$difference" ]; then
	echo -e "The Zabbix database differs from the configuration in this script."
	if [ `echo "$difference" | grep -c "^>"` -gt 0 ]; then
		echo -e "\nThese additional tables where found in '$DBNAME' on $DBHOST:"
		echo "$difference" | grep "^>" | sed 's/^>/ -/gm'
	fi
	if [ `echo "$difference" | grep -c "^<"` -gt 0 ]; then
		echo -e "\nThese configured tables are missing in '$DBNAME' on $DBHOST:"
		echo "$difference" | grep "^<" | sed 's/^</ -/gm'
	fi
	rm $FILE_TABLES_LIVE; rm $FILE_TABLES
	exit
fi
rm $FILE_TABLES_LIVE; rm $FILE_TABLES
 
#
# BACKUP
#
mkdir -p "${DUMPDIR}"
 
>"${DUMPFILE}"
 
# full backup of configuration tables
echo "Full backup of configuration tables:"
for table in ${CONFTABLES[*]}; do
	echo " - ${table}"
	mysqldump --routines --opt --single-transaction --skip-lock-tables --extended-insert=FALSE \
		-h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >>"${DUMPFILE}"
done
 
# scheme backup of large data tables
echo "Scheme backup of data tables:"
for table in ${DATATABLES[*]}; do
	echo " - ${table}"
	mysqldump --routines --opt --single-transaction --skip-lock-tables --no-data \
		-h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >>"${DUMPFILE}"
done
 
echo "Compressing backup file ${DUMPFILE}..."
gzip -f "${DUMPFILE}"
 
echo
echo "Backup Completed - ${DUMPDIR}"
echo "Hit ENTER"
read

via http://pastebin.com/mJ3NBYLt

Примечания

  1. Zabbix. Материал из Википедии — свободной энциклопедии
  2. http://www.alsigned.ru/?p=2463
  3. https://www.zabbix.com/documentation/ru/2.0/manual/installation/install_from_packages
  4. http://www.suiviperf.com/zabbix/index.php
  5. https://www.zabbix.com/documentation/2.0/manual/config/notifications/action/escalations
  6. http://www.apc.com/tools/download/
  7. Мониторинг_температуры_в_серверной
  8. http://habrahabr.ru/post/215509/
  9. https://www.zabbix.com/documentation/ru/1.8/manual/web_monitoring

См. также

Ссылки

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты