← Назад к вопросам
Как узнать, что произошло в момент падения сервиса?
2.0 Middle🔥 151 комментариев
#DevOps и инфраструктура#Soft Skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Способы диагностики падения сервиса
Когда сервис падает, первое, что нужно сделать — собрать информацию о том, что произошло. Есть несколько критических источников данных:
1. Логи приложения
Это первое место, куда нужно смотреть. Логи содержат информацию об ошибках, исключениях и потоке выполнения.
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[
logging.FileHandler("app.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
try:
result = risky_operation()
except Exception as e:
logger.error(f"Operation failed: {e}", exc_info=True)
2. Системные логи
Смотри /var/log/syslog, /var/log/messages или журналы контейнеров (если используешь Docker):
# Linux системные логи
sudo tail -f /var/log/syslog
# Docker логи
docker logs -f container_name
# Kubernetes логи
kubectl logs pod-name
3. Метрики и мониторинг
Используй инструменты мониторинга для анализа состояния:
- CPU, Memory, Disk: Проверь, не произошла ли нехватка ресурсов
- Network: Проверь пропускную способность и соединения
- Application metrics: Кастомные метрики через Prometheus, DataDog или New Relic
from prometheus_client import Counter, Histogram
request_count = Counter(
"requests_total", "Total requests", ["method", "endpoint"]
)
request_duration = Histogram("request_duration_seconds", "Request duration")
@request_duration.time()
def handle_request():
pass
4. Трассировка и стектрейсы
Добавь трассировку для отслеживания ошибок:
import traceback
import sys
try:
process_data()
except Exception:
traceback.print_exc(file=sys.stderr)
logger.error(traceback.format_exc())
5. Health checks и мониторинг процесса
import subprocess
import psutil
def check_service_health():
try:
response = requests.get("http://localhost:8000/health", timeout=5)
return response.status_code == 200
except:
return False
# Мониторим процесс
process = psutil.Process(pid)
print(f"Memory: {process.memory_info().rss / 1024 / 1024}MB")
print(f"CPU: {process.cpu_percent()}%")
6. База данных
Проверь:
- Соединения: не исчерпаны ли лимиты подключений
- Блокировки: есть ли deadlock'и
- Диск: полон ли диск базы
- Репликация: отстаёт ли реплика (если используется)
-- PostgreSQL
SELECT pid, usename, state FROM pg_stat_activity;
SELECT * FROM pg_locks;
Чеклист для быстрого анализа:
- Проверь свежие логи — первые признаки проблемы
- Посмотри метрики — оцени нагрузку
- Проверь ресурсы — CPU, Memory, Disk
- Оцени сетевые соединения — нет ли блокировок
- Посмотри внешние зависимости — упала ли БД, кэш, API
- Проанализируй последние изменения — что было задеплоено
Результат анализа должен ответить на вопрос: что произошло, когда и почему?