O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Infra

Como monitorar seu servidor de MU Online com Grafana e Prometheus

Instale Prometheus e Grafana para monitorar CPU, memória, MySQL e jogadores online do seu servidor de MU Online em tempo real, com dashboards prontos e alertas automáticos antes que os jogadores sintam o problema.

RO Rodrigo · Atualizado em 23 jan 2019 · ⏱ 18 min de leitura
Resposta rápida

Administrar um servidor de MU Online sem monitoramento é como pilotar no escuro: você só descobre que o MySQL travou, que a CPU estourou ou que o GameServer caiu quando os jogadores já estão reclamando no Discord. Prometheus e Grafana formam a dupla padrão da indústria para observabilidade — o prime

Administrar um servidor de MU Online sem monitoramento é como pilotar no escuro: você só descobre que o MySQL travou, que a CPU estourou ou que o GameServer caiu quando os jogadores já estão reclamando no Discord. Prometheus e Grafana formam a dupla padrão da indústria para observabilidade — o primeiro coleta métricas de CPU, memória, disco, rede e banco de dados ao longo do tempo, e o segundo transforma esses dados em dashboards visuais e alertas automáticos. Este tutorial cobre a instalação de ambos, a configuração de exporters para MySQL e sistema operacional, a criação de um exporter customizado para jogadores online, dashboards prontos e alertas que avisam sua equipe antes que o jogador perceba o problema.

Por que monitorar de forma proativa

A maioria dos administradores de servidores privados só reage depois do problema — um pico de lag, uma queda do GameServer, um disco cheio que trava o MySQL. Com métricas históricas, você identifica padrões (por exemplo, o MySQL sempre engasga às 21h quando a população de jogadores atinge o pico) e age antes da reclamação aparecer no Discord. Monitoramento também é evidência concreta para justificar upgrades de hardware ou migração para dedicado, em vez de decisões baseadas em "impressão".

Visão geral da arquitetura

ComponenteFunção
PrometheusColeta e armazena métricas em séries temporais
Node ExporterExpõe métricas do sistema operacional (CPU, RAM, disco, rede)
MySQL ExporterExpõe métricas do MySQL (queries/s, conexões, slow queries)
Exporter customizadoExpõe jogadores online, contas ativas, guerra de castelo em andamento
GrafanaVisualiza as métricas em dashboards e dispara alertas visuais
AlertmanagerEnvia notificações (Discord, e-mail, Telegram) baseadas em regras

Pré-requisitos

  • Servidor Linux (ou WSL/dedicado Windows com adaptações) com acesso root/sudo.
  • Servidor de MU Online já rodando (veja o tutorial de criação de servidor).
  • Docker instalado (recomendado, simplifica a instalação de todo o stack).
  • Acesso de leitura ao MySQL para o exporter de banco.

Passo 1 — Instalar Prometheus e Grafana via Docker Compose

A forma mais simples de subir o stack inteiro é com Docker Compose, isolando cada serviço em seu próprio container.

version: "3.8"
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
  node_exporter:
    image: prom/node-exporter
    ports:
      - "9100:9100"
  mysqld_exporter:
    image: prom/mysqld-exporter
    environment:
      - DATA_SOURCE_NAME=exporter:senha@(mysql-host:3306)/
    ports:
      - "9104:9104"
docker compose up -d

Passo 2 — Configurar o Prometheus para coletar os exporters

Edite o prometheus.yml adicionando cada alvo (target) que o Prometheus deve consultar periodicamente:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node_exporter:9100']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld_exporter:9104']
  - job_name: 'mu_online'
    static_configs:
      - targets: ['mu_exporter:9200']

Reinicie o container do Prometheus e confirme em http://ip-do-servidor:9090/targets que todos os alvos aparecem como UP.

Passo 3 — Criar um usuário MySQL dedicado ao exporter

Nunca use a conta root do MySQL no exporter. Crie um usuário com permissões mínimas de leitura de métricas:

CREATE USER 'exporter'@'%' IDENTIFIED BY 'senha_forte' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

Passo 4 — Montar um exporter customizado para jogadores online

Não existe um exporter oficial para métricas específicas do MU Online, mas é simples montar um script periódico que consulta o banco (tabela de contas conectadas ou contagem via ConnectServer) e expõe o resultado em formato Prometheus:

from prometheus_client import Gauge, start_http_server
import mysql.connector
import time

jogadores_online = Gauge('mu_jogadores_online', 'Jogadores conectados no momento')

def coletar():
    conn = mysql.connector.connect(host="localhost", user="exporter", password="senha_forte", database="MuOnline")
    cursor = conn.cursor()
    cursor.execute("SELECT COUNT(*) FROM MEMB_STAT WHERE ConnectStat = 1")
    jogadores_online.set(cursor.fetchone()[0])
    conn.close()

if __name__ == "__main__":
    start_http_server(9200)
    while True:
        coletar()
        time.sleep(30)

Passo 5 — Conectar o Grafana ao Prometheus

Acesse http://ip-do-servidor:3000 (login padrão admin/admin na primeira vez), vá em Data Sources e adicione o Prometheus com a URL http://prometheus:9090. Salve e teste a conexão antes de seguir para os dashboards.

Passo 6 — Importar dashboards prontos

A comunidade Grafana disponibiliza dashboards prontos para Node Exporter (ID 1860) e MySQL Exporter (ID 7362), que você importa direto pelo ID na tela de Import Dashboard. Para as métricas customizadas do MU Online, monte um painel simples com um gráfico de linha usando a métrica mu_jogadores_online ao longo do tempo.

PainelMétricaTipo de gráfico sugerido
Jogadores onlinemu_jogadores_onlineLinha, últimas 24h
CPU do servidornode_cpu_seconds_totalLinha, com médias móveis
Conexões MySQLmysql_global_status_threads_connectedLinha
Slow queriesmysql_global_status_slow_queriesContador/barra
Uso de disconode_filesystem_avail_bytesGauge

Passo 7 — Configurar alertas com Alertmanager

Crie regras de alerta no Prometheus para condições críticas, como CPU acima de 90% por 5 minutos ou queda no número de jogadores online (indício de GameServer fora do ar):

groups:
  - name: mu_alerts
    rules:
      - alert: CPUAlta
        expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "CPU acima de 90% por 5 minutos"
      - alert: ServidorForaDoAr
        expr: mu_jogadores_online == 0
        for: 3m
        labels:
          severity: critical
        annotations:
          summary: "Nenhum jogador online — possível GameServer fora do ar"

Configure o Alertmanager com um webhook do Discord para receber essas notificações automaticamente no canal da equipe de administração.

Passo 8 — Definir retenção e backup das métricas

Configure a retenção do Prometheus (padrão 15 dias) de acordo com o espaço em disco disponível, e inclua o volume de dados do Prometheus e Grafana na rotina de backup do servidor, para não perder o histórico em caso de falha de disco.

Erros comuns e soluções

SintomaCausa provávelSolução
Target aparece como DOWN no PrometheusExporter não está rodando ou porta bloqueadaVerificar container/serviço e regras de firewall
Dashboard do Grafana sem dadosData source mal configuradoRevisar URL do Prometheus em Data Sources
Exporter do MySQL falha ao conectarUsuário/senha ou permissões incorretasRecriar usuário exporter com GRANT correto
Alerta não chega no DiscordWebhook do Alertmanager mal configuradoTestar webhook manualmente com curl
Métrica de jogadores online sempre zeroQuery customizada errada para o schema do emuladorAjustar query conforme a tabela real de sessões

Checklist de monitoramento

  • Prometheus, Grafana e exporters rodando via Docker Compose.
  • Targets todos com status UP no Prometheus.
  • Usuário MySQL dedicado ao exporter, com permissões mínimas.
  • Exporter customizado de jogadores online funcionando.
  • Dashboards importados e exibindo dados reais.
  • Regras de alerta configuradas para CPU, disco e queda de jogadores.
  • Alertmanager integrado ao Discord da equipe.
  • Retenção de dados e backup do stack de monitoramento definidos.

Com o monitoramento ativo, o próximo passo natural é cruzar essas métricas com o processo de resposta a incidentes da sua equipe — saber que o disco está enchendo não adianta se ninguém for notificado a tempo de agir; revise também o tutorial de criação de servidor de MU Online para garantir que a infraestrutura de base suporta esse nível de observabilidade.

Perguntas frequentes

Preciso saber programar para configurar Grafana e Prometheus?

Não é necessário programar, mas ajuda entender conceitos básicos de YAML (arquivos de configuração) e linha de comando Linux. A maior parte do trabalho é editar arquivos de configuração e importar dashboards prontos da comunidade, sem escrever código.

Grafana e Prometheus consomem muitos recursos do servidor?

Consomem recursos moderados — geralmente menos de 5% de CPU e algumas centenas de MB de RAM em um servidor de porte médio. Vale rodá-los em uma VM ou container separado do GameServer para não competir por recursos no pico de jogadores.

Consigo monitorar o número de jogadores online do MU Online diretamente?

Sim, com um exporter customizado (script que lê a contagem de conexões do ConnectServer ou consulta o banco de dados) que expõe essa métrica no formato que o Prometheus entende. Não existe um exporter oficial pronto, mas é simples de montar com um script periódico.

Qual a diferença entre Prometheus e Grafana?

Prometheus coleta e armazena as métricas ao longo do tempo (séries temporais); Grafana é a camada visual que lê essas métricas e monta os dashboards e alertas. Você precisa dos dois: um sem o outro só resolve metade do problema.

Como recebo um alerta no Discord quando o servidor cair?

Configure o Alertmanager (componente do ecossistema Prometheus) com um webhook do Discord, e crie regras de alerta no Prometheus para condições como 'GameServer fora do ar' ou 'CPU acima de 90% por 5 minutos'. O Alertmanager envia a notificação automaticamente para o canal configurado.

RO
Fundador e editor-chefe

Rodrigo mantém o ViciadosMU desde os primórdios do portal. Especialista em criação e administração de servidores de MU Online, história do jogo e a evolução das seasons — escreveu boa parte do acervo antes de 2024.

Continue lendo

Artigos relacionados