/home/compose/pro-4gain-zabbix/).mirkwood.4gain.pro — default proxy для firefly-hosted сервисов (19 web-services). Mirkwood в одной AS-зоне с firefly, связь mirkwood↔firefly стабильна через публичный канал (94.25.50.91 ↔ 5.101.14.132). Канал proxy↔server (:10051) идёт через AWG mesh (Server=10.9.0.191) — там RKN/DPI бьёт сильнее.nugush.4gain.pro — VPN exit-node + nginx-gateway для Telegram, может использоваться как backup proxy. Канал тоже через mesh (peer 10.9.0.199 на awg1). Сейчас web-services через нугуш не идут.dep816.ru (на mirkwood) → server-direct (proxy: "" в web_services[]) — server (firefly) сам опрашивает mirkwood публично.proxy↔server channel — через AWG mesh:
firefly:10051 страдал от RKN/DPI флаппинга (каждые 5–10 сек connection timed out → restored), item'ы web-checks устаревали на 20+ часов.Server=10.9.0.191 (mesh-IP firefly). UDP с обфускацией не блокируется RKN, MTU 1420 фиксирован.... by Zabbix agent active). На mhws agent2 7.0 ставится без proxy — Zabbix 7.0 proxy RPM несовместим с RED OS 8 либами (libssl.so.1.1 / libnetsnmp.so.35 / libevent_core-2.1.so.6 / libldap-2.4.so.2 — RED OS имеет .so.40, .so.7, libldap.so.2 из 2.5+).https://nugush.4gain.pro/tg-out/) → api.telegram.org. Прямо с firefly не работает — РФ-провайдеры блокируют api.telegram.org.Каждый ресурс из web_services: в inventory/group_vars/all.yml регистрируется как synthetic Zabbix-host через роль sm2c-zabbix-web-service + плейбук service-zabbix-web-services.yml. См. список — WEB Ресурсы.
monitored_by: proxy + proxy: mirkwood.4gain.pro (default) — критично! Без этого HTTP-checks из docker-server'а на firefly уходят в NAT-hairpinning loop (DNS → router external → DNAT обратно на firefly:443) и фейлятся за 1ms. Mirkwood в одной AS-зоне с firefly, public канал стабилен.sm2c-zabbix-web-service подставляет _ws_proxy в interface.dns). Это значит для firefly-hosted сервисов interface = mirkwood.4gain.pro:10050, для dep816 (server-direct) interface = firefly.e1.4gain.pro:10050. Zabbix-agent items типа web.certificate.get[fqdn,443] и net.dns.record[,fqdn,A] выполняются на agent2 того же хоста где proxy.proxy: "" для dep816.ru (на самом mirkwood) — opraшивается server-direct из firefly.forGain Website by HTTPTemplate_groups: Templates/4gain. Файл — playbooks/files/forgain-website-template.yaml, импортируется через service-zabbix-templates-import.yml.
web.raw.get (raw headers+body, follow_redirects=YES) → dependent web.status_code (regex parse) → trigger find(...,"regexp","{$WEBSITE.HTTP.STATUS_OK_REGEX}")=0.web.certificate.get → JSONPATH+JS preprocessing → days until expiry → AVG (<14d) / DISASTER (<3d) triggers.net.dns.record[,fqdn,A,2,1] → regex preprocessing (extract IP из вывода name A ip) → trigger != {$DNS.EXPECTED.IP}.event_name содержит {ITEM.LASTVALUE} — в TG-алерте видно текущий HTTP-код.ok_codes: [200, 302] (большинство web-app редиректят неавторизованного на /login).{$WEBSITE.SCHEME}, {$WEBSITE.HOSTNAME}, {$WEBSITE.PATH} — URL компоненты.{$WEBSITE.HTTP.STATUS_OK_REGEX} — default ^200$. У роли собирается из ok_codes per-host как ^(200|302|...)$.{$CERT.EXPIRY.WARN/CRIT} — пороги cert.{$DNS.EXPECTED.IP} — ожидаемый A-record.forGain Web Services → 18 child services per FQDN.registry/pages — внутри gitlab (через parent_service: gitlab в web_services entry).service:<name> (тег ставится на synthetic-host, Zabbix копирует host-tags в event-tags автоматически).forGain Web SLA 99.9 / 30d — matching tag service.forGain Critical SLA 99.95 / 30d — gitlab/zabbix/mail.service-zabbix-sla.yml — модуля zabbix_sla в community.zabbix нет.service-zabbix-alerts-telegram.yml создаёт media-type Telegram (4gain) (webhook) с bot token и привязывает chat_id -518879777 (group "4Gain Alert System") к user ansible.https://nugush.4gain.pro/tg-out/bot<TOKEN>/sendMessage (не на api.telegram.org)./etc/nginx/conf.d/tg-webhooks.conf имеет location /tg-out/ который proxy_pass https://api.telegram.org/. Тот же server-блок имеет другие webhook-locations (для inbound от TG → internal сервисы).zabbix:В ансибл-инвентори две роли использовали переменную с одинаковым именем zabbix::
sm2c-cloud-zabbix — dict с конфигом стека (compose_dir, db.password, frontend.host, ...).sm2c-zabbix-host (per-host registration) — раньше использовала zabbix: в host_vars с полями kind/templates/macros/tags/....Host_vars > role defaults → роль sm2c-cloud-zabbix ловила host_vars-вариант и падала на отсутствующих полях (compose_dir).
Решение принято: в роли sm2c-zabbix-host и всех 18 host_vars переменная переименована в zbx_host:. При добавлении чего-либо связанного с zabbix-host registration — использовать zbx_host:.
| Playbook | Назначение |
|---|---|
service-zabbix-bootstrap.yml |
стек Zabbix + agent2 на cloud/cloud_guests/proxmox |
service-zabbix-proxy-bootstrap.yml |
proxy на nugush + регистрация в Zabbix |
service-zabbix-inventory.yml |
регистрация inventory-хостов в Zabbix через community.zabbix.zabbix_host |
service-zabbix-templates-import.yml |
импорт кастомного forGain Website by HTTP template'а |
service-zabbix-web-services.yml |
итерирует по web_services: и применяет роль sm2c-zabbix-web-service |
service-zabbix-sla.yml |
service-tree + SLA-объекты через uri-API |
service-zabbix-alerts-telegram.yml |
Telegram media-type setup |
При работе с мониторингом 4gain ресурсов всегда смотри в эти плейбуки — там source of truth.
inventory/group_vars/all.yml :: web_services: list, прогоняй service-zabbix-web-services.yml.playbooks/files/forgain-website-template.yaml + service-zabbix-templates-import.yml. UUID'ы в YAML-template должны быть UUIDv4 (валидируется на import).Changelog
interface.dns synthetic-host'ов теперь динамически = proxy-хост (раньше был hardcoded nugush.4gain.pro). После смены default proxy на mirkwood items застряли на nugush — cert/DNS не собирались. Фикс: dns: "{{ _ws_proxy }}" в роли (claude/forGain)proxy: mirkwood.4gain.pro в роли); dep816 → server-direct (proxy: ""); nugush остаётся как backup (claude/forGain)/etc/hosts override на nugush — отменено (mirkwood в одной AS-зоне с firefly, прямой публичный канал стабилен, override не нужен) (claude/forGain)forgain_zabbix_monitoring (claude/forGain)