Pada kesempatan kali ini saya akan berbagi tentang Prometheus dan Grafana. Prometheus dan Grafana ini merupakan sebuah tools monitoring. Objek monitoring nya bisa berupa virtual machine (VM), docker container, dll.

Apa itu Monitoring?

Monitoring adalah tools dan serangkaian proses yang kita ukur dan mengelola sebuah sistem yang kita buat. Penjelasan tersebut merupakan penjelasan dari perspektif teknologi. Namun, monitoring juga dapat menyediakan penjelasan dari perspektif bisnis.

Dari perspektif bisnis, monitoring digunakan untuk mentranslasikan metric yang dihasilkan oleh sistem yang kita buat menjadi bussines value. Maksudnya adalah sistem monitoring akan menampilkan nilai-nilai metric yang nantinya akan berguna untuk mengukur kehandalan sistem yang dibuat. Sehingga sistem mendapatkan dapat dipastikan akan dapat melayani user dengan baik. Apabila sistem yang dibuat tidak di monitoring maka kita sebagai developer/engineer akan tidak tahu sistem handal atau tidak sehingga sistem tidak dapat digunakan dengan baik oleh user. Akibatnya bisa jadi user tidak menggunakan sistem yang dibuat.

Prometheus

Prometheus

Promtheus adalah sebuah sistem open-source monitoring dan alerting yang pada awalnya dibuat di SoundCloud pada tahun 2012. Banyak perusahaan dan organisasi yang mengadopsi Prometheus dan Prometheus memiliki komunitas developer dan pengguna yang aktif. Prometheus bergabung dengan Cloud Native Computing Foundation (CNCF) dan menjadi graduated project kedua setelah Kubernetes pada CNCF.

Prometheus mempunyai data model dan query language yang sederhana namun powerful yang digunakan untuk menganalisa bagaimana performa aplikasi dan infrastruktur yang dibangun berjalan. Prometheus hanya menyediakan data model dan query language saja dan menyerahkan hal-hal lain seperti menampilkan grafik ke tools yang lain, contohnya grafana.

Prometheus Architecture

Prometheus Architecture
Prometheus bekerja dengan scraping atau pulling time-series data yang diekspos oleh aplikasi. Time-series data diekspos oleh aplikasi melalui client libraries atau melalui proxy yang siebut exporter, seperti HTTP Endpoints. Exporter dan client library tersedia untuk berbagai bahasa, framework, dan aplikasi open-source contohnya untuk web-server seperti Apache dan untuk database adalah MySQL. Prometheus juga mempunya push gateway yang digunakan untuk menerima data, sebagai contoh, target yang tidak bisa di-pull seperti transient job target atau target yang berada dibelakang firewall.

Prometheus menyimpan data hasil scraping secara lokal dan menjalankan serangkaian rule pada data hasil scraping. Hal tersebut dilakukan untuk mengagregasi/menggabungkan dan mencatat time-series data dari data hasil scraping. Grafana atau API consumer yang lain dapat digunakan untuk melakukan visualisasi data dari time-series data yang dikummpulkan oleh Prometheus.

Prometheus Exporter

Prometheus exporter adalah sebuah software yang dapat meng-eksport data ke sistem non-Prometheus. Prometheus Exporter mirip seperti content scraper yang mengkonversi metric dari suatu format ke format lain. Ada banyak sekali exporter yang dapat digunakan. Contoh-contoh Exporter bisa dilihat disini. Kebanyakan exporter tersebut disediakan oleh third-party sebagai open-source software.

Dengan menggunakan exporter, developer/engineer tidak perlu membuat software exporter sendiri from scratch. Developer/engineer tinggal melakukan import data yang disediakan oleh exporter ke Prometheus.

Metric Collection


Prometheus memanggil sumber dari metrics yang dapat digunakan untuk mengambil data dari endpoint. Sebuah endpoint dapat berupa proses, host, service, atau aplikasi. Untuk mengambil data dari endpoint, Prometheus harus mendefinisikan target. Selain target, Prometheus memerlukan informasi lain yang diperlukan untuk mengambil data seperti bagaimana cara agar dapat terhubung dengan target, metadata yang diperlukan, apakah memerlukan proses autentikasi khusus agar terhubung, atau informasi lainnya agar dapat melakukan pengambilan data.

Sekumpulan dari target disebut dengan job. Job biasanya adalah sekumpulan target yang memiliki role yang sama. Contohnya, Sebuah cluster Apache server yang ada dibelakang load balancer.

Lab

Untuk praktek nya, kita memerlukan 2 VM yang akan diberi nama pod29-X. Masing-masing VM memiliki spesifikasi sebagai berikut:

  • OS: CentOS 7
  • RAM: 4GB
  • vCPU: 2 vCPU
  • IP Address: pod29-1=10.29.29.10/24, pod29-2=10.29.29.20/24
  • Subnet: 10.29.29.0/24

Pada lab kali ini, saya menggunakan VM di OpenStack. Apabila menggunakan VirtualBox atau VPS (GCP, DO, dll) bisa disesuaikan konfigurasi nya. Jika terdapat tulisan floating-ip-pod29-nodeX maka itu sama dengan external IP untuk VM yang bersangkutan.

Install Node Exporter

Ingat tentang exporter? Exporter yang akan digunakan disini adalah Node Exporter. Node Exporter merupakan exporter untuk hardware related dan merupakan exporter official.

Untuk menginstall Node Exporter langkahnya adalah sebagai berikut: (Eksekusi di kedua VM (pod29-1 dan pod29-2)

  1. Download paket node exporter.
    cd /opt
    wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
    tar xvfz node_exporter-0.18.1.linux-amd64.tar.gz
  2. Jalankan Node Exporter.
    cd node_exporter-0.18.1.linux-amd64
    ./node_exporter --help
    ./node_exporter --version
    ./node_exporter
  3. Jalankan Node Exporter as a Service.
    Yang dimaksud as a service disini adalah kita menjalankan file executable secara otomatis ketika sistem berjalan. Caranya adalah membuat file berekstensi .service sebagai berikut.

    vim /etc/systemd/system/node_exporter.service
    [Unit]
    Description=Node Exporter
    [Service]
    User=root
    ExecStart=/opt/node_exporter-0.18.1.linux-amd64/node_exporter
    [Install]
    WantedBy=default.target

    Coba perhatikan pada baris ExecStart=/opt/node_exporter-0.18.1.linux-amd64/node_exporter. Baris tersebut sama dengan perintah menjalankan node exporter secara manual.

  4. Jalankan Node Exporter service.
    systemctl daemon-reload
    systemctl enable node_exporter.service
    systemctl start node_exporter.service
    systemctl status node_exporter.service
    journalctl -u node_exporter
  5. Akses metric menggunakan browser.
    #- http://floating-ip-pod29-node1:9100/metrics
    #- http://floating-ip-pod29-node2:9100/metrics
  6. Hasil metric seperti ini.

Install Prometheus Server

Prometheus Server adalah pemroses data yang telah didapat dari node exporter. Prometheus Server akan diinstal pada pod29-1.

  1. Download Prometheus Server.
    cd /opt
    wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz
    tar xvfz prometheus-2.10.0.linux-amd64.tar.gz
  2. Konfigurasi Prometheus Server.
    cd prometheus-2.10.0.linux-amd64
    vim config.yml
    global:
    scrape_interval:     15s
    evaluation_interval: 15s
    scrape_configs:
    - job_name: 'prometheus-robbyhp'
    static_configs:
    - targets: ['ip_pod29-1:9090']
    - job_name: 'node-robbyhp'
    static_configs:
    - targets: ['ip_pod29-1:9100','ip_pod29-2:9100']

    Masih ingat apa definisi job? Pada file config.yml diatas ada 2 job yaitu prometheus-robbyhp dan node-robbyhp. Job tersebut masing-masing memiliki target.

  3. Jalankan Prometheus Server.
    ./promtool check config config.yml
    ./prometheus --help
    ./prometheus --version
    ./prometheus --config.file=/opt/prometheus-2.10.0.linux-amd64/config.yml
  4. Jalankan Prometheus as a service.
    vim /etc/systemd/system/prometheus_server.service
    [Unit]
    Description=Prometheus Server
    [Service]
    User=root
    ExecStart=/opt/prometheus-2.10.0.linux-amd64/prometheus --config.file=/opt/prometheus-2.10.0.linux-amd64/config.yml --web.external-url=http://floating-ip-pod29-node0:9090/
    [Install]
    WantedBy=default.target
  5. Start Prometheus Server Service
    systemctl daemon-reload
    systemctl enable prometheus_server.service
    systemctl start prometheus_server.service
    systemctl status prometheus_server.service
    journalctl -u prometheus_server
  6. Akses URL menggunakan browser.
    #- Metrics: http://floating-ip-pod29-node0:9090/metrics
    #- Graph: http://floating-ip-pod29-node0:9090/
    #- Target: http://floating-ip-pod29-node0:9090/targets
  7. Tampilan Prometheus Server dengan beberapa job yang ada.

Install Grafana

Eksekusi langkah-langkah berikut di pod29-0.

  1. Download Paket Grafana
    cd /opt
    wget https://dl.grafana.com/oss/release/grafana-6.2.5.linux-amd64.tar.gz 
    tar -zxvf grafana-6.2.5.linux-amd64.tar.gz 
  2. Jalankan Grafana
    cd grafana-6.2.5
    screen -R grafana
    ./bin/grafana-server web
  3. Akses external IP menggunakan browser.
    #- http://floating-ip-podX-node0:3000/login
  4. Menjalankan Grafana as a Service.
    vim /etc/systemd/system/grafana.service
    [Unit]
    Description=Grafana
    [Service]
    User=root
    ExecStart=/opt/grafana-6.2.5/bin/grafana-server -homepath /opt/grafana-6.2.5/ web
    [Install]
    WantedBy=default.target
  5. Jalankan service Grafana.
    systemctl daemon-reload
    systemctl enable grafana.service
    systemctl start grafana.service
    systemctl status grafana.service
    journalctl -u grafana
Last modified: August 14, 2020

Author

Comments

Write a Reply or Comment

Your email address will not be published.