我尝试使用awscli从AWS云监视日志中过滤日志事件。我在cloudwatch Web控制台中使用以下模式。
[ip, user, username, timestamp, request, status_code != 2*, bytes]
我应该在awscli中使用的等效滤镜模式是什么?我试过aws logs filter-log-events --log-group-name *** --log-stream-name *** --filter-pattern "[ip, user, username, timestamp, request, status_code != 2*, bytes]"
,但它没有过滤任何内容。
答案 0 :(得分:1)
我会尝试这样的事情:
aws logs filter-log-events \
--start-time `date -j -f "%a %b %d %T %Z %Y" "Mon Apr 16 14:25:43 PDT 2018" "+%s"`000 \
--end-time `date -j -f "%a %b %d %T %Z %Y" "Mon Apr 16 14:45:43 PDT 2018" "+%s"`000 \
--log-group-name <log-group-name> \
--filter-pattern "[ip, user, username, timestamp, request, status_code != 2*, bytes]" \
--output text
替换适当的值。
答案 1 :(得分:0)
这是我为收集日常Postfix日志而编写的函数的一些代码。我注意到的一件事是,由于需要在字符串中使用单引号和双引号,因此将过滤器模式放在bash脚本的变量中变得很复杂,因此我略过了这个想法。我敢肯定这是可以做到的,但就我而言,复杂性是不值得的。
# Purpose: Collect postfix mail relay CloudWatch Logs for the last day
# Arguments:
# 1 is the AWS region, defaults to $DATA_CENTER
# 2 is the AWS log-group-name to use
# Dependencies: aws cli
function getCloudWatchLogs {
region=${1:-$DATA_CENTER}
log-group-name=${2:-"mail_out/postfix"}
aws logs filter-log-events --log-group-name ${log-group-name} \
--start-time $(date --date "yesterday 00:00:00" +%s%N | cut -b1-13) \
--end-time $(date --date "yesterday 23:59:59" +%s%N | cut -b1-13) \
--filter-pattern='[month, day, time, instance, process="*]:", id="*:", recipient="to=<*>,", message!="*status=sent*"]' \
--region ${region} --output text \
| awk -F"\t" '{print $5}'|cut -d" " -f6- \
> $mail_dir/postfixmaillog_${region}.out
}