> ## Content Index
> Fetch the complete content index at: https://noctis.id/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Cara Monitoring Server FiveM dengan Prometheus dan Grafana
- URL: https://noctis.id/blog/monitoring-fivem-prometheus-grafana/
- Published: 2026-10-18T21:36:24.000Z
- Updated: 2026-10-18T21:36:24.000Z
- Description: Tutorial monitoring server FiveM: exporter host, database, dan FXServer, aturan alert dasar, serta dashboard Grafana untuk melihat masalah sebelum pemain mengeluh.
- Author: Noctis
- Tags: FiveM, Server Engineering

Kebanyakan owner server FiveM baru tahu ada masalah setelah pemain ramai mengeluh di Discord: server mati tengah malam, RAM penuh pelan-pelan, atau CPU melonjak setiap jam ramai. Dengan monitoring, kamu bisa melihat masalah itu lebih dulu, lengkap dengan grafik kapan mulainya.

Panduan ini menyiapkan stack monitoring yang umum dipakai di dunia server Linux: **Prometheus** untuk mengumpulkan metrik, **Grafana** untuk dashboard, dan beberapa *exporter* untuk server, database, serta FXServer. Contoh memakai Ubuntu 24.04, tapi langkahnya mirip di distro lain.

## Arsitektur yang akan kita bangun

- **node\_exporter**: metrik host (CPU, RAM, disk, jaringan, steal time).
- **mysqld\_exporter**: metrik MariaDB/MySQL (koneksi, query lambat, throughput).
- **Exporter FiveM sederhana**: script kecil yang membaca endpoint HTTP FXServer dan mengubahnya menjadi metrik Prometheus, misalnya jumlah pemain dan status server.
- **Prometheus**: mengambil (scrape) metrik dari exporter setiap beberapa detik dan menyimpannya.
- **Grafana**: membaca Prometheus dan menampilkan dashboard serta alert.

Idealnya Prometheus dan Grafana berjalan di mesin terpisah dari server FiveM, misalnya VPS kecil. Dengan begitu, kalau server FiveM mati total, sistem monitoring tetap bisa memberi tahu kamu. Untuk server kecil, menjalankan semuanya di satu mesin masih bisa, asalkan kamu tahu batasannya.

## Langkah 1: install node\_exporter di server FiveM

Paket dari repositori Ubuntu paling mudah dipasang:

```bash
sudo apt update
sudo apt install prometheus-node-exporter
systemctl status prometheus-node-exporter
curl -s http://127.0.0.1:9100/metrics | head
```

Versi di repositori distro bisa sedikit tertinggal. Kalau butuh versi terbaru, ambil binary dari [rilis resmi node\_exporter](https://github.com/prometheus/node%5Fexporter/releases?ref=noctis.id).

## Langkah 2: install mysqld\_exporter

Buat user database khusus monitoring dengan hak terbatas:

```sql
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password-kuat' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
```

Lalu pasang exporter dan simpan kredensial di file konfigurasi. Cara konfigurasi kredensial berbeda antar versi exporter, jadi ikuti [README mysqld\_exporter](https://github.com/prometheus/mysqld%5Fexporter?ref=noctis.id) sesuai versi yang kamu pasang. Secara default exporter ini mendengarkan di port 9104.

```bash
sudo apt install prometheus-mysqld-exporter
curl -s http://127.0.0.1:9104/metrics | grep mysql_up
```

Nilai `mysql_up 1` berarti exporter berhasil terhubung ke database.

## Langkah 3: exporter FiveM sederhana

FXServer menyediakan endpoint HTTP di port game (default 30120) yang dipakai server list, seperti `/info.json`, `/dynamic.json`, dan `/players.json`. Kita bisa membacanya dari localhost dan menerjemahkannya ke format teks Prometheus. Isi dan ketersediaan endpoint bisa dipengaruhi konfigurasi server, jadi cek dulu di server kamu:

```bash
curl -s http://127.0.0.1:30120/dynamic.json
curl -s http://127.0.0.1:30120/players.json | head -c 300
```

Kalau keduanya mengembalikan JSON, buat exporter kecil dengan Node.js (tanpa dependency tambahan, karena Node 18+ sudah punya `fetch`):

```javascript
// /opt/fivem-exporter/index.mjs
import { createServer } from "node:http";

const TARGET = process.env.FIVEM_URL || "http://127.0.0.1:30120";
const PORT = Number(process.env.PORT) || 9184;

async function getJson(path) {
  const res = await fetch(TARGET + path, { signal: AbortSignal.timeout(3000) });
  if (!res.ok) throw new Error(path + " HTTP " + res.status);
  return res.json();
}

async function metrics() {
  const start = Date.now();
  try {
    const [dyn, players] = await Promise.all([getJson("/dynamic.json"), getJson("/players.json")]);
    const pings = players.map((p) => p.ping).filter((n) => Number.isFinite(n));
    const avgPing = pings.length ? pings.reduce((a, b) => a + b, 0) / pings.length : 0;
    return [
      "fivem_up 1",
      `fivem_players ${players.length}`,
      `fivem_max_players ${Number(dyn.sv_maxclients) || 0}`,
      `fivem_players_avg_ping_ms ${avgPing.toFixed(1)}`,
      `fivem_scrape_duration_seconds ${(Date.now() - start) / 1000}`,
    ];
  } catch {
    return ["fivem_up 0", `fivem_scrape_duration_seconds ${(Date.now() - start) / 1000}`];
  }
}

createServer(async (req, res) => {
  if (req.url !== "/metrics") { res.writeHead(404).end(); return; }
  res.writeHead(200, { "Content-Type": "text/plain; version=0.0.4" });
  res.end((await metrics()).join("\n") + "\n");
}).listen(PORT, "0.0.0.0");
```

Jalankan sebagai service systemd:

```bash
sudo tee /etc/systemd/system/fivem-exporter.service >/dev/null <<'EOF'
[Unit]
Description=FiveM Prometheus exporter
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/fivem-exporter/index.mjs
Restart=always
User=nobody

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now fivem-exporter
curl -s http://127.0.0.1:9184/metrics
```

Exporter ini sengaja minimal. Ia memberi sinyal paling berguna untuk alert: apakah server merespons, dan berapa pemain yang online. Untuk metrik performa per resource, kamu tetap butuh profiler bawaan FiveM; lihat [cara menggunakan resmon dan profiler FiveM](https://noctis.id/blog/fivem-resmon-profiler/).

## Langkah 4: amankan port exporter

Exporter tidak punya autentikasi. Jangan biarkan port 9100, 9104, dan 9184 terbuka ke internet. Izinkan hanya IP server Prometheus:

```bash
# ganti 203.0.113.10 dengan IP server monitoring kamu
sudo ufw allow from 203.0.113.10 to any port 9100,9104,9184 proto tcp
```

Pastikan aturan UFW ini tidak mengganggu port game. Port FiveM yang harus tetap terbuka adalah 30120 TCP/UDP, dan 40120 TCP untuk txAdmin (sebaiknya dibatasi ke IP admin).

## Langkah 5: install Prometheus

Di server monitoring:

```bash
sudo apt install prometheus
```

Edit `/etc/prometheus/prometheus.yml` dan tambahkan target:

```yaml
global:
  scrape_interval: 15s

rule_files:
  - /etc/prometheus/fivem-rules.yml

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ["IP_SERVER_FIVEM:9100"]
  - job_name: mysql
    static_configs:
      - targets: ["IP_SERVER_FIVEM:9104"]
  - job_name: fivem
    static_configs:
      - targets: ["IP_SERVER_FIVEM:9184"]
```

Buka antarmuka Prometheus di port 9090, menu *Status → Targets*. Semua target harus berstatus UP.

## Langkah 6: aturan alert dasar

Buat `/etc/prometheus/fivem-rules.yml`:

```yaml
groups:
  - name: fivem
    rules:
      - alert: FiveMDown
        expr: fivem_up == 0
        for: 2m
        annotations:
          summary: "FXServer tidak merespons selama 2 menit"
      - alert: HostMemoryHigh
        expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.9
        for: 10m
        annotations:
          summary: "RAM terpakai di atas 90% selama 10 menit"
      - alert: DiskAlmostFull
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.1
        for: 15m
        annotations:
          summary: "Sisa disk root di bawah 10%"
      - alert: MySQLDown
        expr: mysql_up == 0
        for: 1m
        annotations:
          summary: "Database tidak bisa dihubungi"
```

Validasi dan muat ulang:

```bash
promtool check rules /etc/prometheus/fivem-rules.yml
sudo systemctl reload prometheus
```

Ambang di atas hanya titik awal. Setelah beberapa minggu, sesuaikan dengan pola server kamu supaya alert tidak terlalu sering berbunyi tanpa alasan.

## Langkah 7: Grafana dan dashboard

Install Grafana dari [repositori resmi Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/?ref=noctis.id), lalu buka port 3000, login, dan tambahkan Prometheus sebagai data source (`http://localhost:9090` kalau satu mesin).

Untuk metrik host, kamu bisa mengimpor dashboard komunitas "Node Exporter Full" dari galeri dashboard Grafana. Untuk FiveM, buat panel sendiri dengan query seperti:

| Panel                 | Query PromQL                                                         |
| --------------------- | -------------------------------------------------------------------- |
| Pemain online         | fivem\_players                                                       |
| Okupansi slot (%)     | 100 \* fivem\_players / fivem\_max\_players                          |
| Rata-rata ping pemain | fivem\_players\_avg\_ping\_ms                                        |
| CPU terpakai (%)      | 100 - avg(rate(node\_cpu\_seconds\_total{mode="idle"}\[5m\])) \* 100 |
| Steal time (%)        | avg(rate(node\_cpu\_seconds\_total{mode="steal"}\[5m\])) \* 100      |
| Query database/detik  | rate(mysql\_global\_status\_queries\[5m\])                           |

Menaruh jumlah pemain dan CPU di dashboard yang sama sangat membantu. Kamu bisa melihat apakah lonjakan CPU mengikuti jumlah pemain (beban wajar), atau muncul tanpa kenaikan pemain (sering kali tanda resource bermasalah atau proses lain seperti backup).

Kirim notifikasi ke Discord melalui fitur alerting Grafana dengan *contact point* bertipe Discord dan URL webhook dari channel staf kamu.

## Bagaimana dengan hitch warning?

Peringatan `server thread hitch warning` muncul di log console, bukan sebagai metrik. Kalau ingin menghitungnya, kirim log FXServer ke sistem log seperti Grafana Loki, lalu buat query yang menghitung baris berisi "hitch warning" per menit. Untuk memahami penyebab dan cara mengatasinya, baca [cara mengatasi FiveM server hitch warning](https://noctis.id/blog/fivem-server-hitch-warning/).

## Cara membaca data monitoring

- **RAM naik terus tanpa turun**: kemungkinan ada resource yang menyimpan data tanpa pernah dibersihkan. Cek dengan restart resource satu per satu di server staging.
- **Steal time tinggi saat jam ramai**: CPU sedang dibagi dengan tenant lain di host yang sama. Lihat [perbandingan VPS, VDS, dan dedicated untuk FiveM](https://noctis.id/blog/vps-vs-vds-vs-dedicated-fivem/).
- **Disk naik cepat**: biasanya log atau backup lokal yang tidak dirotasi. Lihat [panduan backup dan restore database FiveM](https://noctis.id/blog/backup-restore-database-fivem/).
- **Query database melonjak**: cari resource yang melakukan query di dalam loop. Tips lainnya ada di [cara optimasi server FiveM](https://noctis.id/blog/optimasi-server-fivem/).

## Kesimpulan

Dengan node\_exporter, mysqld\_exporter, exporter FiveM kecil, Prometheus, dan Grafana, kamu punya gambaran lengkap tentang kondisi server dan alert sebelum pemain mengeluh. Mulai dari empat alert dasar di atas, lalu tambah panel dan alert sesuai masalah yang benar-benar muncul di server kamu.

**Ingin menjalankan FXServer dan stack monitoring dengan root penuh di core yang tidak dibagi?** Lihat [Hosting FiveM Noctis](https://noctis.id/id/fivem-hosting/?ref=noctis.id). Untuk server monitoring terpisah, [Cloud VPS](https://noctis.id/id/vps/?ref=noctis.id) kecil sudah cukup.