Pengaturan Instalasi Prometheus dan Grafana
Prometheus dan Grafana adalah tools populer terkait sistem monitoring. Beberapa alasan kepopulerannya antara lain adalah karena kedua tools tersebut merupakan open source dan mudah untuk digunakan. Prometheus digunakan untuk mengambil (scrapping) metrics yang ada pada suatu endpoint berdasarkan interval tertentu. Endpoint bisa berupa server maupun aplikasi. Sedangakan Grafana digunakan sebagai tool untuk melakukan visualisasi yang tidak hanya terbatas pada metrics yang dikumpulkan oleh Prometheus.
Arsitektur Sistem Monitoring
Implementasi projects ini akan dibangun menggunakan arsitektur dari infrastuktur berikut.
Arsitektur Project Sistem Monitoring
Projects ini merupakan VM-based, jadi tidak menggunakan Docker atau container engine lain dalam penerapannya. Setiap satu ikon merepresentasikan sebuah server atau node yang berupa VM (Virtual Machine).
Walaupun project-nya VM-based, tidak akan ada perbedaan yang signifikan bila coba diterapkan dengan menggunakan Docker.
Informasi Lingkungan Project
Semua sistem operasi yang terdapat pada VM yang ada menggunakan Ubuntu LTS versi 24.04. Berikut beberapa informasi terkait lingkungan perangkat lunak projects yang digunakan.
| Sistem | Nama Aplikasi/Tools/dsb | Deskripsi | Versi |
|---|---|---|---|
| Server Endpoint | Node Exporter | Agent yang digunakan untuk mengumpulkan dan mengekspos metrics ke servis Prometheus. | 1.9.1 |
| Server Monitoring | Prometheus | Servis yang digunakan untuk mengambil metrics dari agent/exporter. | 2.53.4 |
| Server Monitoring | Grafana | Servis untuk visualisasi metrics. | 12.0.2 |
| Database | PostgreSQL/MySQL | Servis untuk menyimpan database dari Grafana. | PostgreSQL (16.9), MySQL (8.0.42) |
Instalasi Prometheus
Berikut merupakan langkah instalasi dan pengaturan servis Prometheus.
Membuat dedicated user untuk servis Prometheus.
1 2 3 4
sudo useradd \ --system \ --no-create-home \ --shell /bin/false prometheusDownload package Prometheus, contoh dalam dokumentasi ini menggunakan versi 2.52.0.
1
wget https://github.com/prometheus/prometheus/releases/download/v2.53.4/prometheus-2.53.4.linux-amd64.tar.gzEkstrak file Prometheus.
1
tar -xvf prometheus-2.53.4.linux-amd64.tar.gzMasuk ke direktori file hasil ekstrak.
1
cd prometheus-2.52.0.linux-amd64Membuat direktori untuk servis Prometheus.
1
sudo mkdir -p /data /etc/prometheusPindahkan files Prometheus hasil ekstrak ke direktori-direktori terkait.
1 2 3
sudo mv prometheus promtool /usr/local/bin/ sudo mv consoles/ console_libraries/ /etc/prometheus/ sudo mv prometheus.yml /etc/prometheus/prometheus.ymlAtur ownership direktori-direktori terkait Prometheus.
1
sudo chown -R prometheus:prometheus /etc/prometheus/ /data/Verifikasi instalasi Prometheus.
1
prometheus --versionAtur Prometheus sebagai systemd service.
1
sudo nano /etc/systemd/system/prometheus.serviceIsi konten file yang barusan dibuat dengan pengauran berikut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target StartLimitIntervalSec=500 StartLimitBurst=5 [Service] User=prometheus Group=prometheus Type=simple Restart=on-failure RestartSec=5s ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/data \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.enable-lifecycle [Install] WantedBy=multi-user.targetStart dan enable servis Prometheus.
1 2
sudo systemctl start prometheus sudo systemctl enable prometheusLalu cek servisnya.
1
sudo systemctl status prometheus
Instalasi Node Exporter
Node Exporter akan digunakan sebagai agent untuk mengumpulkan metrics terkait host/server berbasis Linux. Jika host menggunakan Windows Server, maka agent-nya dapat digantikan dengan menggunakan Windows exporter.
Beberapa metrics yang dapat dikumpulkan oleh Node Exporter, antara lain:
- Penggunaan CPU,
- penggunaan memori (RAM),
- kapasitas disk,
- besar disk I/O (Input/Output),
- besar network transmit/receive,
- dsb.
Berikut langkah-langkah yang dilakukan untuk melakukan instalasi dan pengaturan Node Exporter di server endpoint.
Membuat sistem user untuk servis Node Exporter.
1 2 3 4
sudo useradd \ --system \ --no-create-home \ --shell /bin/false node_exporterDownload package Node Exporter, contoh dalam dokumentasi ini menggunakan versi 1.9.1.
1
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gzEkstrak file Node Exporter.
1
sudo tar -xvf node_exporter-1.9.1.linux-amd64.tar.gzPindahkan file binari Node Exporter ke direktori /usr/local/bin.
1
sudo mv node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin/Atur Node Exporter sebagai systemd service.
1
sudo nano /etc/systemd/system/node_exporter.serviceIsi konten file yang barusan dibuat dengan pengaturan berikut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[Unit] Description=Node Exporter Wants=network-online.target After=network-online.target StartLimitIntervalSec=500 StartLimitBurst=5 [Service] User=node_exporter Group=node_exporter Type=simple Restart=on-failure RestartSec=5s ExecStart=/usr/local/bin/node_exporter \ --collector.logind [Install] WantedBy=multi-user.targetStart dan enable servis Node Exporter.
1 2
sudo systemctl start node_exporter sudo systemctl enable node_exporterLalu cek servisnya.
1
sudo systemctl status node_exporterAtur IP whitelist agar hanya Node Exporter bisa diakses oleh servis Prometheus saja.
1
sudo ufw allow from <ip-prometheus> to any port 9100
File Pengaturan Prometheus
Berdasarkan cara instalasi dan pengaturan di atas, file pengaturan servis Prometheus terletak di /etc/prometheus/prometheus.yml. Kita bisa menggunakan berbagai macam exporter yang tersedia untuk berbagai aplikasi/endpoint, sesuai dengan kebutuhan, serta cara instalasi yang hampir mirip seperti Node Exporter di atas.
Setelah kita berhasil menginstalasi exporter di endpoint yang digunakan. Hal selanjutnya adalah memasukkan informasi terkait endpoint ke file pengaturan servis Prometheus. Berikut merupakan langkah selanjutnya untuk mengatur integrasi antara Node Exporter dan Servis Prometheus.
Silakan buka file pengaturan servis Prometheus.
1
sudo nano /etc/prometheus/prometheus.ymlTambahkan Node Exporter di atas sebagai target di servis Prometheus, letakkan di paling bawah file pengaturan.
1 2 3 4 5 6
... - job_name: '<server-name>-node_exporter' static_configs: - targets: ["<ip-endpoint>:9100"] labels: hostname: <server-name>
Validasi sintaks file konfigurasi Prometheus.
1
sudo promtool check config /etc/prometheus/prometheus.ymlRestart servis Prometheus.
1 2
sudo systemctl restart prometheus sudo systemctl status prometheus
Instalasi Grafana
Berikut merupakan langkah instalasi servis Grafana.
Instalasi packages yang dibutuhkan.
1
sudo apt-get install -y apt-transport-https software-properties-common wgetImpor GPG key.
1 2
sudo mkdir -p /etc/apt/keyrings/ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Tambahkan repositori untuk rilis versi stabil.
1
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.listInstal servis Grafana.
1 2
sudo apt-get update sudo apt-get install grafanaEnable servis Grafana.
1
sudo systemctl enable grafana-server.serviceLalu cek servisnya.
1
sudo systemctl status grafana-server.service
Pengaturan Database
Secara default, Grafana menggunakan SQLite sebagai database-nya dan terletak di satu server yang sama. Namun, database tersebut kurang cocok untuk digunakan di level production yang mempunyai skala yang besar. Oleh karena itu, pada tutorial kali ini, saya akan menggunakan PostgreSQL atau MySQL (Pilih salah satu) sebagai database servis Grafana. Database dan servis Grafana akan berada pada server (VPS) yang berbeda. Pastikan server tempat servis Grafana dan server tempat database berada dalam satu network/ VPC agar latensi koneksinya rendah. Berikut merupakan cara instalasi dan pengaturan pada kedua database tersebut agar bisa terhubung ke servis Grafana.
Instalasi dan Pengaturan PostgreSQL
Berikut merupakan cara instalasi dan pengaturan PostgreSQL agar bisa terhubung ke servis Grafana.
Install servis PostgreSQL melalui command berikut.
1
sudo apt install postgresql postgresql-contribStart dan enable servis PostgreSQL agar bisa langsung dijalankan setelah server sedang di-reboot atau di-restart.
1 2
sudo systemctl start postgresql.service sudo systemctl enable postgresql.serviceLalu cek servisnya.
1
sudo systemctl status postgresql.serviceLogin ke akun default postgres.
1
sudo -i -u postgresAkun postgres adalah akun default yang tercipta pertama kali ketika kita menginstalasi servis PostgreSQL.
Buat user dan database yang ingin digunakan di servis Grafana.
1 2
createuser <grafana-db-user> createdb <grafana-db-name> -O <grafana-db-user>
Masuk ke psql.
1
psqlPasang password pada user yang tadi dibuat.
1
ALTER USER <grafana-db-user> WITH ENCRYPTED PASSWORD '<grafana-db-password>';
Atur akses remote ke servis PostgreSQL. Pertama buka file postgresql.conf.
1
sudo nano /etc/postgresql/16/main/postgresql.confSecara default, versi servis PostgreSQL yang terpasang di Ubuntu Server 24.04 melalui
sudo apt install postgresqladalah 16.Hapus comment pada baris yang terdapat
#listen_addresses = 'localhost'. Ubah menjadi seperti dibawah ini:1 2 3
... listen_addresses = '*' ...
Lalu buka file pg_hba.conf.
1
sudo nano /etc/postgresql/16/main/pg_hba.confLihat bagian di bawah konfigurasi
# IPv4 local connections:, modifikasi bagian IP address yang bernilai127.0.0.1/32menjadi0.0.0.0/0sehingga menjadi seperti berikut.1 2 3 4
... # IPv4 local connections: host all all 0.0.0.0/0 scram-sha-256 ...
Restart servis PostgreSQL.
1
2
sudo systemctl restart postgresql
sudo systemctl status postgresql
Atur IP whitelist agar hanya server-server tertentu saja yang bisa mengakses servis PostgreSQL.
1
sudo ufw allow from <private-ip-grafana> to any port 5432
Atur koneksi database Grafana. Masuk ke file grafana.ini.
1
sudo nano /etc/grafana/grafana.iniPada bagian
[database], hapus comment berbentuk tanda;pada baris berikut, lalu isi seperti di bawah ini:1 2 3 4 5 6 7 8 9 10
... [database] type = postgres host = <private-ip-postgresql>:5432 name = <grafana-db-name> user = <grafana-db-user> password = <grafana-db-password> ...
Restart servis Grafana.
1 2
sudo systemctl restart grafana-server.service sudo systemctl status grafana-server.serviceMasuk ke aplikasi Grafana melalui
http://<public-ip-grafana>:3000atau melalui domain https jika Anda memasang domain untuk aplikasi Grafana. Masukkan kredensial akun sebagai berikut.username password admin admin
Instalasi dan Pengaturan MySQL
Berikut merupakan cara instalasi dan pengaturan MySQL agar bisa terhubung ke servis Grafana.
Install servis MySQL melalui command berikut.
1
sudo apt install mysql-serverStart dan enable servis MySQL agar bisa langsung dijalankan setelah server sedang di-reboot atau di-restart.
1 2
sudo systemctl start mysql.service sudo systemctl enable mysql.serviceLalu cek servisnya.
1
sudo systemctl status mysql.serviceJalankan security script instalasi servis MySQL melalui command berikut.
1
sudo mysql_secure_installationPilih/isi semua pilihan yang ada di instruksi prompt sesuai kebutuhan atau best prectice. Pada saat memasukkan password akun
root, pastikan untuk mengingatnya.Masuk ke servis MySQL melalui akun root, lalu masukkan password.
1
sudo mysql -u root -pMembuat database untuk servis Grafana.
1
CREATE DATABASE <grafana-db-name>;
Membuat akun berupa user dan password dengan batasan IP dari server tempat servis Grafana berada.
1
CREATE USER '<grafana-db-user>'@'<private-ip-grafana>' IDENTIFIED WITH mysql_native_password BY '<grafana-db-password>';
Jika terjadi kendala karena muncul respons berikut “Your password does not satisfy the current policy requirements”, atur pengaturan
policy passworddi MySQL menjadilow.1
SET GLOBAL validate_password.policy=LOW;
Berikan akses user tersebut ke database Grafana yang baru dibuat.
1
GRANT ALL PRIVILEGES ON <grafana-db-name>.* TO '<grafana-db-user>'@'<private-ip-grafana>' WITH GRANT OPTION;
Reload pengaturan terkait akses database.
1
FLUSH PRIVILEGES;
Konfirmasi nama database Grafana beserta owner aksesnya.
1
SELECT user,host,db FROM mysql.db;
Lalu keluar dari servis MySQL.
1
exitAtur akses remote ke servis MySQL. Pertama buka file /etc/mysql/mysql.conf.d/mysqld.cnf.
1
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfUbah pengaturan
bind-addressdari 127.0.01 menjadi 0.0.0.0.1 2 3
... bind-address = 0.0.0.0 ...
Restart servis MySQL.
1
sudo systemctl start mysql.serviceAtur IP whitelist agar hanya server-server tertentu saja yang bisa mengakses servis MySQL.
1
sudo ufw allow from <private-ip-grafana> to any port 3306
Atur koneksi database Grafana. Masuk ke file grafana.ini.
1
sudo nano /etc/grafana/grafana.iniPada bagian
[database], hapus comment berbentuk tanda;pada baris berikut, lalu isi seperti di bawah ini:1 2 3 4 5 6 7 8 9 10
... [database] type = mysql host = <private-ip-mysql>:3306 name = <grafana-db-name> user = <grafana-db-user> password = <grafana-db-password> ...
Restart servis Grafana.
1 2
sudo systemctl restart grafana-server.service sudo systemctl status grafana-server.serviceMasuk ke aplikasi Grafana melalui
http://<public-ip-grafana>:3000atau melalui domain https jika Anda memasang domain untuk aplikasi Grafana. Masukkan kredensial akun sebagai berikut.username password admin admin
Integrasi Prometheus ke Grafana
Untuk melakukan integrasi Prometheus ke Grafana, pastikan koneksi antar servis terhubung. Jika servis Prometheus dan Grafana berada di satu server yang sama, maka otomatis sudah terhubung. Namun, jika berada di server yang berbeda, silakan atur firewall atau IP whitelist-nya terlebih dahulu. IP whitelist diatur pada server tempat servis Prometheus berada. Berikut command yang digunakan.
1
sudo ufw allow from *ip-grafana* to any port 9090
Untuk pengecekan koneksi apakah sudah terhubung atau belum, silakan cek melalui command berikut di server tempat servis Grafana berada.
1
nc -zv <ip-prometheus> 9090
Jika terdapat kata succeeded!, maka koneksi antar servis berhasil terhubung.
Pada aplikasi Grafana, kita perlu melakukan integrasi ke servis Prometheus untuk melakukan visualisasi metrics yang tertangkap. Berikut langkah-langkahnya.
Masuk ke aplikasi Grafana. Lalu, pada bagian navigasi menu di sebelah kiri aplikasi Grafana, pilih Add new connection di bagian Connection.
Search dan pilih Prometheus. Lalu klik Add new data source.
Isi pengaturan Name dengan prometheus (silakan sesuaikan dengan keinginan). Lalu isi juga pengaturan URL di bagian Connection dengan format
http://<ip-prometheus>:9090. Jika servis Prometheus dan servis Grafana berada di satu server, silakan gunakan formathttp://localhost:9090Biarkan sisa pengaturan lain dengan nilai default.Klik Save & test. Pastikan muncul pemberitahuan “Data source successfully connected.” yang menunjukkan bahwa integrasi Prometheus ke Grafana berhasil.