首页 > 解决方案 > AWS CloudWatch - 转到搜索词的第一次出现

问题描述

在 AWS CloudWatch 中,是否可以搜索日志组并转到第一次出现的搜索词?我希望能够查看我搜索的错误的上下文,例如在日志中之前或之后发生的事情。当我过滤搜索词时,它只显示具有特定错误的匹配日志行,而不是之前或之后的行。

标签: amazon-web-servicesamazon-cloudwatchamazon-cloudwatchlogs

解决方案


目前,在 AWS 控制台中,我不认为这个确切的功能在那里您可以看到您正在查找的事件上方或下方的日志。但是,您可以在 AWS CLI 的帮助下实现相同的目标。

我将尝试逐步解释该过程。

Step1:您首先需要列出指定日志组中存在的所有日志流的名称。为此,您需要执行此操作。

请注意,我假设您在 ~/.aws/config 文件中配置了所需的标志 (--region),并且您的 EC2 实例具有执行此命令所需的权限。

aws logs describe-log-streams --log-group-name /aws/lambda/your-log-group-name

这个的样本输出将是

{
    "logStreams": [
        {
            "creationTime": 1555419320137,
            "lastEventTimestamp": 1555419320192,
            "logStreamName": "2019/04/16/[$LATEST]589f67272fb74720a39c26761d27677d",
            "firstEventTimestamp": 1555419320192,
            "uploadSequenceToken": "49592576081603401156387322860116873098580931963181347106",
            "storedBytes": 371,
            "lastIngestionTime": 1555419335277,
            "arn": "arn:aws:logs:ap-southeast-1:7442576962489:log-group:/aws/lambda/your-log-group-name:log-stream:2019/04/16/[$LATEST]589f67272fb74720a39c26761d27677d"
        }
    ]
}

步骤 2:您需要从上述输出 JSON中获取logStreamName 。一旦知道了流名,就需要找到该日志流对应的所有日志。为此,您需要执行以下操作:

aws logs get-log-events --log-group-name /aws/lambda/your-log-group-name --log-stream-name 2019/04/16/[\$LATEST]589f67272fb74720a39c26761d27677d

请注意,我在日志流名称中的 $ 符号之前放置了(转义序列)。如果你不这样做,你会得到这个错误

An error occurred (ResourceNotFoundException) when calling the GetLogEvents operation: The specified log stream does not exist. 

此示例输出将是:

{
    "nextBackwardToken": "b/34867571926926708897842553944026580452662164381436805120",
    "nextForwardToken": "f/34867572103816219812587456720876035042399810347687804938",
    "events": [
        {
            "ingestionTime": 1563516014935,
            "message": "[INFO]\t2019-07-19T05:59:59.947Z\t1dc366b5-d802-4947-931d-8801d6d133dd\tThe length of edits query object is 73067\n",
            "timestamp": 1563515999947
        },
        {
            "ingestionTime": 1563516014935,
            "message": "REPORT RequestId: 1dc366b5-d802-4947-931d-8801d6d133dd\tDuration: 7931.94 ms\tBilled Duration: 8000 ms \tMemory Size: 1024 MB\tMax Memory Used: 393 MB\t\n",
            "timestamp": 1563516007802
        }
    ]
}

请注意,日志流中的每个事件都有摄取时间、消息和时间戳。您可以在文件中重定向此命令的输出并使用适当的 grep 操作。

这是从 CLI 的角度来看的。但是您也可以在控制台本身中获得一些帮助。

您将能够看到与您的搜索字符串匹配的所有事件以及相应的日志流名称(这将在您单击特定日志组下的搜索日志组时发生)。您需要单击日志流链接,您将能够看到该特定日志流中的所有日志。

我了解您无法仅在一个页面上看到所有这些,您需要单击每个日志流链接才能查看日志。

希望这可以帮助。


推荐阅读