Tutorial monitoring Ubuntu Menggunakan Grafana, Prometheus, dan node exporter

sumber


Monitoring akan sangat membantu untuk memantau kondisi beberapa server yang ada. Pada metode monitoring kali ini kita akan mencoba monitoring menggunakan Grafana sebagai dashboard yang akan mempermudah memantau kondisi server, Prometheus yang bertugas sebagai data source yang mengumpulkan informasi setiap server melalui node export.

1. Prometheus

1a. Instalasi Prometheus

Tambahkan User baru,
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
Tambahkan beberapa folder pendukung dan rubah kepemilikan folder menjadi milik user prometheus,
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
kemudian download prometheus disini (sesuaikan dengan versi yang diinginkan). kali ini kita menggunakan Prometheus versi 2.17.1, berikut ini adalah proses download dan extract file hasil download:
wget https://github.com/prometheus/prometheus/releases/download/v2.17.1/prometheus-2.17.1.linux-amd64.tar.gz
tar xvzf prometheus-2.17.1.linux-amd64.tar.gz
Selanjutnya masuk kedalam folder hasil extract dan copy file - file yang dibutuhkan:
cd prometheus-2.17.1.linux-amd64/
sudo cp prometheus promtool /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo cp -R consoles/ console_libraries/ prometheus.yml /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
cd .. && rm -rf prometheus-*
setelah proses download dan instalasi prometheus selesai kita  perlu melakukan configurasi agar prometheus dapat digunakan.

1b. Configurasi Prometheus

rubah ini dari file prometheus.yml file ini berisikan configurasi yang akan digunakan oleh prometheus,
sudo nano /etc/prometheus/prometheus.yml
File konfigurasi Prometheus dibagi menjadi tiga bagian: global, rule_files, dan scrape_configs.
  • Pada bagian global kita dapat menemukan konfigurasi umum Prometheus
  • Blok rule_files berisi informasi lokasi dari semua aturan yang akan dimuat dalam prometheus. 
  • Blok terakhir dari file konfigurasi ini bernama scape_configs dan berisi informasi server yang dipantau oleh Prometheus.
secara sederhana kita dapat menggunakan configurasi berikut ini:
global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
Selanjutnya, kita dapat merunning untuk memastikan semua berjalan dengan baik.

1c. Running Prometheus

sebelum menjalankan prometheus secara automatis sebaiknya kita terlebih dahulu mencoba menjalankan prometheus secara manual dengan command berikut ini:
sudo -u prometheus /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries
maka pada terminal akan muncul sebagai berikut:
......
......
level=info ts=2020-04-04T17:39:58.822Z caller=manager.go:882 component="rule manager" msg="Stopping rule manager..."
level=info ts=2020-04-04T17:39:58.822Z caller=manager.go:892 component="rule manager" msg="Rule manager stopped"
level=info ts=2020-04-04T17:39:58.822Z caller=main.go:565 msg="Scrape manager stopped"
level=info ts=2020-04-04T17:39:58.825Z caller=notifier.go:598 component=notifier msg="Stopping notification manager..."
level=info ts=2020-04-04T17:39:58.825Z caller=main.go:738 msg="Notifier manager stopped"
level=info ts=2020-04-04T17:39:58.825Z caller=main.go:750 msg="See you next time!"
dalam kondisi saat ini kita dapat membuka prometheus dengan browser dengan url IP-server:9090 . kemudian pilihlah menu status>Targets maka tampilan nya adalah sebagai berikut:

Kemudian untuk menghentikan proses running kita dapat menekan ctrl+C. selanjutnya agar prometheus dapat berjalan secara automatis, maka kita harus mengubah file prometheus.service berikut:
sudo nano /etc/systemd/system/prometheus.service
kemudian copy dan paste command berikut ini:
[Unit]
  Description=Prometheus Monitoring
  Wants=network-online.target
  After=network-online.target

[Service]
  User=prometheus
  Group=prometheus
  Type=simple
  ExecStart=/usr/local/bin/prometheus \
  --config.file /etc/prometheus/prometheus.yml \
  --storage.tsdb.path /var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries
  ExecReload=/bin/kill -HUP $MAINPID

[Install]
  WantedBy=multi-user.target
selanjutnya approve perubahan yang telah kitalakukan dengan menggunakan command berikut:
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
setelah dipprove maka kita dapat menjalankan command sudo systemctl status prometheus untuk mengecek status dari prometheus. apabila berjalan dengan baik maka tampilan yang akan muncul adalah seperti dibawah ini:
ubuntu@ip-172-31-27-252:~$ sudo systemctl status prometheus
 prometheus.service - Prometheus Monitoring
   Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; ve
   Active: active (running) since Sat 2020-04-04 17:58:15 UTC; 4s ago
 Main PID: 2411 (prometheus)
    Tasks: 8 (limit: 1152)
   CGroup: /system.slice/prometheus.service
           └─2411 /usr/local/bin/prometheus --config.file /etc/prometh

Apr 04 17:58:15 ip-172-31-27-252 prometheus[2411]: level=info ts=2020-
Apr 04 17:58:15 ip-172-31-27-252 prometheus[2411]: level=info ts=2020-
Apr 04 17:58:15 ip-172-31-27-252 prometheus[2411]: level=info ts=2020-
....
....
dengan demikian kita dapat mengakses prometheus pada browser dengan menggunakan IP-server:9090 tanpa harus merunning promotheus secara manual. sampai titik ini kita telah berhasil menginstal prometheus

2. Grafana

2a. Instalasi Grafana

untuk proses instalasi versi terbaru dapat kita lihat langsung pada web resmi grafana disini. atau kita dapat menggunakan command berikut ini untuk versi 6.7.2 :
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_6.7.2_amd64.deb
sudo dpkg -i grafana_6.7.2_amd64.deb
kemudian untuk merunningnya cukup menjalankan command berikut ini:
sudo systemctl daemon-reload && sudo systemctl enable grafana-server && sudo systemctl start grafana-server
saat ini grafana telah dapat diakses dengan menggunakan IP-server:3000 melalui browser. kemudian untuk user dan password default untuk login adalah admin:admin

2b. Create Dashboard

akses grafana menggunakan IP-server:3000 kemudian login menggunakan user password default yaitu admin:admin, maka tampilannya setelah login dapat dilihat seperti dibawah ini:


selanjutnya, klik Add data source > pilih Prometheus kemudian isi bagian URL : http://<IP-server-Prometheus>:9090 terakhir save dan apabila semua berjalan denganbaik maka akan ada keterangan Data source is working seperti gambar dibawah ini:


setelah datasource ditambahkan, sekarang kita dapat membuat dashboard sesuai yang kita inginkan atau menggunakan template yang sudah ada disini. terdapat 2 opsi menambahkan template yaitu dengan menggunakan ID dashboard (membutuhkan koneksi internet) dan donwload JSON kemudian upload di grafana. kali ini kita akan menggunakan ID dashboadr, copy ID atau url dashboard kemudian paste seperti dibawah ini:


selanjutnya kita dapat mengisi tiap field seperti dibawah ini dan klik import:


Karena belum ditambahkan server target yang akan dimonitoring maka dashboard masih seperti dibawah ini:

sampai disini maka grafana dan prometheus sudah dapat berjalan dengan baik.

3. Menambahkan server untuk dimonitor

3a. instalasi Node_exporter

Pada server yang akan dimonitoring tambahkan user node_exporter dengan menggunakan command berikut:
sudo useradd --no-create-home --shell /bin/false node_exporter
selanjutnya masih pada server yang sama download dan extract node_exporter, kita dapat memilih sesuai dengan node_exporter yang terupdate disini. kali ini kita menggunakan node_exporter versi 1.0.0.0 berikut command yang dapat digunakan:
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.0-rc.0/node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
tar xvzf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
setelah diextract kemudian copy dan ubah kepemilikan folder/file menjadi milik user node_exporter yang telah kita buat. caranya dapat mengikuti command dibawah ini:
sudo cp node_exporter-1.0.0-rc.0.linux-amd64/node_exporter /usr/local/bin
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sampai disini kita telah berhasil menginstal node_exporter pada server yang akan kita monitoring. selanjutnya yaitu mengatur agar node_exporter auto running.

3b. Configurasi dan Running Node_exporter

Agar Node_exporter dapat running secara automatis maka kita perlu melakukan sdikit perubahan pada file node_exporter.service berikut command yang dapat digunakan:
sudo nano /etc/systemd/system/node_exporter.service
kemudian copy dan paste text berikut ini kedalam file yang akan kita edit tadi:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
Dengan menggunakan text diatas maka secara default collectors akan diaktifkan untuk mengumpulkan data dari system. Selanjutnya gunakan command dibawah ini untuk mereload systemd layanan yang baru kita definisikan, merunning node_exporter,  dan memverifikasi bahwa node_exporter dapat berjalan dengan baik:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl status node_exporter
dan apabila node_exporter berjalan dengan baik maka output pada terminal yaitu seperti dibawah ini:
ubuntu@ip-172-31-27-252:~$ sudo systemctl status node_exporter
 node_exporter.service - Node Exporter
   Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-04-06 09:11:13 UTC; 5s ago
 Main PID: 2122 (node_exporter)
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/node_exporter.service
           └─2122 /usr/local/bin/node_exporter

Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=stat
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=textfile
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=thermal_zon
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=time
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=timex
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=uname
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=vmstat
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=xfs
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.969Z caller=node_exporter.go:111 collector=zfs
Apr 06 09:11:13 ip-172-31-27-252 node_exporter[2122]: level=info ts=2020-04-06T09:11:13.970Z caller=node_exporter.go:190 msg="Listening on" ad
lines 1-18/18 (END)
jika semua telah berjalan dengan baik maka execute command dibawah ini agar node_exporter dapat auto running:
sudo systemctl enable node_exporter
saat ini kita telah berhasil menginstal, mengconfigurasi dan merunning node_exporter pada server yang akan kita monitoring, secara default node_exporter akan running dengan port 9100. Selanjutnya kita akan mengexpose server yang akan dimonitoring kedalam prometheus.

3c. Expose Node_exporter

Setelah sebelumnya kita melakukan instalasi, configurasi dan running aplikasi node_exporter pada server yang akan kita monitoring. Maka saat ini kita akan mengexpose server tersebut agar dapat dimonitor oleh Prometheus. Masuk kedalam server prometheus kemudian edit file prometheus.yml yang telah kita buat sebelumnya, kemudian tambahkan text berikut ini pada baris paling akhir:
  - job_name: '<nama job>'
    scrape_interval: 5s
    static_configs:
      - targets: ['<IP-Server-Node_exporter_A>:9100','<IP-Server-Node_exporter_B>:9100']
berikut dibawah ini contoh file prometheus.yml secara lengkap yang telah ditambahkan configurasi untuk memonitoring beberapa server:
global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['172.31.27.252:9100','172.31.14.53:9100']
kemudian restart prometheus dengan menjalankan command berikut:
sudo systemctl restart prometheus
selanjutnya kita dapat memvalidasi dengan mengecek status server yang dimonitoring dengan membuka prometheus melalui browser dengan url IP-server-prometheus:9090/targets pastikan semua UP, seperti gambar berikut:
Apabila telah berhasil maka Monitoring telah siap untuk digunakan. kita dapat mengakses dashboardnya dengan menggunakan dashboard yang telah kita buat diawal tadi. berikut ini adalah contoh hasil akhir dari monitoring server yang telah kita buat:


Demikian lah Tutorial monitoring Ubuntu menggunakan Node_Export, Prometheus, dan Grafana kali ini.

Source: devconnected.com, www.scaleway.com


Best Regards,
Heri Sulistiyo

Komentar