Referência de Configuração do OmniCHF
A configuração do operador é lida da chave do ambiente da aplicação :omnichf, preenchida na inicialização pelo config/runtime.exs. Cada chave pode ser substituída por uma variável de ambiente do sistema operacional. O exemplo abaixo mostra a configuração completa de tempo de execução com os valores aplicados quando a variável de ambiente correspondente não está definida.
config :omnichf,
# Ouvidor SBI (interface baseada em serviço)
sbi_scheme: "http",
sbi_addr: "127.0.0.14",
sbi_port: 7777,
# Registro / heartbeat do NRF
nrf_uri: "http://127.0.0.1:7777",
# Identidade do PLMN em serviço
mcc: "999",
mnc: "70",
# Observabilidade
prometheus_metrics_port: 9568,
# Cadência do heartbeat do NRF
heartbeat_interval: 10_000,
# Integração do CGRateS para avaliação / saldo
cgrates_enabled: true,
cgrates_url: "http://localhost:2080/jsonrpc",
cgrates_tenant: "cgrates.org",
cgrates_timeout: 5000
# Registro estruturado em JSON
config :logger, :default_formatter,
format: {OmniLogger.JsonFormatter, :format},
metadata: :all
Parâmetros Principais
| Parâmetro | Tipo | Necessário | Padrão | Var de Ambiente | Descrição |
|---|---|---|---|---|---|
sbi_scheme | String | Não | "http" | SBI_SCHEME | Esquema de transporte para o ouvidor SBI (http ou https). |
sbi_addr | String | Não | "127.0.0.14" | SBI_ADDR | Endereço IP ao qual o servidor HTTP SBI está vinculado, e o endereço anunciado no perfil NF registrado com o NRF. |
sbi_port | Inteiro | Não | 7777 | SBI_PORT | Porta TCP na qual o servidor HTTP SBI escuta e anuncia ao NRF. |
nrf_uri | String | Não | "http://127.0.0.1:7777" | NRF_URI | URI base do NRF, usada para registro de NF e heartbeat. |
mcc | String | Não | "999" | MCC | Código do País Móvel do PLMN em serviço. Usado no perfil NF e no nome da rede em serviço. |
mnc | String | Não | "70" | MNC | Código da Rede Móvel do PLMN em serviço. Usado no perfil NF e no nome da rede em serviço. |
prometheus_metrics_port | Inteiro | Não | 9568 | PROMETHEUS_PORT | Porta TCP na qual o endpoint de métricas do Prometheus é exposto. Veja Referência de Métricas. |
heartbeat_interval | Inteiro (ms) | Não | 10000 | HEARTBEAT_INTERVAL | Intervalo em milissegundos entre as requisições de heartbeat do NRF. |
Parâmetros do CGRateS
Essas chaves controlam a integração com o motor de avaliação e saldo externo CGRateS. Veja Integração do CGRateS para detalhes comportamentais.
| Parâmetro | Tipo | Necessário | Padrão | Var de Ambiente | Descrição |
|---|---|---|---|---|---|
cgrates_enabled | Booleano | Não | true ("true") | CGRATES_ENABLED | Interruptor mestre para a integração do CGRateS. Quando true, todas as operações de cobrança chamam a API SessionS do CGRateS para autorização de crédito real. Quando false, o OmniCHF opera em modo de bypass e concede um valor padrão fixo (veja abaixo). Definido via a string "true" / qualquer outra coisa. |
cgrates_url | String | Não | "http://localhost:2080/jsonrpc" | CGRATES_URL | URL do endpoint JSON-RPC da instância do CGRateS. Usado apenas quando cgrates_enabled é true. |
cgrates_tenant | String | Não | "cgrates.org" | CGRATES_TENANT | Nome do inquilino do CGRateS. Enviado como o campo Tenant em cada chamada SessionS. Deve corresponder ao inquilino configurado no CGRateS. |
cgrates_timeout | Inteiro (ms) | Não | 5000 | CGRATES_TIMEOUT | Tempo limite de recebimento em milissegundos para chamadas JSON-RPC do CGRateS. A verificação de saúde da conectividade limita isso a 3000 ms para evitar bloqueios. |
Padrão quando desativado na hora da construção: o padrão compilado (usado se o ambiente da aplicação nunca for preenchido por
runtime.exs) écgrates_enabled: false. Em uma implantação normal,runtime.exso define, e lá o padrão étrue. O perfil de teste forçacgrates_enabled: false.
Chaves Avançadas / Opcionais
Essas chaves não são preenchidas pelo runtime.exs padrão, mas são lidas do ambiente :omnichf se estiverem presentes. Elas ajustam a resolução do grupo de avaliação, cobrança offline e geração de ID de cobrança. Elas não têm variável de ambiente dedicada e são definidas diretamente no bloco de configuração :omnichf.
| Parâmetro | Tipo | Necessário | Padrão | Var de Ambiente | Descrição |
|---|---|---|---|---|---|
rating_groups | Mapa | Não | %{} | Nenhuma | Mapa de DNN → grupo de avaliação. Quando o DNN de uma sessão corresponde a uma chave, esse grupo de avaliação é usado em multipleUnitInformation e no CDR. |
default_rating_group | Inteiro | Não | 1 | Nenhuma | Grupo de avaliação usado quando o DNN não é encontrado em rating_groups. |
offline_charging_enabled | Booleano | Não | false | Nenhuma | Quando true, o CDR de cada sessão liberada é anexado a um arquivo de cobrança offline por dia, além de ser registrado. |
cdr_output_dir | String | Não | "/var/log/omnichf/cdr" | Nenhuma | Diretório para arquivos CDR offline (cdr_YYYYMMDD.json, um CDR JSON por linha). Aplica-se apenas quando offline_charging_enabled é true. |
node_id | Inteiro | Não | 1 | Nenhuma | Identificador do nó (byte alto) usado para compor o chargingId de 32 bits do 3GPP por cláusula 5.2.1.6 do TS 32.251. Dê a cada instância do CHF um valor único para manter os IDs de cobrança únicos em um cluster. |
Grupos de Avaliação
rating_groups mapeia um DNN (a chave do mapa, uma string) para o grupo de avaliação (o valor, um inteiro) aplicado às sessões desse DNN. O grupo de avaliação resolvido aparece no campo ratingGroup de multipleUnitInformation retornado ao consumidor e no campo rating_group do CDR. A resolução é:
- Se o DNN da sessão for uma chave em
rating_groups, use esse valor. - Caso contrário, use
default_rating_group.
config :omnichf,
rating_groups: %{
"internet" => 10,
"ims" => 20,
"iot" => 30
},
default_rating_group: 1
A correspondência é feita na string DNN exata. Um DNN sem entrada (e sem default_rating_group) recai para o grupo de avaliação 1. Um valor rating_groups malformado (não um mapa) é ignorado e o padrão é usado, portanto, uma configuração ruim nunca bloqueia a cobrança.
Registro
O registro estruturado em JSON é configurado via o :logger :default_formatter.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
format | Tupla | {OmniLogger.JsonFormatter, :format} | Formatador de linha de log. Emite JSON estruturado, adequado para ingestão por um transportador de logs. |
metadata | Átomo / Lista | :all | Metadados de log incluídos em cada linha. :all emite todos os metadados anexados (SUPI, DNN, ID da sessão PDU, ID de cobrança, procedimento, etc.). |
Interfaces de Gerenciamento
O OmniCHF expõe superfícies de gerenciamento voltadas para o operador ao lado do SBI. Essas portas são relevantes para monitoramento e OAM, mas não fazem parte do serviço Nchf:
| Interface | Porta | Esquema | Propósito |
|---|---|---|---|
| SBI (Nchf) | sbi_port (padrão 7777) | HTTP | Tráfego de cobrança inter-NF 5G. |
| Métricas do Prometheus | prometheus_metrics_port (padrão 9568) | HTTP | Endpoint de coleta de métricas. |
| API de Gerenciamento | 8443 | HTTPS | Leituras de status, leituras de sessão/estatísticas/saúde do CGRateS, busca de CDR e ações de OAM (configuração, descarte de CDR, nível de log, aborto de sessão, re-registro do NRF). |
| Painel de Controle | 7443 | HTTPS | UI web para recursos, configuração, licença e logs. |
Endpoints da API de Gerenciamento / OAM
A API de Gerenciamento na porta 8443 (HTTPS) expõe as seguintes superfícies para o operador:
| Método | Caminho | Propósito |
|---|---|---|
GET | /api/status/api | Ler status da API/serviço. |
GET | /api/status/license | Ler status da licença. |
GET | /api/status/nrf | Ler status de registro do NRF. |
GET | /api/status/nf | Ler status do NF (nó). |
GET | /api/sessions | Listar sessões de cobrança ativas. |
GET | /api/sessions/{id} | Inspecionar uma única sessão de cobrança pelo charging_data_ref. |
GET | /api/statistics | Ler estatísticas de cobrança (contagem de sessões ativas, volume total cobrado, acessibilidade do CGRateS). |
GET | /api/health/cgrates | Ler saúde da conectividade do CGRateS. |
GET | /api/oam/config | Ler configuração de tempo de execução. |
PATCH | /api/oam/config/{id} | Atualizar uma chave de configuração de tempo de execução. |
POST | /api/oam/charging_session | Abortar uma sessão de cobrança pelo charging_data_ref. |
GET | /api/oam/cdr | Buscar CDRs concluídos. Parâmetros de consulta: supi, dnn, date_from, date_to (todos opcionais). |
POST | /api/oam/cdr/flush | Forçar o descarte do uso acumulado como um CDR para uma sessão ({"charging_data_ref": "<ref>"}) ou todas as sessões rastreadas ({} / "all"). |
POST | /api/oam/log_level | Alterar o nível de log em tempo de execução. |
POST | /api/oam/nrf/reregister | Acionar re-registro do NRF. |
Visibilidade do armazenamento de sessões: as superfícies de gerenciamento voltadas para sessões (
/api/sessions,/api/statistics,/api/oam/charging_session,/api/oam/cdr/flush) apresentam cada sessão ativa. O caminho de cobrança SBI ativo mantém cada sessão em um processo worker por sessão, e cada sessão de worker é espelhada no Context store em memória na criação e atualização e removida na parada. As superfícies de gerenciamento consultam primeiro o registro de workers e recuam para o Context, portanto, uma sessão ativa está sempre visível e acionável. Veja Armazenamento de Sessões e Visibilidade de Gerenciamento para o que isso significa operacionalmente. A busca de CDR (/api/oam/cdr) lê os arquivos CDR offline e é independente de ambos os armazenamentos.