Back to Blog

Monitoring Linux Process Menggunakan Telegraf dan InfluxDB

Monitoring
Grafana
InfluxDB
Telegraf
Ubuntu

Docker and Go logo.

Pada artikel sebelumnya kita telah mencoba monitoring server menggunakan Prometheus sebagai sentralisasi data yang telah dikirim oleh node_exporter. Kali ini kita akan menggunakan InfluxDB sebagai pengganti Prometheus dan Telegraf sebagai pengganti node_exporter.

Perbedaan utama antara Telegraf + InfluxDB dengan Node Exporter + Prometheus adalah:

  • Node Exporter cocok untuk penggunaan dengan Prometheus dan sangat baik untuk mengumpulkan metrik sistem pada sistem Linux/Unix.
  • Telegraf lebih serbaguna dengan dukungan plugin input dan output yang luas. Cocok untuk berbagai kebutuhan pemantauan dan menawarkan fleksibilitas lebih besar dalam konfigurasi. Untuk plugin input dan output dapat dilihat pada link berikut.

Pada lab ini, author menggunakan dua Server dengan sistem opreasi linux Ubuntu Server 22.04.

  • Server pertama sebagai tempat installasi Telegraf
  • Server kedua sebagai tempat installasi InfluxDB dan Grafana

Step-by-Step Guidance

  1. Installasi InfluxDB OSS
  2. Installasi dan konfigurasi Telegraf pada Server pertama
  3. Konfigurasi InfluxDB dengan Grafana

Step 1 — Installasi InfluxDB OSS/v1

InfluxDB v1 adalah sistem manajemen basis data (Database Management System atau DBMS) open-source yang dikembangkan khusus untuk menyimpan dan mengambil data seri waktu. Ini dirancang untuk menangani data time-series dengan cepat dan efisien, menjadikannya solusi populer untuk pengumpulan dan analisis data yang berkaitan dengan waktu, seperti pemantauan sistem, sensor, dan log aplikasi.

Berikut adalah beberapa fitur utama dari InfluxDB v1:

  • SQL-Like Query Language:
    InfluxDB memiliki bahasa kueri sendiri yang mirip dengan SQL, yang disebut InfluxQL. Ini memudahkan pengguna untuk mengambil data dan membuat analisis.
  • Retention Policies:
    InfluxDB mendukung konsep kebijakan retensi (retention policies), yang memungkinkan pengguna untuk menentukan berapa lama data akan disimpan dalam basis data.
  • Continuous Queries:
    Continuous Queries memungkinkan pengguna untuk membuat dan menjalankan kueri secara otomatis untuk membuat hasil agregat berdasarkan data yang ada.
  • Horizontal Scalability:
    InfluxDB v1 mendukung horizontal scaling, yang memungkinkan peningkatan kapasitas dengan menambahkan lebih banyak node ke klaster.
  • Dapat Terintegrasi dengan Grafana:
    InfluxDB v1 sering digunakan bersama-sama dengan alat visualisasi seperti Grafana untuk membuat grafik dan dashboard yang informatif.

Langkah-langkah yang diberikan di bawah ini untuk menginstal InfluxDB untuk Ubuntu 22.04 LTS juga dapat digunakan untuk sistem Linux yang berbasis di atasnya. Seperti Linux Mint, POP OS, Elementary OS, dan lainnya.

Mengimpor InfluxDB GPG Key serta menambahkan repository InfluxDB ke Ubuntu.

wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

Update kembali sistem Ubuntu.

sudo apt-get update

Install InfluxDB v1.

sudo apt-get install influxdb

Setelah installasi selesai, start service InfluxDB.

sudo systemctl start influxdb
sudo systemctl enable influxdb

Cek status service InfluxDB.

sudo systemctl status influxdb

Setup InfluxDB
Setelah proses installasi InfluxDB selesai, selanjutnya adalah membuat user, serta database untuk mengkoneksikan InfluxDB dengan Grafana.

Akses InfluxDB menggunakan Command Line:

influx 

Selanjutnya membuat user admin.

CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES

Lalu membuat database bernama ’db_monitoring‘.

CREATE DATABASE db_monitoring

Selanjutnya membuat non-admin user dengan nama ’monitoring‘.

CREATE USER monitoring WITH PASSWORD '<password>'

Terakhir, memberikan hak akses database ’db_monitoring’ kepada administrator non-pengguna ’monitoring‘.

GRANT ALL ON db_monitoring TO monitoring

Keluar InfluxDB CLI.

quit

Breakdown

  • influx: Perintah untuk mengakses InfluxDB.
  • CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES: Query untuk membuat user admin dan password serta memberi hak akses penuh terhadap influxdb.
  • CREATE DATABASE db_monitoring: Query untuk membuat database db_monitoring.
  • CREATE USER monitoring WITH PASSWORD '<password>': Query untuk membuat user monitoring dan password tanpa memberikan hak akeses apapun.
  • GRANT ALL ON db_monitoring TO monitoring: Query untuk memberikan hak akses untuk user db_monitoring kepada database monitoring.

Step 2 — Installasi dan konfigurasi Telegraf pada Server pertama

Telegraf adalah agen pengumpulan data open-source yang dikembangkan oleh InfluxData. Fungsinya adalah mengumpulkan, memproses, dan meneruskan data metrik dan log dari berbagai sumber ke sistem pengumpulan dan penyimpanan data seperti InfluxDB, Elasticsearch, atau Prometheus.

Beberapa fitur utama dari Telegraf adalah:

  • Plug-and-play
    Telegraf dirancang untuk mudah diinstal dan dikonfigurasi. Kalian dapat dengan cepat mengonfigurasikan input dan output untuk mengarahkan data ke dan dari berbagai sistem.

  • Ketersediaan Input yang Luas
    Telegraf mendukung berbagai input, termasuk sistem operasi, basis data, server web, alat cloud, dan banyak lagi. Ini memungkinkan Kalian untuk mengumpulkan data dari berbagai sumber.

  • Kustomisasi Konfigurasi
    Telegraf memungkinkan pengguna untuk mengonfigurasi apa yang harus dikumpulkan dan bagaimana data harus diproses sebelum dikirim ke sistem penyimpanan.

  • Berbagai Output
    Data yang dikumpulkan oleh Telegraf dapat dikirim ke berbagai sistem penyimpanan, seperti InfluxDB, Elasticsearch, Graphite, atau Prometheus.

  • Ringan dan Efisien
    Telegraf dirancang untuk ringan dan efisien, sehingga dapat berjalan pada berbagai perangkat keras dan lingkungan.

  • Mendukung Protokol Standar
    Telegraf mendukung protokol seperti HTTP, UDP, dan lainnya untuk mentransmisikan data.

  • Fleksibel dan Mudah Diperluas
    Kalian dapat membuat plug-in khusus (custom plugin) untuk menyesuaikan Telegraf dengan kebutuhan Kalian jika fitur bawaan tidak mencakup kebutuhan spesifik Kalian.


Tahap installasi Telegraf dilakukan pada Server Pertama, kita akan sebut dengan nama apps-server.

Update terlebih dahulu Sistem Operasi Ubuntu

apt-get update -y; apt-get upgrade -y

Lalu tambahkan InfluxData repository seperti perintah dibawah ini menggunakan curl:

# influxdata-archive_compat.key GPG Fingerprint: 9D539D90D3328DC7D6C8D3B9D8FF8E1F7DF8B07E
curl -s https://repos.influxdata.com/influxdata-archive_compat.key > influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

Lalu update kembali repository Ubuntu dan install service Telegraf.

sudo apt-get update && sudo apt-get install telegraf

Setelah installasi selesai, verifikasi apakah Telegraf sudah terpasang atau belum.

sudo systemctl status telegraf

Jika Telegraf sudah terpasang, selanjutnya masuk kedalam direktori /etc/telegraf/, lalu backup file telegraf.conf menjadi telegraf.conf.bak dengan menggunakan perintah mv.

sudo mv telegraf.conf telegraf.conf.bak

Selanjutnya kita akan menggunakan Input; procstat, disk, diskio, mem, process, swap, system, dan net pada file telegraf.conf.

nano telegraf.conf
[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false

[[outputs.influxdb]]
  # Your IP Address of InfluxDB
  urls = ["http://IP_ADDRESS:8086"]
  database = "database"
  username = "username"
  password = "password"

## INPUT
 [[inputs.procstat]]
   ## pattern as argument for pgrep (ie, pgrep -f )
   pattern = "httpd|java|python|telegraf|docker|grafana|prometheus"
   ## user as argument for pgrep (ie, pgrep -u )
   user = "daemon|root|grafana|influxdb"
   pid_tag = true
# Read metrics about cpu usage
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## Comment this line if you want the raw CPU time metrics
  fielddrop = ["time_*"]
# Read metrics about disk IO by device
[[inputs.diskio]]
  ## By default, telegraf will gather stats for all devices including
  ## disk partitions.
  ## Setting devices will restrict the stats to the specified devices.
  # devices = ["sda", "sdb"]
  ## Uncomment the following line if you need disk serial numbers.
  # skip_serial_number = false
# Read metrics about memory usage
[[inputs.mem]]
  # no configuration
# Get the number of processes and group them by status
[[inputs.processes]]
  # no configuration
# Read metrics about swap memory usage
[[inputs.swap]]
  # no configuration
# Read metrics about system load & uptime
[[inputs.system]]
  # no configuration

Breakdown

  • [agent]
    Bagian ini adalah untuk mengkonfigurasi pengaturan agen Telegraf.
    interval: Menentukan interval waktu untuk mengumpulkan metrik, disetel menjadi 10 detik.
    round_interval: Jika diatur ke true, interval akan dibulatkan menjadi kelipatan dari interval pengumpulan.
    metric_batch_size: Menentukan jumlah maksimum metrik yang di-buffer sebelum dikirimkan ke plugin output, disetel menjadi 1000.
    metric_buffer_limit: Menentukan jumlah maksimum metrik yang dapat di-buffer dalam memori, disetel menjadi 10000.
    collection_jitter: Menentukan jitter yang ditambahkan ke interval untuk menghindari sinkronisasi pengumpulan metrik, disetel menjadi 0 detik.
    flush_interval: Menentukan interval di mana metrik akan dikirimkan ke plugin output, disetel menjadi 10 detik.
    flush_jitter: Menentukan jitter yang ditambahkan ke interval flush untuk menghindari sinkronisasi, disetel menjadi 0 detik.
    precision: Menentukan presisi untuk penanda waktu (string kosong berarti default).
    hostname: Menentukan nama host yang akan disertakan dalam metrik, string kosong berarti akan ditentukan secara otomatis.
    omit_hostname: Jika diatur ke true, nama host tidak akan disertakan dalam metrik.
  • [[outputs.influxdb]]
    Bagian ini mengonfigurasi plugin output untuk mengirimkan metrik ke InfluxDB.
    urls: Menentukan URL InfluxDB yang akan menjadi tujuan pengiriman metrik.
    database: Menentukan nama basis data InfluxDB tempat metrik akan disimpan.
    username: Menentukan nama pengguna yang digunakan untuk autentikasi dengan InfluxDB.
    password: Menentukan kata sandi yang digunakan untuk autentikasi dengan InfluxDB.
  • [[inputs.procstat]]
    Plugin input ini mengumpulkan metrik tentang proses pada sistem menggunakan perintah pgrep. Plugin ini mencari proses yang sesuai dengan pola yang ditentukan dan mengumpulkan informasi tentang penggunaan sumber daya mereka.
    pattern: Menentukan pola untuk perintah pgrep, yang digunakan untuk mengidentifikasi proses. Dalam hal ini, mencari proses dengan nama yang mengandung “httpd”, “influxdb”, “docker”, “telegraf”, “grafana” atau “prometheus.”
    user: Menentukan nama pengguna untuk menyaring proses.
    exe: Menentukan nama executable.
    pid_tag: Menambahkan tag PID (Process ID) ke metrik.
  • [[inputs.cpu]]
    Plugin input ini mengumpulkan metrik tentang penggunaan CPU.
    percpu: Menunjukkan apakah akan melaporkan statistik per CPU atau tidak.
    totalcpu: Menunjukkan apakah akan melaporkan statistik total CPU sistem atau tidak.
    fielddrop: Menghapus bidang tertentu dari output, dalam hal ini, menghapus metrik waktu CPU mentah.
  • [[inputs.disk]]
    Plugin input ini mengumpulkan metrik tentang penggunaan disk berdasarkan titik mount.
    ignore_fs: Menentukan jenis sistem berkas yang akan diabaikan.
  • [[inputs.diskio]]
    Plugin input ini mengumpulkan metrik tentang I/O disk berdasarkan perangkat.
    devices: Membatasi statistik ke perangkat yang ditentukan.
    skip_serial_number: Menentukan apakah akan melewati pengumpulan nomor seri disk atau tidak.
  • [[inputs.kernel]]
    Plugin input ini mendapatkan statistik kernel dari /proc/stat.
  • [[inputs.mem]]
    Plugin input ini mengumpulkan metrik tentang penggunaan memori.
  • [[inputs.processes]]
    Plugin input ini mendapatkan jumlah proses dan mengelompokkannya berdasarkan status.
  • [[inputs.swap]]
    Plugin input ini mengumpulkan metrik tentang penggunaan swap memory.
  • [[inputs.system]]
    Plugin input ini mengumpulkan metrik tentang beban sistem dan uptime.
  • [[inputs.net]]
    Plugin input ini mengumpulkan metrik tentang penggunaan antarmuka jaringan.
  • [[inputs.netstat]]
    Plugin input ini mengumpulkan metrik dari file /proc/net/netstat.
  • [[inputs.interrupts]]
    Plugin input ini mengumpulkan metrik dari /proc/interrupts.
  • [[inputs.linux_sysctl_fs]]
    Plugin input ini mengumpulkan metrik dari berbagai entri /proc/sys dan /proc/fs.

Setelah konfigurasi selesai, start service Telegraf.

sudo systemctl start telegraf
sudo systemctl enable telegraf

Lalu verifikasi kembali apakah service Telegraf sudah berjalan

sudo systemctl status telegraf

Step 3 — Konfigurasi InfluxDB dengan Grafana

Setelah Step 1 dan Step 2, selanjutnya pada step ini akan menjelaskan bagaimana memvisualisasikan data dari InfluxDB dengan Grafana.

Pastikan Grafana sudah terpasang, atau bisa membuka part sebelumnya untuk melihat bagaimana installasi Grafana pada Sistem Operasi Ubuntu 22.04 Server.

Pertama, buka dashboard Grafana dan login kedalamnya.

Lalu pilih menu home > Connections > Add new connection > Pada search bar ketik influxdb > Pilih InfluxDB > Klik tombol Add new data source

choose data source

Sesuaikan pada kolom berikut:

  1. Name
  2. Query language
  3. HTTP > URL
  4. InfluxDB Details > Database - User - Password.

InfluxDB Successfully

Breakdown

  • Name: nama ini akan digunakan saat kalian memilih data source pada panel.
  • Query language: opsi ini berfungsi untuk bahasa query apa yang akan digunakan. Pada kali ini kita memilih InfluxQL karena pada dashboard yang akan kita pakai nanti menggunakan bahasa query SQL-like.
  • HTTP
    URL: URL ini befungsi untuk mengakses server data source (isi dengan IP Server InfluxDB dengan menggunakan port 8089).
  • InfluxDB Details:
    Database: Nama basis data InfluxDB yang akan kalian gunakan sebagai sumber data di Grafana. Biasanya, ini sesuai dengan nama basis data yang kalian konfigurasikan dalam Telegraf untuk menyimpan metrik.
    User: Nama pengguna yang digunakan untuk mengautentikasi dengan InfluxDB. Ini harus sesuai dengan nama pengguna yang memiliki hak akses ke basis data yang ditentukan.
    Password: Kata sandi yang sesuai dengan nama pengguna yang digunakan untuk mengautentikasi dengan InfluxDB.

Jika sudah diisi dan sudah sesuai, klik tombol Save & test dan jika berhasil kalian akan melihat pesan sukses berwarna hijau seperti gambar diatas.

Selanjutnya membuat dashboard dengan template yang sudah ada dengan cara pilih Dashboard > klik tombol New pada pojok kanan atas > Import > masukan ID 20317 atau bisa lihat pada link berikut > Load > pilih dat source yang tadi kita buat sebelumnya yaitu influxdb-monitoring > Import

Jika sudah akan tampil dasboard baru seperti ini.

dashboard final