Skip to main content

Outputs

Console Reference

OCUDU can output metrics to command line while running, to enable this, type t in the console.

A sample output from the gNB/DU showing bi-directional traffic can be seen here:

         |--------------------DL---------------------|-------------------------UL----------------------------------
pci rnti | cqi ri mcs brate ok nok (%) dl_bs | pusch rsrp ri mcs brate ok nok (%) bsr ta phr
1 4601 | 15 1 28 17M 908 0 0% 44k | 26.7 -21.2 1 28 17M 545 0 0% 39.8k 0us 18
1 4601 | 15 1 28 18M 966 0 0% 0 | 26.8 -21.3 1 28 17M 547 0 0% 0 0us 18
1 4601 | 15 1 28 17M 912 0 0% 0 | 26.8 -21.2 1 28 17M 558 0 0% 77.3k n/a 18
1 4601 | 15 1 28 17M 913 0 0% 116k | 26.8 -21.2 1 28 17M 542 0 0% 108k 0us 18
1 4601 | 15 1 28 18M 949 0 0% 28.5k | 26.8 -21.2 1 28 17M 559 0 0% 0 n/a 18
1 4601 | 15 1 28 18M 936 0 0% 0 | 26.7 -21.2 1 28 17M 549 0 0% 108k 0us 18
1 4601 | 15 1 28 17M 918 0 0% 0 | 26.6 -21.2 1 28 17M 552 0 0% 108k n/a 18
1 4601 | 15 1 28 17M 913 0 0% 110k | 26.6 -21.2 1 28 17M 552 0 0% 28.6k n/a 18
1 4601 | 15 1 28 18M 904 0 0% 17.9k | 26.7 -21.2 1 28 17M 547 0 0% 150k 0us 18
1 4601 | 15 1 28 18M 909 0 0% 0 | 26.5 -21.2 1 28 17M 548 0 0% 150k n/a 18
1 4601 | 15 1 28 17M 903 0 0% 0 | 26.5 -21.2 1 28 17M 552 0 0% 55.5k n/a 18

Metrics are provided on a per-UE basis. The following metrics are provided:

Logs

OCUDU provides users with a highly configurable logging mechanism, with per-layer and per-component log levels. Set the log file path and log levels in the gNB config file. See the Configuration Reference for more details.

The format used for all log messages is as follows:

*Timestamp [Layer] [Level] [TTI] message*

Where the fields are:

  • Timestamp in YYYY-MM-DDTHH:MM:SS.UUUUUU format at which log message was generated
  • Layer can be one of MAC/RLC/PDCP/RRC/SDAP/NGAP/GTPU/RADIO/FAPI/F1U/DU/CU/LIB. PHY layers are specified as downlink or uplink and with executor number e.g. DL-PHY1.
  • Level can be one of E/W/I/D for error, warning, info and debug respectively.
  • TTI is only shown for PHY or MAC messages and is in the format SFN.sn where SFN is System Frame Number and sn is slot number.

An example log file excerpt can be seen below:

2023-03-15T18:29:25.142200 [MAC     ] [I] [  276.14] UL PDU rnti=0x4601 ue=0 subPDUs: [lcid=1: len=96, SBSR: lcg=0 bs=0, SE_PHR: total_len=3, PAD: len=424]
2023-03-15T18:29:25.142204 [RLC ] [I] ue=0 SRB1 UL: RX PDU. pdu_len=96 dc=data p=1 si=full sn=0 so=0
2023-03-15T18:29:25.142226 [PDCP ] [I] ue=0 SRB1 UL: RX PDU. type=data pdu_len=94 sn=0 count=0
2023-03-15T18:29:25.142228 [PDCP ] [I] ue=0 SRB1 UL: RX SDU. count=0
2023-03-15T18:29:25.142245 [RRC ] [D] ue=0 SRB1 - Rx DCCH UL rrcSetupComplete (88 B)
2023-03-15T18:29:25.142249 [RRC ] [D] Content: [
{
"UL-DCCH-Message": {
"message": {
"c1": {
"rrcSetupComplete": {
"rrc-TransactionIdentifier": 0,
"criticalExtensions": {
"rrcSetupComplete": {
"selectedPLMN-Identity": 1,
"registeredAMF": {
"amf-Identifier": "000000100000000001000000"
},
"guami-Type": "native",
"dedicatedNAS-Message": "7e01820be950137e004139000bf200f110020040e7000f272e04f070f0707100307e004139000bf200f110020040e7000f27100200402e04f070f0702f0201015200f11000000718010074000090530101"
}
}
}
}
}
}
}
]
2023-03-15T18:29:25.142253 [RRC ] [D] ue=0 "RRC Setup Procedure" finished successfully
2023-03-15T18:29:25.142263 [NGAP ] [I] ue=0 Sending InitialUeMessage (ran_ue_id=0)

PCAPs

OCUDU can output PCAPs at the following layers:

  • MAC
  • RLC
  • NGAP
  • N3
  • E1AP
  • F1AP
  • E2AP

To output these PCAPs, they must first be enabled on a per-layer basis in the gNB configuration file. See the Configuration Reference for more details.

MAC

To analyze a MAC-layer PCAP using Wireshark, you will need to configure User DLT 149 for UDP and enable the mac_nr_udp protocol:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=149 and Payload protocol=udp.
  2. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=157 and Payload protocol=mac-nr-framed.
  3. Go to Analyze->Enabled Protocols->MAC-NR and enable mac_nr_udp
  4. Go to Edit->Preferences->Protocols->MAC-NR: Enable both checkboxes “Attempt to…”; Set LCID->DRB mapping to “From configuration protocol”. image

RLC

info

To correctly view the RLC PCAPs you will need Wireshark v4.3.x or later.

To analyze a RLC-layer PCAP using Wireshark, you will need to configure User DLT 149 for UDP and enable the rlc_nr_udp protocol:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=149 and Payload protocol=udp.
  2. Go to Analyze->Enabled Protocols->RLC-NR and enable rlc_nr_udp
  3. Go to Edit->Preferences->Protocols->RLC-NR and configure according to your needs. image

NGAP

To analyze an NGAP-layer PCAP using Wireshark, you will need to configure User DLT 152 for NGAP and enable detection and decoding 5G-EA0 ciphered messages:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=152 and Payload protocol=ngap.
  2. Go to Edit->Preferences->Protocols->NAS-5GS and enable “Try to detect and decode 5G-EA0 ciphered messages”. image

N3

To analyze a N3 PCAP using Wireshark, you will need to configure User DLT 156 for GTP:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=156 and Payload Protocol=gtp. image

E1AP

To analyze an E1AP PCAP using Wireshark, you will need to configure User DLT 153 for E1AP:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=153 and Payload Protocol=e1ap. image

F1AP

To analyze an F1AP PCAP using Wireshark, you will need to configure User DLT 154 for F1AP:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=154 and Payload Protocol=f1ap. image

E2AP

To analyze an E2AP PCAP using Wireshark, you will need to configure User DLT 155 for E2AP:

  1. Go to Edit->Preferences->Protocols->DLT_USER->Edit and add an entry with DLT=155 and Payload Protocol=e2ap. image

JSON Metrics

OCUDU supports the reporting of the console metrics to JSON data format over websocket. This is used to generate the output seen in the Grafana GUI.

The metrics can be received and printed to stdout using a Python script.

Firstly, the metrics output and remote control can be enabled by adding the following to your configuration file:

metrics:
enable_json: true
remote_control:
bind_addr: 0.0.0.0
port: 8001
enabled: true

With this enabled, the websocket will listen on 127.0.0.1:8001. The metrics can be subscribed and written to stdout in real-time while the gNB is running using the following Python code:

#!/usr/bin/env python3

from contextlib import suppress
import os
import json
from time import sleep
import websocket

def _on_open(ws: websocket.WebSocketApp):
ws.send(json.dumps({"cmd": "metrics_subscribe"}))

def _on_message(_ws: websocket.WebSocketApp, message: str):
with suppress(json.JSONDecodeError):
metric = json.loads(message)
if "cmd" not in metric:
print(json.dumps(metric))

if __name__ == "__main__":
ws_app = websocket.WebSocketApp(
"ws://" + os.environ["WS_URL"],
on_open=_on_open,
on_message=_on_message,
)
while ws_app.run_forever(): # Returns False when the connection is closed
sleep(1)

You must specify the address and port of the websocket via environment variable WS_URL, e.g. start the script as follows:

WS_URL="127.0.0.1:8001" ./metrics_ws_receiver.py

This script will need to be run in parallel with the gNB to successfully print the metrics. The metrics will be written to stdout.

You can download the source-code for the above Python script here.

The metrics are generated on a layer basis, and each layer can be enabled through the configuration file.

metrics:
layers: # Enable metrics per layer
enable_executor: true # false to disable
enable_app_usage: true # false to disable
enable_ngap: true # false to disable
enable_rrc: true # false to disable
enable_e1ap: true # false to disable
enable_pdcp: true # false to disable
enable_sched: true # false to disable
enable_rlc: true # false to disable
enable_mac: true # false to disable
enable_du_low: true # false to disable
enable_ru: true # false to disable

MAC metrics

The MAC metrics are encapsulated in the DU metric object, which contains the following keys:

  • du: Includes the DU high metrics under the du_high key, which contains the mac metrics, which in turn contains dl metrics, which is a list of cells with specific MAC dowlink metrics. Each entry in the dl list corresponds to a cell configured in the DU.
  • timestamp: Date and time at which the metrics were generated.

and is structured as shown below.

{
"du": {
"du_high": {
"mac": {
"dl": [ # List of cells, one item with MAC metrics per cell.
{
"average_latency_us": 45.473, "cpu_usage_percent": 0.0045473, "max_latency_us": 255.174, "min_latency_us": 6.918, "pci": 1
},
{
"average_latency_us": 44.533, "cpu_usage_percent": 0.0044533, "max_latency_us": 232.088, "min_latency_us": 5.822, "pci": 2
}
]
}
}
},
"timestamp": "2025-11-04T15:51:26.845"
}

The table below describes the MAC metrics reported in the DU metrics JSON output, under the dl key.

MAC metricsDescription
pciPhysical cell ID.
average_latency_usAverage latency of the MAC at handling slot indications, in microseconds.
cpu_usage_percentAverage CPU usage percentage of the MAC handling slot indications.
min_latency_us, max_latency_usMinimum/Maximum latency of the MAC at handling slot indications, in microseconds.

Scheduler metrics

The scheduler metrics object contains 2 keys:

  • cells: List of cell metrics objects, one per cell configured in the DU; this list is accessed through the key cells, which is structured similarly as shown below:
  • timestamp: Date and time at which the metrics were generated.
{
"cells": [ # List of cells, one metric object per cell.
{
"cell_metrics": {
"average_latency": 3,
...
},
"event_list": [ # List of events for this cell.
{
"event_type": "ue_create",
"rnti": 17921,
"slot": "50.5"
},
...
],
"ue_list": [ # List of UEs for this cell with their metrics.
{
"avg_ce_delay": 3.75,
...
}
]
},
...
],
"timestamp": "2025-11-04T02:12:48.105"
}

Each element of the cells list contains the metrics of the cell, which can be accessed through the following keys:

  • cell_metrics: reports the cell metrics for a given cell; refer to Scheduler cell metrics for details.
  • event_list: list of events reported in this cell metric report. Refer to Cell events for details.
  • ue_list: reports the list of UEs connected to this cell; each UE entry contains the UE metrics described in Scheduler UE metrics.

Scheduler cell metrics

Scheduler cell metricDescription
error_indication_countNumber of error indications received by the scheduler from lower layers.
average_latency, max_latencyAverage/Maximum scheduler decision latency in microseconds.
nof_failed_pdcch_allocsNumber of failed PDCCH allocation attempts.
nof_failed_uci_allocsNumber of failed UCI allocation attempts.
latency_histogramScheduler decision latency histogram: each bucket counts the number of scheduling decisions that took a latency within a specific range. Each bucket range is 50 microseconds, starting from 0 microseconds up to 500 microseconds.
msg3_nof_ok, msg3_nof_nokNumber of MSG3s correctly received/decoded (CRC=OK) / not correctly received/decoded (CRC=KO).
avg_prach_delayAverage PRACH delay in slots: it measures the time between the slot when the PRACH is received by PHY layer and the slot when the PRACH indication reach the scheduler. Value is null if no PRACH was received during the measurement period.
late_dl_harqsNumber of failed PDSCH allocations due to late HARQs.
late_ul_harqsNumber of failed PUSCH allocations due to late HARQs.
pucch_tot_rb_usage_avgAverage number of RBs per UL slot used for PUCCH grants.
pusch_prbs_used_per_tdd_slot_idxSum of the number of RBs per slot used for PUSCH grants. Each entry in the array corresponds to a TDD slot index.
pdsch_prbs_used_per_tdd_slot_idxSum of the number of RBs per slot used for PDSCH grants. Each entry in the array corresponds to a TDD slot index.
ue_listList of UE metrics reported in this cell metric report. Refer to Scheduler UE metrics for details.

Cell events

MetricDescription
event_typePossible events are: ue_create for UE creation, ue_reconf for UE reconfiguration, ue_rem for UE removal.
rntiRNTI of the UE for which the event occured.
slotSlot at which the creation/reconfiguration/removal procedure was completed in the scheduler.

Scheduler UE metrics

MetricDescription
ueUE index in the DU for this UE.
pciPhysical cell id.
rntiCurrently used C-RNTI for this UE.
cqiMean Channel Quality Indicator.
dl_riMean Downlink Rank Indicator.
ul_riMean Uplink Rank Indicator.
dl_mcsAverage MCS index used for DL grants.
dl_brateExperienced MAC DL bit rate in kbps, considering the size of the allocated MAC DL PDUs for which a positive HARQ-ACK was received.
dl_nof_okNumber of positive DL HARQ-ACKs received.
dl_nof_nokNumber of detected DL HARQ NACKs or DL HARQ-ACK misdetections.
dl_bsSum of the last DL buffer occupancy reports of all logical channels.
pusch_snr_dbSNR in dB estimated for the PUSCH.
pusch_rsrp_dbRSRP in dB estimated for the PUSCH.
pucch_snr_dbSNR in dB estimated for the PUCCH.
ta_nsAverage Timing Advance in nanoseconds: it includes the TA offset for all UL grants.
pusch_ta_nsAverage Timing advance in nanoseconds: it includes the TA offset for PUSCH grants only.
pucch_ta_nsAverage Timing advance in nanoseconds: it includes the TA offset for PUCCH grants only.
srs_ta_nsAverage Timing advance in nanoseconds: it includes the TA offset for SRS grants only.
ul_mcsAverage MCS index used for UL grants.
ul_brateExperienced MAC UL bit rate in kbps, considering the size of the allocated MAC UL PDUs for which the respective CRC was decoded.
ul_nof_okNumber of PUSCH grants positively decoded (CRC=OK).
ul_nof_nokNumber of PUSCH grants that could not be decoded (CRC=KO).
last_phrLast PHR value reported.
max_pusch_distanceMaximum interval in slots between 2 consecutive PUSCH allocated to this UE.
max_pdsch_distanceMaximum interval in slots between 2 consecutive PDSCH allocated to this UE.
bsrSum of the last UL buffer status reports (BSRs) of all logical channel groups.
nof_pucch_f0f1_invalid_harqsNumber of invalid UCI carrying HARQ-ACK bits detected on PUCCH format 0 and 1.
nof_pucch_f2f3f4_invalid_harqsNumber of invalid UCI carrying HARQ-ACK bits detected on PUCCH format 2, 3 and 4.
nof_pucch_f2f3f4_invalid_csisNumber of invalid UCI carrying bits CSIs detected on PUCCH format 2, 3 and 4.
nof_pusch_invalid_harqsNumber of invalid UCI carrying HARQ-ACK bits detected on PUSCH.
nof_pusch_invalid_csisNumber of invalid UCI carrying CSI bits detected on PUSCH.
avg_ce_delay, max_ce_delayAverage/Maximum MAC CE decoding delay in ms: it measures the time between the slot when the MAC PDU carrying the MAC CE is received and the slot when the MAC CE processing is completed.
avg_crc_delay, max_crc_delayAverage/Maximum CRC decoding delay in ms: it measures the time between the slot when the MAC PDU carrying the PUSCH is received and the slot when the PUSCH processing is completed.
avg_pusch_harq_delay, max_pusch_harq_delayAverage/Maximum PUSCH HARQ delay in ms: it measures the time between the slot when the PUSCH is received and the slot when the UCI carrying HARQ-ACK bits for that PUSCH decoding is completed.
avg_pucch_harq_delay, max_pucch_harq_delayAverage/Maximum PUCCH HARQ delay in ms: it measures the time between the slot when the PUCCH is received and the slot when the UCI carrying HARQ-ACK bits for that PUCCH decoding is completed.
avg_sr_to_pusch_delay, max_sr_to_pusch_delayAverage/Maximum SR to PUSCH delay in ms: it measures the time between the slot when the SR is received and the slot when the first PUSCH (following the SR) is allocated for this UE.

OFH metrics

The structured OFH metrics are shown below:

{
"timestamp": "2025-11-04T15:51:26.845",
"ru": {
"ofh": {
"timing_stats": {
"nof_skipped_symbols": 0,
"skipped_symbols_max_burst": 0
},
"cells": [
{
"pci": 0,
"ul": {
"received_packets": {
"total": 0,
"early": 0,
"on_time": 0,
"late": 0,
"earliest_msg_us": 0.0,
"latest_msg_us": 0.0
},
"ethernet_receiver": {
"average_throughput_mbps": 0.0,
"average_latency_us": 0.0,
"max_latency_us": 0.0,
"cpu_usage_percent": 0.0
},
"message_decoder": {
"prach": {
"nof_dropped_messages": 0,
"average_latency_us": 0.0,
"max_latency_us": 0.0,
"cpu_usage_percent": 0.0
},
"data": {
"nof_dropped_messages": 0,
"average_latency_us": 0.0,
"max_latency_us": 0.0,
"cpu_usage_percent": 0.0
},
"ecpri": {
"nof_future_seqid_messages": 0,
"nof_past_seqid_messages": 0
}
},
"rx_window_stats": {
"nof_missed_uplink_symbols": 0,
"nof_missed_prach_occasions": 0
}
},
"dl": {
"ethernet_transmitter": {
"average_throughput_mbps": 0.0,
"average_latency_us": 0.0,
"max_latency_us": 0.0,
"cpu_usage_percent": 0.0
},
"message_encoder": {
"dl_cp": {
"average_latency_us": 0,
"max_latency_us": 0,
"cpu_usage_percent": 0
},
"ul_cp": {
"average_latency_us": 0,
"max_latency_us": 0,
"cpu_usage_percent": 0
},
"dl_up": {
"average_latency_us": 0,
"max_latency_us": 0,
"cpu_usage_percent": 0
},
},
"message_transmitter": {
"average_latency_us": 0,
"max_latency_us": 0,
"cpu_usage_percent": 0
},
"transmitter_stats": {
"late_dl_slots": 0,
"late_ul_slot_requests": 0,
"late_cp_dl_messages": 0,
"late_up_dl_messages": 0,
"late_cp_ul_messages": 0
}
}
}
]
}
}
}

The OFH metrics are structured into the following sections:

  • timing_stats representing the timing statistics.
  • cells representing a list of cells metrics.

The timing_stats metrics are shown in the following table:

OFH timing_stats metricsDescription
nof_skipped_symbolsNumber of symbols skipped when the timing worker wakes up late.
skipped_symbols_max_burstMaximum number of skipped symbols in a burst.

A cell is composed of three elements as it is shown in the following table:

OFH cells metricsDescription
pciPhysical Cell Identifier (described in 3GPP TS 38.331). Supported [0 - 1007].
ulObject holding the Uplink metrics for the given cell.
dlObject holding the Downlink metrics for the given cell.

The Uplink metrics are structured in the following sections:

  • received_packets
  • ethernet_receiver
  • message_decoder
  • rx_window_stats

The Received packets metrics for Uplink are described in the following table:

OFH Uplink cells received packets metricsDescription
totalTotal number of received packets.
earlyNumber of OFH packets received early.
on_timeNumber of OFH packets received on time.
lateNumber of OFH packets received late.
earliest_msg_usEarliest received packet in microseconds.
latest_msg_usLatest received packet in microseconds.

The Ethernet receiver metrics for Uplink is described in the following table:

OFH cell Ethernet receiver metricsDescription
average_throughput_mbpsAverage received throughput during metrics period represented in megabits per second.
average_latency_usAverage latency of packet reception in microseconds.
max_latency_usMaximum latency of packet reception in microseconds.
cpu_usage_percentCPU usage in percentage of the Ethernet receiver.

The Uplink message decoder metrics are structured in the following sections:

  • prach
  • data
  • ecpri

The PRACH metrics for Uplink message decoder are described in the following table:

OFH cell PRACH messages decoder metricsDescription
nof_dropped_messagesNumber of dropped PRACH messages.
average_latency_usAverage latency of PRACH message decoding.
max_latency_usMaximum latency of PRACH message decoding.
cpu_usage_percentCPU usage in percentage of PRACH messages decoding.

The Data metrics for Uplink message decoder are described in the following table:

OFH cell Data messages decoder metricsDescription
nof_dropped_messagesNumber of dropped Data messages.
average_latency_usAverage decoding latency of the received Data messages.
max_latency_usMaximum decoding latency of the received Data messages.
cpu_usage_percentCPU usage in percentage of the Data flow.

The eCPRI metrics for Uplink message decoder are described in the following table:

OFH Uplink cells message decoder eCPRI metricsDescription
nof_future_seqid_messagesNumber of skipped messages by the eCPRI.
nof_past_seqid_messagesNumber of dropped messages by the eCPRI.

The Receiver window statistics metrics for Uplink are described in the following table:

OFH Uplink cells Receiver window statistics metricsDescription
nof_missed_uplink_symbolsNumber of requested uplink symbols that were not fully received within the expected reception window.
nof_missed_prach_occasionsNumber of PRACHs that were not fully received within the expected reception window.

The Downlink metrics are structured in the following sections:

  • ethernet_transmitter
  • message_encoder
  • message_transmitter
  • transmitter_stats

The Ethernet transmitter metrics for Downlink are described in the following table:

OFH cell Ethernet transmitter metricsDescription
average_throughput_mbpsAverage transmitted throughput during metrics period represented in megabits per second.
average_latency_usAverage latency of packet transmission in microseconds.
max_latency_usMaximum latency of packet transmission in microseconds.
cpu_usage_percentCPU usage in percentage of the Ethernet transmitter.

The Downlink message encoder metrics are structured in the following sections:

  • dl_cp
  • ul_cp
  • dl_up

The message encoder Downlink Control-Plane metrics are described in the following table:

OFH cell Downlink Control-Plane messages encoder metricsDescription
average_latency_usAverage latency of the Downlink Control-Plane processing in microseconds.
max_latency_usMaximum latency of the Downlink Control-Plane processing in microseconds.
cpu_usage_percentCPU usage in percentage of the Downlink Control-Plane processing.

The message encoder Uplink Control-Plane metrics are described in the following table:

OFH cell Uplink Control-Plane messages encoder metricsDescription
average_latency_usAverage latency of the Uplink Control-Plane processing in microseconds.
max_latency_usMaximum latency of the Uplink Control-Plane processing in microseconds.
cpu_usage_percentCPU usage in percentage of the Uplink Control-Plane processing.

The Message encoder Downlink User-Plane metrics are described in the following table:

OFH cell Downlink User-Plane messages encoder metricsDescription
average_latency_usAverage latency of the Downlink User-Plane processing in microseconds.
max_latency_usMaximum latency of the Downlink User-Plane processing in microseconds.
cpu_usage_percentCPU usage in percentage of the Downlink User-Plane processing.

The Message transmitter metrics for Downlink are described in the following table:

OFH cell messages transmitter metricsDescription
average_latency_usAverage latency of messages processing (including Ethernet transmission) performed at each symbol boundary.
max_latency_usMaximum latency of messages processing (including Ethernet transmission) performed at each symbol boundary.
cpu_usage_percentCPU usage in percentage of the messages transmitter.

The Transmitter statistics for Downlink is described in the following table:

OFH Downlink cells transmitter statistics metricsDescription
late_dl_slotsNumber of late downlink resource grids received from the PHY.
late_ul_slot_requestsNumber of late uplink request.
late_cp_dl_messagesNumber of late Control-Plane downlink messages, i.e., messages that were not transmitted.
late_up_dl_messagesNumber of late User-Plane downlink messages, i.e., messages that were not transmitted.
late_cp_ul_messagesNumber of late Control-Plane uplink messages, i.e., messages that were not transmitted.

NGAP metrics

The NGAP metrics are encapsulated in the CU-CP metric object, which contains the following keys:

  • cu-cp: Includes the CU-CP ID under the id key, NGAP metrics under the ngaps key, and RRC metrics under the rrcs key.
  • timestamp: Date and time at which the metrics were generated.

and is structured as shown below.

{
"cu-cp": {
"id": "srs-cu-cp",
"ngaps": {
"ngap": [ # List of NGAP instances for connected AMFs.
...
],
"nof_handover_preparations_requested": 0,
"nof_successful_handover_preparations": 0
},
"rrcs": {
"du": [ # List of RRC instances for connected DUs.
...
],
"nof_handover_executions_requested": 0,
"nof_successful_handover_executions": 0
}
},
"timestamp": "2025-11-04T15:51:26.845"
}

The NGAP metrics are structured as shown below.

{
"ngaps": {
"ngap": [
{
"amf_name": "open5gs-amf0",
"connected": true,
"paging_measurement": {
"nof_cn_initiated_paging_requests": 0
},
"pdu_session_management": {
"nof_pdu_sessions_failed_to_setup": {
"misc-ctrl_processing_overload": 0,
"misc-hardware_fail": 0,
"misc-not_enough_user_plane_processing_res": 0,
"misc-om_intervention": 0,
"misc-unknown_plmn_or_sn_pn": 0,
"nas-authentication_fail": 0,
"nas-deregister": 0,
"nas-normal_release": 0,
"nas-unspecified": 0,
"protocol-abstract_syntax_error_falsely_constructed_msg": 0,
"protocol-abstract_syntax_error_ignore_and_notify": 0,
"protocol-abstract_syntax_error_reject": 0,
"protocol-msg_not_compatible_with_receiver_state": 0,
"protocol-semantic_error": 0,
"protocol-transfer_syntax_error": 0,
"protocol-unspecified": 0,
"radio_network-cag_only_access_denied": 0,
"radio_network-cell_not_available": 0,
"radio_network-encryption_and_or_integrity_protection_algorithms_not_supported": 0,
"radio_network-fail_in_radio_interface_proc": 0,
"radio_network-ho_cancelled": 0,
"radio_network-ho_desirable_for_radio_reason": 0,
"radio_network-ho_fail_in_target_5_gc_ngran_node_or_target_sys": 0,
"radio_network-ho_target_not_allowed": 0,
"radio_network-ims_voice_eps_fallback_or_rat_fallback_triggered": 0,
"radio_network-inconsistent_remote_ue_ngap_id": 0,
"radio_network-inconsistent_slice_info_for_the_session": 0,
"radio_network-indicated_mbs_session_area_info_not_served_by_the_gnb": 0,
"radio_network-insufficient_ue_cap": 0,
"radio_network-interaction_with_other_proc": 0,
"radio_network-invalid_qos_combination": 0,
"radio_network-misaligned_assoc_for_multicast_unicast": 0,
"radio_network-multiple_location_report_ref_id_instances": 0,
"radio_network-multiple_pdu_session_id_instances": 0,
"radio_network-multiple_qos_flow_id_instances": 0,
"radio_network-n26_interface_not_available": 0,
"radio_network-ng_inter_sys_ho_triggered": 0,
"radio_network-ng_intra_sys_ho_triggered": 0,
"radio_network-no_radio_res_available_in_target_cell": 0,
"radio_network-not_supported_5qi_value": 0,
"radio_network-npn_access_denied": 0,
"radio_network-partial_ho": 0,
"radio_network-radio_conn_with_ue_lost": 0,
"radio_network-radio_res_not_available": 0,
"radio_network-redcap_ue_not_supported": 0,
"radio_network-redirection": 0,
"radio_network-reduce_load_in_serving_cell": 0,
"radio_network-release_due_to_5gc_generated_reason": 0,
"radio_network-release_due_to_cn_detected_mob": 0,
"radio_network-release_due_to_ngran_generated_reason": 0,
"radio_network-release_due_to_pre_emption": 0,
"radio_network-res_not_available_for_the_slice": 0,
"radio_network-res_optim_ho": 0,
"radio_network-rsn_not_available_for_the_up": 0,
"radio_network-slice_not_supported": 0,
"radio_network-successful_ho": 0,
"radio_network-time_crit_ho": 0,
"radio_network-tngrelocoverall_expiry": 0,
"radio_network-tngrelocprep_expiry": 0,
"radio_network-txnrelocoverall_expiry": 0,
"radio_network-ue_context_transfer": 0,
"radio_network-ue_in_rrc_inactive_state_not_reachable": 0,
"radio_network-ue_max_integrity_protected_data_rate_reason": 0,
"radio_network-unknown_local_ue_ngap_id": 0,
"radio_network-unknown_mbs_session_id": 0,
"radio_network-unknown_pdu_session_id": 0,
"radio_network-unknown_target_id": 0,
"radio_network-unkown_qos_flow_id": 0,
"radio_network-unspecified": 0,
"radio_network-up_confidentiality_protection_not_possible": 0,
"radio_network-up_integrity_protection_not_possible": 0,
"radio_network-user_inactivity": 0,
"radio_network-xn_ho_triggered": 0,
"transport-transport_res_unavailable": 0,
"transport-unspecified": 0
},
"nof_pdu_sessions_requested_to_setup": 1,
"nof_pdu_sessions_successfully_setup": 1,
"s-nssai": "(sst=1 sd=na)"
},
"supported_plmns": "[ 00101, 99902, ]"
}
],
"nof_handover_preparations_requested": 0,
"nof_successful_handover_preparations": 0
}
}

The table below describes the NGAP metrics reported in the CU-CP metrics JSON output, under the ngaps key.

NGAP metricsDescription
ngapA list of NGAP instances for connected AMFs.
nof_handover_preparations_requestedNumber of handover preparations requested, see TS 128.552 section 5.1.3.7.1.1.
nof_successful_handover_preparationsNumber of successful handover preparations, see TS 128.552 section 5.1.3.7.1.2.

The ngap list contains one object per connected AMF, structured as shown below.

NGAP metricsDescription
amf_nameName of the related AMF.
connectedAMF connection status.
paging_measurementContains number of CN initiated paging requests, see TS 128.552 section 5.1.1.27.1.
pdu_session_managementContains:
: * number of PDU sessions requested to setup, see TS 128.552 section 5.1.1.5.1
* number of PDU sessions successfully setup, see TS 128.552 section 5.1.1.5.2
* number of PDU Sessions failed to setup, see TS 128.552 section 5.1.1.5.3
* the S-NSSAI associated with the PDU sessions.
supported_plmnsContains a list of supported PLMNs for the AMF.

RRC metrics

The RRC metrics are encapsulated in the CU-CP metric object, which contains the following keys:

  • cu-cp: Includes the CU-CP ID under the id key, NGAP metrics under the ngaps key, and RRC metrics under the rrcs key.
  • timestamp: Date and time at which the metrics were generated.

and is structured as shown below.

{
"cu-cp": {
"id": "srs-cu-cp",
"ngaps": {
"ngap": [ # List of NGAP instances for connected AMFs.
...
],
"nof_handover_preparations_requested": 0,
"nof_successful_handover_preparations": 0
},
"rrcs": {
"du": [ # List of RRC instances for connected DUs.
...
],
"nof_handover_executions_requested": 0,
"nof_successful_handover_executions": 0
}
},
"timestamp": "2025-11-04T15:51:26.845"
}

The RRC metrics are structured as shown below.

{
"rrcs": {
"du": [
{
"gnb_du_id": 0,
"rrc_connection_establishment": {
"attempted_rrc_connection_establishments": {
"emergency": 0,
"high_prio_access": 0,
"mcs_prio_access": 0,
"mo_data": 0,
"mo_sig": 1,
"mo_sms": 0,
"mo_video_call": 0,
"mo_voice_call": 0,
"mps_prio_access": 0,
"mt_access": 0
},
"successful_rrc_connection_establishments": {
"emergency": 0,
"high_prio_access": 0,
"mcs_prio_access": 0,
"mo_data": 0,
"mo_sig": 1,
"mo_sms": 0,
"mo_video_call": 0,
"mo_voice_call": 0,
"mps_prio_access": 0,
"mt_access": 0
}
},
"rrc_connection_number": {
"max_nof_rrc_connections": 1,
"mean_nof_rrc_connections": 1
},
"rrc_connection_reestablishment": {
"attempted_rrc_connection_reestablishments": 0,
"successful_rrc_connection_reestablishments_with_ue_context": 0,
"successful_rrc_connection_reestablishments_without_ue_context": 0
}
}
],
"nof_handover_executions_requested": 0,
"nof_successful_handover_executions": 0
}
}

The table below describes the RRC metrics reported in the CU-CP metrics JSON output, under the rrcs key.

RRC metricsDescription
duA list of RRC instances for connected DUs.
nof_handover_executions_requestedNumber of handover executions requested, see TS 128.552 section 5.1.1.6.2.1.
nof_successful_handover_executionsNumber of successful handover executions, see TS 128.552 section 5.1.1.6.2.2.

The du list contains one object per connected DU, structured as shown below.

RRC metricsDescription
gnb_du_idID of the related DU.
rrc_connection_establishmentRRC connection establisment metrics, containing:
: * number of attempted RRC connection establishments, see TS 128.552 section 5.1.1.15.1.
* number of successful RRC connection establishments, see TS 128.552 section 5.1.1.15.2.
rrc_connection_numberContains RRC connections statistics, containing:
: * mean number of RRC Connections, see TS 128.552 section 5.1.1.4.1.
* max number of RRC Connections, see TS 128.552 section 5.1.1.4.2.
rrc_connection_reestablishmentRRC connection reestablisment metrics, containing:
: * number of RRC connection re-establishment attempts, see TS 128.552 section 5.1.1.17.1.
* number of successful RRC connection reestablishment with UE context, see TS 128.552 section 5.1.1.17.2.
* number of successful RRC connection reestablishment without UE context, see TS 128.552 section 5.1.1.17.3.

Executors metrics

The structured Executors metrics are shown below:

{
"timestamp": "2025-11-04T15:51:26.845",
"executor_metrics": {
"name": "",
"nof_executes": 0,
"nof_defers": 0,
"enqueue_avg": 0,
"enqueue_max": 0,
"task_avg": 0,
"task_max": 0,
"cpu_load": 0,
"nof_vol_ctxt_switch": 0,
"nof_invol_ctxt_switch": 0.0
}
}

The table below describes the Executors metrics.

Executors metricsDescription
nameExecutor name.
nof_executesNumber of times executor ran a task.
nof_defersNumber of times a task execution was deferred.
enqueue_avgAverage task enqueueing latency in microseconds.
enqueue_maxMaximum task enqueueing latency in microseconds.
task_avgAverage task duration in microseconds.
task_maxMaximum task duration in microseconds.
cpu_loadAverage CPU usage percentage of the executor.
nof_vol_ctxt_switchNumber of voluntary context switches during the report period.
nof_invol_ctxt_switchNumber of involuntary context switches during the report period.

Application resource usage metrics

The structured Application resource usage metrics are shown below:

{
"timestamp": "2025-11-04T15:51:26.845",
"app_resource_usage": {
"cpu_usage_percent": 0,
"memory_usage_mb": 0,
"power_consumption_watts": 0
}
}

The table below describes the Application resource usage metrics.

Application resource usage metricsDescription
cpu_usage_percentCPU usage of the application as a percentage. It can exceed 100% indicating how many CPU cores are utilized.
memory_usage_mbMemory consumption of the application in Megabytes.
power_consumption_wattsCPU package power consumption in Watts measured while running the application.