Pular para o conteúdo principal

← Visão Geral

Solução de Problemas do OmniCHF

400 Bad Request em qualquer solicitação de cobrança

Sintomas: O consumidor recebe 400 com a causa MANDATORY_IE_MISSING.

Possíveis causas:

  • O corpo da solicitação está faltando nfConsumerIdentification, invocationTimeStamp ou invocationSequenceNumber.

Resolução:

  1. Confirme que o consumidor inclui todos os três IEs obrigatórios em cada operação (Criar, Atualizar, Liberar).
  2. Verifique o campo detail da resposta ProblemDetails; ele lista os nomes dos IEs ausentes.

404 ao Atualizar ou Liberar

Sintomas: O consumidor recebe 404 com a causa CHARGING_DATA_NOT_FOUND.

Possíveis causas:

  • OmniCHF reiniciado entre Criar e a operação posterior; o estado da sessão é mantido na memória, então a sessão deve ser recriada após um reinício.
  • O chargingDataRef no caminho está errado.
  • A sessão já foi liberada (seu trabalhador parou).

Resolução:

  1. Grep logs para CHF Update: unknown ref= / CHF Release: unknown ref=.
  2. Confirme que o OmniCHF não reiniciou desde que a sessão foi criada.
  3. Confirme que o consumidor está retornando o chargingDataRef do cabeçalho Location da criação.

500 ao Criar com CGRateS habilitado

Sintomas: O consumidor recebe 500 com a causa CHARGING_FAILED.

Possíveis causas:

  • CGRateS InitiateSession falhou: motor inacessível, inquilino errado ou um erro do lado do CGRateS.

Resolução:

  1. Verifique se cgrates_url aponta para um endpoint /jsonrpc do CGRateS acessível.
  2. Verifique se cgrates_tenant corresponde ao inquilino do CGRateS.
  3. Verifique o medidor omni_chf_cgrates_health (1 = ativo).
  4. Revise os logs para CGRateS InitiateSession failed ...; a razão é uma das {:cgrates_error, msg}, {:http_error, status}, ou {:http_error, reason}.
  5. Confirme que o serviço SessionSv1 está habilitado no CGRateS.

Liberação retorna 500

Sintomas: O consumidor recebe 500 com a causa SYSTEM_FAILURE e título "Falha na Terminação de Cobrança" em POST /chargingdata/{ref}/release.

Possíveis causas:

  • O CGRateS TerminateSession falhou durante a Liberação (motor inacessível, inquilino errado ou um erro do lado do CGRateS).

Impacto:

  • O CDR ainda é construído e gravado, então o registro offline não é perdido.
  • A sessão do lado do CGRateS pode ficar aberta, então o backend de cobrança pode ser inconsistente e precisa de reconciliação.

Resolução:

  1. Grep logs para CGRateS TerminateSession failed no ref afetado.
  2. Confirme a acessibilidade do CGRateS com o medidor omni_chf_cgrates_health (1 = ativo).
  3. Reconcile qualquer sessão do CGRateS deixada aberta para esse ref contra o CDR gravado.
  4. Correlacione com omni_chf_charging_releases_total{result="failure"} para ver a taxa de falhas de terminação.

Verificação de saúde do CGRateS falha enquanto o daemon está ativo

Sintomas: omni_chf_cgrates_health0, mas o CGRateS está em execução.

Possíveis causas:

  • O CGRateS está lento: a verificação de saúde limita seu tempo limite a min(cgrates_timeout, 3000) ms.
  • Incompatibilidade de esquema (HTTP vs HTTPS) em cgrates_url.

Resolução:

  1. Confirme se o esquema e a porta de cgrates_url estão corretos.
  2. Se o CGRateS estiver legitimamente lento, investigue a carga do CGRateS em vez de aumentar o limite.
  3. Procure avisos CGRateS unreachable at <url> ....

Alta latência do CGRateS

Sintomas: Operações de cobrança lentas; omni_chf_cgrates_request_duration_ms elevado.

Resolução:

  1. Inspecione o histograma p95/p99 por operação.
  2. Escale o CGRateS ou o caminho de rede entre OmniCHF e CGRateS.
  3. Considere reduzir cgrates_timeout para que chamadas lentas falhem rapidamente em vez de bloquear a sessão.

CDRs ausentes dos arquivos offline

Sintomas: Linhas CHF CDR: aparecem no log, mas nenhum arquivo cdr_YYYYMMDD.json é gravado.

Possíveis causas:

  • offline_charging_enabled é false (padrão): CDRs são apenas registrados.
  • cdr_output_dir não é gravável.

Resolução:

  1. Defina offline_charging_enabled: true.
  2. Certifique-se de que cdr_output_dir exista e seja gravável; fique atento a erros [CDR] Failed to write CDR to file.
  3. Para capturar CDRs sem saída de arquivo, envie as linhas de log CHF CDR: com seu pipeline de log.

Contagem de sessões ativas não diminui

Sintomas: omni_chf_sessions_active_count permanece elevado.

Possíveis causas:

  • O consumidor nunca envia Liberação (as sessões só são limpas na liberação ou falha do trabalhador).
  • As liberações estão retornando 404 (veja acima), então o consumidor as considera concluídas enquanto o OmniCHF pode não.

Resolução:

  1. Correlacione a contagem ativa com as taxas de Criar vs Liberar.
  2. Investigue o 404 na Liberação, que geralmente indica um reinício anterior.

Registro NRF não mantido

Sintomas: omni_chf_nrf_registration_status0.

Resolução:

  1. Verifique se nrf_uri é acessível a partir do sbi_addr do OmniCHF.
  2. Confirme se mcc / mnc correspondem à configuração PLMN do NRF.
  3. Confirme se sbi_addr / sbi_port no perfil anunciado são acessíveis pelo NRF.
  4. Revise os logs de inicialização em busca de erros de registro do NRF.