Систематическое руководство по устранению любых проблем с сервисами AWS

Используйте повторяемый рабочий процесс устранения неисправностей AWS для изоляции проблем сервиса, проверки журналов, подтверждения разрешений и сокращения времени восстановления.

Систематическое руководство по устранению неисправностей любого сервиса AWS

Когда возникает проблема с сервисом AWS, угадывание тратит время и часто усугубляет инцидент. Систематический рабочий процесс устранения неисправностей AWS помогает определить симптом, проверить соответствующие доказательства, изолировать причину и исправить проблему, не меняя три вещи одновременно.

Используйте это руководство, когда имеете дело с недоступным экземпляром EC2, ошибкой AccessDenied, регулируемым вызовом API, сбоем функции Lambda или любой другой проблемой сервиса AWS, где коренная причина не очевидна.

Методология систематического устранения неисправностей

Эффективное устранение неисправностей — это не угадывание; это следование логическому, повторяемому процессу. Принятие структурированной методологии гарантирует, что вы соберете всю необходимую информацию, сформулируете правдоподобные гипотезы и эффективно их проверите. Вот разбивка основных шагов:

1. Четко определите проблему

Прежде чем углубляться в журналы, потратьте время на полное понимание проблемы. Спросите себя:

  • Что именно является проблемой? (например, экземпляр EC2 недоступен, загрузка S3 не удается, функция Lambda истекает по тайм-ауту).
  • Когда это началось? Это постоянно или периодически? Есть ли определенное время, когда это происходит?
  • Где это происходит? В каком регионе, зоне доступности, сервисе или конкретном ресурсе?
  • Кто затронут? Все пользователи, определенная группа или внутренние системы?
  • Как часто это происходит? Это одноразовое событие или повторяющийся паттерн?
  • Каково влияние? Критическая, высокая, средняя или низкая серьезность?

Совет: Проверьте недавние развертывания, изменения Terraform или CloudFormation, правки IAM, обновления таблиц маршрутизации и изменения групп безопасности, прежде чем копать глубже.

2. Соберите информацию и наблюдайте

Здесь в игру вступают мощные инструменты мониторинга и ведения журналов AWS. Соберите как можно больше релевантных данных, не внося изменений.

  • Проверьте панель здоровья AWS: Ищите события, специфичные для учетной записи, региональные события сервисов или плановое обслуживание.
  • Просмотрите метрики CloudWatch: Изучите соответствующие метрики для вашего сервиса (например, загрузка ЦП, сетевой ввод/вывод, частота ошибок, регулируемые запросы).
  • Проанализируйте журналы CloudWatch: Погрузитесь в журналы приложений, журналы потоков VPC, журналы Lambda и т. д. на предмет ошибок или необычных паттернов.
  • Проверьте журналы CloudTrail: Определите недавние вызовы API, особенно если вы подозреваете несанкционированный доступ или неправильные конфигурации.
  • Изучите конфигурацию: Используйте AWS Config, чтобы проверить, не изменились ли конфигурации ресурсов в последнее время.
  • Проверьте статус ресурса: Проверьте статус экземпляров, баз данных, балансировщиков нагрузки в соответствующих консолях.

3. Сформулируйте гипотезу

На основе собранной информации предложите одну или несколько вероятных причин проблемы. Ваша гипотеза должна быть конкретной и проверяемой. Например:

  • "Экземпляр EC2 недоступен, потому что его группа безопасности не разрешает входящий SSH-трафик."
  • "Загрузка S3 не удается из-за ошибки Access Denied, что указывает на неправильную политику IAM."
  • "Функция Lambda истекает по тайм-ауту, потому что она достигает предела параллелизма сервиса."

4. Проверьте гипотезу и изолируйте переменные

Разработайте простой тест, чтобы подтвердить или опровергнуть вашу гипотезу. Если ваш первоначальный тест не решает проблему, уточните гипотезу и проверьте снова. При тестировании вносите по одному изменению за раз, чтобы легко определить причинно-следственную связь.

  • Пример (Связь): Если вы подозреваете проблему с группой безопасности, протестируйте с одного известного исходного IP-адреса и одного порта. Если это докажет, что правило является проблемой, замените временный тест узким правилом, которое вам действительно нужно.
  • Пример (Разрешения): Используйте симулятор политик IAM для тестирования различных политик IAM в отношении действий, которые не удаются.

5. Устраните и проверьте

Как только вы определили коренную причину, реализуйте соответствующее исправление. После применения решения тщательно проверьте, что проблема решена и не возникло новых проблем.

6. Документируйте и учитесь

После устранения задокументируйте проблему, шаги диагностики, коренную причину и решение. Это создает ценную базу знаний для будущих инцидентов и помогает повысить устойчивость вашей системы. Рассмотрите посмертный анализ критических проблем для выявления профилактических мер.

Ключевые инструменты и ресурсы для устранения неисправностей AWS

AWS предоставляет богатый набор инструментов, необходимых для диагностики проблем.

Amazon CloudWatch

Ваш основной инструмент для мониторинга ресурсов и приложений. CloudWatch предлагает:

  • Метрики: Данные в реальном времени практически по каждому сервису AWS (загрузка ЦП, сетевой ввод/вывод, количество запросов S3, регулируемые события DynamoDB, вызовы/ошибки Lambda). Создавайте пользовательские метрики для данных, специфичных для приложения.
  • Журналы: Централизованное ведение журналов практически для любого источника (EC2, Lambda, журналы потоков VPC, CloudTrail, журналы приложений). Используйте CloudWatch Logs Insights для мощных запросов и анализа.
  • Оповещения: Установите пороговые значения для метрик, чтобы запускать уведомления (через SNS) или автоматические действия (например, автоматическое масштабирование).
  • Панели мониторинга: Создавайте пользовательские панели мониторинга для визуализации ключевых метрик и журналов, обеспечивая единое окно для операционного здоровья.

AWS CloudTrail

CloudTrail записывает активность API в вашей учетной записи AWS, показывая, кто что сделал, когда, откуда и с каким результатом. Это незаменимо для расследований безопасности, аудита соответствия и, что критически важно, для устранения проблем, связанных с разрешениями или непреднамеренными изменениями ресурсов.

  • Использование: Ищите события Access Denied, операции UPDATE, DELETE или CREATE, которые совпадают с началом проблемы.
  • Пример запроса Athena для журналов CloudTrail в S3:
    SELECT eventtime, eventsource, eventname, useridentity.arn, errorcode, errormessage
    FROM cloudtrail_logs
    WHERE eventtime > current_timestamp - interval '1' hour
      AND (errorcode LIKE '%AccessDenied%' OR errormessage LIKE '%denied%')
    ORDER BY eventtime DESC
    LIMIT 100
    

Консоль управления AWS

Каждая консоль сервиса предоставляет определенные панели мониторинга, страницы статуса и детали конфигурации. Это часто первое место для проверки здоровья ресурсов и настроек. Например, консоль EC2 показывает статус экземпляра, группы безопасности и сетевые интерфейсы.

AWS CLI/SDK

Для программных проверок, автоматизации и быстрых ad-hoc запросов интерфейс командной строки AWS (CLI) и пакеты разработки программного обеспечения (SDK) неоценимы. Они позволяют получать информацию, изменять конфигурации и взаимодействовать с сервисами непосредственно из вашего терминала или приложения.

  • Пример (Проверка правил группы безопасности):
    aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0
    

Панель здоровья AWS

Предоставляет персонализированную информацию о здоровье сервисов AWS и вашей учетной записи. Это важно для понимания, является ли проблема специфичной для учетной записи или более широким событием сервиса AWS. Она показывает операционные проблемы, плановое обслуживание и персонализированные оповещения.

AWS Config

Записывает изменения конфигурации для ваших ресурсов AWS. Если ресурс внезапно ведет себя неожиданно, Config может показать его историю конфигурации, точно определяя, когда и как было сделано изменение.

Распространенные категории проблем AWS и их решения

Большинство проблем AWS попадают в несколько повторяющихся категорий. Понимание этих паттернов помогает в формировании точных гипотез.

1. Проблемы с подключением

Когда ресурсы не могут взаимодействовать, проверьте сетевой путь:

  • Группы безопасности и сетевые ACL (NACL): Это наиболее распространенные виновники. Группы безопасности являются stateful и применяются к экземплярам/ENI; NACL являются stateless и применяются к подсетям. Проверьте, что правила входящего/исходящего трафика разрешают необходимый трафик.
    • Совет: Помните, что группы безопасности — это списки разрешений. NACL имеют как правила разрешения, так и запрета. Порядок имеет значение для NACL.
  • Таблицы маршрутизации: Убедитесь, что ваши подсети имеют правильные маршруты к интернету (через интернет-шлюз), другим VPC (пиринг) или локальным сетям (VPN/Direct Connect).
  • Разрешение DNS: Если ресурсы не могут разрешить имена хостов, проверьте настройки DNS VPC, конфигурации Route 53 или настройки DNS на уровне приложения.
  • Журналы потоков VPC: Для глубокой сетевой диагностики журналы потоков записывают весь IP-трафик, поступающий на сетевые интерфейсы в вашей VPC и исходящий из них. Анализируйте их в CloudWatch Logs Insights, чтобы увидеть принятые/отклоненные соединения.
    fields @timestamp, @message
    | filter logStatus = 'OK'
    | filter action = 'REJECT'
    | filter srcAddr = '192.0.2.1' or dstAddr = '192.0.2.1' -- IP of interest
    | sort @timestamp desc
    

2. Ошибки разрешений (Access Denied)

Они часто встречаются и обозначаются сообщениями Access Denied, UnauthorizedOperation или Forbidden.

  • Политики IAM: Проверьте прикрепленные политики IAM для пользователя, роли или группы, выполняющей действие. Убедитесь, что они содержат операторы Allow для конкретного Action на правильном Resource.
    • Совет: Политики IAM по умолчанию deny. Вам нужно явное allow.
  • Политики ресурсов: Некоторые сервисы, включая S3, SQS, KMS, SNS и Lambda, поддерживают политики на основе ресурсов, которые предоставляют или запрещают доступ непосредственно к ресурсу. Они должны соответствовать политикам идентификации IAM.
    • Пример политики корзины S3 для одной учетной записи AWS, не публичный доступ:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "AllowReadFromAppRole",
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::111122223333:role/app-readonly-role"
            },
            "Action": [
              "s3:GetObject"
            ],
            "Resource": [
              "arn:aws:s3:::example-private-bucket/*"
            ]
          }
        ]
      }
      
  • Политики управления сервисами (SCP): Если вы используете AWS Organizations, SCP могут устанавливать максимальные разрешения, доступные в учетной записи. Разрешение IAM не может переопределить ограничение SCP.
  • CloudTrail: Ищите ошибки Access Denied в журналах CloudTrail, чтобы определить точный вызов API, участника и задействованный ресурс.
  • Симулятор политик IAM: Мощный инструмент в консоли IAM для тестирования эффектов различных политик на конкретные действия.

3. Лимиты сервисов и регулирование

Сервисы AWS имеют мягкие и жесткие лимиты. Достижение этих лимитов может вызвать ошибки или ухудшение производительности (ThrottlingException, TooManyRequestsException).

  • Метрики CloudWatch: Отслеживайте метрики, специфичные для сервиса, на предмет признаков регулирования, таких как DynamoDB ReadThrottleEvents или Lambda Throttles.
  • Консоль квот сервисов: Эта консоль перечисляет все ваши квоты сервисов AWS, их текущее использование и позволяет запрашивать увеличение для регулируемых квот.
  • Экспоненциальная задержка и повторные попытки: Реализуйте эти паттерны в ваших приложениях при взаимодействии с API AWS для корректной обработки временного регулирования.

4. Неправильные конфигурации ресурсов

Неправильно настроенные ресурсы являются частой причиной проблем.

  • Хранилище: Неправильные разрешения корзины S3 (публичный доступ), незашифрованные тома EBS, недостаточное количество IOPS для EBS.
  • Вычисления: Неправильный тип экземпляра EC2, неверный AMI, неправильно настроенные пользовательские данные, проблемы с группами автоматического масштабирования.
  • Базы данных: Проблемы со строками подключения, неправильная конфигурация группы безопасности, настройки группы параметров.
  • Балансировщики нагрузки: Неправильные правила прослушивателя, нездоровые целевые группы, проблемы с группами безопасности.
  • AWS Config: Используйте Config для отслеживания изменений конфигураций ресурсов с течением времени, помогая определить, когда была введена неправильная конфигурация.

5. Проблемы, специфичные для приложения

Даже при идеальной работе сервисов AWS код приложения может иметь проблемы.

  • Журналы приложения: Убедитесь, что журналы вашего приложения поступают в CloudWatch Logs. Анализируйте их на предмет ошибок, исключений или неожиданного поведения.
  • Метрики приложения: Отправляйте пользовательские метрики CloudWatch из вашего приложения (например, количество ошибок, задержка запросов, глубина очереди) для более глубокого понимания.
  • AWS X-Ray: Для распределенных приложений X-Ray обеспечивает сквозную видимость, отслеживая запросы по мере их прохождения через различные сервисы и выявляя узкие места производительности или ошибки.

Лучшие практики для сокращения MTTR

Хорошая подготовка уменьшает объем детективной работы, необходимой во время инцидента.

  • Упреждающий мониторинг и оповещение: Внедрите комплексные оповещения CloudWatch для критических метрик (использование ЦП, частота ошибок, задержка, дисковое пространство, ошибки API). Интегрируйте с SNS для отправки уведомлений в PagerDuty, Slack или по электронной почте.
  • Централизованное ведение журналов: Агрегируйте журналы из всех ваших сервисов (EC2, Lambda, контейнеры и т. д.) в CloudWatch Logs или озеро данных на основе S3 для удобного поиска и анализа.
  • Инфраструктура как код (IaC): Используйте CloudFormation, AWS CDK или Terraform для определения вашей инфраструктуры. Это обеспечивает согласованность, уменьшает количество ручных ошибок и упрощает откат изменений.
  • Сборники инструкций и плейбуки: Документируйте распространенные проблемы, их симптомы, шаги диагностики и процедуры устранения. Это дает вашей команде возможность быстро и последовательно решать проблемы.
  • Примите хорошо архитектурированную структуру AWS: Проектируйте свои системы с учетом операционного совершенства, безопасности, надежности, эффективности производительности и оптимизации затрат. Упреждающее проектирование предотвращает многие проблемы.
  • Регулярные аудиты и проверки: Периодически пересматривайте правила групп безопасности, политики IAM и конфигурации ресурсов, чтобы убедиться, что они соответствуют лучшим практикам и текущим требованиям.
  • Используйте поддержку AWS: Для сложных проблем, которые вы не можете решить, или если вы подозреваете проблему сервиса на стороне AWS, откройте запрос в службу поддержки, если ваш план поддержки это позволяет. Включите идентификаторы ресурсов, регионы, временные метки с часовыми поясами, сообщения об ошибках, идентификаторы запросов и шаги, которые вы уже предприняли.

Вывод

Начинайте каждую проблему сервиса AWS с одного и того же ритма: определите симптом, проверьте недавние изменения, соберите журналы и метрики, проверяйте по одной гипотезе за раз, затем задокументируйте исправление. Эта привычка сохраняет ваше спокойствие, когда инцидент неспокоен.