查看流日志对象
流量日志是对网络流量的汇总记录,其通过两个虚拟网络接口卡( vNICs )之间的连接进行唯一标识,且限定于特定时间窗口内。 流日志描述防火墙接受 (相关安全组或网络 ACL) 或拒绝 (但不能同时接受) 的流量。 它包含报头信息和有效载荷统计信息。
大约每 5 分钟将流日志定期写入 IBM Cloud® Object Storage。 在流日志收集器达到 100 KB 流的情况下,将更频繁地发布流日志。
目前,流量日志会收集传输控制协议( Transmission Control Protocol,TCP)和用户数据报协议( User Datagram Protocol,UDP)的流量,但不收集互联网控制消息协议( Internet Control Message Protocol,ICMP)的流量。
每个流日志对象都包含单独的流日志。 要查看或分析流量日志,请使用 IBM Analytics Engine。 更多信息,请参阅 IBM Analytics Engine 入门教程。
IBM Cloud Data Engine 该功能已弃用且不再受支持。 若您当前正在使用 Data Engine 的现有实例,建议您将工作负载迁移至 IBM Analytics Engine.
流日志数据格式
流日志流量摘要包含以下信息:
- 字节/包计数,分别用于 RX (接收) 和 TX (传输)。
- 连接是在时间窗口中启动还是停止。
由于流日志在有限的时间范围内反映网络流量,因此长时间运行的连接可能会导致发出多个流日志。 对于 vNIC, 都会发出按时间顺序排列的流量日志(不包括故障)。 这些流日志显示在一个或多个 Object Storage 对象中。
流日志中的 initiator_ip 定义为到达 vNIC的其连接的第一个包中显示的 source_ip。 在实现级别,此包通常是导致将新连接添加到连接表的包。 同样,流日志中的 target_ip 设置为同一包中的 dest_ip 字段。
若连接发起方 vNIC 与连接目标 vNIC 均启用了流量日志功能,则两台 vNICs 设备生成的流量日志中,发起方与目标方的 IP 地址及端口字段将完全一致。
示例:假设有一个客户端正在向Web服务器发送 HTTP 请求。 此 HTTP 请求在客户端 vNIC 上的流日志显示,客户端IP地址为 initiator_ip。 服务器端 vNIC 上的对应流日志具有相同的 initiator_ip。
流日志中的 start_time 和 end_time 反映:
- 捕获时间-查询数据路径元素以获取流量计数器的时间。
- 数据路径时间-数据路径元素本身中保留的时间。
流日志可能不会反映流日志 start_time 与 end_time 之间的所有流量 (例如,数据路径中的流量)。 换言之,可能是 vNIC 在捕获窗口结束时发送和接收的包仅反映在具有后续 start_time 窗口的流日志中。
流量日志反映连接上的实际流量:若在捕获窗口内某连接未发生流量,则该窗口的 Object Storage 对象中不会出现该连接的流量日志。 这意味着连接的流日志序列可能映射为一组非连续的 Object Storage 对象序列。
对象中的流日志数组不需要按任何特定顺序排序。
已拒绝的流量:
- 特定流日志汇总了已拒绝的流量或已接受的流量,但这两者都不相同。
- 连接的流日志序列可能在已接受的流日志和已拒绝的流日志之间存在时间窗口重叠。
- 未与现有连接关联的已拒绝包 (例如,安全组或网络 ACL 拒绝连接启动)。
- 已拒绝现有连接上的包 (例如,与 TCP 状态机不匹配的流量,或者网络 ACL 规则已更改中间连接)。
- 被拒绝的包将根据它们是传入的还是传出的,写入单独的流日志。
如果安全组或网络 ACL 规则阻止了流的包,那么会将这些流标记为“已拒绝”。
流日志对象格式
按以下命名约定将流日志写入用户指定的 Object Storage 存储区:
ibm_vpc_flowlogs_v1/account={account}/region={region}/vpc-id={vpc-id}/subnet-id={subnet-id}/endpoint-type=vnics/instance-id={vsi-id}/vnic-id={vnic-id}/record-type={all|ingress|egress}/year={xxxx}/month={yy}/day={zz}/hour={hh}/stream-id={stream-id}/{sequence-number}.gz
其中:
{stream-id}是 ISO 8601 格式yyyymmddThhmmssZ(全球标准时间) 的日期和时间字符串,定义为创建directory中第一个对象的时间。{sequence-number}是流中对象的运行计数器,表示为 8 个字符的零填充字段 (%08d)。{all|ingress|egress}显示了流包含的流量类型。{xxxx}是四位数格式的年份。{yy}是采用两位数,零前导格式的月份。{zz}是采用两位数,零前导格式的月份中的日期。{hh}是零前导格式的小时 (例如 00-24)。
路径中出现的任何 URL-unsafe字符都会被 URL 编码。
流日志的 Object Storage 对象包含单个有效 JSON 对象。 Object Storage 对象已 .gz 压缩。
下表中指定的对象头字段将写入 Object Storage 对象元数据。
流日志对象头字段 (每个 Object StorageS 对象)
| 字段 | 类型 | 描述 |
|---|---|---|
version |
string | 语义版本。 |
collector_crn |
string | 流日志收集器的云资源名称 (CRN)。 |
attached_endpoint_type |
string | 当前,唯一值为 vnic。 |
network_interface_id |
string | vnic 标识,因为它没有 vNIC CRN。 |
instance_crn |
string | 网络接口所连接到的实例的 CRN。 |
vpc_crn |
string | 流日志收集器所属的 VPC 的 CRN。 |
capture_start_time |
string | RFC 3339 日期和时间 (全球标准时间) |
capture_end_time |
string | RFC 3339 日期和时间 (全球标准时间) |
state |
string | 指示流日志收集器的操作状态。OK 表示正在收集和装运数据,并且未发生任何错误。skip data 指示在此收集时间间隔内丢失的数据 (例如,由于拒绝 SYN 包的速率较高)。 |
number_of_flow_logs |
uin32 | 数组 flow_logs 中的元素个数。 由于此数字是高度可变的,因此它可用作单个 Object Storage 对象中包含的流日志数的快速参考,而无需首先下载该对象。 |
flow_logs |
JSON 对象的数组 | 这可以是一个空数组,指示 no traffic。 |
流日志字段
| 字段 | 类型 | 描述 |
|---|---|---|
start_time |
string | 捕获流日志中的第一个字节并将其显示在数据路径 (RFC 3339 日期和时间-全球标准时间) 中的时间。 |
end_time |
string | 捕获流日志中的最后一个字节并在数据路径中看到时 (RFC 3339 日期和时间-全球标准时间)。 |
connection_start_time |
string | 捕获流日志的 连接 中的第一个字节并在数据路径中查看时 (RFC 3339 日期和时间-全球标准时间)。 |
direction |
string | 值为 I (对于入站) 或 O (对于出站)。 如果连接上的第一个数据包是 收到 由 vNIC, 发出的,则方向为 I。 如果第一个数据包是 发送 由 vNIC, 发送的,则方向为 O。 |
action |
string | 值为 accepted (已接受此流汇总的流量) 或 rejected (已拒绝流量)。 |
initiator_ip |
string | (IPv4 地址) 在此连接上由 vNIC 处理的第一个包中显示的源 IP。 如果是 direction=="outbound",那么是与 vNIC关联的专用 IP。 |
target_ip |
string | (IPv4 地址) 在此连接上由 vNIC 处理的第一个包中显示的 Dest-IP。 如果是 direction=="inbound",那么是与 vNIC关联的专用 IP。 |
initiator_port |
uint16 | 此 vNIC 在此连接上处理的第一个包中显示的 TCP/UDP 源端口。 |
target_port |
uint16 | 此 vNIC 在此连接上处理的第一个包中显示的 TCP/UDP dest-port。 |
transport_protocol |
uint8 | 因特网分配数字权限 (IANA) 协议号 (TCP 或 UDP)。 |
ether_type |
string | 当前,IPv4 是唯一值。 |
was_initiated |
布尔值 | 在此流日志中启动的连接。 |
was_terminated |
布尔值 | 连接已终止 (例如,timeout/RST/Final-FIN)。 |
bytes_from_initiator |
uint64 | 此流日志的时间窗口中从发起方到目标的连接上的字节计数。 |
packets_from_initiator |
uint64 | 此流日志的时间窗口中从发起方到目标的连接上的包计数。 |
bytes_from_target |
uint64 | 此流日志的时间窗口 (从 "目标" 到 "发起方") 中连接上的字节计数。 |
packets_from_target |
uint64 | 此流日志的时间窗口 (从 "目标" 到 "发起方") 中连接上的包计数。 |
cumulative_bytes_from_initiator |
uint64 | 自启动连接以来,从发起方到目标的字节计数。 |
cumulative_packets_from_initiator |
uint64 | 自启动连接以来,从“发起方”到“目标”的信息包计数。 |
cumulative_bytes_from_target |
uint64 | 自启动连接以来,从目标到发起方的字节计数。 |
cumulative_packets_from_target |
uint64 | 自启动连接以来,从目标到发起方的信息包计数。 |
在大多数情况下,您可以通过比较 vNIC’s 的私有IP与源地址和目标地址来确定方向字段。 但是,该字段便于查询。
示例流日志对象
{
"version": "0.0.1",
"collector_crn": "crn",
"attached_endpoint_type": "vnic",
"network_interface_id": "crn",
"instance_crn": "crn",
"vpc_crn": "crn"
"capture_end_time": "2008-09-15T15:53:00Z",
"capture_start_time": "2008-09-15T15:00:00Z",
"state": "ok",
"number_of_flow_logs" : 1,
"flow_logs": [
{
"start_time": "2008-09-15T15:53:00",
"end_time": "2008-09-15T15:40:00",
"direction": "O",
"action": "accepted",
"initiator_ip": "1.2.3.4",
"initiator_port": 20033,
"target_ip": "5.6.7.8",
"target_port": 80,
"transport_protocol": 6,
"ether_type": "IPv4",
"was_initiated": true,
"was_terminated": false,
"bytes_from_initiator": 12000,
"packets_from_initiator": 2212,
"bytes_from_target": 323232,
"packets_from_target": 3232
"cumulative_packets_from_initiator": 2212,
"cumulative_packets_from_target": 3232,
"cumulative_bytes_from_target": 323232,
"cumulative_bytes_from_initiator": 12000,
}
],
}
从 Object Storage 存储区查看生成的流日志文件
如果使用 IBM Cloud Object Storage 的精简版(免费)定价计划,则可以直接从 Object Storage 桶访问已生成的流量日志对象文件,以验证文件是否已成功创建,以及对象是否正在生成。
要从 Object Storage 存储区查看生成的流日志文件,请执行以下步骤:
-
要确保捕获流日志,请检查 Object Storage 存储区。
-
在文件夹中浏览以查找 VPC 或配置了监视的资源。
-
向下钻取到资源以查找您正在监视的网络资源。
如果配置正确,那么您应该会看到每个日志条目的多个 gzip 文件。
为确保数据被捕获,请下载其中一个文件查看其内容,以确保流量被捕获。