Guia de Operações SMS-C
← Voltar ao Índice da Documentação | README Principal
Procedimentos operacionais diários, monitoramento e tarefas de manutenção para equipes de operações SMS-C.
Índice
- Operações Diárias
- Monitoramento
- Rastreamento de Mensagens
- Gerenciamento de Rotas
- Gerenciamento de Frontend
- Gerenciamento de Tradução de Números
- Manutenção do Sistema
- Backup e Recuperação
- Planejamento de Capacidade
- Resposta a Incidentes
Operações Diárias
Verificação de Saúde Matinal
Realize estas verificações no início de cada dia:
1. Verificar Status do Sistema
# Verificação de saúde da API
curl https://api.example.com:8443/api/status
# Resposta esperada:
# {"status":"ok","application":"OmniMessage","timestamp":"2025-10-30T08:00:00Z"}
2. Revisar Métricas do Prometheus
Acesse o painel do Prometheus e verifique:
- Taxa de mensagens (últimas 24 horas)
- Taxa de falhas de roteamento (deve ser < 1%)
- Pendências na fila (deve ser < 1000 pendentes)
- Taxa de sucesso de entrega (deve ser > 95%)
- Status de conexão do frontend (todos os frontends esperados ativos)
3. Verificar Fila de Mensagens
Acesse a interface da Web: https://sms-admin.example.com/message_queue
Revise:
- Total de mensagens pendentes (deve ser baixo)
- Idade da mensagem mais antiga (deve ser < 5 minutos)
- Mensagens com altas tentativas de entrega (investigar se > 3)
- Mensagens de carta morta (investigar quaisquer presentes)
4. Revisar Status do Frontend
Acesse a interface da Web: https://sms-admin.example.com/frontend_status
Verifique:
- Todos os frontends esperados estão ativos
- Sem desconexões não expiradas
- Sem erros de frontend nas últimas 24 horas
5. Verificar Logs da Aplicação
Acesse a interface da Web: https://sms-admin.example.com/logs ou verifique os arquivos de log
Procure por:
- Mensagens de nível de erro
- Falhas de roteamento
- Falhas de cobrança
- Problemas de conexão com o banco de dados
- Problemas de nós do cluster
Monitoramento do Volume de Mensagens
Verificar Contagem de Mensagens Horárias:
Use a consulta do Prometheus:
# Mensagens recebidas por hora
increase(sms_c_message_received_count[1h])
# Mensagens entregues por hora
increase(sms_c_delivery_succeeded_count[1h])
# Calcular taxa de entrega
rate(sms_c_delivery_succeeded_count[1h]) / rate(sms_c_message_received_count[1h])
Padrões Esperados:
- Horário comercial: Volume mais alto
- Noites/fins de semana: Volume mais baixo
- Taxa de entrega: Deve ser > 95%
Condições de Alerta:
- Queda súbita nas mensagens ( > 50% de diminuição)
- Aumento súbito nas mensagens ( > 200% de aumento)
- Queda da taxa de entrega abaixo de 90%
Monitoramento
Métricas Chave a Observar
Métricas de Processamento de Mensagens
Contagem de Mensagens Recebidas (sms_c_message_received_count):
- O que: Total de mensagens entrando no sistema
- Alerta: Queda ou pico súbito
- Consulta:
rate(sms_c_message_received_count[5m])
Duração do Processamento de Mensagens (sms_c_message_processing_stop_duration):
- O que: Tempo de processamento de ponta a ponta
- Alerta: p95 > 1000ms
- Consulta:
histogram_quantile(0.95, sms_c_message_processing_stop_duration)
Métricas de Roteamento
Falhas de Roteamento (sms_c_routing_failed_count):
- O que: Mensagens que não puderam ser roteadas
- Alerta: Quaisquer falhas ( > 0)
- Consulta:
increase(sms_c_routing_failed_count[5m])
Rota Correspondida (sms_c_routing_route_matched_count):
- O que: Quais rotas estão sendo usadas
- Alerta: Rotas de alta prioridade não correspondendo
- Consulta:
sms_c_routing_route_matched_count
Métricas de Entrega
Taxa de Sucesso de Entrega:
- O que: Percentual de entregas bem-sucedidas
- Alerta: Taxa < 95%
- Consulta:
rate(sms_c_delivery_succeeded_count[5m]) / rate(sms_c_delivery_queued_count[5m])
Tentativas de Entrega (sms_c_delivery_succeeded_attempt_count):
- O que: Retentativas necessárias para entrega
- Alerta: p95 > 2 (muitas retentativas)
- Consulta:
histogram_quantile(0.95, sms_c_delivery_succeeded_attempt_count)
Métricas de Fila
Tamanho da Fila (sms_c_queue_size_size):
- O que: Total de mensagens na fila
- Alerta: Tamanho > 10.000
- Consulta:
sms_c_queue_size_size
Idade da Mensagem Mais Antiga (sms_c_queue_oldest_message_age_seconds):
- O que: Idade da mensagem pendente mais antiga
- Alerta: Idade > 300 segundos
- Consulta:
sms_c_queue_oldest_message_age_seconds
Configuração do Painel
Painéis do Painel Operacional:
-
Taxa de Mensagens (Gráfico)
- Mensagens recebidas (taxa de 5 minutos)
- Mensagens entregues (taxa de 5 minutos)
- Intervalo de tempo: Últimas 24 horas
-
Status da Fila (Estatísticas Únicas)
- Mensagens pendentes atuais
- Idade da mensagem mais antiga
- Contagem de mensagens falhadas
-
Desempenho de Entrega (Gráfico)
- Taxa de sucesso ao longo do tempo
- Taxa de falha ao longo do tempo
- Intervalo de tempo: Últimas 24 horas
-
Status de Roteamento (Tabela)
- ID da Rota
- Contagem de correspondências (última hora)
- SMSC de destino
- Prioridade
-
Status do Frontend (Tabela)
- Nome do frontend
- Status (ativo/expirado)
- Última vez visto
- Contagem de mensagens (última hora)
-
Saúde do Sistema (Estatísticas Únicas)
- Tempo de resposta da API (p95)
- Tempo de consulta ao banco de dados (p95)
- Tempo de consulta ENUM (p95)
Configuração de Alertas
Alertas Críticos (Resposta Imediata Necessária):
# Nenhuma rota encontrada - mensagens não podem ser entregues
- alert: RoutingFailures
expr: increase(sms_c_routing_failed_count[5m]) > 0
severity: critical
description: "{{ $value }} mensagens falharam no roteamento nos últimos 5 minutos"
# Fila acumulando - processamento ficando para trás
- alert: QueueBacklog
expr: sms_c_queue_size_pending > 10000
severity: critical
description: "A fila tem {{ $value }} mensagens pendentes"
# Mensagens envelhecendo - entrega travada
- alert: OldMessagesInQueue
expr: sms_c_queue_oldest_message_age_seconds > 300
severity: critical
description: "A mensagem mais antiga tem {{ $value }} segundos"
# Frontend desconectado - sem caminho de entrega
- alert: FrontendDisconnected
expr: sms_c_frontend_status_count{status="disconnected"} > 0
severity: critical
description: "{{ $value }} frontends desconectados"
Alertas de Aviso (Investigação Necessária):
# Taxa de sucesso de entrega caindo
- alert: LowDeliveryRate
expr: rate(sms_c_delivery_succeeded_count[10m]) / rate(sms_c_delivery_queued_count[10m]) < 0.90
severity: warning
description: "A taxa de sucesso de entrega é {{ $value }}"
# Muitas retentativas de entrega
- alert: HighRetryRate
expr: histogram_quantile(0.95, sms_c_delivery_succeeded_attempt_count) > 2
severity: warning
description: "Tentativas de entrega no 95º percentil: {{ $value }}"
# Consultas ENUM lentas ou falhando
- alert: SlowEnumLookups
expr: histogram_quantile(0.95, sms_c_enum_lookup_stop_duration) > 5000
severity: warning
description: "Consultas ENUM levando > 5 segundos"
# Baixa taxa de acerto de cache ENUM
- alert: LowEnumCacheHitRate
expr: rate(sms_c_enum_cache_hit_count[10m]) / (rate(sms_c_enum_cache_hit_count[10m]) + rate(sms_c_enum_cache_miss_count[10m])) < 0.70
severity: warning
description: "Taxa de acerto de cache ENUM: {{ $value }}"
Rastreamento de Mensagens
Encontrar Mensagem Específica
Por ID da Mensagem:
- Interface da Web: Navegue até
/message_queue - Insira o ID da mensagem na caixa de pesquisa
- Veja os detalhes completos e o histórico de eventos
Via API:
curl https://api.example.com:8443/api/messages/12345
Por Número de Telefone:
- Interface da Web: Navegue até
/message_queue - Insira o número de telefone na caixa de pesquisa
- Veja todas as mensagens para esse número
Rastrear Ciclo de Vida da Mensagem
Ver Histórico de Eventos:
- Interface da Web: Clique na mensagem na fila, veja a seção "Eventos"
- API:
GET /api/events/12345
Sequência Comum de Eventos:
1. message_inserted - Mensagem criada
↓
2. number_translated - Números normalizados (se configurado)
↓
3. message_routed - Decisão de roteamento tomada
↓
4. charging_attempted - Verificação de cobrança (se habilitada)
↓
5. message_delivered - Entregue com sucesso
Sequência de Entrega Falhada:
1. message_inserted
↓
2. message_routed
↓
3. delivery_attempt_1 - Primeira tentativa falhou
↓
4. delivery_attempt_2 - Segunda tentativa falhou (2min de atraso)
↓
5. delivery_attempt_3 - Terceira tentativa falhou (4min de atraso)
↓
6. message_dead_letter - Limite de retentativas excedido
Verificar Status de Entrega
Mensagens Pendentes:
- Status: "pendente"
- deliver_after: Timestamp futuro
- delivery_attempts: 0 ou número baixo
Mensagens Entregues:
- Status: "entregue"
- deliver_time: Timestamp de entrega
- dest_smsc: Frontend que entregou
Mensagens Falhadas:
- Status: "pendente" com altas delivery_attempts
- deadletter: true (se expirado)
- Verifique o log de eventos para razões de falha
Roteamento de Mensagens Baseado em Localização
O SMS-C suporta a recuperação de mensagens baseada em localização, permitindo que frontends recebam automaticamente mensagens destinadas a assinantes registrados em sua localização.
Como Funciona:
Quando um frontend consulta por mensagens pendentes usando get_messages_for_smsc(smsc_name), o sistema retorna mensagens de duas maneiras:
- Roteamento Explícito - Mensagens onde
dest_smsccorresponde explicitamente ao nome do frontend - Roteamento Baseado em Localização - Mensagens onde:
dest_smscénull(não roteado explicitamente)destination_msisdntem um registro de localização ativo- O campo
locationda localização corresponde ao nome do frontend - A localização não expirou
Cenário de Exemplo:
Um assinante com MSISDN +447700900123 se registra no frontend uk_gateway:
# Assinante se registra (cria registro de localização)
POST /api/locations
{
"msisdn": "+447700900123",
"imsi": "234150123456789",
"location": "uk_gateway",
"expires": "2025-11-01T12:00:00Z"
}
Quando uma mensagem chega para esse assinante sem roteamento explícito:
# Mensagem submetida sem dest_smsc
POST /api/messages
{
"source_msisdn": "+15551234567",
"destination_msisdn": "+447700900123",
"message_body": "Hello",
"source_smsc": "api"
# Nota: dest_smsc é null
}
O frontend uk_gateway receberá automaticamente essa mensagem quando fizer a consulta:
# Frontend consulta por mensagens
GET /api/messages/queue?smsc=uk_gateway
# Retorna a mensagem mesmo que dest_smsc seja null
# porque o assinante de destino está registrado em uk_gateway
Requisitos de Localização:
Para que o roteamento baseado em localiza��ão funcione:
- A tabela
locationsdeve ter uma entrada para odestination_msisdn - O campo
locationdeve corresponder ao nome do SMSC consultado - O timestamp
expiresdeve estar no futuro
Monitoramento do Roteamento Baseado em Localização:
Verifique os registros de localização:
# Via API
GET /api/locations/{msisdn}
# Verifique se a localização expirou
# o campo expires deve ser > hora atual
Problemas Comuns:
- Mensagem não entregue: Verifique se a localização expirou
- Frontend errado: Verifique se o campo
locationcorresponde ao nome do frontend esperado - Localização não encontrada: O assinante pode precisar se registrar novamente
Intervenções Manuais
Tentar Novamente Mensagem Falhada:
# Redefinir delivery_attempts e deliver_after
curl -X PATCH https://api.example.com:8443/api/messages/12345 \
-H "Content-Type: application/json" \
-d '{
"delivery_attempts": 0,
"deliver_after": "2025-10-30T12:00:00Z"
}'
Alterar Destino:
# Roteamento para SMSC diferente
curl -X PATCH https://api.example.com:8443/api/messages/12345 \
-H "Content-Type: application/json" \
-d '{
"dest_smsc": "backup_gateway"
}'
Excluir Mensagem Travada:
curl -X DELETE https://api.example.com:8443/api/messages/12345
Gerenciamento de Rotas
Ver Rotas Atuais
Interface da Web: Navegue até /sms_routing
Via API:
# Listar todas as rotas
curl https://api.example.com:8443/api/routes
Verificar Uso da Rota:
Consulta do Prometheus:
# Mensagens roteadas por cada rota (última hora)
increase(sms_c_routing_route_matched_count[1h])
Adicionar Nova Rota
Interface da Web:
- Navegue até
/sms_routing - Clique em "Adicionar Nova Rota"
- Preencha os campos:
- Prefixo de Chamada: Prefixo do número de origem (opcional)
- Prefixo Chamado: Prefixo do número de destino (obrigatório para roteamento geográfico)
- SMSC de Origem: Filtro do sistema de origem (opcional)
- SMSC de Destino: Gateway de destino (obrigatório, a menos que seja resposta automática/descarte)
- Prioridade: Prioridade da rota (1-255, menor = maior prioridade)
- Peso: Peso de balanceamento de carga (1-100)
- Descrição: Descrição legível por humanos
- Habilitado: Marque para ativar imediatamente
- Clique em "Salvar Rota"
Exemplo: Rota Geográfica:
- Prefixo Chamado:
+44 - SMSC de Destino:
uk_gateway - Prioridade: 50
- Peso: 100
- Descrição: "Roteamento do Reino Unido"
Exemplo: Rota Balanceada:
Crie duas rotas com os mesmos critérios, mas pesos diferentes:
Rota 1:
- Prefixo Chamado:
+44 - SMSC de Destino:
uk_primary - Prioridade: 50
- Peso: 70
- Descrição: "Reino Unido primário (70%)"
Rota 2:
- Prefixo Chamado:
+44 - SMSC de Destino:
uk_backup - Prioridade: 50
- Peso: 30
- Descrição: "Reino Unido de backup (30%)"
Testar Rotas
Simulador de Roteamento:
- Navegue até
/simulator - Insira parâmetros de teste:
- Número Chamador:
+15551234567 - Número Chamado:
+447700900000 - SMSC de Origem: (opcional)
- Tipo de Origem: (opcional)
- Número Chamador:
- Clique em "Simular Roteamento"
- Revise os resultados:
- Rota Selecionada: Qual rota foi escolhida
- Todas as Correspondências: Quais rotas corresponderam aos critérios
- Avaliação: Por que cada rota correspondeu ou não correspondeu
Testar Antes da Produção:
- Teste todas as novas rotas no simulador
- Verifique se a rota correta é selecionada
- Verifique a ordem de prioridade
- Valide a distribuição de peso
Modificar Rota Existente
Interface da Web:
- Navegue até
/sms_routing - Encontre a rota na lista
- Clique em "Editar"
- Modifique os campos
- Clique em "Salvar Rota"
Modificações Comuns:
- Desabilitar Rota: Desmarque "Habilitado" (remoção temporária)
- Ajustar Peso: Alterar distribuição de balanceamento de carga
- Alterar Prioridade: Reordenar avaliação da rota
- Atualizar Destino: Mudar para SMSC diferente
Excluir Rota
Interface da Web:
- Navegue até
/sms_routing - Encontre a rota na lista
- Clique em "Excluir"
- Confirme a exclusão
Aviso: Excluir rotas é permanente. Considere desabilitar em vez disso.
Exportar/Importar Rotas
Exportar Rotas (Backup):
- Navegue até
/sms_routing - Clique em "Exportar Rotas"
- Salve o arquivo JSON
Importar Rotas:
- Navegue até
/sms_routing - Clique em "Importar Rotas"
- Selecione o arquivo JSON
- Escolha o modo de importação:
- Mesclar: Adicionar às rotas existentes
- Substituir: Excluir todas e importar
Casos de Uso:
- Backup antes de grandes alterações
- Copiar rotas entre ambientes
- Recuperação de desastres
- Versionamento de configuração
Gerenciamento de Frontend
Monitorar Conexões de Frontend
Interface da Web: Navegue até /frontend_status
Verifique:
- Todos os frontends esperados estão "ativos"
- Os horários da última visualização são recentes ( < 90 segundos)
- Sem frontends expirados inesperados
Via API:
# Obter frontends ativos
curl https://api.example.com:8443/api/frontends/active
# Obter estatísticas
curl https://api.example.com:8443/api/frontends/stats
Investigar Desconexões
Frontend Expirado:
- Verifique os logs do frontend para erros
- Verifique a conectividade de rede com o SMS-C
- Confirme se o frontend está em execução
- Verifique a lógica de registro do frontend (deve se registrar a cada 60s)
Registro Não Aparecendo:
- Verifique se o frontend está chamando POST
/api/frontends/register - Verifique os logs da API para erros de registro
- Verifique o formato do payload JSON
- Teste o registro manualmente com curl
Exemplo de Registro Manual:
curl -X POST https://api.example.com:8443/api/frontends/register \
-H "Content-Type: application/json" \
-d '{
"frontend_name": "test_gateway",
"frontend_type": "smpp",
"ip_address": "10.0.1.50",
"hostname": "gateway.example.com"
}'
Ver Histórico do Frontend
Interface da Web:
- Navegue até
/frontend_status - Encontre o frontend na lista
- Clique em "Histórico"
- Revise registros de registros anteriores
Via API:
curl https://api.example.com:8443/api/frontends/history/uk_gateway
Casos de Uso:
- Investigar a confiabilidade da conexão
- Rastrear padrões de tempo de atividade do frontend
- Identificar alterações de configuração
Gerenciamento de Tradução de Números
As regras de tradução de números são gerenciadas via config/runtime.exs. Alterações requerem reinício da aplicação.
Ver Regras de Tradução Ativas
Verifique o arquivo de configuração:
cat config/runtime.exs | grep -A 20 "translation_rules:"
Tarefas Comuns de Tradução
Adicionar Código de País a Números Locais:
Edite config/runtime.exs:
%{
calling_prefix: nil,
called_prefix: nil,
source_smsc: nil,
calling_match: "^(\d{10})$",
calling_replace: "+1\1",
called_match: "^(\d{10})$",
called_replace: "+1\1",
priority: 100,
description: "Adicionar +1 a números de 10 dígitos dos EUA",
enabled: true
}
Normalizar Formato Internacional:
%{
calling_prefix: nil,
called_prefix: nil,
source_smsc: nil,
calling_match: "^00(\d+)$",
calling_replace: "+\1",
called_match: "^00(\d+)$",
called_replace: "+\1",
priority: 10,
description: "Converter prefixo 00 para +",
enabled: true
}
Remoção de Código Específico do Transportador:
%{
calling_prefix: nil,
called_prefix: "101",
source_smsc: "carrier_a",
calling_match: nil,
calling_replace: nil,
called_match: "^101(\d+)$",
called_replace: "\1",
priority: 5,
description: "Remover código do transportador do transportador A",
enabled: true
}
Testar Regras de Tradução
Após alterações na configuração:
- Reinicie a aplicação para carregar novas regras
- Envie uma mensagem de teste com origem/destino que deve corresponder
- Verifique o log de eventos para o evento
number_translated - Verifique se os números foram transformados corretamente
Desabilitar Regra de Tradução
Defina enabled: false na regra:
%{
...
enabled: false
}
Reinicie a aplicação.
Manutenção do Sistema
Manutenção do Banco de Dados
Verificar Tamanho do Banco de Dados:
Use suas ferramentas de gerenciamento de banco de dados para monitorar o tamanho de armazenamento de CDR:
- MySQL/MariaDB: Consulte
information_schema.tablespara o tamanho do banco de dados - PostgreSQL: Use a função
pg_database_size()ou o comando\l+no psql
Limpar Registros CDR Antigos:
Os registros CDR devem ser arquivados e purgados periodicamente com base na sua política de retenção:
- Configure arquivamento automático com base nos requisitos de negócios (tipicamente 30-90 dias no banco de dados operacional)
- Arquive registros mais antigos para um data warehouse ou armazenamento frio
- Exclua registros arquivados do banco de dados operacional em lotes para evitar contenção de bloqueio
Otimizar Tabelas:
Periodicamente otimize as tabelas do banco de dados para manter o desempenho:
- MySQL/MariaDB: Execute o comando
OPTIMIZE TABLEdurante períodos de baixo tráfego - PostgreSQL: Execute
VACUUM ANALYZEregularmente (ou habilite autovacuum)
Executar Semanalmente durante período de baixo tráfego para manter desempenho ideal.
Manutenção do Banco de Dados Mnesia
Verificar Tamanho da Tabela Mnesia:
# No console IEx
:mnesia.table_info(:sms_route, :size)
:mnesia.table_info(:translation_rule, :size)
Backup das Tabelas Mnesia:
# Exportar rotas (Interface da Web)
# Navegue até /sms_routing
# Clique em "Exportar Rotas"
# Ou via backup do Mnesia
:mnesia.backup("/var/backups/sms_c/mnesia_backup.bup")
Restaurar Mnesia:
# Via importação da Interface da Web
# Ou restaurar backup:
:mnesia.restore("/var/backups/sms_c/mnesia_backup.bup", [])
Rotação de Logs
Configure logrotate para logs da aplicação:
# /etc/logrotate.d/sms_c
/var/log/sms_c/*.log {
daily
rotate 30
compress
delaycompress
notifempty
create 0644 sms_user sms_group
sharedscripts
postrotate
systemctl reload sms_c || true
endscript
}
Reiniciar a Aplicação
Reinício Gracioso (zero downtime em cluster):
# Reinicie um nó de cada vez
systemctl restart sms_c
# Aguarde o nó se juntar ao cluster
# Repita para cada nó
Reinício de Emergência (todos os nós):
systemctl restart sms_c
Após o Reinício:
- Verifique se todos os frontends se reconectam
- Verifique o Prometheus para continuidade de métricas
- Monitore logs para erros
- Verifique se o processamento de mensagens é retomado
Backup e Recuperação
O que Fazer Backup
-
Arquivos de Configuração:
config/runtime.exsconfig/config.exsconfig/prod.exs(se existir)
-
Tabelas de Roteamento (Mnesia):
- Exportar via Interface da Web
- Ou comando de backup do Mnesia
-
Banco de Dados SQL CDR:
- Backup completo diário
- Backups de log de transações (contínuos)
-
Certificados TLS:
priv/cert/*.crtpriv/cert/*.key
Procedimentos de Backup
Backup Diário de Configuração:
#!/bin/bash
# /opt/sms_c/scripts/backup_config.sh
BACKUP_DIR="/var/backups/sms_c/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Backup de configuração
cp -r /opt/sms_c/config $BACKUP_DIR/
# Backup de certificados
cp -r /opt/sms_c/priv/cert $BACKUP_DIR/
# Definir permissões
chmod 600 $BACKUP_DIR/cert/*
echo "Backup de configuração concluído: $BACKUP_DIR"
Backup do Banco de Dados:
#!/bin/bash
# /opt/sms_c/scripts/backup_database.sh
BACKUP_DIR="/var/backups/sms_c/database"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup do banco de dados SQL CDR
# MySQL/MariaDB: Use mysqldump com --single-transaction para consistência
# PostgreSQL: Use pg_dump -F c para formato personalizado
# Estrutura de exemplo (adapte ao seu banco de dados):
# - Use a ferramenta de backup apropriada (mysqldump, pg_dump)
# - Habilite backups seguros para consistência
# - Comprimir saída para economizar espaço
# - Configurar período de retenção (por exemplo, 30 dias)
# Remover backups antigos
find $BACKUP_DIR -name "sms_c_*.gz" -mtime +30 -delete
echo "Backup do banco de dados concluído: sms_c_${DATE}"
Backup da Tabela de Roteamento:
#!/bin/bash
# /opt/sms_c/scripts/backup_routes.sh
BACKUP_DIR="/var/backups/sms_c/routes"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
# Exportar via API
curl https://api.example.com:8443/api/routes/export \
> $BACKUP_DIR/routes_${DATE}.json
echo "Backup das rotas concluído: routes_${DATE}.json"
Agendar Backups (crontab):
# Diário às 2 AM
0 2 * * * /opt/sms_c/scripts/backup_config.sh
0 2 * * * /opt/sms_c/scripts/backup_database.sh
0 2 * * * /opt/sms_c/scripts/backup_routes.sh
Procedimentos de Recuperação
Restaurar Configuração:
# Parar aplicação
systemctl stop sms_c
# Restaurar arquivos de configuração
cp -r /var/backups/sms_c/20251030/config/* /opt/sms_c/config/
# Restaurar certificados
cp -r /var/backups/sms_c/20251030/cert/* /opt/sms_c/priv/cert/
# Iniciar aplicação
systemctl start sms_c
Restaurar Banco de Dados SQL CDR:
Use as ferramentas de restauração apropriadas para seu banco de dados:
- MySQL/MariaDB: Descompactar e canalizar para o cliente mysql
- PostgreSQL: Use pg_restore com dumps de formato personalizado
Importante: Pare a aplicação SMS-C antes de restaurar o banco de dados para evitar conflitos de dados.
Restaurar Tabelas de Roteamento:
- Navegue até a Interface da Web
/sms_routing - Clique em "Importar Rotas"
- Selecione o arquivo JSON de backup
- Escolha o modo "Substituir"
- Confirme a importação
Planejamento de Capacidade
Monitorar Tendências de Crescimento
Tendência de Volume de Mensagens:
Consulta do Prometheus (média de 30 dias):
avg_over_time(sms_c_message_received_count[30d])
Taxa de Crescimento do Banco de Dados:
-- Crescimento de dados mensal
SELECT
DATE_FORMAT(inserted_at, '%Y-%m') AS month,
COUNT(*) AS message_count,
ROUND(SUM(LENGTH(message_body)) / 1024 / 1024, 2) AS data_mb
FROM message_queues
GROUP BY month
ORDER BY month DESC
LIMIT 12;
Indicadores de Capacidade
Uso de CPU:
- Normal: < 50% em média
- Alto: > 70% sustentado
- Crítico: > 90%
Uso de Memória:
- Normal: < 70% do disponível
- Alto: > 80%
- Crítico: > 90%
Uso de Disco:
- Normal: < 60% cheio
- Alto: > 75%
- Crítico: > 85%
Profundidade da Fila:
- Normal: < 1000 pendentes
- Alto: > 5000 pendentes
- Crítico: > 10.000 pendentes
Recomendações de Escalonamento
Quando Escalonar Verticalmente (Atualizar Recursos):
- CPU consistentemente > 70%
- Memória consistentemente > 80%
- Gargalo em um único nó
Quando Escalonar Horizontalmente (Adicionar Nós):
- CPU > 50% em todos os nós
- Volume de mensagens > 5.000 msg/sec
- Distribuição geográfica necessária
- Alta disponibilidade requerida
Escalonamento do Banco de Dados:
- Réplicas de leitura para consultas de relatórios
- Otimização de pool de conexões
- Otimização de índices
- Particionar tabelas grandes por data
Resposta a Incidentes
Níveis de Severidade
Crítico (Resposta Imediata):
- Nenhuma mensagem sendo entregue
- Todos os frontends desconectados
- Banco de dados indisponível
- API completamente fora do ar
Alto (Resposta em até 1 hora):
- Taxa de sucesso de entrega < 80%
- Vários frontends desconectados
- Falhas de roteamento > 10%
- Fila de pendências crescendo
Médio (Resposta em até 4 horas):
- Um único frontend desconectado
- Taxa de sucesso de entrega 80-95%
- Processamento de mensagens lento
- Consultas ENUM falhando
Baixo (Resposta em até 24 horas):
- Degradação de desempenho menor
- Problema em uma única rota
- Alertas de aviso não críticos
Checklist de Incidentes
1. Avaliar Severidade:
- Verifique os alertas do Prometheus
- Revise as métricas do painel
- Verifique o status da fila de mensagens
- Verifique as conexões do frontend
2. Coletar Informações:
- Alterações recentes na configuração?
- Implantações recentes?
- Status de dependências externas (OCS, DNS)?
- Mensagens de erro nos logs?
3. Ações Imediatas:
- Pare as alterações em andamento
- Reverta implantações recentes se suspeitar da causa
- Habilite logs detalhados se necessário
- Notifique as partes interessadas
4. Investigação:
- Revise os logs da aplicação
- Verifique o uso de recursos do sistema
- Examine o desempenho do banco de dados
- Teste dependências externas
5. Resolução:
- Aplique a correção
- Teste no simulador
- Implante em produção
- Monitore para melhorias
6. Pós-Incidente:
- Documente a causa raiz
- Atualize monitoramento/alertas
- Implemente medidas preventivas
- Atualize os runbooks
Incidentes Comuns
Alta Pendência na Fila:
- Verifique a taxa de sucesso de entrega
- Verifique se os frontends estão conectados e consultando
- Verifique o desempenho do banco de dados
- Revise o Prometheus em busca de gargalos
- Considere aumentar o tamanho do lote/intervalo
Falhas de Roteamento:
- Revise a configuração de roteamento
- Teste no simulador de roteamento
- Verifique se há rotas ausentes
- Verifique se a rota catch-all existe
- Verifique os logs de eventos para razões de falha
Desconexões de Frontend:
- Verifique o status do sistema do frontend
- Verifique a conectividade de rede
- Revise os logs do frontend
- Teste o registro manual da API
- Verifique as regras de firewall
Processamento de Mensagens Lento:
- Verifique o desempenho das consultas do banco de dados
- Revise a configuração do trabalhador de lotes
- Verifique se há recursos adequados (CPU/Memória)
- Verifique se há atrasos nas consultas ENUM
- Revise o desempenho do sistema de cobrança
Para procedimentos detalhados de solução de problemas, consulte o Guia de Solução de Problemas.