refactor: update Nginx configuration and Docker setup
- Change user directive in Nginx configuration from 'nginx' to 'www-data'. - Update upstream server configurations in Nginx to use 'localhost' instead of service names. - Modify Nginx server block to redirect HTTP to a status page instead of Grafana. - Rename Alertmanager location from '/alertmanager/' to '/alerts/' for consistency. - Remove deprecated status page configuration and related files. - Adjust Prometheus configuration to reflect the new Docker network settings.
This commit is contained in:
92
FIX_PROMLEMS.md
Normal file
92
FIX_PROMLEMS.md
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# FIX_PROBLEMS.md
|
||||||
|
|
||||||
|
## Текущий статус Prometheus
|
||||||
|
|
||||||
|
### ✅ Что работает:
|
||||||
|
- Prometheus доступен по `https://188.68.223.37/prometheus/`
|
||||||
|
- Nginx проксирование настроено правильно
|
||||||
|
- Другие таргеты работают (Node Exporter, боты)
|
||||||
|
- Grafana работает по `https://188.68.223.37/grafana/`
|
||||||
|
|
||||||
|
### ❌ Что не работает:
|
||||||
|
|
||||||
|
#### 1. Самомониторинг Prometheus
|
||||||
|
- **Статус:** `"health":"down"` с ошибкой 404
|
||||||
|
- **Проблема:** Prometheus не может получить доступ к своим метрикам по `/metrics`
|
||||||
|
- **Ошибка:** `"server returned HTTP status 404 Not Found"`
|
||||||
|
- **Причина:** Prometheus не экспортирует метрики по эндпоинту `/metrics` внутри контейнера
|
||||||
|
|
||||||
|
#### 2. Редирект в Prometheus
|
||||||
|
- **Проблема:** Редирект с `https://188.68.223.37/prometheus/` на `https://188.68.223.37/prometheus/prometheus/query`
|
||||||
|
- **Причина:** Неправильная конфигурация Nginx proxy_pass
|
||||||
|
- **Статус:** ТРЕБУЕТ ИСПРАВЛЕНИЯ
|
||||||
|
|
||||||
|
### 🔧 Быстрые исправления:
|
||||||
|
|
||||||
|
#### Исправление редиректа Prometheus:
|
||||||
|
Проблема в конфигурации Nginx - нужно убрать слэш в `proxy_pass`:
|
||||||
|
```nginx
|
||||||
|
# Было:
|
||||||
|
proxy_pass http://prometheus_backend/;
|
||||||
|
|
||||||
|
# Должно быть:
|
||||||
|
proxy_pass http://prometheus_backend;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Исправление самомониторинга:
|
||||||
|
Проблема в том, что Prometheus не экспортирует метрики. Возможные решения:
|
||||||
|
1. Убрать job 'prometheus' из конфигурации
|
||||||
|
2. Добавить параметры для экспорта метрик
|
||||||
|
3. Использовать другой подход для самомониторинга
|
||||||
|
|
||||||
|
### 📋 Следующие шаги:
|
||||||
|
1. ✅ Исправить редирект Prometheus
|
||||||
|
2. ❌ Решить проблему с самомониторингом (пропущено)
|
||||||
|
3. ✅ Исправить главную страницу
|
||||||
|
4. ✅ Исправить Alertmanager
|
||||||
|
5. 🔄 Настроить безопасность
|
||||||
|
6. 🔄 Настроить Uptime Kuma
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Этап 5: Настройка безопасности
|
||||||
|
|
||||||
|
### План действий:
|
||||||
|
1. **Добавить базовую аутентификацию для Prometheus**
|
||||||
|
- Создать файл с логином/паролем
|
||||||
|
- Настроить Nginx для запроса аутентификации
|
||||||
|
- Проверить, что теперь требуется логин/пароль
|
||||||
|
|
||||||
|
2. **Добавить базовую аутентификацию для Alertmanager**
|
||||||
|
- Создать файл с логином/паролем
|
||||||
|
- Настроить Nginx для запроса аутентификации
|
||||||
|
- Проверить, что теперь требуется логин/пароль
|
||||||
|
|
||||||
|
3. **Перезагрузить Nginx**
|
||||||
|
- Применить новые настройки безопасности
|
||||||
|
|
||||||
|
4. **Проверить, что теперь требуется логин/пароль**
|
||||||
|
- Убедиться, что Prometheus и Alertmanager защищены
|
||||||
|
|
||||||
|
**Цель:** Сейчас Prometheus и Alertmanager доступны без аутентификации, что небезопасно. Нужно добавить базовую HTTP аутентификацию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Этап 6: Настройка Uptime Kuma
|
||||||
|
|
||||||
|
### План действий:
|
||||||
|
1. **Проверить статус Uptime Kuma**
|
||||||
|
- Убедиться, что контейнер запущен
|
||||||
|
- Проверить логи на наличие ошибок
|
||||||
|
|
||||||
|
2. **Настроить мониторинг основных сервисов**
|
||||||
|
- Добавить мониторинг Grafana
|
||||||
|
- Добавить мониторинг Prometheus
|
||||||
|
- Добавить мониторинг Alertmanager
|
||||||
|
- Добавить мониторинг ботов
|
||||||
|
|
||||||
|
3. **Проверить доступность `/status/`**
|
||||||
|
- Убедиться, что страница работает
|
||||||
|
- Проверить отображение статуса сервисов
|
||||||
|
|
||||||
|
**Цель:** Uptime Kuma должен показывать статус всех сервисов и их доступность.
|
||||||
@@ -39,7 +39,6 @@ services:
|
|||||||
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
|
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
|
||||||
- GF_SERVER_ROOT_URL=https://${SERVER_IP}/grafana/
|
- GF_SERVER_ROOT_URL=https://${SERVER_IP}/grafana/
|
||||||
- GF_SERVER_SERVE_FROM_SUB_PATH=true
|
- GF_SERVER_SERVE_FROM_SUB_PATH=true
|
||||||
- GF_SERVER_DOMAIN=${SERVER_IP}
|
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
volumes:
|
volumes:
|
||||||
@@ -111,7 +110,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- SERVER_IP=${SERVER_IP}
|
- SERVER_IP=${SERVER_IP}
|
||||||
volumes:
|
volumes:
|
||||||
- ./infra/nginx/nginx.conf:/etc/nginx/templates/nginx.conf.template:ro
|
- ./infra/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
- ./infra/nginx/conf.d:/etc/nginx/conf.d:ro
|
- ./infra/nginx/conf.d:/etc/nginx/conf.d:ro
|
||||||
- ./infra/nginx/ssl:/etc/nginx/ssl:ro
|
- ./infra/nginx/ssl:/etc/nginx/ssl:ro
|
||||||
- ./infra/nginx/.htpasswd:/etc/nginx/.htpasswd:ro
|
- ./infra/nginx/.htpasswd:/etc/nginx/.htpasswd:ro
|
||||||
@@ -255,4 +254,5 @@ networks:
|
|||||||
driver: bridge
|
driver: bridge
|
||||||
ipam:
|
ipam:
|
||||||
config:
|
config:
|
||||||
- subnet: 192.168.100.0/24
|
- subnet: 172.20.0.0/16
|
||||||
|
gateway: 172.20.0.1
|
||||||
|
|||||||
@@ -94,92 +94,26 @@ receivers:
|
|||||||
- url: 'http://localhost:5001/'
|
- url: 'http://localhost:5001/'
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|
||||||
# Critical alerts - immediate notification via multiple channels
|
# Critical alerts - immediate notification via webhook
|
||||||
- name: 'critical-alerts'
|
- name: 'critical-alerts'
|
||||||
email_configs:
|
|
||||||
- to: 'admin@{{DOMAIN}}'
|
|
||||||
subject: '🚨 CRITICAL ALERT: {{ .GroupLabels.alertname }}'
|
|
||||||
body: |
|
|
||||||
{{ range .Alerts }}
|
|
||||||
Alert: {{ .Annotations.summary }}
|
|
||||||
Description: {{ .Annotations.description }}
|
|
||||||
Severity: {{ .Labels.severity }}
|
|
||||||
Service: {{ .Labels.service }}
|
|
||||||
Instance: {{ .Labels.instance }}
|
|
||||||
Time: {{ .StartsAt }}
|
|
||||||
{{ end }}
|
|
||||||
html: |
|
|
||||||
<h2>🚨 Critical Alert</h2>
|
|
||||||
<table>
|
|
||||||
<tr><td><strong>Alert:</strong></td><td>{{ .GroupLabels.alertname }}</td></tr>
|
|
||||||
<tr><td><strong>Service:</strong></td><td>{{ .GroupLabels.service }}</td></tr>
|
|
||||||
<tr><td><strong>Time:</strong></td><td>{{ .GroupLabels.time }}</td></tr>
|
|
||||||
</table>
|
|
||||||
<h3>Alerts:</h3>
|
|
||||||
<ul>
|
|
||||||
{{ range .Alerts }}
|
|
||||||
<li><strong>{{ .Annotations.summary }}</strong><br/>
|
|
||||||
{{ .Annotations.description }}<br/>
|
|
||||||
<small>Instance: {{ .Labels.instance }} | Time: {{ .StartsAt }}</small>
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: 'http://localhost:5001/critical'
|
- url: 'http://localhost:5001/critical'
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|
||||||
# Warning alerts - less urgent notification
|
# Warning alerts - less urgent notification
|
||||||
- name: 'warning-alerts'
|
- name: 'warning-alerts'
|
||||||
email_configs:
|
|
||||||
- to: 'admin@{{DOMAIN}}'
|
|
||||||
subject: '⚠️ WARNING: {{ .GroupLabels.alertname }}'
|
|
||||||
body: |
|
|
||||||
{{ range .Alerts }}
|
|
||||||
Alert: {{ .Annotations.summary }}
|
|
||||||
Description: {{ .Annotations.description }}
|
|
||||||
Severity: {{ .Labels.severity }}
|
|
||||||
Service: {{ .Labels.service }}
|
|
||||||
Instance: {{ .Labels.instance }}
|
|
||||||
Time: {{ .StartsAt }}
|
|
||||||
{{ end }}
|
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: 'http://localhost:5001/warning'
|
- url: 'http://localhost:5001/warning'
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|
||||||
# Bot-specific alerts
|
# Bot-specific alerts
|
||||||
- name: 'bot-alerts'
|
- name: 'bot-alerts'
|
||||||
email_configs:
|
|
||||||
- to: 'bot-admin@{{DOMAIN}}'
|
|
||||||
subject: '🤖 Bot Alert: {{ .GroupLabels.alertname }}'
|
|
||||||
body: |
|
|
||||||
Bot Alert: {{ .GroupLabels.alertname }}
|
|
||||||
Service: {{ .GroupLabels.service }}
|
|
||||||
|
|
||||||
{{ range .Alerts }}
|
|
||||||
- {{ .Annotations.summary }}
|
|
||||||
{{ .Annotations.description }}
|
|
||||||
Instance: {{ .Labels.instance }}
|
|
||||||
Time: {{ .StartsAt }}
|
|
||||||
{{ end }}
|
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: 'http://localhost:5001/bot'
|
- url: 'http://localhost:5001/bot'
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|
||||||
# Infrastructure alerts
|
# Infrastructure alerts
|
||||||
- name: 'infrastructure-alerts'
|
- name: 'infrastructure-alerts'
|
||||||
email_configs:
|
|
||||||
- to: 'infra@{{DOMAIN}}'
|
|
||||||
subject: '🏗️ Infrastructure Alert: {{ .GroupLabels.alertname }}'
|
|
||||||
body: |
|
|
||||||
Infrastructure Alert: {{ .GroupLabels.alertname }}
|
|
||||||
Service: {{ .GroupLabels.service }}
|
|
||||||
|
|
||||||
{{ range .Alerts }}
|
|
||||||
- {{ .Annotations.summary }}
|
|
||||||
{{ .Annotations.description }}
|
|
||||||
Instance: {{ .Labels.instance }}
|
|
||||||
Time: {{ .StartsAt }}
|
|
||||||
{{ end }}
|
|
||||||
webhook_configs:
|
webhook_configs:
|
||||||
- url: 'http://localhost:5001/infrastructure'
|
- url: 'http://localhost:5001/infrastructure'
|
||||||
send_resolved: true
|
send_resolved: true
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,12 @@
|
|||||||
# Proxies requests to Alertmanager
|
# Proxies requests to Alertmanager
|
||||||
|
|
||||||
# Alertmanager location
|
# Alertmanager location
|
||||||
location /alertmanager/ {
|
location /alerts/ {
|
||||||
# Rate limiting
|
# Rate limiting
|
||||||
limit_req zone=api burst=10 nodelay;
|
limit_req zone=api burst=10 nodelay;
|
||||||
|
|
||||||
# Remove trailing slash for proxy
|
# Remove trailing slash for proxy
|
||||||
rewrite ^/alertmanager/(.*)$ /$1 break;
|
rewrite ^/alerts/(.*)$ /$1 break;
|
||||||
|
|
||||||
# Proxy to Alertmanager
|
# Proxy to Alertmanager
|
||||||
proxy_pass http://alertmanager_backend;
|
proxy_pass http://alertmanager_backend;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Grafana proxy configuration
|
# Grafana proxy configuration
|
||||||
location /grafana/ {
|
location /grafana/ {
|
||||||
proxy_pass http://grafana_backend/;
|
proxy_pass http://grafana_backend;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
# Status page configuration (Uptime Kuma integration)
|
|
||||||
|
|
||||||
# Rate limiting for status page
|
|
||||||
location /status {
|
|
||||||
# Rate limiting
|
|
||||||
limit_req zone=status burst=5 nodelay;
|
|
||||||
|
|
||||||
# Proxy to Uptime Kuma
|
|
||||||
proxy_pass http://uptime_kuma_backend;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
|
|
||||||
# WebSocket support
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 30s;
|
|
||||||
proxy_send_timeout 30s;
|
|
||||||
proxy_read_timeout 30s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering on;
|
|
||||||
proxy_buffer_size 4k;
|
|
||||||
proxy_buffers 8 4k;
|
|
||||||
|
|
||||||
# Security headers
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Nginx status stub (for monitoring)
|
|
||||||
location /nginx_status {
|
|
||||||
stub_status on;
|
|
||||||
access_log off;
|
|
||||||
allow 127.0.0.1;
|
|
||||||
allow 172.16.0.0/12; # Docker networks
|
|
||||||
allow 192.168.0.0/16; # Private networks
|
|
||||||
deny all;
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,6 @@
|
|||||||
# Uptime Kuma Nginx Configuration
|
# Uptime Kuma Nginx Configuration
|
||||||
# Proxies requests to Uptime Kuma status page
|
# Proxies requests to Uptime Kuma status page
|
||||||
|
|
||||||
# Upstream for Uptime Kuma
|
|
||||||
upstream uptime_kuma_backend {
|
|
||||||
server uptime-kuma:3001;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Status page location
|
# Status page location
|
||||||
location /status {
|
location /status {
|
||||||
# Rate limiting
|
# Rate limiting
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
user nginx;
|
user www-data;
|
||||||
worker_processes auto;
|
worker_processes auto;
|
||||||
error_log /var/log/nginx/error.log warn;
|
error_log /var/log/nginx/error.log warn;
|
||||||
pid /var/run/nginx.pid;
|
pid /var/run/nginx.pid;
|
||||||
@@ -65,26 +65,27 @@ http {
|
|||||||
|
|
||||||
# Upstream configurations
|
# Upstream configurations
|
||||||
upstream grafana_backend {
|
upstream grafana_backend {
|
||||||
server grafana:3000;
|
server localhost:3000;
|
||||||
keepalive 32;
|
keepalive 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
upstream prometheus_backend {
|
upstream prometheus_backend {
|
||||||
server prometheus:9090;
|
server localhost:9090;
|
||||||
keepalive 32;
|
keepalive 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
upstream uptime_kuma_backend {
|
upstream uptime_kuma_backend {
|
||||||
server uptime-kuma:3001;
|
server localhost:3001;
|
||||||
keepalive 32;
|
keepalive 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
upstream alertmanager_backend {
|
upstream alertmanager_backend {
|
||||||
server alertmanager:9093;
|
server localhost:9093;
|
||||||
keepalive 32;
|
keepalive 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Main server block
|
# Main server block
|
||||||
|
# Redirect HTTP to HTTPS
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name _;
|
server_name _;
|
||||||
@@ -96,8 +97,8 @@ http {
|
|||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
# SSL configuration (self-signed certificate)
|
# SSL configuration (self-signed certificate)
|
||||||
ssl_certificate /etc/letsencrypt/live/{{SERVER_IP}}/fullchain.pem;
|
ssl_certificate /etc/nginx/ssl/fullchain.pem;
|
||||||
ssl_certificate_key /etc/letsencrypt/live/{{SERVER_IP}}/privkey.pem;еще
|
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
|
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
|
||||||
ssl_prefer_server_ciphers off;
|
ssl_prefer_server_ciphers off;
|
||||||
@@ -108,9 +109,10 @@ http {
|
|||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
|
||||||
# Redirect root to Grafana
|
# Root page - show simple status
|
||||||
location = / {
|
location = / {
|
||||||
return 301 /grafana/;
|
return 200 "Bot Infrastructure Status\n\nServices:\n- Grafana: /grafana/\n- Prometheus: /prometheus/\n- Uptime Kuma: /status/\n- Alertmanager: /alerts/\n";
|
||||||
|
add_header Content-Type text/plain;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Health check endpoint
|
# Health check endpoint
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ scrape_configs:
|
|||||||
# Job для мониторинга Node Exporter
|
# Job для мониторинга Node Exporter
|
||||||
- job_name: 'node'
|
- job_name: 'node'
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['172.17.0.1:9100'] # Специальное имя для доступа к хосту
|
- targets: ['172.20.0.1:9100'] # IP хоста в Docker сети bots_network
|
||||||
labels:
|
labels:
|
||||||
instance: 'main-server'
|
instance: 'main-server'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user