Pular para o conteúdo principal

← Visão Geral

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âmetroTipoNecessárioPadrãoVar de AmbienteDescrição
sbi_schemeStringNão"http"SBI_SCHEMEEsquema de transporte para o ouvidor SBI (http ou https).
sbi_addrStringNão"127.0.0.14"SBI_ADDREndereço IP ao qual o servidor HTTP SBI está vinculado, e o endereço anunciado no perfil NF registrado com o NRF.
sbi_portInteiroNão7777SBI_PORTPorta TCP na qual o servidor HTTP SBI escuta e anuncia ao NRF.
nrf_uriStringNão"http://127.0.0.1:7777"NRF_URIURI base do NRF, usada para registro de NF e heartbeat.
mccStringNão"999"MCCCódigo do País Móvel do PLMN em serviço. Usado no perfil NF e no nome da rede em serviço.
mncStringNão"70"MNCCódigo da Rede Móvel do PLMN em serviço. Usado no perfil NF e no nome da rede em serviço.
prometheus_metrics_portInteiroNão9568PROMETHEUS_PORTPorta TCP na qual o endpoint de métricas do Prometheus é exposto. Veja Referência de Métricas.
heartbeat_intervalInteiro (ms)Não10000HEARTBEAT_INTERVALIntervalo 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âmetroTipoNecessárioPadrãoVar de AmbienteDescrição
cgrates_enabledBooleanoNãotrue ("true")CGRATES_ENABLEDInterruptor 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_urlStringNão"http://localhost:2080/jsonrpc"CGRATES_URLURL do endpoint JSON-RPC da instância do CGRateS. Usado apenas quando cgrates_enabled é true.
cgrates_tenantStringNão"cgrates.org"CGRATES_TENANTNome do inquilino do CGRateS. Enviado como o campo Tenant em cada chamada SessionS. Deve corresponder ao inquilino configurado no CGRateS.
cgrates_timeoutInteiro (ms)Não5000CGRATES_TIMEOUTTempo 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.exs o define, e lá o padrão é true. O perfil de teste força cgrates_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âmetroTipoNecessárioPadrãoVar de AmbienteDescrição
rating_groupsMapaNão%{}NenhumaMapa 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_groupInteiroNão1NenhumaGrupo de avaliação usado quando o DNN não é encontrado em rating_groups.
offline_charging_enabledBooleanoNãofalseNenhumaQuando 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_dirStringNão"/var/log/omnichf/cdr"NenhumaDiretório para arquivos CDR offline (cdr_YYYYMMDD.json, um CDR JSON por linha). Aplica-se apenas quando offline_charging_enabled é true.
node_idInteiroNão1NenhumaIdentificador 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 é:

  1. Se o DNN da sessão for uma chave em rating_groups, use esse valor.
  2. 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âmetroTipoPadrãoDescrição
formatTupla{OmniLogger.JsonFormatter, :format}Formatador de linha de log. Emite JSON estruturado, adequado para ingestão por um transportador de logs.
metadataÁtomo / Lista:allMetadados 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:

InterfacePortaEsquemaPropósito
SBI (Nchf)sbi_port (padrão 7777)HTTPTráfego de cobrança inter-NF 5G.
Métricas do Prometheusprometheus_metrics_port (padrão 9568)HTTPEndpoint de coleta de métricas.
API de Gerenciamento8443HTTPSLeituras 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 Controle7443HTTPSUI 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étodoCaminhoPropósito
GET/api/status/apiLer status da API/serviço.
GET/api/status/licenseLer status da licença.
GET/api/status/nrfLer status de registro do NRF.
GET/api/status/nfLer status do NF (nó).
GET/api/sessionsListar sessões de cobrança ativas.
GET/api/sessions/{id}Inspecionar uma única sessão de cobrança pelo charging_data_ref.
GET/api/statisticsLer estatísticas de cobrança (contagem de sessões ativas, volume total cobrado, acessibilidade do CGRateS).
GET/api/health/cgratesLer saúde da conectividade do CGRateS.
GET/api/oam/configLer 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_sessionAbortar uma sessão de cobrança pelo charging_data_ref.
GET/api/oam/cdrBuscar CDRs concluídos. Parâmetros de consulta: supi, dnn, date_from, date_to (todos opcionais).
POST/api/oam/cdr/flushForç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_levelAlterar o nível de log em tempo de execução.
POST/api/oam/nrf/reregisterAcionar 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.