Для построения распределенной системы мониторинга zabbix рекомендует использовать proxy серверы. Это штатный функционал заббикса, который позволяет регулировать нагрузку и организовывать мониторинг распределенной сетевой инфраструктуры. Подробнее об установке и настройке zabbix proxy будет рассказано ниже.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Зачем нужен Zabbix proxy
Расскажу своими словами что такое zabbix proxy и зачем он нужен. Допустим у вас есть распределенная сеть, где отдельные сегменты никак не связаны друг с другом. То есть условно, у вас 5 разных сетей с адресацией 192.168.0.0/24. Вам нужно настроить мониторинг узлов в этих сетях. Сети ничего не знаю друг о друге, у них нет прямого IP, только доступ в интернет.
В таком случае вы устанавливаете zabbix сервер на внешний ip адрес, в каждом сегменте сети настраиваете прокси, который будет собирать данные с узлов в этом сегменте и отправлять их на основной сервер мониторинга. Все управление при этом происходит на основном сервере, достаточно только один раз подключить прокси к основному серверу. Схематично подобная схема изображена в документации с официального сайта:
Если у вас полностью связаная сеть, в которой каждый узел имеет прямой доступ к серверу мониторинга, proxy сервера имеет смысл устанавливать и использовать для распределения нагрузки. 100 узлов, отправляющиие данные напрямую на сервер мониторинга, нагружают его сильнее, чем прокси, который собирает данные с этих 100 узлов и отправляяет их на основной сервер.
Вроде понятно и доступно объяснил. Приступим теперь к установке zabbix proxy. Устанавливать будем на сервер под управлением CentOS 7. Если у вас его еще нет, то читайте об установке centos 7 и его первоначальной настройке. Требования к железу зависят от нагрузки на прокси, но в общем случае они будут не высоки. Для мониторинга 20-30 узлов я использовал виртуальную машину с 512 мб оперативной памяти и 10 гб диском. Сама прокси почти ничего не хранит, отправялет данные на сервер.
В качестве основного сервера мониторинга у нас будет выступать Zabbix 3. Если вы его еще не настроили, то рекомендую мою подробную статью с видео по установке и настройке zabbix. Дальше я буду считать, что у вас уже настроен сервер мониторинга, к которму мы будем подключать proxy и добавлять новые узлы из подключенного сегмента сети.
Установка Zabbix proxy
Перед установкой добавлю еще пару слов о работе proxy. Прокси серверу нужна отдельная локальная база данных, которая никак не связана с базой основного сервера мониторинга. Я для простоты в качестве такой базы использую sqlite. Для proxy этого вполне достаточно. Так что наша установка будет разделена на этапы:
- Непосредственно установка zabbix proxy.
- Создание базы данных.
- Подключение к основному серверу мониторинга.
- Подключение zabbix agent через zabbix proxy.
Приступаем к установке. Подключаем репозиторий заббикса:
# rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
Устанавливаем прокси и агента. Агент, кстати, ставить не обязательно, но я обычно ставлю, чтобы мониторить сам сервер.
# yum install zabbix-agent zabbix-proxy-sqlite3 zabbix-sql-scripts
Распаковываем файл со схемой базы:
# gunzip /usr/share/doc/zabbix-proxy-sqlite3-5.0.19/schema.sql.gz
Создаем папку для базы данных и саму базу:
# mkdir /var/lib/sqlite # sqlite3 /var/lib/sqlite/zabbix.db < /usr/share/doc/zabbix-proxy-sqlite3-5.0.19/schema.sql
Устанавливаем владельцем базы заббикс:
# chown -R zabbix. /var/lib/sqlite
На этом установка заббикс прокси закончена. Мы все подготовили, теперь ее надо правильно настроить и подключить к серверу. Займемся этим.
Настройка Zabbix proxy
Открываем файл конфигурации zabbix proxy для настройки:
# mcedit /etc/zabbix/zabbix_proxy.conf
Необходимо изменить несколько параметров, все остальное можно не трогать:
server=84.143.241.246 hostname=proxy01 DBName=/var/lib/sqlite/zabbix.db
server | Адрес центрального сервера мониторинга |
hostname | Имя прокси сервера, которое мы будем использовать на основном сервере |
DBName | Путь к локальной базе данных |
Добавляем proxy в автозагрузку и запускаем:
systemctl enable zabbix-proxy systemctl start zabbix-proxy
Если сейчас посмотреть лог, то увидим там следующее:
# cat /var/log/zabbix/zabbix_proxy.log
2701:20160816:225839.865 cannot obtain configuration data from server at "84.143.241.246": proxy "proxy01" not found 2702:20160816:225839.865 cannot send heartbeat message to server at "84.143.241.246": proxy "proxy01" not found
В данном случае все в порядке, это не ошибка. Просто основной сервер еще ничего не знает о только что настроенном прокси. Нам нужно идти на сервер и добавлять свежеустановленный proxy. Заходим в web панель, идем в раздел Administration -> Proxies (Администрирование -> Прокси) и справа нажимаем на кнопку Create proxy (Создать прокси):
Заполняете необходимые поля. В данном случае обязательное только одно поле Proxy name.
Proxy name | Имя прокси сервера, должно соответствовать параметру hostname в файле конфигурации прокси |
Proxy mode | Режим работы: active - прокси всегда сам обращается к основному серверу и отправляет данные, passive - команды на получение данных каждый раз инициирует основной сервер |
Hosts | Хосты, которые будут мониториться через этот прокси. Так как мы только добавляем прокси, вряд ли у нас есть хосты для него. |
Description | Произвольное описание сервера |
После добавление proxy на основной сервер, можно перезапустить сам прокси сервер и посмотреть лог:
# systemctl restart zabbix-proxy # cat /var/log/zabbix/zabbix_proxy.log
2871:20160816:231130.025 received configuration data from server at "84.143.241.246", datalen 2664
Все в порядке, прокси подключился к основному серверу и забрал от него данные. При этом на основном сервере изменился статус прокси:
В качестве теста запустим на самом прокси сервере zabbix agent и подключим его к основному серверу мониторинга через proxy. Для этого открываем конфиг агента и устанавливаем следующие параметры:
# mcedit /etc/zabbix/zabbix_agentd.conf
Server=192.168.56.10 ServerActive=192.168.56.10 Hostname=proxy01
192.168.56.10 - локальный ip адрес прокси сервера.
Сохраняем файл, агента пока не запускаем. Идем в веб интерфейс и добавляем новый хост.
Имя указываем такое же, как Hostname у агента, ip адрес - локальный адрес агента, Monitored by proxy выбираем в выпадающем списке нужный proxy сервер. Когда добавите их несколько, они все будут в этом списке. Не забудьте назначить какой-нибудь шаблон. Если этого не сделать, то можно долго ждать поступления данных и недоумевать, почему ничего не поступает, хотя на вид все в порядке и ошибок в логах нет. Я много раз с подобным сталкивался в своей практике.
После того, как добавите новый хост на основном сервере, возвращаемся на proxy и перезапускаем его, чтобы сразу же получить настройки с основного сервера. Это делать не обязательно, через некоторое время (не знаю точно какое, любопытно было бы узнать) прокси сам заберет конфигурацию. Но мы форсируем процесс:
# systemctl restart zabbix-proxy
Теперь запускаем агент и добавляем его в автозагрузку:
# systemctl enable zabbix-agent # systemctl start zabbix-agent
Проверяем лог агента:
# cat /var/log/zabbix/zabbix_agentd.log
Все в порядке, ошибок нет. Через некоторое время данные начнут поступать на основной сервер мониторинга с помощью посредника zabbix proxy.
Заключение
Когда я только начинал настраивать распределенный мониторинг, мне очень хотелось иметь возможность установить zabbix proxy на windows. Это бы очень упростило задачу разворачиания мониторинга на всяких мелких удаленных объектах. Но увы, это не возможно. Программа есть только под linux, на windows только агент. Можно без проблем развернуть на любой виртуалке - hyperv, или даже virtualbox.
Я планирую написать подробню статью на основе своего опыта построения распределенного мониторинга в очень разнородной среде. Но пока не сделал это, дам подсказку для тех, кто будет разворачивать много proxy серверов. Сделайте образ виртуальной машины и просто копируйте его на новых объектах. Достаточно будет изменить только сетевые настройки и hostname в конфигурации proxy.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.Дополнительные материалы по Zabbix
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Рекомендую полезные материалы по Zabbix: |
Настройки системы |
---|
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0.
Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями.
Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах.
Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm.
|
Мониторинг служб и сервисов |
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов.
Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров.
Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы.
Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks)
Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция.
Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix.
Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix.
|
Мониторинг различных значений |
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения - доступность сайта, время отклика, скорость доступа к сайту.
Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time.
Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов.
Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены.
Пример распознавания и мониторинга за изменением значений в обычных текстовых файлах с помощью zabbix.
Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога.
|
как с совместимостью версий сервера Zabbix и Прокси?
Они должны быть строго одной версии. При обновлении, сначала обновляются прокси, потом сам сервер мониторинга.
Мне кажется мониторить прокси правильнее на прямую с заббикс сервера, если к примеру пропадает интернет там где установлен прокси, заббикс об этом ничего не узнает, просто придет уведомление что отсутствуют данные по более 100 метрикам без каких либо опознавательных знаков почему так вышло.
Zabbix Server по умолчанию мониторит доступность всех добавленных прокси.
Можно ли собирать данные через прокси безагентным способом? или это невозможно?
По моему невозможно. Но до конца не понятно, что вы имеете ввиду. Опишите всю задачу.
Проверено, оказалось возможно :)
Коллеги, при установке zabbix-proxy-sqlite3 версии 5.4 на Ubuntu и Debian нужно дополнительно установить zabbix-sql-scripts, т.к. иначе не будет файлов схемы для импорта в базу
Они появятся в /usr/share/doc/zabbix-sql-scripts
Вроде все просто, но уперся вот в это
gunzip /usr/share/doc/zabbix-proxy-sqlite3-3.0.4/schema.sql.gz
архива с схемой в указанном месте нет, find не находит ничего похожего , где-то вычитал, что в zabbix 5.4 БД создается само при первом запуске - тоже мимо
centos 8, zabbix 5.4
Забыл добавить, у меня на этом же сервере стоит и zabbix-server. Схема такая... есть несколько объектов, на каждом свой заббикс сервер, которым они пользуются локально, а я хочу через прокси настроить еще единый мониторинг на своем сервере в офисе. доставил модуль прокси и пытаюсь приконнектить к своему. будет такая схема работать, или надо прокси выносить на отдельную виртуалку? спасибо всем за ответы.
Владимир, приветствую!
продолжаю осваивать zabbix и в данном случае zabbix proxy.
Конфигу сделал такую, zabbix proxy одним интерфейсом смотрит в интернет (фактически в ДМЗ), вторым в локалку. zabbix server локально в другой сетке за NATом.
Не совсем понимаю, что в конфиге zabbix proxy указывать в качестве адреса сервера, он же не опубликован через dnat?
Идея такая, zabbix server опрашивает Zabbix Proxy на его внешнем интерфейсе, a zabbix proxy опрашивает агентов в своей локалке.
Соединение между zabbix server и zabbix proxy через tls c psk, а proxy с агентами в локалке без шифрования (это пока).
Доступ к zabbix proxy в iptales будет разрешен только с IP внешнего интерфейса шлюза, за которым установлен zabbix server.
На самом деле между локалками с сервером и агентами, которые должен обслуживать прокси есть туннель, но интересно, чтоб связь между сервером и прокси была без туннеля (туннели имеют свойство падать)
А в чем конкретно вопрос? Тут обычную сетевую связность надо организовать, чтобы сервер и прокси видели друг друга и могли обмениваться данными.
Связку сервер-прокси я вчера настроил, данные поступают, но смущает, что пиктограмма ZBX не активна и в логах, на мой взгляд, как-то пусто
Каким образом проверку бы устроить?
вопрос, кто должен быть в активной моде, а кто в пассивной, для меня пока не понятно, если в конфиге указаны обе моды, то в какой последовательности режимы будут выбираться,
Добрый день!
В какой-то момент в логах Заббикса появились ошибки типа:
1. Failed: cannot extract value from json by path "$.data.process['vmware collector'].busy.avg": no data matches the specified path
2606:20200324:123251.372 error reason for "ZProxy-ES:process.snmp_trapper.avg.busy" changed: Preprocessing failed for: {"data":{"boottime":1585045603,"uptime":367,"hosts":1,"items":96,"item_unsupported":6,"requiredpe...
На стороне заббикс-прокси в логах все чисто. Буквально накануне ошибок не было.
Не подскажите в какую сторону копать?
Спасибо.
В ошибке явно указано с чем возникли проблемы. В какой-то момент в зависимом итеме с json фильтром $.data.process[‘vmware collector’].busy.avg не удается получить данные, так как json путь из родительского итема не найден. То есть исходный json какой-то не такой. В чем конкретно проблема - не знаю. Если возникает не часто и со сбором данных нет проблем, то можно не обращать внимание. Такие события частенько возникают в заббиксе по разным причинам. Надо разбираться уже по факту, если где-то проблемы со сбором данных начнутся.
А можно в zabbix_proxy.conf указать несколько серверов центрального заббикс сервера? Чтобы проки сервер отправлял на несколько центральный серверов
Сам не проверял, но мне кажется, что это возможно. Где-то я слышал об этом.
Так же как и без прокси. В настройках хоста в заббиксе должен быть указан ip в поле snmp интерфейса и для элементов данных должен быть прописан community. Также отметка , что хост мониторится через этот прокси. В настройках устройств для отправки трепов должен быть указан адрес proxy. На сервере должен работать snmptrapd.
Установил по вашей инструкции, всё нормально. Только вот не пойму, мониторить можно только по агентам? Оборудование вроде свичей, принтеров и прочего по snmp можно через прокси наблюдать?
Хороший вопрос. Вы уже узнали ответ? Я не знаю. Сам только по агентам через прокси мониторил.
Нет, не знаю, поэтому и спросил =)
можно и SNMP.
Подскажите как?
Здравствуйте! Настраиваю zabbix-proxy-sqlite3-4.0.5. Вот такая ошибка:
5472:20190320:152503.453 [Z3001] connection to database '/var/lib/sqlite/zabbix.db' failed: [0] could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
5472:20190320:152503.453 database is down: reconnecting in 10 seconds
Покажите всю строку из конфига, где прописан параметр /var/lib/sqlite/zabbix.db
### Option: DBHost
# Database host name.
# If set to localhost, socket is used for MySQL.
# If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
### Option: DBName
# Database name.
# For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
# Warning: do not attempt to use the same database Zabbix server is using.
#
# Mandatory: yes
# Default:
# DBName=
DBName=/var/lib/sqlite/zabbix.db
### Option: DBSchema
# Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=
### Option: DBUser
# Database user. Ignored for SQLite.
#
# Default:
# DBUser=
DBUser=zabbix
### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=
# Option: DBPort
# Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBPort=
спасибо, уже разобралась.
Вот ошибка:
7429:20190311:191906.682 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "No such file or directory")
В статье я показываю, как использовать локальную базу sqlite, а у вас стоит mysql база.
Столкнулся с ошибкой при старте, подскажите, что смотреть
Заранее спасибО!
[root@localhost ~]# systemctl start zabbix-proxy
Job for zabbix-proxy.service failed because the control process exited with error code. See "systemctl status zabbix-proxy.service" and "journalctl -xe" for details.
[root@localhost ~]# systemctl status zabbix-proxy.service
● zabbix-proxy.service - Zabbix Proxy
Loaded: loaded (/usr/lib/systemd/system/zabbix-proxy.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Пн 2019-03-11 19:26:07 +07; 5s ago
Process: 8158 ExecStart=/usr/sbin/zabbix_proxy -c $CONFFILE (code=exited, status=1/FAILURE)
мар 11 19:26:07 localhost.localdomain systemd[1]: zabbix-proxy.service: control process exited, code...s=1
мар 11 19:26:07 localhost.localdomain systemd[1]: Failed to start Zabbix Proxy.
мар 11 19:26:07 localhost.localdomain systemd[1]: Unit zabbix-proxy.service entered failed state.
мар 11 19:26:07 localhost.localdomain systemd[1]: zabbix-proxy.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Надо смотреть полный лог в /var/log/zabbix
Тут нет содержимого лога.
В логах агента: no active checks on server [192.168.12.199:10051]: host [Zabbix proxy] not found
В логах прокси: cannot send list of active checks to "192.168.12.199": host [Zabbix proxy] not found
192.168.12.199 это локальный адрес прокси сервера. На сервере забикса видно, что связь с прокси есть, а с агентом нет. Что я не так сделал?
Аналогичная проблема.
Помогите с ошибкой: [Z3001] connection to database '/var/lib/sqlite/zabbix.db' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Вы что-то напутали в конфигурации. Указываете путь к файлу базы sqlite, а параметр используете для mysql.
Вопрос такой.
Есть подсеть 10.0.0.x где живут циски с snmp
Zabbix-proxy 1-ой сетевой картой смотрит в сеть 10.0.0.x и 2-ой сетевой картой в локальную 192.168.10 (где живет zabbix сервер)
Возможно ли мониторить по snmp циски сидящие в сети 10.0.0.x через zabbix-proxy?
Т.е. циска из подсети 10.0.0.x отдает данные по snmp Zabbix-proxy с ip 10.0.0.1 , Zabbix-proxy через 2-ую сетевую карту с ip 192.168.2 отдает данные zabbix сервер с ip 192.168.10
Да, можно.
Добрый день! Ясен вариант с прокси, когда сети удалены и не связаны с основным ядром, однако как бы Вы подсказали вариант реализации с отказоустойчивостью заббикса? В случае с падением прокси, то основной сервер заббикса продложит работать и принимать данные с других серверов, хостов, агентов. Недоступна будет информация по всем хостам из удаленной сети, которые были подключены к упавшему прокси. Выходит надо прокси сервер также дублировать или нет?
Если нужна отказоустойчивость, то надо дублировать. Каждый агент может отправлять информацию на несколько серверов или прокси, их можно указывать через запятую в конфиге.
А основной сервер zabbix следует связывать одновременно с двумя прокси серверами, как он будет обрабатывать события от одних и тех же хостов и агентов с двух прокси сразу? Будут дублированные данные? Настораживает вопрос - основной сервер zabbix ведь тоже дублировать надо. Понял, что агента можно связать с двумя прокси, а сам прокси связать с двумя серверами возможно? Или так не делают?
Я не знаю, не подскажу. Настройка отказоустойчивости заббикса тема не простая и не очевидная. Сам заббикс этого не поддерживает архитектурно. Нужно решать сторонними средствами. Может быть можно обойтись относительно простым решением с haproxy и репликацией БД, либо использовать системы кластеризации, например Linux HA.
Спасибо за статью.
Я сейчас тоже озадачен мониторингом распределенной сети.
Настраиваю TL-WR842N-v3 с openwrt и zabbix_proxy.
DB sqlite3 на USB-flash.
Пока тестирую.
да и конфигурацию активного прокси правильнее рантайм командами переагружать.
Не понял, о чем идет речь? Какими командами?
zabbix_proxy -R config_cache_reload перезагружает конфигурацию активного прокси.
в документации этого нет, но создавать руками БД для прокси при использовании sqlite необязательно. достаточно в конфиге указать путь к файлу, который расположен в папке, в которую есть доступ у пользователя zabbix, при первом запуске прокси схема создастся автоматически
В статье snmp synology, там готовый шаблон.
Я с snmp все никак не разберусь.
Спасибо, попробую.
FortiGate - занимаются всем что связано с network security. У нас очень популярен в последние годы, цены ниже чем у других и отвечает на все требования.
Спасибо, очень помогли твои статьи с настройками заббикса!
Еще вопрос, но немного не в темы - нужно мониторить брандмауэр FortiGate по snmp, может и с этим подскажешь?
Впервые слышу о таком. Но если есть snmp то какие проблемы. Нужен только mib и все, дальше самому шаблон рисовать. У меня есть пример про мониторинг по snmp synology. Тут все то же самое. snmp универсальный протокол, все агенты с snmp заводятся одинаково.
Могу поделится шаблоном, если надо. пиши в почту proff.ust@gmail.com
Спасибо, вот решил попробовать и столкнулся с такой проблемой -
2718:20161117:141224.687 using configuration file: /etc/zabbix/zabbix_proxy.conf
2718:20161117:141224.687 cannot open database file "/var/lib/sqlite/zabbix.db": [13] Permission denied
2718:20161117:141224.687 creating database ...
2718:20161117:141224.687 [Z3002] cannot create database '/var/lib/sqlite/zabbix.db': [0] unable to open database file
Не подскажите в чем проблема?
Так все написано в тексте ошибки. Процессу не хватает прав для работы с файлом базы данных /var/lib/sqlite/zabbix.db Либо на сам файл не выставлены соответствующие права, либо в сам каталог с файлом. Посмотри права на файл zabbix.db, возможно не отработала команда назначения прав, указанная в статье:
chown -R zabbix. /var/lib/sqlite
Сделал все как написано в статье.
Нашел - SElinux, вечно он мешает.
Это да, я часто на нем спотыкаюсь, когда забуду отключить.