本記事は、Open5GSとUERANSIMを使用して、C-PlaneのNF(AMF,SMF)のメトリックをPrometheusでモニタリングする場合の簡単な設定について説明します。これにより、5G通信におけるAMFセッション数やアクティブなGTPv1 PDUコンテキスト等の稼働状況をモニタリングすることができます。
なお、5GCのコア網に登場する各NF(Network Function)の役割やインターフェースについて概ね知っていることを期待して書いており、これらの説明は省略します。
目次
- Open5GS 5GCのシミュレーション携帯網の概要
- Open5GS 5GC C-Planeの設定ファイルの追加の変更点
- Prometheusを有効にしたOpen5GSのビルド
- Prometheusを実行
- Grafanaを実行
- 最後に
- 主な変更履歴
Open5GS 5GCのシミュレーション携帯網の概要
これは、以下の構成例にPrometheusによるNFのメトリックのモニタリングを適用した際の追加の設定例です。
以下に構成を示します。なお、メトリックに関係しないNFについては、図から省略しています。
5GCとUE/RANに使用しているOSSは以下の通りです。PrometheusとGrafana(可視化サーバ)には、Dockerを使用しています。
- 5GC - Open5GS v2.4.9 - https://github.com/open5gs/open5gs
- UE / RAN - UERANSIM v3.2.6 - https://github.com/aligungr/UERANSIM
モニタリングしているNFのIPアドレスとポートは以下の通りです。
NF | IP address | port | Prometheus job_name |
---|---|---|---|
AMF | 192.168.0.111 | 9090/tcp | open5gs-amfd |
SMF1 | 192.168.0.112 | 9090/tcp | open5gs-smfd1 |
SMF2 | 192.168.0.113 | 9090/tcp | open5gs-smfd2 |
PrometheusとGrafana-OSSの公開しているIPアドレスとポートは以下の通りです。
Server | IP address | port |
---|---|---|
Prometheus | 192.168.0.111 | 9091/tcp |
Grafana-OSS | 192.168.0.111 | 3000/tcp |
Open5GS 5GC C-Planeの設定ファイルの追加の変更点
この場合、次の構成に対して、PrometheusによるNFのメトリックのモニタリング用に更なる変更を行います。
ここでは、追加で設定する内容について説明します。モニタリングに際して、C-Planeの各NFの以下の設定ファイルを編集します。
open5gs/install/etc/open5gs/amf.yaml
...
metrics:
addr: 192.168.0.111
port: 9090
open5gs/install/etc/open5gs/smf1.yaml
...
metrics:
addr: 192.168.0.112
port: 9090
open5gs/install/etc/open5gs/smf2.yaml
...
metrics:
addr: 192.168.0.113
port: 9090
Prometheusを有効にしたOpen5GSのビルド
Prometheusを有効にしたOpen5GSのビルド方法は以下を参照して下さい。
- https://open5gs.org/open5gs/docs/guide/02-building-open5gs-from-sources/
- https://open5gs.org/open5gs/docs/tutorial/04-metrics-prometheus/
追加で、cmake
をインストールします。
apt update
apt install cmake
DockerでPrometheusを実行するために、以下をインストールします。
ここで、Ubuntu 20.04でビルドする場合の注意点を少し説明します。
1. 以下の通り、ビルド手順を少し変更します。
cd open5gs
meson build --prefix=`pwd`/install
ninja -C build
上記を以下の通りに変更します。
cd open5gs
meson build --prefix=`pwd`/install && meson configure -Dmetrics_impl=prometheus build
ln -s `pwd`/subprojects/ `pwd`/../subprojects
ninja -C build
2. ビルドとインストールの後、共有ライブラリlibcm_prom.so
のリンクが以下のNFで見つからない場合、次の操作を行います。
open5gs-amfd
open5gs-smfd
libcm_prom.so
をリンクするために、次の操作を行います。
cd open5gs
cp -p install/lib/libcm_prom.so install/lib/x86_64-linux-gnu/
これでもリンクが見つからない場合、次の操作を行います。
cd open5gs
echo `pwd`/install/lib/x86_64-linux-gnu >> /etc/ld.so.conf.d/open5gs.conf
ldconfig
Prometheusを実行
Open5GSとPrometheusの連携は、以下を参照して下さい。
Prometheus DashboardへのWebアクセス
最初に、以下のprometheus.yml
を作成します。
global:
scrape_interval: 10s
scrape_configs:
- job_name: open5gs-amfd
static_configs:
- targets: ["192.168.0.111:9090"]
- job_name: open5gs-smfd1
static_configs:
- targets: ["192.168.0.112:9090"]
- job_name: open5gs-smfd2
static_configs:
- targets: ["192.168.0.113:9090"]
Open5GSを起動した後、以下の通りにPrometheusを実行します。
docker run -d -p 9091:9090 -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
これで、ブラウザから以下のURLにアクセスできるようになります。
http://192.168.0.111:9091/
モニタリング対象のNFの一覧は以下の通りです。
Open5GS AMFのメトリック
job_name=open5gs-amfdのEndpoint linkを辿ると、以下のメトリックが表示されます。
# HELP ran_ue RAN UEs
# TYPE ran_ue gauge
ran_ue 0
# HELP amf_session AMF Sessions
# TYPE amf_session gauge
amf_session 0
# HELP gnb gNodeBs
# TYPE gnb gauge
gnb 0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes -1
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total gauge
process_cpu_seconds_total 3
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 152248320
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 19255296
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 515230
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 24
Open5GS SMFのメトリック
job_name=open5gs-smfd1のEndpoint linkを辿ると、以下のメトリックが表示されます。
# HELP gn_rx_createpdpcontextreq Received GTPv1C CreatePDPContextRequest messages
# TYPE gn_rx_createpdpcontextreq counter
gn_rx_createpdpcontextreq 0
# HELP gn_rx_deletepdpcontextreq Received GTPv1C DeletePDPContextRequest messages
# TYPE gn_rx_deletepdpcontextreq counter
gn_rx_deletepdpcontextreq 0
# HELP gtp1_pdpctxs_active Active GTPv1 PDP Contexts (GGSN)
# TYPE gtp1_pdpctxs_active gauge
gtp1_pdpctxs_active 0
# HELP ues_active Active User Equipments
# TYPE ues_active gauge
ues_active 0
# HELP gtp2_sessions_active Active GTPv2 Sessions (PGW)
# TYPE gtp2_sessions_active gauge
gtp2_sessions_active 0
# HELP gtp_node_gn_rx_parse_failed Received GTPv1C messages discarded due to parsing failure
# TYPE gtp_node_gn_rx_parse_failed counter
# HELP s5c_rx_createsession Received GTPv2C CreateSessionRequest messages
# TYPE s5c_rx_createsession counter
s5c_rx_createsession 0
# HELP s5c_rx_deletesession Received GTPv2C DeleteSessionRequest messages
# TYPE s5c_rx_deletesession counter
s5c_rx_deletesession 0
# HELP gtp_new_node_failed Unable to allocate new GTP (peer) Node
# TYPE gtp_new_node_failed counter
gtp_new_node_failed 0
# HELP s5c_rx_parse_failed Received GTPv2C messages discarded due to parsing failure
# TYPE s5c_rx_parse_failed counter
s5c_rx_parse_failed 0
# HELP sessions_active Active Sessions
# TYPE sessions_active gauge
sessions_active 0
# HELP gtp_node_gn_rx_createpdpcontextreq Received GTPv1C CreatePDPContextRequest messages
# TYPE gtp_node_gn_rx_createpdpcontextreq counter
# HELP gtp_node_gn_rx_deletepdpcontextreq Received GTPv1C DeletePDPContextRequest messages
# TYPE gtp_node_gn_rx_deletepdpcontextreq counter
# HELP bearers_active Active Bearers
# TYPE bearers_active gauge
bearers_active 0
# HELP gn_rx_parse_failed Received GTPv1C messages discarded due to parsing failure
# TYPE gn_rx_parse_failed counter
gn_rx_parse_failed 0
# HELP gtp_node_s5c_rx_parse_failed Received GTPv2C messages discarded due to parsing failure
# TYPE gtp_node_s5c_rx_parse_failed counter
# HELP gtp_peers_active Active GTP peers
# TYPE gtp_peers_active gauge
gtp_peers_active 0
# HELP gtp_node_s5c_rx_createsession Received GTPv2C CreateSessionRequest messages
# TYPE gtp_node_s5c_rx_createsession counter
# HELP gtp_node_s5c_rx_deletesession Received GTPv2C DeleteSessionRequest messages
# TYPE gtp_node_s5c_rx_deletesession counter
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes -1
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total gauge
process_cpu_seconds_total 7
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 1169731584
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 45481984
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 515230
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 21
Grafanaを実行
ここでは、GrafanaのOSS版を使用します。
Grafana DashboardへのWebアクセス
Open5GSとPrometheusを起動後、以下の通りにGrafana-OSSを実行します。
docker run -d -p 3000:3000 grafana/grafana-oss
これで、ブラウザから以下のURLにアクセスできるようになります。なお、ログイン時のデフォルトのユーザ名とパスワードは共にadmin
です。
http://192.168.0.111:3000/
Grafanaで使用するPrometheus data source
data source name、URL、access modeは以下の通りです。
Name | URL | Access Mode |
---|---|---|
Open5GS | http://192.168.0.111:9091/ |
Server |
Grafanaでメトリックを可視化する設定例
最初にGrafana Dashboardを用意し、そこに可視化したいメトリックのパネルを作成します。以下のMetrics browser
で、三つのjob_namesから可視化したいjob_nameとメトリックを選択し、そのメトリック用のパネルのプロパティを設定してパネルを追加し、Dashboardを作成します。
以下は、AMFのメトリックamf_session
のパネルを設定する簡単な例です。
このように、Grafanaを用いてメトリック毎に魅力的なパネルを作成し、それらを組み合わせることで、使いやすいDashboardを自由にデザインできます。
最後に
一般に、システムには稼働状況をモニタリングする手段が用意されているものです。今回のOpen5GSはオープンソースの4G/5Gコアですが、最近になり、Prometheusでモニタリング可能なメトリックのフレームが入り、最初のメトリックが幾つか組み込まれました。今後、有益な稼働情報のメトリックが追加されていくと思います。
なお、今回紹介したNFは5GCのAMFとSMFですが、EPC(4G)のMMEにもメトリックが組み込まれました。
最後に、元記事はGithubに書いたものです。Open5GSのチュートリアルからもリンクして頂きました。
主な変更履歴
- [2022.09.13] 初版。