Sistema de Auditoria
Visão Geral
O sistema de auditoria do RiskFlow registra e permite consultar todas as operações realizadas no sistema, garantindo rastreabilidade, conformidade e segurança. Este módulo mantém um histórico detalhado de ações, alterações e acessos, permitindo identificar quem fez o quê, quando e onde, além de fornecer estatísticas de uso e histórico completo de entidades.
Endpoints
1. Listar Registros de Auditoria
Retorna uma lista paginada de registros de auditoria com filtros diversos.
GET /api/auditoria
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| entidade | string | Não | Filtrar por tipo de entidade (ex: "analise", "usuario") |
| entidade_id | uuid | Não | Filtrar por ID da entidade |
| operacao | string | Não | Filtrar por tipo de operação (ex: "criar", "atualizar", "excluir") |
| usuario_id | uuid | Não | Filtrar por ID do usuário que realizou a operação |
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| nivel | string | Não | Filtrar por nível de severidade (info, alerta, erro, critico) |
| page | integer | Não | Número da página (padrão: 1) |
| limit | integer | Não | Itens por página (padrão: 20, máx: 100) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/auditoria?entidade=analise&operacao=atualizar&data_inicio=2025-05-01T00:00:00Z&data_fim=2025-05-31T23:59:59Z&page=1&limit=20' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const params = new URLSearchParams({
entidade: 'analise',
operacao: 'atualizar',
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z',
page: 1,
limit: 20
});
fetch(`http://localhost:3000/api/auditoria?${params.toString()}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.json())
.then(data => console.log('Registros de auditoria:', data))
.catch(error => console.error('Erro ao buscar registros de auditoria:', error));
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
axios.get('http://localhost:3000/api/auditoria', {
params: {
entidade: 'analise',
operacao: 'atualizar',
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z',
page: 1,
limit: 20
},
headers: {
'x-api-key': token
}
})
.then(response => {
console.log('Registros de auditoria:', response.data);
})
.catch(error => console.error('Erro ao buscar registros de auditoria:', error));
Resposta de Sucesso (200 OK)
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440200",
"timestamp": "2025-05-15T14:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"email": "[email protected]"
},
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"operacao": "atualizar",
"descricao": "Atualização de status da análise",
"dados_anteriores": {
"status": "EM_ANALISE"
},
"dados_novos": {
"status": "APROVADO"
},
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"nivel": "info",
"request_id": "550e8400-e29b-41d4-a716-446655440300"
},
{
"id": "550e8400-e29b-41d4-a716-446655440201",
"timestamp": "2025-05-15T14:29:45Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"email": "[email protected]"
},
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"operacao": "atualizar",
"descricao": "Adição de parecer à análise",
"dados_anteriores": {
"pareceres": []
},
"dados_novos": {
"pareceres": [
{
"id": "550e8400-e29b-41d4-a716-446655440050",
"texto": "Análise aprovada conforme política de crédito."
}
]
},
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"nivel": "info",
"request_id": "550e8400-e29b-41d4-a716-446655440301"
}
],
"pagination": {
"total": 45,
"page": 1,
"limit": 20,
"pages": 3
}
}
2. Buscar Registro de Auditoria por ID
Retorna um registro de auditoria específico pelo seu ID.
GET /api/auditoria/:id
Parâmetros de URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | uuid | Sim | ID do registro de auditoria |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/auditoria/550e8400-e29b-41d4-a716-446655440200' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const auditId = '550e8400-e29b-41d4-a716-446655440200';
fetch(`http://localhost:3000/api/auditoria/${auditId}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.json())
.then(data => console.log('Registro de auditoria:', data))
.catch(error => console.error('Erro ao buscar registro de auditoria:', error));
Resposta de Sucesso (200 OK)
{
"id": "550e8400-e29b-41d4-a716-446655440200",
"timestamp": "2025-05-15T14:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"email": "[email protected]"
},
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"operacao": "atualizar",
"descricao": "Atualização de status da análise",
"dados_anteriores": {
"status": "EM_ANALISE"
},
"dados_novos": {
"status": "APROVADO"
},
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"nivel": "info",
"request_id": "550e8400-e29b-41d4-a716-446655440300",
"modulo": "aprovacao-alcada",
"endpoint": "/api/aprovacoes-alcada/550e8400-e29b-41d4-a716-446655440010/decisao",
"metodo_http": "POST",
"duracao_ms": 245
}
Resposta de Erro (404 Not Found)
{
"error": {
"message": "Registro de auditoria não encontrado",
"code": "AUDIT_RECORD_NOT_FOUND",
"requestId": "550e8400-e29b-41d4-a716-446655440302"
}
}
3. Registrar Operação Manualmente
Registra uma operação de auditoria manualmente.
POST /api/auditoria
Corpo da Requisição
{
"entidade": "documento",
"entidade_id": "550e8400-e29b-41d4-a716-446655440400",
"operacao": "visualizar",
"descricao": "Visualização de documento confidencial",
"dados": {
"nome_documento": "Contrato.pdf",
"tipo": "Contrato de Crédito",
"tamanho": "1.2 MB"
},
"nivel": "info"
}
Exemplo de Requisição (cURL)
curl -X POST \
'http://localhost:3000/api/auditoria' \
-H 'Content-Type: application/json' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"entidade": "documento",
"entidade_id": "550e8400-e29b-41d4-a716-446655440400",
"operacao": "visualizar",
"descricao": "Visualização de documento confidencial",
"dados": {
"nome_documento": "Contrato.pdf",
"tipo": "Contrato de Crédito",
"tamanho": "1.2 MB"
},
"nivel": "info"
}'
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
const registroAuditoria = {
entidade: "documento",
entidade_id: "550e8400-e29b-41d4-a716-446655440400",
operacao: "visualizar",
descricao: "Visualização de documento confidencial",
dados: {
nome_documento: "Contrato.pdf",
tipo: "Contrato de Crédito",
tamanho: "1.2 MB"
},
nivel: "info"
};
axios.post('http://localhost:3000/api/auditoria', registroAuditoria, {
headers: {
'Content-Type': 'application/json',
'x-api-key': token
}
})
.then(response => {
console.log('Registro de auditoria criado:', response.data);
})
.catch(error => console.error('Erro ao criar registro de auditoria:', error));
Resposta de Sucesso (201 Created)
{
"id": "550e8400-e29b-41d4-a716-446655440202",
"timestamp": "2025-06-03T18:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"email": "[email protected]"
},
"entidade": "documento",
"entidade_id": "550e8400-e29b-41d4-a716-446655440400",
"operacao": "visualizar",
"descricao": "Visualização de documento confidencial",
"dados": {
"nome_documento": "Contrato.pdf",
"tipo": "Contrato de Crédito",
"tamanho": "1.2 MB"
},
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"nivel": "info",
"request_id": "550e8400-e29b-41d4-a716-446655440303",
"mensagem": "Registro de auditoria criado com sucesso"
}
4. Buscar Histórico de Entidade
Retorna o histórico completo de alterações de uma entidade específica.
GET /api/auditoria/entidade/:entidade/:entidadeId
Parâmetros de URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| entidade | string | Sim | Tipo de entidade (ex: "analise", "usuario") |
| entidadeId | uuid | Sim | ID da entidade |
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| page | integer | Não | Número da página (padrão: 1) |
| limit | integer | Não | Itens por página (padrão: 20, máx: 100) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/auditoria/entidade/analise/550e8400-e29b-41d4-a716-446655440000' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const entidade = 'analise';
const entidadeId = '550e8400-e29b-41d4-a716-446655440000';
fetch(`http://localhost:3000/api/auditoria/entidade/${entidade}/${entidadeId}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.json())
.then(data => console.log('Histórico da entidade:', data))
.catch(error => console.error('Erro ao buscar histórico da entidade:', error));
Resposta de Sucesso (200 OK)
{
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"historico": [
{
"id": "550e8400-e29b-41d4-a716-446655440203",
"timestamp": "2025-05-15T10:00:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva"
},
"operacao": "criar",
"descricao": "Criação da análise",
"dados": {
"codigo": "ANL-2025-0001",
"tipo_analise": "Análise de Crédito",
"cliente": "Empresa ABC Ltda",
"valor": 500000.00,
"moeda": "BRL",
"status": "PENDENTE"
},
"nivel": "info"
},
{
"id": "550e8400-e29b-41d4-a716-446655440204",
"timestamp": "2025-05-15T10:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva"
},
"operacao": "atualizar",
"descricao": "Início do fluxo de aprovação",
"dados_anteriores": {
"status": "PENDENTE"
},
"dados_novos": {
"status": "EM_ANALISE",
"fluxo_id": "550e8400-e29b-41d4-a716-446655440010"
},
"nivel": "info"
},
{
"id": "550e8400-e29b-41d4-a716-446655440201",
"timestamp": "2025-05-15T14:29:45Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva"
},
"operacao": "atualizar",
"descricao": "Adição de parecer à análise",
"dados_anteriores": {
"pareceres": []
},
"dados_novos": {
"pareceres": [
{
"id": "550e8400-e29b-41d4-a716-446655440050",
"texto": "Análise aprovada conforme política de crédito."
}
]
},
"nivel": "info"
},
{
"id": "550e8400-e29b-41d4-a716-446655440200",
"timestamp": "2025-05-15T14:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva"
},
"operacao": "atualizar",
"descricao": "Atualização de status da análise",
"dados_anteriores": {
"status": "EM_ANALISE"
},
"dados_novos": {
"status": "APROVADO"
},
"nivel": "info"
}
],
"pagination": {
"total": 4,
"page": 1,
"limit": 20,
"pages": 1
}
}
5. Buscar Registros por ID de Requisição
Retorna todos os registros de auditoria associados a um ID de requisição específico.
GET /api/auditoria/request/:requestId
Parâmetros de URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| requestId | uuid | Sim | ID da requisição |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/auditoria/request/550e8400-e29b-41d4-a716-446655440300' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
const requestId = '550e8400-e29b-41d4-a716-446655440300';
axios.get(`http://localhost:3000/api/auditoria/request/${requestId}`, {
headers: {
'x-api-key': token
}
})
.then(response => {
console.log('Registros da requisição:', response.data);
})
.catch(error => console.error('Erro ao buscar registros da requisição:', error));
Resposta de Sucesso (200 OK)
{
"request_id": "550e8400-e29b-41d4-a716-446655440300",
"timestamp": "2025-05-15T14:30:00Z",
"usuario": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"email": "[email protected]"
},
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"endpoint": "/api/aprovacoes-alcada/550e8400-e29b-41d4-a716-446655440010/decisao",
"metodo_http": "POST",
"duracao_total_ms": 245,
"registros": [
{
"id": "550e8400-e29b-41d4-a716-446655440200",
"timestamp": "2025-05-15T14:30:00Z",
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"operacao": "atualizar",
"descricao": "Atualização de status da análise",
"dados_anteriores": {
"status": "EM_ANALISE"
},
"dados_novos": {
"status": "APROVADO"
},
"nivel": "info"
},
{
"id": "550e8400-e29b-41d4-a716-446655440201",
"timestamp": "2025-05-15T14:29:45Z",
"entidade": "analise",
"entidade_id": "550e8400-e29b-41d4-a716-446655440000",
"operacao": "atualizar",
"descricao": "Adição de parecer à análise",
"dados_anteriores": {
"pareceres": []
},
"dados_novos": {
"pareceres": [
{
"id": "550e8400-e29b-41d4-a716-446655440050",
"texto": "Análise aprovada conforme política de crédito."
}
]
},
"nivel": "info"
},
{
"id": "550e8400-e29b-41d4-a716-446655440205",
"timestamp": "2025-05-15T14:29:50Z",
"entidade": "fluxo_alcada",
"entidade_id": "550e8400-e29b-41d4-a716-446655440010",
"operacao": "atualizar",
"descricao": "Atualização de status do fluxo de alçada",
"dados_anteriores": {
"status": "EM_ANALISE"
},
"dados_novos": {
"status": "APROVADO"
},
"nivel": "info"
}
]
}
6. Obter Estatísticas de Auditoria
Retorna estatísticas sobre os registros de auditoria.
GET /api/auditoria/estatisticas
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/auditoria/estatisticas?data_inicio=2025-05-01T00:00:00Z&data_fim=2025-05-31T23:59:59Z' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const params = new URLSearchParams({
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z'
});
fetch(`http://localhost:3000/api/auditoria/estatisticas?${params.toString()}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.json())
.then(data => console.log('Estatísticas de auditoria:', data))
.catch(error => console.error('Erro ao buscar estatísticas de auditoria:', error));
Resposta de Sucesso (200 OK)
{
"periodo": {
"inicio": "2025-05-01T00:00:00Z",
"fim": "2025-05-31T23:59:59Z"
},
"total_registros": 1250,
"por_nivel": {
"info": 1150,
"alerta": 75,
"erro": 20,
"critico": 5
},
"por_operacao": {
"criar": 200,
"atualizar": 800,
"excluir": 50,
"visualizar": 150,
"autenticar": 50
},
"por_entidade": {
"analise": 500,
"usuario": 100,
"fluxo_alcada": 300,
"parecer": 200,
"documento": 150
},
"por_usuario": [
{
"usuario_id": "550e8400-e29b-41d4-a716-446655440003",
"nome": "João Silva",
"total": 450
},
{
"usuario_id": "550e8400-e29b-41d4-a716-446655440004",
"nome": "Maria Oliveira",
"total": 350
},
{
"usuario_id": "550e8400-e29b-41d4-a716-446655440005",
"nome": "Carlos Santos",
"total": 300
}
],
"por_dia": [
{
"data": "2025-05-01",
"total": 45
},
{
"data": "2025-05-02",
"total": 38
},
// ... outros dias
{
"data": "2025-05-31",
"total": 42
}
]
}
Middleware de Auditoria Automática
O sistema utiliza um middleware de auditoria que registra automaticamente operações realizadas através da API. Este middleware pode ser configurado para monitorar rotas específicas e capturar detalhes das operações.
Exemplo de Configuração do Middleware
// Exemplo de configuração do middleware de auditoria
const auditMiddleware = require('../middlewares/audit.middleware');
// Aplicar middleware em rotas específicas
router.post('/analises', auditMiddleware('criar', 'analise'), analisesController.criarAnalise);
router.put('/analises/:id', auditMiddleware('atualizar', 'analise'), analisesController.atualizarAnalise);
router.delete('/analises/:id', auditMiddleware('excluir', 'analise'), analisesController.excluirAnalise);
Exemplo de Implementação do Middleware
// Exemplo simplificado do middleware de auditoria
const auditService = require('../services/auditoria.service');
/**
* Middleware para registro automático de auditoria
* @param {string} operacao - Tipo de operação (criar, atualizar, excluir, etc.)
* @param {string} entidade - Tipo de entidade (analise, usuario, etc.)
*/
module.exports = (operacao, entidade) => {
return async (req, res, next) => {
// Armazenar resposta original para capturar após processamento
const originalSend = res.send;
// Capturar dados antes da operação
const dadosAnteriores = req.method === 'PUT' || req.method === 'DELETE' ?
await obterDadosEntidade(entidade, req.params.id) : null;
// Sobrescrever método send para capturar resposta
res.send = function(body) {
// Restaurar método original
res.send = originalSend;
// Processar resposta
const resposta = JSON.parse(body);
// Registrar auditoria apenas se operação foi bem-sucedida
if (res.statusCode >= 200 && res.statusCode < 300) {
const dadosAuditoria = {
entidade,
entidade_id: resposta.id || req.params.id,
operacao,
descricao: `${operacao.charAt(0).toUpperCase() + operacao.slice(1)} de ${entidade}`,
dados_anteriores: dadosAnteriores,
dados_novos: req.method !== 'DELETE' ? req.body : null,
nivel: 'info',
request_id: req.requestId
};
// Registrar auditoria de forma assíncrona
auditService.registrarOperacao(dadosAuditoria, req.userId)
.catch(err => console.error('Erro ao registrar auditoria:', err));
}
// Continuar com o envio da resposta
return originalSend.call(this, body);
};
next();
};
};
/**
* Função auxiliar para obter dados da entidade antes da operação
*/
async function obterDadosEntidade(entidade, id) {
try {
// Implementação específica para cada tipo de entidade
// ...
} catch (error) {
console.error(`Erro ao obter dados anteriores de ${entidade}:`, error);
return null;
}
}
Visualização de Dados de Auditoria
Os dados de auditoria podem ser visualizados de várias formas:
1. Timeline de Eventos
// Exemplo usando uma biblioteca de timeline
function renderTimeline(historico) {
const timelineData = historico.map(item => ({
id: item.id,
content: `${item.descricao} por ${item.usuario.nome}`,
start: new Date(item.timestamp),
title: `${item.operacao.toUpperCase()}: ${JSON.stringify(item.dados_novos || item.dados)}`,
className: `timeline-item-${item.nivel}`
}));
const timeline = new Timeline(
document.getElementById('timeline-container'),
timelineData,
{
min: new Date(historico[0].timestamp),
max: new Date(historico[historico.length - 1].timestamp),
zoomable: true
}
);
}
2. Gráficos de Estatísticas
// Exemplo usando Chart.js para estatísticas por operação
const ctx = document.getElementById('operacoesChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'pie',
data: {
labels: ['Criar', 'Atualizar', 'Excluir', 'Visualizar', 'Autenticar'],
datasets: [{
data: [200, 800, 50, 150, 50],
backgroundColor: [
'rgba(75, 192, 192, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 99, 132, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(153, 102, 255, 0.2)'
],
borderColor: [
'rgba(75, 192, 192, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 99, 132, 1)',
'rgba(255, 206, 86, 1)',
'rgba(153, 102, 255, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Distribuição de Operações'
}
}
}
});
Melhores Práticas
- Dados Sensíveis: Evite registrar dados sensíveis (senhas, tokens, informações pessoais) nos logs de auditoria.
- Níveis Adequados: Use níveis de severidade adequados para cada tipo de operação.
- Retenção de Logs: Implemente políticas de retenção de logs para gerenciar o volume de dados.
- Consultas Eficientes: Use filtros adequados ao consultar logs para melhorar a performance.
- Monitoramento Proativo: Configure alertas para operações críticas ou padrões suspeitos.
Próximos Passos
Agora que você entende como utilizar o sistema de auditoria, pode explorar:
- Retenção de Logs - Para gerenciar o ciclo de vida dos logs de auditoria
- Exportação - Para exportar logs de auditoria em diferentes formatos
- Dashboards - Para visualizar estatísticas de auditoria em painéis personalizados