Систематическое руководство по устранению любых проблем с сервисами 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.
- Совет: Политики IAM по умолчанию
- Политики ресурсов: Некоторые сервисы, включая 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/*" ] } ] }
- Пример политики корзины S3 для одной учетной записи AWS, не публичный доступ:
- Политики управления сервисами (SCP): Если вы используете AWS Organizations, SCP могут устанавливать максимальные разрешения, доступные в учетной записи. Разрешение IAM не может переопределить ограничение SCP.
- CloudTrail: Ищите ошибки
Access Deniedв журналах CloudTrail, чтобы определить точный вызов API, участника и задействованный ресурс. - Симулятор политик IAM: Мощный инструмент в консоли IAM для тестирования эффектов различных политик на конкретные действия.
3. Лимиты сервисов и регулирование
Сервисы AWS имеют мягкие и жесткие лимиты. Достижение этих лимитов может вызвать ошибки или ухудшение производительности (ThrottlingException, TooManyRequestsException).
- Метрики CloudWatch: Отслеживайте метрики, специфичные для сервиса, на предмет признаков регулирования, таких как DynamoDB
ReadThrottleEventsили LambdaThrottles. - Консоль квот сервисов: Эта консоль перечисляет все ваши квоты сервисов 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 с одного и того же ритма: определите симптом, проверьте недавние изменения, соберите журналы и метрики, проверяйте по одной гипотезе за раз, затем задокументируйте исправление. Эта привычка сохраняет ваше спокойствие, когда инцидент неспокоен.