跳到主要内容

数据计费数据记录 (CDR) 格式

SGW-C 的离线计费

OmniSGW 由 Omnitouch 网络服务提供


目录

  1. 概述
  2. CDR 文件格式
  3. CDR 字段
  4. CDR 事件
  5. 文件结构
  6. 配置
  7. CDR 生成流程
  8. 字段详细信息
  9. 示例
  10. 集成

概述

数据 CDR (计费数据记录) 格式为服务网关控制平面 (SGW-C) 提供离线计费能力。CDR 被生成以记录承载会话事件、数据使用情况和用户信息,以便于计费和分析。

该通用格式与 PGW-C CDR 兼容,确保 EPC 基础设施中计费记录的一致性。

主要特点

  • 基于 CSV 的格式 - 简单、易读的逗号分隔值
  • 基于事件的记录 - 捕获承载的开始、更新和结束事件
  • 流量计量 - 记录上行和下行数据使用情况
  • 自动轮换 - 基于时间间隔的可配置文件轮换
  • 符合 3GPP 标准 - 遵循 3GPP TS 32.251 (PS 域计费) 和 TS 32.298 (CDR 编码)

用例

用例描述
离线计费生成后付费计费的 CDR
分析分析用户使用模式
审计跟踪跟踪所有承载会话事件
容量规划监控网络资源利用率
故障排除调试会话和承载问题

CDR 文件格式

文件命名约定

<epoch_timestamp>

示例:

1726598022

文件名是文件创建时的 Unix 纪元时间戳(以秒为单位)。

文件位置

默认目录:

  • SGW-C: /var/log/sgw_c/cdrs/

可通过 CDR 报告器配置中的 directory 参数进行配置。

文件头

每个 CDR 文件以包含元数据的多行头部开始:

# 数据 CDR 文件:
# 文件开始时间: HH:MM:SS (unix_timestamp)
# 文件结束时间: HH:MM:SS (unix_timestamp)
# 网关名称: <gateway_name>
# epoch,imsi,event,charging_id,msisdn,ue_imei,timezone_raw,plmn,tac,eci,sgw_ip,ue_ip,pgw_ip,apn,qci,octets_in,octets_out

头字段:

  • 文件开始时间 - CDR 文件创建的时间(可读和 Unix 时间戳)
  • 文件结束时间 - 文件轮换将发生的时间(可读和 Unix 时间戳)
  • 网关名称 - SGW-C 实例的标识符
  • 列标题 - 数据记录的 CSV 字段名称

CDR 字段

字段摘要

位置字段名称类型描述
0epoch整数事件时间戳(Unix 纪元秒)
1imsi字符串国际移动用户身份
2event字符串CDR 事件类型(例如,"default_bearer_start")
3charging_id整数承载的唯一计费标识符
4msisdn字符串移动站 ISDN 号码(电话号码)
5ue_imei字符串国际移动设备身份
6timezone_raw字符串UE 时区(保留,目前为空)
7plmn整数公共陆地移动网络标识符
8tac整数跟踪区域代码
9eci整数E-UTRAN 小区标识符
10sgw_ip字符串SGW-C S5/S8 控制平面 IP 地址
11ue_ip字符串UE IP 地址(IPv4|IPv6 格式)
12pgw_ip字符串PGW-C S5/S8 控制平面 IP 地址
13apn字符串接入点名称
14qci整数QoS 类标识符
15octets_in整数下行数据量(字节)
16octets_out整数上行数据量(字节)

CDR 事件

事件类型

CDR 为三种类型的事件生成:

事件类型格式描述生成时机
承载开始<type>_bearer_start承载建立发送创建会话响应
承载更新<type>_bearer_update会话期间的使用报告来自用户平面的定期使用报告
承载结束<type>_bearer_end承载终止删除会话请求/响应

承载类型:

  • default - 默认承载(每个 PDN 连接一个)
  • dedicated - 专用承载(每个 PDN 连接零个或多个)

事件示例

default_bearer_start      - 默认承载已建立
default_bearer_update - 默认承载使用更新
default_bearer_end - 默认承载已终止
dedicated_bearer_start - 专用承载已建立
dedicated_bearer_update - 专用承载使用更新
dedicated_bearer_end - 专用承载已终止

文件结构

示例 CDR 文件

# 数据 CDR 文件:
# 文件开始时间: 18:53:42 (1726598022)
# 文件结束时间: 19:53:42 (1726601622)
# 网关名称: sgw-c-prod-01
# epoch,imsi,event,charging_id,msisdn,ue_imei,timezone_raw,plmn,tac,eci,sgw_ip,ue_ip,pgw_ip,apn,qci,octets_in,octets_out
1726598022,310260123456789,default_bearer_start,12345,15551234567,123456789012345,,349552,1234,5678,10.0.0.15,172.16.1.100|2001:db8::1,10.0.0.20,internet,9,0,0
1726598322,310260123456789,default_bearer_update,12345,15551234567,123456789012345,,349552,1234,5678,10.0.0.15,172.16.1.100|2001:db8::1,10.0.0.20,internet,9,1048576,524288
1726598622,310260123456789,default_bearer_update,12345,15551234567,123456789012345,,349552,1234,5678,10.0.0.15,172.16.1.100|2001:db8::1,10.0.0.20,internet,9,5242880,2097152
1726598922,310260123456789,default_bearer_end,12345,15551234567,123456789012345,,349552,1234,5678,10.0.0.15,172.16.1.100|2001:db8::1,10.0.0.20,internet,9,10485760,5242880

文件轮换

CDR 文件根据配置的持续时间自动轮换:

轮换过程:

  1. 关闭当前 CDR 文件
  2. 创建带有当前时间戳的新文件
  3. 将头部写入新文件
  4. 继续将 CDR 记录到新文件

配置

配置参数

参数类型描述默认值推荐值
gateway_name字符串SGW-C 实例标识符-使用主机名或实例 ID
duration整数文件轮换间隔(毫秒)-3600000 (1 小时)
directory字符串CDR 输出目录路径-/var/log/sgw_c/cdrs

配置示例

生产环境:

  • gateway_name: "sgw-c-prod-01"
  • duration: 3,600,000 毫秒 (1 小时轮换)
  • directory: "/var/log/sgw_c/cdrs"

开发环境:

  • gateway_name: "sgw-c-dev"
  • duration: 300,000 毫秒 (5 分钟轮换用于测试)
  • directory: "/tmp/sgw_c_cdrs"

高流量:

  • gateway_name: "sgw-c-prod-heavy"
  • duration: 1,800,000 毫秒 (30 分钟轮换)
  • directory: "/mnt/fast-storage/cdrs"

CDR 生成流程

承载生命周期 CDR 事件

SGW-C CDR 生成:

CDR 生成事件

1. 承载开始:

  • 何时: 发送创建会话响应
  • 目的: 记录承载建立时的零使用
  • octets_in: 0
  • octets_out: 0

2. 承载更新:

  • 何时: 从用户平面接收到 PFCP 会话报告请求
  • 目的: 记录增量数据使用
  • octets_in: 自承载开始以来的累计下行字节
  • octets_out: 自承载开始以来的累计上行字节

3. 承载结束:

  • 何时: 接收到 PFCP 会话删除响应(带有最终使用)
  • 目的: 记录会话终止前的最终数据使用
  • octets_in: 最终总下行字节
  • octets_out: 最终总上行字节

字段详细信息

1. epoch (时间戳)

类型: Unix 纪元时间戳(秒)

描述: CDR 事件发生的时间

示例:

1726598022  → 2025-09-17 18:53:42 UTC

2. imsi (用户身份)

类型: 字符串(最多 15 位数字)

格式: MCCMNC + MSIN

描述: 唯一标识用户的国际移动用户身份

示例:

310260123456789
└─┬─┘└─┬─┘└────┬────┘
MCC MNC MSIN
(310)(260) (123456789)

来源: UE 上下文,在创建会话请求中接收


3. event (CDR 事件类型)

类型: 字符串

格式: <bearer_type>_bearer_<event>

值:

  • default_bearer_start
  • default_bearer_update
  • default_bearer_end
  • dedicated_bearer_start
  • dedicated_bearer_update
  • dedicated_bearer_end

确定:

  • 如果 EBI (EPS 承载 ID) 等于 LBI (链接承载 ID): default
  • 如果 EBI 不等于 LBI: dedicated

来源: 承载上下文(EBI 与 LBI 比较)


4. charging_id (计费标识符)

类型: 无符号 32 位整数

描述: 用于跨网络元素的计费关联的唯一标识符

示例:

12345

来源: 由 PGW-C 分配,在创建会话响应中接收

用途:

  • 关联 SGW 和 PGW 之间的计费事件
  • 用于 Diameter Gy/Gz 计费���口
  • 每个承载唯一

5. msisdn (电话号码)

类型: 字符串(E.164 格式)

描述: 移动站 ISDN 号码(用户的电话号码)

格式: 国家代码 + 国内号码

示例:

15551234567
└┬┘└───┬───┘
CC National
(1) (5551234567)

来源: UE 上下文,通常通过 MME 从 HSS 获取


6. ue_imei (设备身份)

类型: 字符串(15 位数字)

格式: TAC (8) + SNR (6) + Spare (1)

描述: 国际移动设备身份(设备标识符)

示例:

123456789012345
└───┬───┘└─┬─┘└┘
TAC SNR S

来源: UE 上下文,从 MME 接收


7. timezone_raw (UE 时区)

类型: 字符串(当前保留/为空)

描述: 保留字段,用于 UE 时区信息

当前状态: 未填充(CSV 中为空字段)

未来用途: 可能包括时区偏移和夏令时标志

示例:

,  (空字段)

8. plmn (网络标识符)

类型: 整数(遗留格式)

描述: 公共陆地移动网络标识符,编码为小端十六进制

编码过程:

MCC: 505, MNC: 57

"50557"

交换对: "055570"

十六进制转十进制: 0x055570 = 349552

示例:

349552  → MCC: 505, MNC: 57

来源: 从 MME 获取的 UE 位置信息

注意: 这是向后兼容的遗留编码格式


9. tac (跟踪区域代码)

类型: 无符号 16 位整数

描述: 跟踪区域代码标识 UE 所在的跟踪区域

范围: 0 - 65535

示例:

1234

来源: UE 位置信息,在创建会话请求中从 MME 接收

用途:

  • 标识移动管理区域
  • 用于寻呼和位置更新
  • TAI (跟踪区域标识) 的一部分

10. eci (E-UTRAN 小区标识符)

类型: 无符号 28 位整数

描述: E-UTRAN 小区标识符唯一标识为 UE 提供服务的小区

格式: eNodeB ID (20 位) + 小区 ID (8 位)

范围: 0 - 268,435,455

示例:

5678

来源: 从 MME 获取的 UE 位置信息

用途:

  • 标识特定的小区塔和扇区
  • 用于切换和移动管理
  • 细粒度位置信息

11. sgw_ip (SGW 控制平面 IP)

类型: 字符串(IPv4 或 IPv6 地址)

描述: SGW-C 的 S5/S8 控制平面 IP 地址 (F-TEID)

格式: 点分十进制 (IPv4) 或 冒号-十六进制 (IPv6)

示例:

10.0.0.15       (IPv4)
2001:db8::15 (IPv6)

来源: 本地配置,分配给 S5/S8 接口


12. ue_ip (UE IP 地址)

类型: 字符串(IPv4|IPv6 格式)

描述: 分配给 UE 的 PDN 连接的 IP 地址

格式: <ipv4>|<ipv6>

示例:

172.16.1.100|                      (仅 IPv4)
|2001:db8::1 (仅 IPv6)
172.16.1.100|2001:db8::1 (双栈)

来源: PGW-C 的 PDN 地址分配 (PAA)

注意:

  • 空 IPv4: 未分配 IPv4 地址
  • 空 IPv6: 未分配 IPv6 地址
  • 两者均存在: 双栈 PDN 连接

13. pgw_ip (PGW 控制平面 IP)

类型: 字符串(IPv4 或 IPv6 地址)

描述: PGW-C 的 S5/S8 控制平面 IP 地址 (远程 F-TEID)

格式: 点分十进制 (IPv4) 或 冒号-十六进制 (IPv6)

示例:

10.0.0.20       (IPv4)
2001:db8::20 (IPv6)

来源: 从 PGW-C 的创建会话响应中接收


14. apn (接入点名称)

类型: 字符串(最多 100 个字符)

描述: 标识外部网络 (PDN) 的接入点名称

格式: 类似 DNS 的标签格式

示例:

internet
ims
mms
enterprise.corporate

来源: 从 MME 的创建会话请求中接收

用途:

  • 确定连接到哪个外部网络
  • 驱动策略和计费规则
  • 可能决定 IP 地址池

15. qci (QoS 类标识符)

类型: 无符号 8 位整数

描述: QoS 类标识符定义承载的服务质量

范围: 1 - 9 (标准化), 128-254 (运营商特定)

标准化 QCI 值:

QCI资源类型优先级数据包延迟数据包丢失示例服务
1GBR2100 ms10^-2对话语音
2GBR4150 ms10^-3对话视频
3GBR350 ms10^-3实时游戏
4GBR5300 ms10^-6非对话视频
5Non-GBR1100 ms10^-6IMS 信令
6Non-GBR6300 ms10^-6视频(缓冲)
7Non-GBR7100 ms10^-3语音、视频、游戏
8Non-GBR8300 ms10^-6视频(缓冲)
9Non-GBR9300 ms10^-6默认承载

示例:

9  → 默认承载(最佳努力)

来源: PGW-C 的承载 QoS 参数


16. octets_in (下行流量)

类型: 无符号 64 位整数

描述: 在下行方向(网络 → UE)传输的字节数

单位: 字节

示例:

1048576  → 1 MB 下行

来源: 来自 SGW-U 的 PFCP 流量测量

注意:

  • 对于 update 事件是累计的
  • 对于 end 事件是最终总数
  • 对于 start 事件始终为 0

17. octets_out (上行流量)

类型: 无符号 64 位整数

描述: 在上行方向(UE → 网络)传输的字节数

单位: 字节

示例:

524288  → 512 KB 上行

来源: 来自 SGW-U 的 PFCP 流量测量

注意:

  • 对于 update 事件是累计的
  • 对于 end 事件是最终总数
  • 对于 start 事件始终为 0

示例

示例 1: 基本会话与单次更新

时间线:

  1. 承载已建立
  2. 5 分钟后: 使用更新(10 MB 下行,5 MB 上行)
  3. 会话终止

CDR 输出:

# 数据 CDR 文件:
# 文件开始时间: 10:00:00 (1726570800)
# 文件结束时间: 11:00:00 (1726574400)
# 网关名称: sgw-c-01
# epoch,imsi,event,charging_id,msisdn,ue_imei,timezone_raw,plmn,tac,eci,sgw_ip,ue_ip,pgw_ip,apn,qci,octets_in,octets_out
1726570800,310260111111111,default_bearer_start,10001,15551111111,111111111111111,,349552,1000,2000,10.0.0.15,172.16.1.1|,10.0.0.20,internet,9,0,0
1726571100,310260111111111,default_bearer_update,10001,15551111111,111111111111111,,349552,1000,2000,10.0.0.15,172.16.1.1|,10.0.0.20,internet,9,10485760,5242880
1726571400,310260111111111,default_bearer_end,10001,15551111111,111111111111111,,349552,1000,2000,10.0.0.15,172.16.1.1|,10.0.0.20,internet,9,10485760,5242880

示例 2: 双栈会话与多次更新

时间线:

  1. 双栈承载已建立(IPv4 + IPv6)
  2. 多次使用更新
  3. 会话终止

CDR 输出:

1726570800,310260222222222,default_bearer_start,10002,15552222222,222222222222222,,349552,1001,2001,10.0.0.15,172.16.1.2|2001:db8::2,10.0.0.20,internet,9,0,0
1726571100,310260222222222,default_bearer_update,10002,15552222222,222222222222222,,349552,1001,2001,10.0.0.15,172.16.1.2|2001:db8::2,10.0.0.20,internet,9,2097152,1048576
1726571400,310260222222222,default_bearer_update,10002,15552222222,222222222222222,,349552,1001,2001,10.0.0.15,172.16.1.2|2001:db8::2,10.0.0.20,internet,9,8388608,4194304
1726571700,310260222222222,default_bearer_update,10002,15552222222,222222222222222,,349552,1001,2001,10.0.0.15,172.16.1.2|2001:db8::2,10.0.0.20,internet,9,20971520,10485760
1726572000,310260222222222,default_bearer_end,10002,15552222222,222222222222222,,349552,1001,2001,10.0.0.15,172.16.1.2|2001:db8::2,10.0.0.20,internet,9,31457280,15728640

示例 3: 专用承载的会话

时间线:

  1. 默认承载已建立(QCI 9)
  2. 为视频创建专用承载(QCI 6)
  3. 两个承载的使用更新
  4. 删除专用承载
  5. 终止默认承载

CDR 输出:

1726570800,310260333333333,default_bearer_start,10003,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,9,0,0
1726571100,310260333333333,dedicated_bearer_start,10004,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,6,0,0
1726571400,310260333333333,default_bearer_update,10003,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,9,5242880,2097152
1726571400,310260333333333,dedicated_bearer_update,10004,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,6,104857600,1048576
1726571700,310260333333333,dedicated_bearer_end,10004,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,6,209715200,2097152
1726572000,310260333333333,default_bearer_end,10003,15553333333,333333333333333,,1258248,1002,2002,10.0.0.15,172.16.1.3|,10.0.0.20,internet,9,10485760,4194304

分析:

  • 默认承载 (10003) 承载背景流量 (10 MB 下行,4 MB 上行)
  • 专用承载 (10004) 承载视频流量 (200 MB 下行,2 MB 上行)
  • 不同的 QCI 值 (9 与 6) 反映不同的 QoS 处理

集成

CDR 处理管道

CDR 收集方法

1. 基于文件的收集:

# 监控 CDR 目录 (SGW-C)
inotifywait -m /var/log/sgw_c/cdrs/ -e close_write | while read path action file; do
# 文件轮换完成,处理 CDR
process_cdr "$path$file"
done

2. 实时流:

# 尾随并流式传输到处理管道
tail -F /var/log/sgw_c/cdrs/* | process_cdr_stream

相关文档


3GPP 参考

  • TS 32.251 - 分组交换 (PS) 域计费
  • TS 29.274 - 3GPP 演进分组系统 (EPS); GTP-C 协议
  • TS 29.244 - CP 和 UP 节点之间的接口 (PFCP)
  • TS 32.298 - CDR 编码

CDR 格式 - SGW-C 的离线计费记录

由 Omnitouch 网络服务开发

文档版本: 1.0 最后更新: 2025-12-10