Kamis, 05 Maret 2026

Deploy ARM64 (aarch64) dengan Qemu & Virt-Manager

 Halo Guys, Ridwan heres! 
Come again with a new notes update!

Belakangan ini, arsitektur ARM64 atau aarch64 makin naik daun, mulai dari perangkat Raspberry Pi, Apple Silicon, sampai instance Public Cloud seperti AWS Graviton, Google, Azure, Oracle Ampere, semuanya mulai menyediakan ARM karena efisiensi dayanya yang luar biasa, tetapi tetap punya performa jempolan.

Kenapa sih mulai banyak yang memakai arsitektur ARM?

  • Hemat Daya: Cocok buat server rumahan yang nyala 24/7 tanpa bikin tagihan listrik bengkak.
  • Performa per watt: Di banyak skenario, prosesor ARM modern jauh lebih efisien dibandingkan dengan x86 tradisional.
  • Ekosistem Sudah mulai Matang: Sekarang hampir semua aplikasi open-source sudah mendukung arsitektur

Karena di masa depan akan banyak pengguna ARM, bagaimana cara kita melakukan troubleshooting atau mereplikasi issue, kalau pelanggan menggunakan instances dengan arsitektur ARM ?
Apakah kita perlu menyiapkan Perangkat Devices ARM atau berlangganan Cloud Services juga? Jawabannya tentu tidak.

Laptop harian kita yang biasanya menggunakan arsitektur x86_64 sudah bisa mengemulasikan/virtualisasikan ARM devices. Jadi, kita tidak perlu beli hardware baru atau langganan cloud services hanya untuk testing atau troubleshooting.

Penasaran gimana caranya? 
Yuk, simak catatan kali ini!


1. Install Cross-Architecture QEMU

Langkah pertama, kita butuh tools utama, yaitu QEMU. Kamu bisa langsung install dengan perintah ini:

# Debian / Ubuntu
$ sudo apt update
$ sudo apt install qemu-system-arm qemu-efi qemu-efi-aarch64 qemu-utils virt-manager

# RHEL / Fedora
$ sudo dnf group install --with-optional virtualization
$ sudo dnf install qemu-system-aarch64 qemu-utils virt-manager

Note: Paket qemu-system-arm ini adalah paket yang memungkinkan laptop kita menjalankan instruksi CPU ARM64 di atas prosesor Intel/AMD kalian.


2. Download ARM64 Cloud Image

Di sini kita tidak perlu menginstal secara manual menggunakan ISO file yang makan waktu lama. 
Cukup pakai Cloud Image saja yang sudah jadi (format .img atau .qcow2).


3. Create Virtual Machine ARM64

Oke, setelah file cloud images sudah di-download, Kita bisa langsung create VM-nya, tidak ada perbedaan yang jauh dalam membuat VM untuk ARM atau x64. Perhatikan perbedaannya !

Disini saya menggunakan Debian 13 dengan path /home/ridwan/Documents/Qcow2/debian-13-nocloud-arm64.qcow2

  • Menggunakan Qemu ( CLI ):
$ qemu-system-aarch64 \
  -machine virt \
  -cpu cortex-a57 \
  -smp 2 \
  -m 2G \
  -bios /usr/share/AAVMF/AAVMF_CODE.fd \
  -drive if=none,file=/home/ridwan/Documents/Qcow2/debian-13-nocloud-arm64.qcow2,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -netdev user,id=net0 \
  -device virtio-net-device,netdev=net0 \
  -nographic

Note: untuk Spec CPU & RAM kalian dapat sesuaikan dengan kebutuhan, untuk path bios location pastikan sudah sesuai !




  • Menggunakan Virt-Manager (GUI)

Pada "Architecture options" pastikan kalian memilih :

  • Architecture = aarch64
  • Machine Type = Virt 

Kemudian pilih cloud images / qcow2 disk dari OS ARM kalian,

untuk Spec CPU ,RAM , Disk kalian dapat sesuaikan dengan kebutuhan

Next / Forward sampai step terakhir, dan tampil seperti berikut :

Note: Jangan kwatir ini normal, Pada banyak image Linux ARM64 (terutama versi server atau cloud image), output booting diarahkan ke Serial Console (ttyAMA0) secara default, bukan ke display grafis. ARM tidak memiliki standar VGA secara otomatis.


Solusinya:
Pilih menu "View" > Console > Pilih Serial 1


**Bonus: Create Ubuntu ARM64 Instances on Public Cloud

  • AWS Graviton (EC2)
# Launch a Graviton instance with Ubuntu 24.04
aws ec2 run-instances \
    --image-id $(aws ec2 describe-images \
        --filters "Name=name,Values=ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-arm64-server-*" \
                  "Name=state,Values=available" \
        --query 'sort_by(Images, &CreationDate)[-1].ImageId' \
        --output text \
        --region us-east-1) \
    --instance-type t4g.micro \
    --key-name your-key-pair \
    --region us-east-1
  • Google Cloud
# Via Google Cloud Shell
gcloud compute instances create [INSTANCE_NAME] \
    --project=[PROJECT_ID] \
    --zone=us-central1-a \
    --machine-type=t2a-standard-1 \
    --image-family=ubuntu-2204-lts-arm64 \
    --image-project=ubuntu-os-cloud \
    --boot-disk-size=20GB \
    --boot-disk-type=pd-balanced
  • Oracle Cloud 
# Via OCI CLI
oci compute instance launch \
    --compartment-id <compartment-id> \
    --availability-domain <ad-name> \
    --shape VM.Standard.A1.Flex \
    --shape-config '{"ocpus": 4, "memoryInGBs": 24}' \
    --image-id <ubuntu-24.04-arm64-image-id> \
    --subnet-id <subnet-id>
  • Hetzner Ampere
# Create an Arm64 server on Hetzner
hcloud server create \
    --name arm64-server \
    --type cax11 \    # Ampere Altra-based server type
    --image ubuntu-24.04 \
    --ssh-key your-key


Sekian tutorial singkat kali ini, Thank you sudah membaca tulisan ini.. 

Semoga bermanfaat !
Rdw
Share:

Sabtu, 31 Januari 2026

Mapping Process ID to Instance-ID Openstack

Halo Guys, Ridwan heres!  Come again with a new  notes update!

Kali ini saya mau berbagi sedikit tips Troubleshooting di OpenStack. Sebagai SysAdmin pasti pernah mengalami momen di mana Monitoring System Trigger Alert pada salah satu Compute Node (Hypervisor) yang mengalami High Load Resource Usage.


Alert di atas berisi informasi terkait kondisi Resource CPU usage melebihi nilai ambang batas normal, dan tidak ada informasi lebih details seperti penyebabnya apa, aplikasi apa yang menggunakan resource tersebut, dan lainnya.  Untuk mencari tahu details tersebut, kita butuh belajar kembali "Back to Basic" pada course di  Red Hat 124 dengan judul materi "Monitoring and Managing Linux Processes" 


1. Analisis Anomali Resource usage di Server Compute

Pada output command "top" akan ada banyak proses qemu-kvm karena server ini merupakan hypervisor tempat running nya VM.

top - 13:31:48 up 66 days, 23:50,  1 user,  load average: 126.82, 126.23, 128.78
Tasks: 3357 total,   4 running, 3353 sleeping,   0 stopped,   0 zombie
%Cpu(s): 52.4 us,  8.6 sy,  0.0 ni, 35.2 id,  0.0 wa,  1.9 hi,  1.8 si,  0.0 st
MiB Mem : 3094507.+total, 614593.1 free, 2479829.+used,  12083.9 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used. 614678.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 691730 qemu      20   0  518.2g 510.5g  22936 R  2646  16.9 565461:25 qemu-kvm
  75529 qemu      20   0   35.0g  31.8g  22584 S  1165   1.1 725669:37 qemu-kvm
 213227 qemu      20   0  132.2g 124.6g  22696 S 775.4   4.1 529504:26 qemu-kvm

Perhatikan baris pertama pada kolom PID dan %CPU. Di situ terlihat jelas ada proses dari qemu-kvm dengan PID 691730 yang menggunakan CPU secara tidak wajar (sampai 2646% karena multicore). Ini dia penyebab yang bikin load average server jadi tinggi.


2. Mencari Openstack ID-Instance dari Process ID (PID)

[tripleo-admin@Openstack-Compute-2 ~]$ ps aux | grep 691730

tripleo+  578303  0.0  0.0   6408  2316 pts/27   S+   13:31   0:00 grep --color=auto 691730
qemu      691730 1201 16.8 543362420 535312312 ? Sl    2025 565465:21 /usr/libexec/qemu-kvm -name guest=instance-00003161,debug-threads=on -S -object {"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain-324-instance-00003161/master-key.aes"} -machine pc-q35-rhel9.0.0,usb=off,dump-guest-core=off,memory-backend=pc.ram -accel kvm -cpu Cascadelake-Server-noTSX -m 524288 -object {"qom-type":"memory-backend-ram","id":"pc.ram","size":549755813888} -overcommit mem-lock=off -smp 64,sockets=64,dies=1,cores=1,threads=1 -uuid 457990e4-8d26-4f18-9940-72f652b99572 -smbios type=1,manufacturer=Red Hat,product=OpenStack Compute,version=23.2.3-17.1.20231018130828.el9ost,serial=457990e4-8d26-4f18-9940-72f652b99572,uuid=457990e4-8d26-4f18-9940-72f652b99572,family=Virtual Machine -no-user-config -nodefaults -chardev socket,id=charmonitor,fd=59,server=on,wait=off -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -boot strict=on -device {"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"} -device {"driver":"pcie-root-port","port":17,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x2.0x1"} -device {"driver":"pcie-root-port","port":18,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x2.0x2"} -device {"driver":"pcie-root-port","port":19,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x2.0x3"} -device {"driver":"pcie-root-port","port":20,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x2.0x4"} -device {"driver":"pcie-root-port","port":21,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x2.0x5"} -device {"driver":"pcie-root-port","port":22,"chassis":7,"id":"pci.7","bus":"pcie.0","addr":"0x2.0x6"} -device {"driver":"pcie-root-port","port":23,"chassis":8,"id":"pci.8","bus":"pcie.0","addr":"0x2.0x7"} -device {"driver":"pcie-root-port","port":24,"chassis":9,"id":"pci.9","bus":"pcie.0","multifunction":true,"addr":"0x3"} -device {"driver":"pcie-root-port","port":25,"chassis":10,"id":"pci.10","bus":"pcie.0","addr":"0x3.0x1"} -device {"driver":"pcie-root-port","port":26,"chassis":11,"id":"pci.11","bus":"pcie.0","addr":"0x3.0x2"} -device {"driver":"pcie-root-port","port":27,"chassis":12,"id":"pci.12","bus":"pcie.0","addr":"0x3.0x3"} -device {"driver":"pcie-root-port","port":28,"chassis":13,"id":"pci.13","bus":"pcie.0","addr":"0x3.0x4"} -device {"driver":"pcie-root-port","port":29,"chassis":14,"id":"pci.14","bus":"pcie.0","addr":"0x3.0x5"} -device {"driver":"pcie-root-port","port":30,"chassis":15,"id":"pci.15","bus":"pcie.0","addr":"0x3.0x6"} -device {"driver":"pcie-root-port","port":31,"chassis":16,"id":"pci.16","bus":"pcie.0","addr":"0x3.0x7"} -device {"driver":"pcie-root-port","port":32,"chassis":17,"id":"pci.17","bus":"pcie.0","addr":"0x4"} -device {"driver":"pcie-pci-bridge","id":"pci.18","bus":"pci.1","addr":"0x0"} -device {"driver":"piix3-usb-uhci","id":"usb","bus":"pci.18","addr":"0x1"} -blockdev {"driver":"host_device","filename":"/dev/dm-8","aio":"native","node-name":"libvirt-1-storage","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"} -blockdev {"node-name":"libvirt-1-format","read-only":false,"cache":{"direct":true,"no-flush":false},"driver":"raw","file":"libvirt-1-storage"} -device {"driver":"virtio-blk-pci","bus":"pci.4","addr":"0x0","drive":"libvirt-1-format","id":"virtio-disk0","bootindex":1,"write-cache":"on","serial":"eb6afa3f-0f95-407e-a71f-94f013d98902"} -netdev {"type":"tap","fd":"62","vhost":true,"vhostfd":"64","id":"hostnet0"} -device {"driver":"virtio-net-pci","rx_queue_size":512,"host_mtu":8942,"netdev":"hostnet0","id":"net0","mac":"fa:16:3e:65:81:25","bus":"pci.2","addr":"0x0"} -netdev {"type":"tap","fd":"65","vhost":true,"vhostfd":"66","id":"hostnet1"} -device {"driver":"virtio-net-pci","rx_queue_size":512,"host_mtu":9000,"netdev":"hostnet1","id":"net1","mac":"fa:16:3e:63:c6:c3","bus":"pci.3","addr":"0x0"} -add-fd set=0,fd=61,opaque=serial0-log -chardev pty,id=charserial0,logfile=/dev/fdset/0,logappend=on -device {"driver":"isa-serial","chardev":"charserial0","id":"serial0","index":0} -device {"driver":"usb-tablet","id":"input0","bus":"usb.0","port":"1"} -device {"driver":"usb-kbd","id":"input1","bus":"usb.0","port":"2"} -audiodev {"id":"audio1","driver":"none"} -vnc 172.22.74.116:8,audiodev=audio1 -device {"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"} -device {"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.5","addr":"0x0"} -object {"qom-type":"rng-random","id":"objrng0","filename":"/dev/urandom"} -device {"driver":"virtio-rng-pci","rng":"objrng0","id":"rng0","bus":"pci.6","addr":"0x0"} -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on

Kalau kita baca argument dari command (qemu) nya panjang sekali, padahal kita hanya butuh informasi ID-Instances saja.

Kalian dapat menggunakan command berikut, untuk menemukan instances dengan CPU/Memory usage tertinggi ( --sort=-%cpu atau --sort=-%mem)

[tripleo-admin@Openstack-Compute-2 ~]$ ps aux --sort=-%cpu | awk 'NR==1 {print $1, $2, $3, $4, "UUID"} / -uuid / {for(i=1;i<=NF;i++) if($i=="-uuid") {print $1, $2, $3, $4, $(i+1)}}' | column -t
USER   PID      %CPU  %MEM  UUID
qemu   691730   2646  16.9  457990e4-8d26-4f18-9940-72f652b99572
qemu   75529    1165  1.1   e6175dac-d40f-4375-855c-b48632a28d68
qemu   213227   775.4 4.1   148f0a0b-b13d-4718-aff2-1bc2b11ec505
admin  1642873  0.0   0.0   /

Output dari command ini lebih rapih, mudah dipahami.

 

3. Check ID-Instances via Openstack Client 

Setelah mendapatkan ID dari instance, langkah selanjutnya adalah mengecek dari Openstack-Cli-Client atau Dashboard Horizon untuk mengatahui details info dari VM tersebut.

[stack@DIRECTOR ~]$ source overcloudrc
(overcloud) [stack@DIRECTOR ~]$ openstack server show 457990e4-8d26-4f18-9940-72f652b99572 --fit-width

+-------------------------------------+----------------------------------------------------------------------+
| Field                               | Value                                                                |
+-------------------------------------+----------------------------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                                               |
| OS-EXT-AZ:availability_zone         | nova                                                                 |
| OS-EXT-SRV-ATTR:host                | compute-2                                    |
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute-2                                  |
| OS-EXT-SRV-ATTR:instance_name       | instance-00003161                                                    |
| OS-EXT-STS:power_state              | Running                                                              |
| OS-EXT-STS:task_state               | None                                                                 |
| OS-EXT-STS:vm_state                 | active                                                               |
| OS-SRV-USG:launched_at              | 2025-12-03T14:13:20.000000                                           |
| addresses                           | 2024399561-IT-Corp-DRC=10.24.216.154; VPC LAN CRM NG=192.168.100.253 |
| flavor                              | a1.xxxlarge.rc (df018f79-910f-4487-965b-2068585cb1ca)                |
| id                                  | 457990e4-8d26-4f18-9940-72f652b99572                                 |
| name                                | LAB-RDW001                                                      |
| project_id                          | 4af09b6255794f4bbc9b285fb5d7eb3d                                     |
| status                              | ACTIVE                                                               |
| user_id                             | 2ce9c0fc6163463b85c323ea07151e75                                     |
+-------------------------------------+----------------------------------------------------------------------+
Bingo!  pada kolom name,  kita akhirnya tahu bahwa VM yang menyebabkan load tinggi tersebut bernama LAB-RDW001.

Sekian tutorial singkat kali ini, Thank you sudah membaca tulisan ini.. 

Semoga bermanfaat !
Share:

Selasa, 27 Januari 2026

Monitoring Endpoint HTTP API dengan Prometheus Blackbox Exporter

 Halo Guys, Ridwan here! Come again with a new notes update!

Kali ini saya mau berbagi sedikit catatan mengenai monitoring di dunia DevOps. 
Sebagai SysAdmin atau DevOps Engineer, kita pasti sudah familiar dengan Prometheus untuk scraping metrics dari server menggunakan Node Exporter, Kali ini kita akan bahas tool yang serupa dengan itu.

Pernah kah, teman-teman mengalami laporan website/aplikasi error, tetapi setelah kita check singkat pada semua service (HTTP, DB, Network, lainnya) statusnya, running. Ternyata yang error pada beberapa function di API Endpoint.

Nah, bagaimana cara kita tahu kalau website atau API kita benar-benar bisa diakses oleh user dari ? 
Server & servicenya mungkin running, tapi kalau aplikasinya / API timeout atau return 500, atau sedang high load jadi slow respond, atau juga ssl status nya ssl expired. Hal ini berdampak pada user menjadi tidak bisa akses kan?

Untuk menjawab kebutuhan tersebut, untuk selalu memantau website / API service dalam keadaan normal atau tidak nya, Kita perlu monitoring ini, Kita butuh tools "Blackbox Exporter."


Singkatnya, Blackbox Exporter ini memungkinkan kita untuk melakukan probing endpoint melalui berbagai protokol seperti HTTP, HTTPS, DNS, TCP, dan ICMP. Jadi kita bisa mengecek availability dan response time.

Yuk, langsung saja kita bahas cara setup-nya!


1. Persiapan & Instalasi Blackbox Exporter

Aplikasi ini bisa di-install dengan cara "Binary Install" atau dalam bentuk container menggunakan docker.

  • Download Binary
    https://github.com/prometheus/blackbox_exporter/releases

Create Systemd File (/etc/systemd/system/blackbox.service)



Docker command

docker run -d \
  --name=blackbox_exporter \
  -p 9115:9115 \
  -v $(pwd)/blackbox.yml:/etc/blackbox_exporter/config.yml \
  prom/blackbox-exporter --config.file=/etc/blackbox_exporter/config.yml

Setelah running, exporter ini akan berjalan di port 9115.


Yaps, tampilan hanya seperti, karena kita belum memberikan target endpoint untuk dimonitor.
Penasaran cara input target endpoint nya bagaimana ?


2. Konfigurasi Module (blackbox.yml)

Secara default, file blackbox.yml ini sudah cukup tidak perlu dilakukan edit-edit lagi.
hanya saya menambahkan parameter untuk menggunakan CA dari self-signed SSL.


3. Integrasi ke Prometheus

Jadi untuk target endpoint yang ingin di monitor oleh blackbox-exporte, di-input melalui prometheus. Berikut untuk config file "Prometheus.yml".


Setelah config prometheus ter'apply, dan status service Blackbox-exporter & Prometheus nya running.. Status tampilan dari port 9115 milik blacbkbox pages akan tampil seperti berikut :



4. Integrasi ke Grafana Dashboard

Setelah Blackbox-Exporter nya sudah berhasil memonitor beberapa target endpoint HTTP API tadi, selanjutnya kita akan membuat Grafana Dashboard untuk mem-visualisasikan data dari Blacbox-Exporter agar mudah dibaca oleh kita.


Caranya cukup Import saja dashboard tersebut.


Ok,  Sekian catatan kali ini, semoga kalian sudah berhasil melakukan monitoring HTTP / API respond dari aplikasi-aplikasi kalian. 

Next, apakah kita jadikan alert ?

Thank you sudah membaca tulisan ini.. Semoga bermanfaat !
Rdw

Share:

Kamis, 20 November 2025

Recording Terminal Session with Tmux

 Halo guys, Ridwan here..
Come again with a new notes update!

Melanjutkan pembahasan kita sebelumnya tentang dasar-dasar Tmux & features "Persistent Session" nya. Kali ini kita akan membahas satu fitur yang sering luput dari perhatian tapi sangat krusial, yaitu "Logging/Recording Terminal Session".

Pernahkah kamu mengalami situasi ini :
"Kamu menjalankan proses debugging atau compiling yang panjang. Kamu tinggal sebentar, dan saat kembali, prosesnya sudah selesai..  Tapi, pesan error atau log penting yang kamu cari sudah tertimbun di atas dan hilang karena keterbatasan scrollback buffer.  Atau mungkin, kamu butuh bukti audit (evidence) dari apa yang kamu ketik dan eksekusi di console server."

Tmux punya fitur bawaan untuk menangani ini !
Tmux bisa melakukan Logging/Recording pada Session nya, seperti demo video berikut :

Penasaran caranya ?


Cara 1: Real-time Logging dengan pipe-pane

Ini adalah features native (bawaan) Tmux untuk merekam apa pun yang keluar di panel (pane) terminal ke dalam sebuah file secara real-time. Fitur ini sangat berguna jika kamu ingin menjalankan script dan memastikan semua outputnya tersimpan rapi, bahkan jika kamu detach sekalipun.

Langkah-langkahnya:

Pastikan kamu berada di dalam Session Tmux.
Masuk ke Command Mode dengan menekan Ctrl + b, lalu ketik : (titik dua), Bar di bawah akan berubah warna, ketik perintah berikut:

: pipe-pane -o "cat >> ~/tmux-session.log"


Perintah di atas membuat Tmux untuk "mem-pipa" (pipe) semua output dari pane/session saat ini ke perintah cat, yang kemudian menambahkannya (append) ke file ~/tmux-session.log.

Outputnya yang muncul di layer, juga akan tertulis pada file log secara bersamaan.


Cara 2: Menyimpan History (Scrollback) dengan capture-pane

Bagaimana jika prosesnya sudah terjadi, dan kamu ingin menyimpan apa yang sudah tampil di layar (beserta history scroll ke atasnya) ke dalam file?
Kita bisa menggunakan perintah capture-pane. Perintah ini bisa dijalankan langsung dari terminal (jika kamu punya pane lain yang aktif) atau dari luar Tmux.

Langkah-langkahnya:

Pastikan kamu sudah detach session nya, 
masukan command berikut :

$ tmux capture-pane -pS - > ~/dump-history.txt

Penjelasannya:

-p   : Print output ke stdout (agar bisa kita redirect ke file dengan >).
-S - : Start dari awal history buffer (paling atas). Jika tidak pakai ini, dia hanya merekam apa yang terlihat di layar saat ini (visible area). Hasilnya File dump-history.txt akan berisi rekam jejak lengkap dari seluruh session. Sangat berguna untuk post-mortem analysis jika ada error.


Cara 3: Menggunakan tmux.conf 

Sebenarnya metode ini sama dengan metode pipe-pane sebelumnya, tetapi kita akan membuat command "pipe-pane" menjadi permament dengan menulis command nya pada file tmux.conf,

Buat file .tmux.conf & input seperti berikut

# Tombol Shift + h untuk menyalakan/mematikan logging
bind H pipe-pane -o "cat >> /var/log/tmux/tmux-#S-#I-#P.log" \; display-message "Toggled logging to /var/log/tmux/..."


Kemudian save dan load tmux.conf tersebut dengan command berikut :

$ tmux source-file ~/.tmux.conf


Untuk memulai logging, sama seperti metode pipe-pane, pastikan kamu sudah berada di dalam Session Tmux.  Kemudian untuk memulai logging cukup tekan Ctrl + b, lalu H. hingga terlihat notif pada kiri bawah tmux.

Output nya akan berada pada directory "/var/log/tmux/"


Dengan nama file "tmux-Session-Window-Tab.log


Kesimpulan

Fitur persistent session menjaga prosesmu tetap hidup, sementara fitur logging menjaga data dan output-mu tetap aman tercatat. Tidak ada lagi cerita kehilangan log error / pesan error karena terminal buffer-nya kepenuhan.

Ok. Thank you sudah membaca tulisan ini, Semoga bermanfaat ! 

Best Regards 
Rdw

Share:

Rabu, 19 November 2025

Tutorial Basic Tmux - Bahasa Indonesia

Halo guys, Ridwan here..
Come again with a new notes update!

Sebagai pengguna Linux, access ke terminal menggunakan ssh pasti sudah hal biasa.. dan sering mengalami hal ini?
"Kamu sedang SSH ke remote server, lalu menjalankan proses yang memakan waktu lama. Mungkin itu update sesuatu, compiler code, atau sedang menjalankan script migrasi database yang krusial, atau apapun itu. Tapi...Tiba-tiba, koneksi internet di tempatmu bekerja hiccup sedikit, atau laptopmu kehabisan baterai dan mati."

Kemudian... SSH session terputus.

Saat kamu buru-buru login kembali, proses yang tadi berjalan sudah hilang.. karena session Terminated. 
Membuat kamu tidak tahu apakah prosesnya selesai, gagal di tengah jalan, atau malah membuat corrupted data.

Masalahnya ada di : Process life-cycle terikat pada SSH session.
Begitu kamu logout atau disconnect, semua child process di dalamnya ikut tewas.

Di sinilah Tmux (Terminal Multiplexer) menjadi solusi !


Konsepnya sederhana: Kita membuat sesi di dalam server menggunakan Tmux.
Jika koneksi SSH kita putus, sesi Tmux tersebut tidak mati. Dia hanya "Detached" (terlepas) dari antarmuka kita, tapi tetap hidup dan berjalan secara background di server.

Nantinya, kapanpun kita siap, kita bisa "Attach" (menempel) kembali ke sesi tersebut dan melihat status terakhirnya, persis seperti saat kita meninggalkannya. Untuk demo penggunaan Tmux bisa lihat video berikut :

Ok, untuk yang penasaran.. langsung kita gas !

--

Install Tmux

Packages untuk Tmux sudah tersedia di banyak repo dari distro linux, jadi untuk install nya cukup dengan command berikut :

# RHEL/CentOS/Fedora
$ sudo dnf install tmux

# Ubuntu/Debian
$ sudo apt install tmux

Untuk dokumentasi / pages dari Tmux, dapat di lihat pada halaman berikut :

https://github.com/tmux/tmux/wiki


Membuat Session Baru

Untuk membuat session pada tmux, kita dapat menggunakan command berikut :

# Membuat session baru, tampa naming
$ tmux new-session

# Membuat session baru, dengan nama "rdw-update"
$ tmux new -s Rdw-Update


Logout / Detach Session 

Setelah berhasil masuk ke dalam session tmux, kita dapat keluar kembali ke console sebelum nya, dengan cara detach session. Seperti meninggalkan terminal tampa menutup/closed. untuk melakukan detach session kita dapat menggunakan command berikut :

# Detach from Session menggunakan shourcut
Ctrl + b 
kemudian 
d


## Detach from Session menggunakan input command
Ctrl + b
kemudian 
: detach

Kalau kalian terbiasa menggunakan "Vim Text Editor", mungkin sudah familiar dengan trigger tombol Esc, kemudian tanda : untuk input command. Pada Tmux, kita menggunakan "Ctrl + b" sebagai trigger nya, kemudian tanda : untuk input command, atau kalian juga bisa langsung menggunakan shortcut,


 Melihat Tmux session

untuk melihat session yang sedang active, kita dapat menggunakan command berikut :

# Melihat session pada Tmux dari luar tmux
$ tmux list-sessions
atau
$ tmux ls

# Melihat session dari dalam tmux
Ctrl + b
kemudian 
s


Attach Session

Setekah berhasil membuat session, kemudian logout dari session / detach session, kita dapat masuk ke session tersebut kembali, dengan menggunakan command berikut :

# Attach to a spesifik session dengan nama "Rdw-Test
$ tmux attach -t Rdw-Test

# Attach to the last session
$ tmux attach

Ok, sampai step ini kita berhasil mempelajari basic-basic penggunaan Tmux.
untuk lebih detail terkait shortcut, cheat sheet, atau refrensi lainnya

Reff :


Thank you sudah membaca tulisan ini, Semoga bermanfaat !

Best Regards
Rdw

Share:

Kamis, 23 Oktober 2025

Review RHEL Lightspeed AI - Bahasa Indonesia

  Halo guys, Ridwan here..
Come again with a new notes update!

Di tengah keramaian tentang Ai ..
Pada awal tahun 2025, iklan Red Hat Enterprise Linux (RHEL) with AI sangat membuat kita penasaran. Kita penasaran bagaiaman cara kerja nya, bagaiamana kemapuannya, dan lainnya.

Setelah kita coba cari tahu terkait teknologi ini, ternyata nama produk nya adalah
"Red Hat Lightspeed AI" atau "command-line-assistant"

More info :
https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux-10/lightspeed


Packages dari tools ini sudah tersedia untuk RHEL 9.6 and RHEL 10,
Pada minimum install RHEL pacakges ini tidak terinstall secara default, perlu lakukan tambahan instalasi.

Untuk menginstall packages tersebut, pastikan subscription dari Red Hat Enterprise Linux is active !

$ sudo subscription-manager register

kemudian install dengan command berikut :

$ sudo dnf install command-line-assistant



Pastikan packages tersebut berhasil terinstall& berjalan dengan baik, 

$ sudo systemctl status clad



Kalian bisa menggunakan tools "Red Hat Lightspeed AI" atau "command-line-assistant" langsung dari terminal kalian cukup dengan command berikut :

Command Description
$ c  or  $ cla Command 
$ c "type question/prompt here" Jalankan command c, diikuti pertanyaan dengan tanda kutip.
$ c -a SomeFile “question/prompt”
Jalankan command c dengan option -a, untuk attach file agar dibaca oleh Lightspeed Ai.
$ LinuxCommnad |  c “question/prompt” Pipe the output of another command to the Lightspeed Ai
$ c -i Start Interactive session of the Lightspeed Ai
$ c history -a Menampilkan riwayat percakapan / prompt dari Lightspeed Ai.


Let's get the review!

1. Interactive Mode


Pada mode interactive mode, tampilannya cukup familiar dengan Generative Ai lainnya, tetapi ada tambahan animasi "Asking RHEL Lightspeed" & Garis lurus ini membuat kesan simple & juga membuat informasi lebih mudah di baca. untuk menandakan batas prompt.

2. Kemampuan 


Saat kita tanyakan hal-hal di-luar dari kontek Linux atau di luar Produk Red Hat, sepertinya tidak ada model yang ditraining untuk menjawab pertanyaan itu. Jadi Lightspeed ini khusus nya untuk membantu/mendampingi SysAdmin untuk basic administrative command, basic config, memahami produk-produk dari Red Hat.\

3. Apakah bisa offline?  

Setelah kita coba untuk disconnect from internet, ternyata Lightspeed Ai status nya menjadi no-respond

Artinya Lightspeed Ai membutuhkan koneksi internet.
Kenapa mesti ke connect ke internet, berikut jawabnya ..


Karena Lightspeed Ai membutuhkan Backend Server, dengan alamat Server API yang berada di redhat.com, Atau kalian bisa membuat server API sendiri di lingkungan local kalian !

More details : https://www.redhat.com/en/blog/use-rhel-command-line-assistant-offline-new-developer-preview

4. Apakah bisa digunakan untuk selain RHEL?

Untuk packages dari  "Red Hat Lightspeed AI" atau "Command-Line-Assistant" hanya tersedia di repo dengan subscription only, dan server untuk Backend Ai nya memerlukan auth dengan account RedHat.

Tapi kalian bisa baca-baca beberapa refrensi berikut :

5. The Lightspeed Ai in Action !

Lightspeed Ai sangat disarankan untuk keperluan basic administrative command, basic config, seperti berikut :

  • Menanyakan status reboot terakhir

  • Menanyakan jumlah status running service
c "Install and configure Apache with HTTPS (self signed) on RHEL 10"
  • Cara install service Apache dengan HTTPS
c "Tune Apache for 1000 concurrent users and ensure the port is opened on firewall"
  • Tuning Apache for handling 1000 concurrent
c "Configured Apache with port 8080 and make sure it start."
  • Re-config apache to port 8080
c "Harden RHEL 10 system as per CIS benchmark"
  • Let's Make Secure Config based on Center for Internet Security (CIS) Benchmark
c "Allow SSH and HTTP in firewalld"
  • Config Firewalld
c "Build RHEL 10 container image with Python 3.12 and firewalld"
  • Create Container Image 

Dan.. masih banyak lagi, yang kalian bisa mencoba nya sendiri di free interactive-labs dari Red Hat

Red Hat Interactive-Labs: Solve problems with command line assistant: 
https://www.redhat.com/en/interactive-labs/Solve-problems-with-Command-Line-Assistant



Kesimpulan

Tools ini Bernama "Red Hat Lightspeed AI" atau "command-line-assistant" dan tidak terinstall secara default pada RHEL. Kehadiaran "Red Hat Lightspeed AI" bukan untuk menggantikan peran dari SysAdmin, tetapi membantu SysAdmin layaknya seperti assistant.

Tools ini dapat memberikan saran basic administrative linux commands, config, lainnya, sesuai dengan model yang sudah ditetapkan red hat. 

Sesuai dengan informasi dari video berikut :

Ok, sekian dulu tulisan ini.
sampai ketemu di tulisan selanjuynya~

Best Regards
Rdw

Share: