ZABBIX IN DOCKER-COMPOSE
Поднимаем zabbix на docker контейнерах
zabbix-postgres:
База для заббикса
zabbix-postgres-backups:
Бэкап БД
traefik-certificates
Бесплатные сертификаты let's encript с реверспрокси сервером
Создадим папки
/zabbix-docker/ - для docker
/src/ - для Базы postgres
mkdir -R /opt/zabbix-docker/src/
cd /opt/zabix-docker
Создадим файд docker-compose.yml
vim docker-compose.yml
version: '2.3'
volumes:
zabbix-postgres:
zabbix-postgres-backups:
traefik-certificates:
services:
postgres:
# Image tag (replace with yours)
image: postgres:12.5
volumes:
- ./src/zabbix-postgres:/var/lib/postgresql/data
environment:
# Database name (replace with yours)
POSTGRES_DB: zabbixdb
# Database user (replace with yours)
POSTGRES_USER: zabbixdbuser
# Database password (replace with yours)
POSTGRES_PASSWORD: YourStrongPassword
restart: unless-stopped
zabbix:
# Image tag (replace with yours)
image: zabbix/zabbix-server-pgsql:ubuntu-5.2.4
environment:
DB_SERVER_HOST: postgres
DB_SERVER_PORT: 5432
# Database name (replace with yours)
POSTGRES_DB: zabbixdb
# Database user (replace with yours)
POSTGRES_USER: zabbixdbuser
# Database password (replace with yours)
POSTGRES_PASSWORD: YourStrongPassword
ZBX_VALUECACHESIZE: 64M
ZBX_CACHESIZE: 128M
ZBX_TRENDCACHESIZE: 128M
ports:
- "10051:10051"
restart: unless-stopped
depends_on:
- postgres
web:
# Image tag (replace with yours)
image: zabbix/zabbix-web-apache-pgsql:ubuntu-5.2.4
environment:
DB_SERVER_HOST: postgres
DB_SERVER_PORT: 5432
# Database name (replace with yours)
POSTGRES_DB: zabbixdb
# Database user (replace with yours)
POSTGRES_USER: zabbixdbuser
# Database password (replace with yours)
POSTGRES_PASSWORD: YourStrongPassword
ZBX_SERVER_HOST: zabbix
ZBX_SERVER_PORT: 10051
# Timezone (replace with yours) https://www.php.net/manual/en/timezones.php
PHP_TZ: Europe/Kiev
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
labels:
- "traefik.enable=true"
# Zabbix URL (replace with yours)
- "traefik.http.routers.zabbix.rule=Host(`your.domain.ua`)"
- "traefik.http.routers.zabbix.service=zabbix"
- "traefik.http.routers.zabbix.tls.certresolver=letsencrypt"
- "traefik.http.routers.zabbix.entrypoints=websecure"
- "traefik.http.services.zabbix.loadbalancer.passhostheader=true"
- "traefik.http.services.zabbix.loadbalancer.server.port=8080"
restart: unless-stopped
depends_on:
- postgres
- zabbix
agent:
# Image tag (replace with yours)
image: zabbix/zabbix-agent:ubuntu-5.2.4
environment:
# Zabbix Hostname (replace with yours)
# Set as DNS name on Zabbix server host configuration screen to make checks of Zabbix server itself
ZBX_HOSTNAME: your.domain.ua
ZBX_SERVER_HOST: 0.0.0.0/0
ports:
- "10050:10050"
restart: unless-stopped
depends_on:
- postgres
- zabbix
traefik:
# Image tag (replace with yours)
image: traefik:2.4
command:
- "--global.checkNewVersion=true"
- "--global.sendAnonymousUsage=false"
- "--api=true"
- "--log.level=WARN"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.exposedByDefault=false"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
# Email for Let's Encrypt (replace with yours)
- "--certificatesresolvers.letsencrypt.acme.email=bezbomgat@gmail.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-certificates:/etc/traefik/acme
ports:
- "80:80"
- "443:443"
labels:
- "traefik.enable=true"
# Traefik URL (replace with yours)
- "traefik.http.routers.default.rule=Host(`traefik.your.domain.ua`)"
- "traefik.http.routers.default.service=api@internal"
- "traefik.http.routers.default.tls.certresolver=letsencrypt"
- "traefik.http.routers.default.entrypoints=websecure"
- "traefik.http.services.default.loadbalancer.passhostheader=true"
- "traefik.http.services.default.loadbalancer.server.port=8080"
- "traefik.http.routers.default.middlewares=authtraefik"
# Basic Authentication for Traefik Dashboard
# Username: traefikadmin (replace with yours)
# Passwords must be encoded using MD5, SHA1, or BCrypt
- "traefik.http.middlewares.authtraefik.basicauth.users=traefikadmin:DaJtGnncrsuc2C/+WolAQ25H0Jw="
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
restart: unless-stopped
backups:
# Image tag (replace with yours)
image: postgres:12.5
# Database backups prune interval (replace with yours). Default is 7 days.
# find /srv/zabbix-postgres/backups -type f -mtime +7 | xargs rm -f
# Zabbix backups interval (replace with yours). Default is 1 day.
# sleep 24h
# Run zabbix-restore-database.sh to restore database if needed.
command: sh -c 'sleep 30m
&& while true; do
PGPASSWORD="$$(echo $$POSTGRES_PASSWORD)"
pg_dump
-h postgres
-p 5432
-d zabbixdb
-U zabbixdbuser | gzip > /srv/zabbix-postgres/backups/zabbix-postgres-backup-$$(date "+%Y-%m-%d_%H-%M").gz
&& find /srv/zabbix-postgres/backups -type f -mtime +7 | xargs rm -f
sleep 24h; done'
volumes:
# Database backups location
- zabbix-postgres-backups:/srv/zabbix-postgres/backups
environment:
# Database password (replace with yours)
POSTGRES_PASSWORD: YourStrongPassword
restart: unless-stopped
depends_on:
- postgres
- zabbix
Запускаем
docker-compose -f docker-compose.yml -p zabbix up -d
Docker скачает и поднимет все контейнеры
Заходим по доменному имени
Имя и пароль по умолчанию Admin zabbix
Сразу их меняем
User setting - Change password
Добавляем сервер в хост zabbix
Configuration - Hosts - Zabbix server - Interface
ставим DNS и вписуем доменное имя Update через время ждем коннекта
AGENT-ZABBIX
Добавляем репозиторий
rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
Установка агента Zabbix
yum install zabbix-agent
Настройка агента
Генерируем PSK
sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"
Правим конфиг агента
vim /etc/zabbix/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=1
EnableRemoteCommands=1
ServerActive=your.domain.ua
Server=your.domain.ua
Hostname=host.name.agent
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK 001
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
Копируем ключь
cat /etc/zabbix/zabbix_agentd.psk
# Перезапуск агента Zabbix
service zabbix-agent restart
# Автозапуск службы zabbix-agent при запуске системы
systemctl enable zabbix-agent
systemctl status zabbix-agent
Добавляем правила Firewall
Добавляем зону для мониторинга с определенного ip сервера
firewall-cmd --new-zone=monitoring --permanent
firewall-cmd --reload
firewall-cmd --get-zones
firewall-cmd --zone=monitoring --add-source=10.10.10.5/20 --permanent
firewall-cmd --zone=monitoring --add-port={8887/tcp,10050/tcp,10051/tcp} --permanent
firewall-cmd --reload
firewall-cmd --zone=monitoring --list-all
Подготовка nginx к мониторингу
Создаем конфиг vim /etc/nginx/bx/conf/zabbix_nginx.conf
server {
listen 127.0.0.1:8885;
server_name localhost;
server_name_in_redirect off;
keepalive_timeout 0;
allow 127.0.0.1;
allow ::1;
deny all;
access_log off;
location = /nginx-status {
stub_status on;
allow 127.0.0.1;
deny all;
}
}
Провряем
nginx -t
nginx -s reload
curl http://localhost:8885/nginx-status
Active connections: 89
server accepts handled requests
1374661 1374661 9511381
Reading: 0 Writing: 1 Waiting: 87
zabbix_agentd -t web.page.get[localhost,nginx-status,8885]
eb.page.get[localhost,nginx-status,80] [t|HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Mon, 15 Mar 2021 07:48:43 GMT
Content-Type: text/plain
Content-Length: 106
Connection: close
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Active connections: 1
server accepts handled requests
3576 3576 4206
Reading: 0 Writing: 1 Waiting: 0 ]
На сервере zabbix
Configuration - Hosts - New
Hostname - your hostnsme zabbix agent
Groups - Linux servers
Interface - your hostnsme zabbix agent
Templates - Nginx by Zabbix agent - add
Опять заходим на наш хост - Templates - кликаем на шаблоне Apache by Zabbix agent
Заходим в Tags и добавляем тэги
{$S_HOST} - localhost название виртуального хоста
{$S_PATH} - nginx-status?auto путь к странице со статистикой
{$S_PORT} - 8885 порт сервера nginx, на котором работает статистика
Подготовка apache к мониторингу для сайта на bitrixvm
добавьте в конфиг apache примерно следующие настройки.
Создадим кастомный конфиг
vim /etc/httpd/bx/custom/zabbix-agent.conf
<Location "/server-status">
SetHandler server-status
Require host localhost
</Location>
Bitrixenv автоматически все настроит, если вы через консольное меню включите Monitoring in pool. Запустится роль ansible, которая настроит в том числе apache, установит и запустит nagios и munin. Если они вам не нужны, то просто добавьте приведенный выше кусок конфига в
vim /etc/httpd/bx/custom/zabbix-agent.conf
Listen localhost:8887
<IfModule mod_status.c>
ExtendedStatus On
</IfModule>
<VirtualHost localhost:8887>
<Location /server-status>
SetHandler server-status
Require ip 127.0.0.1
require ip ::1
</Location>
</VirtualHost>
После этого проверьте настройки apache и перезапустите его.
apachectl -t
apachectl restart
Проверяем состояние apache
curl http://localhost:8887/server-status?auto
Total Accesses: 3
Total kBytes: 1
Uptime: 95
ReqPerSec: .0315789
BytesPerSec: 10.7789
BytesPerReq: 341.333
BusyWorkers: 1
IdleWorkers: 109
Scoreboard: __W____________________
И на всякий случай проверьте, что zabbix-agent может получать эту же информацию.
zabbix_agentd -t web.page.get[localhost,server-status?auto,8887]
web.page.get[localhost,server-status?auto,8887] [t|HTTP/1.1 200 OK
Date: Tue, 09 Mar 2021 09:42:44 GMT
Server: Apache/2.4.6 (CentOS)
Content-Length: 261
Connection: close
Content-Type: text/plain; charset=ISO-8859-1
Total Accesses: 5
Total kBytes: 2
Uptime: 215
ReqPerSec: .0232558
BytesPerSec: 9.52558
BytesPerReq: 409.6
BusyWorkers: 1
IdleWorkers: 109
Scoreboard: _____W___________________________
На сервере zabbix
Configuration - Hosts - New
Hostname - your hostnsme zabbix agent
Groups - Linux servers
Interface - your hostnsme zabbix agent
Templates - Apache by Zabbix agent - add
Опять заходим на наш хост - Templates - кликаем на шаблоне Apache by Zabbix agent
Заходим в Tags и добавляем тэги
{$S_HOST} - localhost название виртуального хоста
{$S_PATH} - server-status?auto путь к странице со статистикой
{$S_PORT} - 8887 порт сервера apache, на котором работает статистика
Подготовка mysql к мониторингу
Добавляем данные для мониторинга mysql
vim /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
Перезапускаем агента
systemctl restart zabbix-agent
Делаем базу и пользователя для мониторинга в mysql
mysql -uroot -p
CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'TTRy1bRRgLIB';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
FLUSH PRIVILEGES;
quit
Смотрим домашнюю директорию агента
cat /etc/passwd | grep zabbix
zabbix:x:990:986:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
Если нет, то создаем
mkdir /var/lib/zabbix
И ложим в директорию фаил с данными для подключению к БД
vim /var/lib/zabbix/.my.cnf
[client]
user=zbx_monitor
password=TTRy1bRRgLIB
host=localhost
[mysqladmin]
user=zbx_monitor
password=TTRy1bRRgLIB
host=localhost
Даем права к своей папке zabbix
chown -R zabbix. /var/lib/zabbix
chmod 400 /var/lib/zabbix/.my.cnf
На сервере zabbix
Качаем шаблон к себе на машину
wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/templates/classic/template_db_mysql.xml?at=da494b5b6eb3a5c3018a5385ca12663a7025625a
Configuraion - Temolates - import
Configuration - Hosts - New
Hostname - your hostnsme zabbix agent
Groups - Linux servers
Interface - your hostnsme zabbix agent
Templates - MySQL by Zabbix agent - add
Источник: https://serveradmin.ru/monitoring-web-servera-nginx-i-php-fpm-v-zabbix/#_php-fpm, https://www.youtube.com/watch?v=PT_uq |