布尔值、比较、数值、日期时间和其他函数 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

布尔值、比较、数值、日期时间和其他函数

CloudWatch Logs Insights 支持查询中的许多其他操作和功能,如以下各节所述。

算术运算符

算术运算接受数值数据类型作为参数并返回数值结果。在 filterfields 命令中使用算术运算并将其用作其他函数的参数。

操作 描述

a + b

a - b

a * b

a / b

a ^ b

幂(2 ^ 3 返回 8

a % b

余额或模数(10 % 3 返回 1

布尔运算符

使用布尔运算符 andornot

注意

仅在返回 TRUEFALSE 值的函数中使用布尔运算符。

比较运算符

比较运算接受所有数据类型作为参数,并返回布尔值结果。在 filter 命令中使用比较运算并将其用作其他函数的参数。

运算符 描述

=

Equal

!=

Not equal

<

Less than

>

Greater than

<=

小于或等于

>=

大于或等于

数值运算符

数值运算接受数值数据类型作为参数并返回数值结果。在 filterfields 命令中使用数值运算并将其用作其他函数的参数。

操作 结果类型 描述

abs(a: number)

number

绝对值

ceil(a: number)

number

舍入到上限(大于 a 的值的最小整数)

floor(a: number)

number

舍入到下限(小于 a 的值的最大整数)

greatest(a: number, ...numbers: number[])

number

返回最大值

least(a: number, ...numbers: number[])

number

返回最小值

log(a: number)

number

自然对数

sqrt(a: number)

number

平方根

日期时间函数

日期时间函数

fieldsfilter 命令中使用日期时间函数并将其用作其他函数的参数。使用这些函数为使用聚合函数的查询创建时间存储桶。使用包括一个数字的时间段,m 表示分钟,h 表示小时。例如,10m 为 10 分钟,1h 为 1 小时。下表包含可在查询命令中使用的不同日期时间函数列表。该表列出了每个函数的结果类型,并包含对每个函数的描述。

提示

在创建查询命令时,您可以使用时间间隔选择器选择要查询的时间段。例如,您可以设置 5 到 30 分钟的时间间隔;1、3 和 12 小时间隔;或者自定义时间范围。您还可以设置特定日期之间的时间段。

函数 结果类型 描述

bin(period: Period)

Timestamp

@timestamp 的值四舍五入到指定的时间段,然后截断。例如,bin(5m)@timestamp 的值四舍五入到最近的 5 分钟。

您可以使用它将某个查询中的多个日志条目分为一组。以下示例返回每小时的异常数量。

filter @message like /Exception/ | stats count(*) as exceptionCount by bin(1h) | sort exceptionCount desc

bin 函数支持以下时间单位和缩写。对于所有包含多个字符的单位和缩写,支持添加复数形式。这样,hrhrs 都可以指定小时数。

  • millisecond ms msec

  • second s sec

  • minute m min

  • hour h hr

  • day d

  • week w

  • month mo mon

  • quarter q qtr

  • year y yr

datefloor(timestamp: Timestamp, period: Period)

Timestamp

将时间戳截断到指定的时间段。例如,datefloor(@timestamp, 1h)@timestamp 的所有值截断至小时底部。

dateceil(timestamp: Timestamp, period: Period)

Timestamp

将时间戳向上舍入到指定的时间段,然后截断。例如,dateceil(@timestamp, 1h)@timestamp 的所有值截断至小时顶部。

fromMillis(fieldName: number)

Timestamp

将输入字段解释为自 Unix 纪元以来的毫秒数并将其转换为时间戳。

toMillis(fieldName: Timestamp)

number

将在命名字段中找到的时间戳转换为表示自 Unix 纪元以来毫秒数的数字。例如,toMillis(@timestamp) 将时间戳 2022-01-14T13:18:031.000-08:00 转换为 1642195111000

注意

目前, CloudWatch Logs Insights 不支持筛选带有人类可读时间戳的日志。

常见函数

常见函数

fieldsfilter 命令中使用常规函数并将其用作其他函数的参数。

函数 结果类型 描述

ispresent(fieldName: LogField)

布尔值

如果字段存在,则返回 true

coalesce(fieldName: LogField, ...fieldNames: LogField[])

LogField

返回列表中的第一个非 null 值

IP 地址字符串函数

IP 地址字符串函数

filterfields 命令中使用 IP 地址字符串函数并将其用作其他函数的参数。

函数 结果类型 描述

isValidIp(fieldName: string)

布尔值

如果字段是有效的 IPv4 或 IPv6 地址,则返回 true

isValidIpV4(fieldName: string)

布尔值

如果字段是有效的 IPv4 地址,则返回 true

isValidIpV6(fieldName: string)

布尔值

如果字段是有效的 IPv6 地址,则返回 true

isIpInSubnet(fieldName: string, subnet: string)

布尔值

如果字段是指定的 v4 或 v6 子网中有效的 IPv4 或 IPv6 地址,则返回 true。指定子网时,请使用 CIDR 表示法(例如 192.0.2.0/242001:db8::/32),其中 192.0.2.02001:db8:: 是 CIDR 块的起点。

isIpv4InSubnet(fieldName: string, subnet: string)

布尔值

如果字段是指定的 v4 子网中有效的 IPv4 地址,则返回 true。指定子网时,请使用 CIDR 表示法(例如 192.0.2.0/24),其中 192.0.2.0 是 CIDR 块的起点。

isIpv6InSubnet(fieldName: string, subnet: string)

布尔值

如果字段是指定的 v6 子网中有效的 IPv6 地址,则返回 true。指定子网时,请使用 CIDR 表示法(例如 2001:db8::/32),其中 2001:db8:: 是 CIDR 块的起点。

字符串函数

字符串函数

fieldsfilter 命令中使用字符串函数并将其用作其他函数的参数。

函数 结果类型 描述

isempty(fieldName: string)

数字

如果字段缺失或为空字符串,则返回 1

isblank(fieldName: string)

数字

如果字段缺失或为空字符串,或只包含空格,则返回 1

concat(str: string, ...strings: string[])

字符串

连结字符串。

ltrim(str: string)

ltrim(str: string, trimChars: string)

字符串

如果函数没有第二个参数,它将删除字符串左侧的空格。如果函数有第二个字符串参数,它将不会删除空格。相反,它会从 str 左侧删除 trimChars 中的字符。例如,ltrim("xyZxyfooxyZ","xyZ") 将返回 "fooxyZ"

rtrim(str: string)

rtrim(str: string, trimChars: string)

字符串

如果函数没有第二个参数,它将删除字符串右侧的空格。如果函数有第二个字符串参数,它将不会删除空格。相反,它会从 str 右侧删除 trimChars 字符。例如,rtrim("xyZfooxyxyZ","xyZ") 将返回 "xyZfoo"

trim(str: string)

trim(str: string, trimChars: string)

字符串

如果函数没有第二个参数,它将删除字符串两端的空格。如果函数有第二个字符串参数,它将不会删除空格。相反,它会从 str 两端删除 trimChars 字符。例如,trim("xyZxyfooxyxyZ","xyZ") 将返回 "foo"

strlen(str: string)

number

返回 Unicode 代码点中字符串的长度。

toupper(str: string)

字符串

将字符串转换为大写。

tolower(str: string)

字符串

将字符串转换为小写。

substr(str: string, startIndex: number)

substr(str: string, startIndex: number, length: number)

字符串

返回从由数值参数指定的索引到字符串末尾的子字符串。如果该函数具有二个参数,它包含要检索的子字符串的长度。例如,substr("xyZfooxyZ",3, 3) 将返回 "foo"

replace(fieldName: string, searchValue: string, replaceValue: string)

字符串

fieldName: string 中出现的所有 searchValue 替换为 replaceValue

例如,函数 replace(logGroup,"smoke_test","Smoke") 搜索录入事件,其中字段 logGroup 包含字符串值 smoke_test,并使用字符串 Smoke 替换该值。

strcontains(str: string, searchValue: string)

number

如果 str 包含 searchValue,则返回 1,否则返回 0。