查看流日志对象
流日志是在特定时间范围内由两个虚拟网络接口卡 (vNICs) 之间的连接唯一标识的网络流量的摘要。 流日志描述防火墙接受 (相关安全组或网络 ACL) 或拒绝 (但不能同时接受) 的流量。 它包含报头信息和有效载荷统计信息。
大约每 5 分钟将流日志定期写入 IBM Cloud® Object Storage。 在流日志收集器达到 100 KB 流的情况下,将更频繁地发布流日志。
当前,流日志收集传输控制协议 (TCP) 和用户数据报协议 (UDP) 流量,但不收集因特网控制报文协议 (ICMP) 流量。
每个流日志对象都包含单独的流日志。 要查看或分析流量日志,请使用 IBM Analytics Engine。 有关详细信息,请参阅 IBM Analytics Engine 入门教程。
IBM Cloud Data Engine已折旧,2025 年 1 月 19 日后将不再支持。 如果您目前使用 Data Engine 的现有实例,建议您将工作负载迁移到 IBM Analytics Engine。
流日志数据格式
流日志流量摘要包含以下信息:
- 字节/包计数,分别用于 RX (接收) 和 TX (传输)。
- 连接是在时间窗口中启动还是停止。
由于流日志在有限的时间范围内反映网络流量,因此长时间运行的连接可能会导致发出多个流日志。 对于 vNIC, 都会发出按时间顺序排列的流量日志(不包括故障)。 这些流日志显示在一个或多个 Object Storage 对象中。
流日志中的 initiator_ip
定义为到达 vNIC的其连接的第一个包中显示的 source_ip
。 在实现级别,此包通常是导致将新连接添加到连接表的包。 同样,流日志中的 target_ip
设置为同一包中的 dest_ip
字段。
如果连接发起方 vNIC 和连接目标 vNIC 都启用流日志,那么两个 vNICs上的流日志中的发起方和目标 IP 及端口字段相同。
示例:假设客户向网络服务器发送了 HTTP 请求。 客户端 vNIC 上此 HTTP 请求的流量日志显示客户端的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 不安全字符的实例均已 URL 编码。
流日志的 Object Storage 对象包含单个有效 JSON 对象。 Object Storage 对象已 .gz
压缩。
下表中指定的对象头字段将写入 Object Storage 对象元数据。
流日志对象头字段 (每个 Object StorageS 对象)
字段 | Type | 描述 |
---|---|---|
version |
字符串 | 语义版本。 |
collector_crn |
字符串 | 流日志收集器的云资源名称 (CRN)。 |
attached_endpoint_type |
字符串 | 当前,唯一值为 vnic 。 |
network_interface_id |
字符串 | vnic 标识,因为它没有 vNIC CRN。 |
instance_crn |
字符串 | 网络接口所连接到的实例的 CRN。 |
vpc_crn |
字符串 | 流日志收集器所属的 VPC 的 CRN。 |
capture_start_time |
字符串 | RFC 3339 日期和时间 (全球标准时间) |
capture_end_time |
字符串 | RFC 3339 日期和时间 (全球标准时间) |
state |
字符串 | 指示流日志收集器的操作状态。OK 表示正在收集和装运数据,并且未发生任何错误。skip data 指示在此收集时间间隔内丢失的数据 (例如,由于拒绝 SYN 包的速率较高)。 |
number_of_flow_logs |
uin32 | flow_logs 数组中的元素数量。 由于此数字是高度可变的,因此它可用作单个 Object Storage 对象中包含的流日志数的快速参考,而无需首先下载该对象。 |
flow_logs |
JSON 对象的数组 | 这可以是一个空数组,指示 no traffic 。 |
流日志字段
字段 | Type | 描述 |
---|---|---|
start_time |
字符串 | 捕获流日志中的第一个字节并将其显示在数据路径 (RFC 3339 日期和时间-全球标准时间) 中的时间。 |
end_time |
字符串 | 捕获流日志中的最后一个字节并在数据路径中看到时 (RFC 3339 日期和时间-全球标准时间)。 |
connection_start_time |
字符串 | 捕获流日志的 连接 中的第一个字节并在数据路径中查看时 (RFC 3339 日期和时间-全球标准时间)。 |
direction |
字符串 | 值为 I (对于入站) 或 O (对于出站)。 如果连接上的第一个数据包是 收到 由 vNIC, 发出的,则方向为 I 。 如果第一个数据包是 发送 由 vNIC, 发送的,则方向为 O 。 |
action |
字符串 | 值为 accepted (已接受此流汇总的流量) 或 rejected (已拒绝流量)。 |
initiator_ip |
字符串 | (IPv4 地址) 在此连接上由 vNIC 处理的第一个包中显示的源 IP。 如果是 direction=="outbound" ,那么是与 vNIC关联的专用 IP。 |
target_ip |
字符串 | (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 |
字符串 | 当前,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 与源 IP 和目标 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 文件。
为确保数据被捕获,请下载其中一个文件查看其内容,以确保流量被捕获。