Pular para o conteúdo
Blog

Logs do FiveM: onde os webhooks do Discord falham e o que usar

Logs por webhook do Discord batem em limites, não dá para buscar por jogador e perdem os anexos. Como registrar com ox_lib e transformar em provas.

Por Termi

5 min de leitura
  • Logs
  • ox_lib
  • Discord
  • Evidence
Nesta página

A maioria dos servidores de FiveM registra do mesmo jeito: um canal do Discord por categoria, como dinheiro, mortes e comandos de admin, e uma URL de webhook em cada script. No primeiro mês funciona. Depois chega um recurso de banimento sobre algo de três semanas atrás, e alguém rola por milhares de embeds atrás de uma única licença. Este guia mostra onde o log pelo Discord falha, como enviar logs estruturados com ox_lib e como transformá-los em provas que você pode mostrar ao jogador.

Onde o log pelo Discord falha

  • Limites de taxa. O Discord limita a velocidade com que um webhook pode postar. Numa noite movimentada, com cada transferência, morte e movimento de item registrados, as requisições voltam com 429 Too Many Requests, e um script que não tenta de novo perde essa linha.
  • Sem visão por jogador. Para achar tudo sobre um jogador, você busca em cada canal separadamente e refaz a ordem na mão.
  • Os anexos expiram. Screenshots postados por um webhook ganham links assinados que deixam de funcionar fora do Discord, então um link copiado para um ticket quebra.
  • Qualquer um com a URL pode postar. A URL de um webhook funciona como uma senha. Se ela está num script do cliente, os jogadores podem lê-la e postar o que quiserem no seu canal de logs.
  • Todo leitor vê tudo. As permissões de canal são tudo ou nada, então um moderador em teste que pode ler o canal de dinheiro vê todos os identificadores registrados ali.

Envie logs estruturados com ox_lib

O ox_lib, que a maioria dos servidores ESX, QBCore e Qbox já roda, tem um logger do lado do servidor. Uma chamada onde a ação acontece substitui uma requisição de webhook:

server.lua
RegisterNetEvent('bank:transfer', function(to, amount)
    local src = source
    if not Bank.transfer(src, to, amount) then return end
    lib.logger(src, 'money.transfer', ('sent $%d to %s'):format(amount, to), 'amount:' .. amount, 'to:' .. to)
end)

Os argumentos são o ID de servidor do jogador, um nome de evento, uma mensagem e quantas tags chave:valor você quiser. O ox_lib adiciona sozinho o nome e os identificadores do jogador a cada linha, junta as linhas em lotes e as envia ao serviço indicado num convar:

server.cfg
set ox:logger "fivemanage"
set fivemanage:key "fd_live_…"
set fivemanage:dataset "city"

O ox_lib traz três serviços: Datadog, Grafana Loki e Fivemanage. O Fivemanage guarda os logs por 15 dias no plano grátis e no de 8 USD, por 90 dias no Pro a 24 USD e por 180 dias no Network a 79 USD.

Envie para o FiveDock

O FiveDock aceita, sem alterações, os lotes que o logger do Fivemanage no ox_lib envia. O ox_lib guarda esse endereço numa linha de imports/logger/providers/fivemanage.lua. Aponte-a para o FiveDock e use um token de API do FiveDock com o escopo logs:write como fivemanage:key:

ox_lib/imports/logger/providers/fivemanage.lua
endpoint = 'https://api.fivedock.dev/api/logs/batch',

Atualizar o ox_lib substitui esse arquivo, então mude a linha de novo depois de cada atualização ou mantenha-a numa cópia própria do ox_lib.

Cada linha chega à Black Box com a licença, o ID do Discord e o nome do jogador. Ao lado fica tudo o que o agente do FiveDock registra por conta própria: erros de script, reports feitos no jogo e screenshots.

Dos logs às provas

No Metro, a Black Box transforma essas linhas numa linha do tempo por jogador: todas as linhas registradas de uma licença, da entrada à transferência e ao screenshot, em ordem e com precisão de segundos. Um botão converte um trecho em um pacote de provas, um link que você pode entregar ao jogador que acabou de banir.

A busca cobre todos os jogadores, por licença, placa ou palavra, e você pode salvar uma busca que faz toda noite. Os alertas de economia vigiam as mesmas linhas em todos os planos: uma transferência acima de um limite, ou dinheiro ganho rápido demais, é postada no Discord. No Metro, o alerta também faz um backup naquele segundo, e os alertas de itens duplicados pegam o mesmo número de série em dois inventários.

O mascaramento por cargo do Metro mantém endereços reais e dados de pagamento longe dos trainees, algo que um canal do Discord não consegue fazer.

Por quanto tempo guardar os logs

Os recursos costumam chegar poucas semanas depois de um banimento. Guarde pelo menos 30 dias, o que o FiveDock City oferece por € 12 por mês. O Free guarda 7 dias, e o Metro guarda 90 dias mais um arquivo.

Comparado com o Fivemanage

O Fivemanage guarda os logs por mais tempo pelo preço: 90 dias no Pro a 24 USD, 180 dias no Network. Mesmo assim, um plano do FiveDock também inclui hospedagem de arquivos, backups do banco de dados, reports e contas de staff, então compare a conta inteira. Nossa comparação de hospedagem põe os dois lado a lado.

Perguntas frequentes

Como registro as ações dos jogadores em um servidor de FiveM?

Chame lib.logger do ox_lib no script de servidor onde a ação acontece, com o ID de servidor do jogador, um nome de evento e uma mensagem. O ox_lib adiciona os identificadores do jogador e envia lotes ao serviço definido em ox:logger. O FiveDock aceita o formato do Fivemanage do ox_lib e arquiva cada linha sob o jogador, então o staff lê o histórico de um jogador em ordem.

Webhooks do Discord servem para logs de FiveM?

Como canal de avisos para um servidor pequeno, sim. Como registro, ficam devendo: os webhooks têm limites de taxa, os links dos anexos expiram, nada mostra um jogador através de vários canais, e qualquer um que ache a URL de um webhook pode postar nele.

Por quanto tempo um servidor de FiveM deve guardar os logs?

Pelo menos tanto quanto dure o seu prazo de recurso, geralmente de duas a quatro semanas. 30 dias bastam para a maioria dos servidores. Guarde 90 se você lida com pedidos de reembolso ou investigações longas.

Posso usar o logger do ox_lib sem o Fivemanage?

Sim. Defina ox:logger como datadog ou loki para esses serviços, ou mantenha fivemanage e troque o endereço dele pelo do FiveDock, que aceita os mesmos lotes.

Todos os artigos