tcpdump, логи ошибок, debug mode, common issues
tcpdump, логи ошибок, debug mode, common issues.
global
log /dev/log local0 debugПерезапуск:
sudo systemctl restart haproxyВажно: Не использовать в production долго — огромный объём логов.
# Включить debug для конкретного frontend
echo "set debug dev frontend http_front" | socat /var/run/haproxy/admin.sock stdio
# Выключить
echo "set debug dev frontend http_front off" | socat /var/run/haproxy/admin.sock stdiotail -f /var/log/haproxy.log# Ошибки 5xx
grep " 5[0-9][0-9] " /var/log/haproxy.log
# Таймауты
grep -i "timeout" /var/log/haproxy.log
# Ошибки подключения
grep -i "connection refused\|cannot connect" /var/log/haproxy.log
# Health check failures
grep "DOWN\|UP" /var/log/haproxy.log# Подсчёт по статусам
awk '{print $15}' /var/log/haproxy.log | sort | uniq -c | sort -rn
# Топ URL
awk -F'"' '{print $2}' /var/log/haproxy.log | awk '{print $2}' | sort | uniq -c | sort -rn | head -20# Среднее время ответа
awk '{print $15}' /var/log/haproxy.log | awk -F'/' '{sum+=$4; count++} END {print sum/count}'
# Медленные запросы (>1s)
awk '{if ($18 > 1000) print}' /var/log/haproxy.log# Захват на порту 80
sudo tcpdump -i any -s 0 -w haproxy.pcap port 80
# Захват на порту 443
sudo tcpdump -i any -s 0 -w haproxy-https.pcap port 443
# Захват с фильтром по IP
sudo tcpdump -i any -s 0 -w haproxy.pcap host 192.168.1.10Параметры:
-i any — все интерфейсы-s 0 — полный пакет (не обрезать)-w — запись в файл# Открыть файл
wireshark haproxy.pcap
# Или в командной строке
tshark -r haproxy.pcap -Y "http"# HTTP запросы
http.request
# HTTP ответы
http.response
# Ошибки 5xx
http.response.code >= 500
# Медленные запросы
tcp.analysis.ack_rtt > 1
# TCP retransmission
tcp.analysis.retransmission
# Захват и вывод в реальном времени
sudo tcpdump -i any -s 0 -A port 80 | grep -E "GET|POST|HTTP"
# Только заголовки
sudo tcpdump -i any -s 0 -A port 80 | head -100http://haproxy:8404/
Что смотреть:
# Общая информация
echo "show info" | socat /var/run/haproxy/admin.sock stdio
# Детальная статистика
echo "show stat" | socat /var/run/haproxy/admin.sock stdio
# Статус серверов
echo "show servers state" | socat /var/run/haproxy/admin.sock stdio# Экспорт в CSV
echo "show stat" | socat /var/run/haproxy/admin.sock stdio | tail -n +2 > haproxy-stats.csv
# Анализ в Python/pandas
import pandas as pd
df = pd.read_csv('haproxy-stats.csv')# Проверка синтаксиса
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
# Проверка с выводом ошибок
sudo haproxy -c -f /etc/haproxy/haproxy.cfg 2>&1# Показать эффективную конфигурацию
echo "show conf" | socat /var/run/haproxy/admin.sock stdioПричины:
Диагностика:
# Проверка статуса серверов
echo "show servers state" | socat /var/run/haproxy/admin.sock stdio
# Проверка очереди
echo "show stat" | socat /var/run/haproxy/admin.sock stdio | grep QueueРешение:
# Увеличить maxconn
global
maxconn 50000
backend web_servers
timeout queue 30sПричины:
Диагностика:
# Поиск таймаутов в логах
grep "504" /var/log/haproxy.log
# Проверка времени ответа
awk '{if ($15 == 504) print $18}' /var/log/haproxy.logРешение:
defaults
# Увеличить timeout
timeout server 60s
# Health check
option httpchk GET /health
http-check expect status 200Причины:
Диагностика:
# Логи с ошибками
grep "502" /var/log/haproxy.log
# Проверка backend
curl -v http://backend:8080/Решение:
backend web_servers
# Retry при ошибке
retries 3
option redispatch
# Health check
option httpchk GET /healthПричины:
Диагностика:
# Логи health checks
grep "DOWN\|UP" /var/log/haproxy.log
# Проверка health check endpoint
curl -v http://backend:8080/healthРешение:
backend web_servers
# Более мягкие проверки
server web1 192.168.1.10:8080 check inter 10s fall 5 rise 3
# Fastinter для быстрого восстановления
server web1 192.168.1.10:8080 check inter 10s fastinter 2s fall 5 rise 3Причины:
Диагностика:
# Анализ таймингов
awk '{print $15}' /var/log/haproxy.log | awk -F'/' '{print "Tq="$1", Tw="$2", Tc="$3", Tr="$4", Ta="$5}' | head -20
# Проверка очереди
echo "show stat" | socat /var/run/haproxy/admin.sock stdio | grep QueueРешение:
backend web_servers
# Балансировка
balance leastconn
# Увеличить число серверов
server web1 192.168.1.10:8080 check maxconn 100
server web2 192.168.1.11:8080 check maxconn 100Причины:
Диагностика:
# Проверка SSL подключения
openssl s_client -connect example.com:443 -servername example.com
# Проверка сертификата
openssl x509 -in /etc/haproxy/certs/site.pem -text -nooutРешение:
global
# Современные cipher suites
ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM
ssl-default-bind-options ssl-min-ver TLSv1.2
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/site.pem# Top процессы
top -p $(pidof haproxy)
# CPU по потокам
top -H -p $(pidof haproxy)# Потребление памяти
cat /proc/$(pidof haproxy)/status | grep Vm
# Проверка утечек
watch -n 1 'cat /proc/$(pidof haproxy)/status | grep VmRSS'# Сетевая статистика
netstat -s | grep -i error
# Соединения
ss -s
# Трафик
iftop -P -n -p "port 80 or port 443"# Сборка с debug символами
make DEBUG=-g
# Запуск в debug режиме
haproxy -d -f /etc/haproxy/haproxy.cfg# Трассировка системных вызовов
sudo strace -p $(pidof haproxy) -f -o haproxy-strace.log
# Только network вызовы
sudo strace -p $(pidof haproxy) -e trace=network# Профилирование CPU
sudo perf top -p $(pidof haproxy)
# Запись для анализа
sudo perf record -p $(pidof haproxy) -g -- sleep 30
sudo perf report# 1. Проверка статуса
echo "show stat" | socat /var/run/haproxy/admin.sock stdio
# 2. Проверка логов
tail -100 /var/log/haproxy.log
# 3. Захват трафика
sudo tcpdump -i any -s 0 -w debug.pcap port 80 or port 443
# 4. Воспроизведение проблемы
curl -v http://example.com/api/slow-endpoint
# 5. Остановка захвата
# Ctrl+C в tcpdump
# 6. Анализ в Wireshark
wireshark debug.pcap
# 7. Проверка backend
curl -v http://backend:8080/api/slow-endpoint
# 8. Включение debug логов (осторожно!)
# Edit /etc/haproxy/haproxy.cfg: log /dev/log local0 debug
sudo systemctl restart haproxy
# 9. Воспроизведение и анализ
# 10. Выключение debug
# Edit /etc/haproxy/haproxy.cfg: log /dev/log local0 info
sudo systemctl restart haproxy# ✅ Production
log /dev/log local0 info
# ✅ Troubleshooting (временно)
# log /dev/log local0 debug
# ❌ Production (слишком много)
# log /dev/log local0 debug# ✅ Запись в файл для анализа
sudo tcpdump -i any -s 0 -w debug.pcap port 80
# ❌ Вывод в терминал (потеря данных)
# sudo tcpdump -i any port 80# ✅ Временно для отладки
# Включить, воспроизвести проблему, выключить
# ❌ Оставить включённым в production
# Огромные логи, влияние на производительностьИзучим production кейсы: миграции, blue-green деплой, canary релизы.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.