Потоковая передача журнала Elastic Beanstalk CloudWatch перестает работать - как отлаживать

Моя среда Elastic Beanstalk останавливает потоковую передачу событий node.js в журналы CloudWatch. Потоковая передача отлично работает для минут просмотра на новом экземпляре. После нескольких минут просмотра журналы больше не отображаются в CloudWatch.

Я настроил AWS Elastic Beanstalk для потоковой передачи журналов в CloudWatch в разделе «Конфигурация»> «Конфигурация программного обеспечения»> «Журналы CloudWatch»> «Потоковая передача журналов» (true). Я отключил потоковую передачу журналов и повторно активировал ее в качестве теста. Взглянем на cloudwatch

  • Последний журнал eb-активности был старше 10 минут.
  • Журнал ошибок недоступен (ни в одном из экземпляров)
  • nginx / access.log - это просмотр секунд назад
  • nodejs.log существует около часа назад (вскоре после перезапуска экземпляра)

Однако каждая проверка работоспособности записывает запись журнала каждые секунды просмотра в nodejs.log.

Я не нашел никаких журналов на экземпляре ec2, касающихся потоковой передачи журналов.

  1. Есть у кого-нибудь похожие проблемы?
  2. Как сделать логи nodejs потока Elastic Beanstalk в журналах CloudWatch.

--- РЕДАКТИРОВАТЬ

[ec2-user@ip-###-##-##-## log]$ cat /var/log/awslogs.log 
2017-03-07 11:01:05,928 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Detected file rotation, notifying reader
2017-03-07 11:01:05,928 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Reader is still alive.
2017-03-07 11:01:05,928 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:05,928 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:06,052 - cwlogs.push.reader - INFO - 31861 - Thread-8 - No data is left. Reader is leaving.
2017-03-07 11:01:10,929 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Removing dead reader [2177a5cce5ed29525de329bfdc292ff1, /var/log/nginx/access.log]
2017-03-07 11:01:10,929 - cwlogs.push.stream - INFO - 31861 - Thread-1 - Starting reader for [92257964a10edeb586f084f4f2ba35de, /var/log/nginx/access.log]
2017-03-07 11:01:10,930 - cwlogs.push.reader - INFO - 31861 - Thread-11 - Start reading file from 0.
2017-03-07 11:01:10,930 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:10,930 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:15,931 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:15,931 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:16,788 - cwlogs.push.publisher - INFO - 31861 - Thread-7 - Log group: /aws/elasticbeanstalk/production/var/log/nginx/access.log, log stream: i-0bd24767864801e2c, queue size: 0, Publish batch: {'skipped_events_count': 0, 'first_event': {'timestamp': 1488884470930, 'start_position': 0L, 'end_position': 114L}, 'fallback_events_count': 0, 'last_event': {'timestamp': 1488884472931, 'start_position': 341L, 'end_position': 454L}, 'source_id': '92257964a10edeb586f084f4f2ba35de', 'num_of_events': 4, 'batch_size_in_bytes': 554}
2017-03-07 11:01:20,932 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:20,932 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:25,933 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/error.log*'.
2017-03-07 11:01:25,933 - cwlogs.push.stream - WARNING - 31861 - Thread-1 - No file is found with given path '/var/log/httpd/access.log*'.
2017-03-07 11:01:27,881 - cwlogs.push.publisher - INFO - 31861 - Thread-7 - Log group: /aws/elasticbeanstalk/production/var/log/nginx/access.log, log stream: i-0bd24767864801e2c, queue size: 0, Publish batch: {'skipped_events_count': 0, 'first_event': {'timestamp': 1488884481933, 'start_position': 454L, 'end_position': 568L}, 'fallback_events_count': 0, 'last_event': {'timestamp': 1488884482934, 'start_position': 568L, 'end_position': 681L}, 'source_id': '92257964a10edeb586f084f4f2ba35de', 'num_of_events': 2, 'batch_size_in_bytes': 277}

comment
проверьте /var/log/awslogs.log файл на наличие ошибок и убедитесь, что служба awslogs запущена   -  person b.b3rn4rd    schedule 07.03.2017
comment
@ b.b3rn4rd: нашел, однако в этом файле ни разу не упоминаются журналы nodejs или какие-либо проблемы, связанные с этим.   -  person Manuel    schedule 07.03.2017
comment
это упомянуто в doco   -  person b.b3rn4rd    schedule 07.03.2017
comment
Думаю, вы ссылаетесь на docs.aws.amazon.com/elasticbeanstalk / latest / dg /? Я попытался проверить конфигурации, но не смог найти ни eb-logs.config, ни другие конфигурации, описанные на этой странице, где-либо в экземпляре ec2.   -  person Manuel    schedule 07.03.2017
comment
в /var/log/awslogs.log нет ошибок. В то время как первые два цикла ротации журналов (2 часа) awslogs.log, nodejs.logs публикуются в журналах cloudwatch. Третий файл los больше не содержит журналов nodejs. Никакой ошибки.   -  person Manuel    schedule 07.03.2017
comment
Вы когда-нибудь находили на это ответ? У меня точно такая же проблема.   -  person Si-N    schedule 16.03.2018
comment
Неа. Не повезло   -  person Manuel    schedule 16.03.2018
comment
Июнь 2018 г. - Недавно я протестировал это с помощью примера приложения nodejs для эластичного бобового стебля. Отключенная потоковая передача через конфигурацию для OP и подтвержденная потоковая передача журналов остановлена ​​в консоли журналов облачного наблюдения. Затем снова включили потоковую передачу, и потоковая передача журнала возобновилась. Я рекомендую закрыть этот вопрос, потому что проблема не воспроизводится.   -  person Taterhead    schedule 12.06.2018
comment
Я столкнулся с той же проблемой при развертывании на основе Docker.   -  person Prabu    schedule 21.11.2018
comment
столкнувшись с той же проблемой, кто-нибудь смог ее разобрать?   -  person Affan Shahab    schedule 13.05.2020


Ответы (2)


Когда Эндрю (@ andrew-ferk) и я активировали потоковую передачу журналов, он создал все группы журналов и потоки в CloudWatch с текущим журналом. После повторного развертывания мы заметили, что журналы прекратились. Это потому, что aws хеширует первую строку журнала. Если он видел этот хэш раньше, он будет рассматривать этот файл, как будто он уже обработан.

Если вы используете npm start, в первых строках будет имя вашего приложения с версией.

Вы можете добавить CMD date && npm start в свой файл докеров, чтобы каждый раз запускать новую строку, или запускать npm в автоматическом режиме (если ваш первый вывод уникален).

Также, согласно их документам, вы должны добавить некоторую политику в свой elastic-beanstalk перед включением функции AWS-Docs

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:GetLogEvents",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutRetentionPolicy"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
person Partyless    schedule 13.03.2019

Следующие часто задаваемые вопросы могут быть полезны:

Некоторые вещи, которые нужно проверить, транслируете ли вы пользовательские файлы журнала:

  1. eb ssh в экземпляр и посмотрите на /var/log/awslogs.log. Если при этом даже не упоминается «Загрузка дополнительных конфигураций из (вашего файла конфигурации awslogs)», убедитесь, что вы правильно устанавливаете файл конфигурации, а также перезапускаете службу awslogs после ее установки (предположительно с использованием .ebextensions. См. «Потоковая передача пользовательского журнала. "в Использование Elastic Beanstalk с журналами Amazon CloudWatch. См. Раздел commands в logs-streamtocloudwatch-linux.config, чтобы узнать, как перезапустить службу awslogs.
  2. Агент CloudWatch Logs отслеживает состояние. Если первые несколько строк вашего файла журнала пусты или никогда не меняются, вам может потребоваться установить file_fingerprint_lines. См. Справочник по агенту CloudWatch Logs Agent.
person jrc    schedule 12.04.2019