Мониторинг удаленного сервера в Grafana
Для организации мониторинга используется стек программ Nodeexporter + Cadvisor + Alloy. А так же Uptime Kuma для внешнего мониторинга и уведомлений в случае потери связи с основным сервером. Сбор данных выполняет Prometheus и Loki.
Для объединения и защиты стека базовой аутентификацией используется Caddy. Для связи с основным сервером мониторинга Prometheus и Loki можно использовать как прямую публикацию портов в интернете так и использование vpn сети.
В текущем виде dockerproxy без based auth так как не удалось полноценно подключить alloy с базовой аутентификацией. Надо или доработать конфигурацию или поменять подход и на сервере удаленном запустить alloy а на локальном опубликовать в открытом виде api loki.
Настройка удаленного сервера
В предложенной реализации Alloy подключается к удаленному Dockerproxy для сбора логов, если это не требуется необходимо удалить публикацию порта 2375 в caddy, полное удаление из стека не рекомендуется так как используется для Uptime Kuma.
Пример docker compose
Конфигурация Caddy
По умолчанию если не задать параметры в .env
для авторизации используются admin:admin
Для получения шифрованного пароля можно воспользоваться встроенным шифрованием caddy:
docker exec caddy caddy hash-password --plaintext <Password>
При использовании в докере необходимо экранировать все символы $
заменой на $$
Настройка Uptime Kuma
Для работы uptime kuma с docker необходимо настроить подключение к хосту для этого необходимо перейти в Настройки
-> Хосты Docker
-> Настроить Docker Host
Настройка VPN подключения
Для доступа к данным мониторинга необходимо подключить к VPN сети только Caddy путем добавления второй сети.
...
networks:
monitor-net:
private_network:
ipv4_address: 10.2.0.130
networks:
monitor-net:
...
private_network:
name: private_network
external: true
Все сервисы мониторинга будут доступны в vpn сети по адресу 10.2.0.130.
Стек тестировался в связке с wg на базе стека dwg
Для доступа между сетями docker при использовании ufw необходимо выполнить команды:
# Включение ufw для docker
sudo ufw default allow routed
sudo ufw allow in on docker0
sudo ufw allow out on docker0
# Открытия доступа между сетями
sudo ufw allow from 10.2.0.0/24 to 10.2.1.0/24
sudo ufw allow from 10.2.1.0/24 to 10.2.0.0/24
Настройка основного сервера мониторинга
Для работы мониторинга Prometheus и Alloy с сервера мониторинга должны иметь доступ к портам Caddy в vpn сети или до самого сервера если опубликовано в интернете.
Пример конфигурации Prometheus для подключения мониторинга:
scrape_configs:
- job_name: 'nodeexporter'
scrape_interval: 5s
basic_auth:
username: admin
password: admin
static_configs:
- targets: [ 10.2.0.130:9100]
- job_name: 'cadvisor'
scrape_interval: 5s
basic_auth:
username: admin
password: admin
static_configs:
- targets: [ 10.2.0.130:8090]
Настройки для Alloy
loki.relabel "remote" {
forward_to = []
rule {
source_labels = ["__meta_docker_container_name"]
regex = "/(.*)"
target_label = "container_name"
}
rule {
source_labels = ["__meta_docker_container_name"]
regex = "/(loki|alloy|dockerproxy|nodeexporter|cadvisor)"
action = "drop"
}
}
discovery.docker "remote" {
host = "tcp://10.2.0.130:2375"
}
loki.source.docker "remote" {
host = "tcp://10.2.0.130:2375"
targets = discovery.docker.remote.targets
labels = {"app" = "docker", host = "remote" }
relabel_rules = loki.relabel.remote.rules
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
external_labels = { alloy_host = "gateway" }
}
Про настройки подробно расписано в разделе фильтрация логов.
Настройка Grafana
За основу панели использована уже существующая панель панель.
Шаблон панели:
![[Docker Containers and Logs.json]]