CloudWatch Insights: получить журналы с ошибочными лямбдами

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

Я хочу увидеть журналы лямбды, которые ошиблись. Я пытаюсь сделать это с помощью запроса CloudWatch Insights.

Как я могу это сделать?

6 ответов

Если кто-то придет сюда в поисках решения, вот что я использую:

фильтр @message like /(?i)(Исключение | ошибка | сбой)/| поля @timestamp, @message | сортировать @timestamp desc | предел 20

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

fields @timestamp, @message
| sort @timestamp desc
| filter @message not like 'INFO' 
| filter @message not like 'REPORT'
| filter @message not like 'END'
| filter @message not like 'START'
| limit 20

Вот пример, который покрывает этот запрос

тайм-аут

@ingestionTime  
1600997135683
@log    
060558051165:/aws/lambda/prod-
@logStream  
2020/09/25/[$LATEST]abc
@message    
2020-09-25T01:25:35.623Z d0801056-abc-595a-b67d-47b14d3e9a20 Task timed out after 30.03 seconds
@requestId  
d0801056-abc-595a-b67d-47b14d3e9a20
@timestamp  
1600997135623

ошибка нововведения

@ingestionTime  
1600996797947
@log    
060558051165:/aws/lambda/prod-****
@logStream  
2020/09/25/[$LATEST]123
@message    
2020-09-25T01:19:48.940Z 7af13cdc-74fb-5986-ad6b-6b3b33266425 ERROR Invoke Error {"errorType":"Error","errorMessage":"QueueProcessor 4 messages failed processing","stack":["Error:QueueProcessor 4 messages failed processing"," at Runtime.handler (/var/task/lambda/abc.js:25986:11)"," at process._tickCallback (internal/process/next_tick.js:68:7)"]}
@requestId  
7af13cdc-74fb-5986-ad6b-6b3b33266425
@timestamp  
1600996788940
errorMessage    
QueueProcessor 4 messages failed processing
errorType   
Error
stack.0 
Error: QueueProcessor 4 messages failed processing
stack.1 
at Runtime.handler (/var/task/lambda/abcBroadcast.js:25986:11)
stack.2 
at process._tickCallback (internal/process/next_tick.js:68:7)

другой пример со временем выполнения узла

Value
@ingestionTime  
1600996891752
@log    
060558051165:/aws/lambda/prod-
@logStream  
2020/09/24/[$LATEST]abc
@message    
2020-09-25T01:21:31.213Z 32879c8c-abcd-5223-98f9-cb6b3a192f7c ERROR (node:6) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
@requestId  
32879c8c-7242-5223-abcd-cb6b3a192f7c
@timestamp  
1600996891214

Если кто ищет как искать ошибку или авторизуйтесь AWS Log insights, можно использовать этот запрос для поиска:

      fields @timestamp, @message
| filter @message like /text to search/
| sort @timestamp desc
| limit 20

На самом деле просто выбираю log group(s)и добавить новую строку как | filter @message like /text to search/в редактор запросов достаточно. Остальное идет по умолчанию.

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

[обновление за июль 2023 г.]

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

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

      filter @message like /ERROR/
| pattern @message

для конкретных сообщений об ошибках на основе ваших операторов журналирования

      filter @message like /ERROR/
| parse @message 'Failed to do: *' as cause
| pattern cause
| sort @sampleCount asc

вы можете выполнить следующий запрос в CloudWatch Logs Insights.

      filter @type = "REPORT"
    | stats max(@memorySize / 1000 / 1000) as provisonedMemoryMB,
        min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB,
        avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB,
        max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB,
        provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB
    

В вашей консоли перейдите на страницу конфигурации вашего лямбды. В левом верхнем углу нажмите Monitoring, тогда View logs in CloudWatch справа.