数据计费数据记录 (CDR) 格式
SGW-C 的离线计费
OmniSGW 由 Omnitouch 网络服务提供
目录
概述
数据 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 字段
字段摘要
| 位置 | 字段名称 | 类型 | 描述 |
|---|---|---|---|
| 0 | epoch | 整数 | 事件时间戳(Unix 纪元秒) |
| 1 | imsi | 字符串 | 国际移动用户身份 |
| 2 | event | 字符串 | CDR 事件类型(例如,"default_bearer_start") |
| 3 | charging_id | 整数 | 承载的唯一计费标识符 |
| 4 | msisdn | 字符串 | 移动站 ISDN 号码(电话号码) |
| 5 | ue_imei | 字符串 | 国际移动设备身份 |
| 6 | timezone_raw | 字符串 | UE 时区(保留,目前为空) |
| 7 | plmn | 整数 | 公共陆地移动网络标识符 |
| 8 | tac | 整数 | 跟踪区域代码 |
| 9 | eci | 整数 | E-UTRAN 小区标识符 |
| 10 | sgw_ip | 字符串 | SGW-C S5/S8 控制平面 IP 地址 |
| 11 | ue_ip | 字符串 | UE IP 地址(IPv4|IPv6 格式) |
| 12 | pgw_ip | 字符串 | PGW-C S5/S8 控制平面 IP 地址 |
| 13 | apn | 字符串 | 接入点名称 |
| 14 | qci | 整数 | QoS 类标识符 |
| 15 | octets_in | 整数 | 下行数据量(字节) |
| 16 | octets_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 文件根据配置的持续时间自动轮换:
轮换过程:
- 关闭当前 CDR 文件
- 创建带有当前时间戳的新文件
- 将头部写入新文件
- 继续将 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_startdefault_bearer_updatedefault_bearer_enddedicated_bearer_startdedicated_bearer_updatededicated_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 | 资源类型 | 优先级 | 数据包延迟 | 数据包丢失 | 示例服务 |
|---|---|---|---|---|---|
| 1 | GBR | 2 | 100 ms | 10^-2 | 对话语音 |
| 2 | GBR | 4 | 150 ms | 10^-3 | 对话视频 |
| 3 | GBR | 3 | 50 ms | 10^-3 | 实时游戏 |
| 4 | GBR | 5 | 300 ms | 10^-6 | 非对话视频 |
| 5 | Non-GBR | 1 | 100 ms | 10^-6 | IMS 信令 |
| 6 | Non-GBR | 6 | 300 ms | 10^-6 | 视频(缓冲) |
| 7 | Non-GBR | 7 | 100 ms | 10^-3 | 语音、视频、游戏 |
| 8 | Non-GBR | 8 | 300 ms | 10^-6 | 视频(缓冲) |
| 9 | Non-GBR | 9 | 300 ms | 10^-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: 基本会话与单次更新
时间线:
- 承载已建立
- 5 分钟后: 使用更新(10 MB 下行,5 MB 上行)
- 会话终止
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: 双栈会话与多次更新
时间线:
- 双栈承载已建立(IPv4 + IPv6)
- 多次使用更新
- 会话终止
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: 专用承载的会话
时间线:
- 默认承载已建立(QCI 9)
- 为视频创建专用承载(QCI 6)
- 两个承载的使用更新
- 删除专用承载
- 终止默认承载
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