Selasa, 22 Februari 2022

Monitoring Metrics Typesense Menggunakan Prometheus

Typesense memiliki endpoint  metrics.json  untuk melakukan monitoring dengan data yang dihasilkan format JSON.

{
   "system_cpu1_active_percentage": "0.00",
   "system_cpu2_active_percentage": "0.00",
   "system_cpu3_active_percentage": "0.00",
   "system_cpu4_active_percentage": "0.00",
   "system_cpu_active_percentage": "0.00",
   "system_disk_total_bytes": "1043447808",
   "system_disk_used_bytes": "561152",
   "system_memory_total_bytes": "2086899712",
   "system_memory_used_bytes": "1004507136",
   "system_network_received_bytes": "1466",
   "system_network_sent_bytes": "182",
   "typesense_memory_active_bytes": "29630464",
   "typesense_memory_allocated_bytes": "27886840",
   "typesense_memory_fragmentation_ratio": "0.06",
   "typesense_memory_mapped_bytes": "69701632",
   "typesense_memory_metadata_bytes": "4588768",
   "typesense_memory_resident_bytes": "29630464",
   "typesense_memory_retained_bytes": "25718784"
}
Kita dapat melakukan monitoring endpoint tersebut menggunakan Prometheus.

1. Install Prometheus

export RELEASE="2.33.3"

Cek versi terakhir di Official Page

wget https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz

tar xvf prometheus-${RELEASE}.linux-amd64.tar.gz

Masuk ke direktori Prometheus yang baru di ekstrak 

cd prometheus-${RELEASE}.linux-amd64/

2. Install json_exporter

Karena metrics dari Typesense menggunakan format JSON, maka harus menggunakan service lagi untuk melakukan konversi dari JSON ke metric Prometheus.

git clone https://github.com/prometheus-community/json_exporter.git

3. Install make

sudo apt install make

Make build

cd json_exporter

make build

Jika diperlukan, install  go  terlebih dahulu

sudo snap install go --classic

4. Buat file config.xml

nano config.yml

---
metrics:
- name: typesense_metric_system_cpu1_active_percentage
  path: "{ .system_cpu1_active_percentage }"
  help: System CPU 1 active percentage
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_cpu2_active_percentage
  path: "{ .system_cpu2_active_percentage }"
  help: System CPU 2 active percentage
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_cpu3_active_percentage
  path: "{ .system_cpu3_active_percentage }"
  help: System CPU 3 active percentage
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_cpu4_active_percentage
  path: "{ .system_cpu4_active_percentage }"
  help: System CPU 4 active percentage
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_cpu_active_percentage
  path: "{ .system_cpu_active_percentage }"
  help: System CPU active percentage
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_disk_total_bytes
  path: "{ .system_disk_total_bytes }"
  help: System disk total bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_disk_used_bytes
  path: "{ .system_disk_used_bytes }"
  help: System disk used bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_memory_total_bytes
  path: "{ .system_memory_total_bytes }"
  help: System memory total bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_memory_used_bytes
  path: "{ .system_memory_used_bytes }"
  help: System memory used bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_network_received_bytes
  path: "{ .system_network_received_bytes }"
  help: System network received bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_system_network_sent_bytes
  path: "{ .system_network_sent_bytes }"
  help: System network sent bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_active_bytes
  path: "{ .typesense_memory_active_bytes }"
  help: Typesense memory active bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_allocated_bytes
  path: "{ .typesense_memory_allocated_bytes }"
  help: Typesense memory allocated bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_fragmentation_ratio
  path: "{ .typesense_memory_fragmentation_ratio }"
  help: Typesense memory fragmentation ratio
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_mapped_bytes
  path: "{ .typesense_memory_mapped_bytes }"
  help: Typesense memory mapped bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_metadata_bytes
  path: "{ .typesense_memory_metadata_bytes }"
  help: Typesense memory metadata bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_resident_bytes
  path: "{ .typesense_memory_resident_bytes }"
  help: Typesense memory resident bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
- name: typesense_metric_typesense_memory_retained_bytes
  path: "{ .typesense_memory_retained_bytes }"
  help: Typesense memory retained bytes
  labels:
    server: typesense-server-0
    location: 10.102.235.99
headers:
  X-TYPESENSE-API-KEY: ${API ANDA DISINI}

5. Jalankan json_exporter

./json_exporter --config.file config.yml

Untuk melakukan pengecekan, coba akses 

curl http://[IP ADDRESS JSON_EXPORTER]:7979/probe?target=http://[IP ADDRESS TYPESENSE]:8108/metrics.json

Seharusnya metrics Typesense sudah dikonversi menjadi metrics Prometheus.

6. Jalankan Prometheus

Langkah selanjutnya adalah konfigurasi Prometheus

Tambahkan job baru pada config

- job_name: 'typesense'
  metrics_path: /probe
    static_configs:
      - targets:
        - http://[IP TYPESENSE]:8108/metrics.json
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: localhost:7979

Jalankan Prometheus

./prometheus

Cek menggunakan browser di http://[IP PROMETHEUS]:9090/targets

Kamis, 17 Februari 2022

Catatan Command KVM Ubuntu

Install Guest

virt-install -n Datastax-Server-0 --os-type=Linux --os-variant=ubuntu18.04 --ram=4096 --vcpus=2 --disk path=/var/lib/libvirt/images/datastax-server-0.img,bus=virtio,size=80 --network bridge:br0 --graphics none --location ~/ubuntu-18.04.3-server-amd64.iso --extra-args console=ttyS0 --extra-args earlyprint=serial,ttyS0,115200

Menampilkan list KVM Guest

virsh list

Untuk menampilkan semua Guest

virsh list --all

Autostart KVM

virsh autostart [DOMAIN_NAME] [--disable]

Mematikan KVM

virsh shutdown [DOMAIN_NAME]

virsh destroy [DOMAIN_NAME]

Menghapus KVM

Sebelumnya auto start harus dimatikan terlebih dahulu

sudo virsh undefine [DOMAIN_NAME]

sudo virsh undefine [DOMAIN_NAME] --remove-all-storage

Mengecek apakah sebuah OS Ubuntu 18.04 running dalam sebuah KVM Guest

systemd-detect-virt

Menambah Storage

  1. stop the VM
  2. run qemu-img resize vmdisk.img +10G to increase image size by 10Gb
  3. start the VM, resize the partitions and LVM structure within it normally



Error -bash: cannot create temp file for here-document: No space left on device

Error ini disebabkan karena disk penuh. Jadi untuk mengatasi error ini adalah dengan mengkondisikan disk agar tidak penuh. Biasanya yang terjadi adalah disk dipenuhi file logs.

Yang pertama perlu dilakukan adalah dengan mengecek penggunaan disk. Pada kasus ini menggunakan studi kasus saya pribadi.

df -h

Output 
Filesystem      Size  Used Avail Use% Mounted on
udev            7.7G     0  7.7G   0% /dev
tmpfs           1.6G  612K  1.6G   1% /run
/dev/vda1       157G  156G     0 100% /
tmpfs           7.7G     0  7.7G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
tmpfs           1.6G     0  1.6G   0% /run/user/1000

Selanjutnya, cari penggunaan disk pada partisi terkait, sebagai contoh pada /.

du -cha --max-depth=1 / | grep -E "M|G"

Pada command di atas, grep digunakan untuk membatasi hasil dengan nilai M (Mega) dan G (Giga). Jika pada kasus anda menggunakan disk Tera, dapat dimasukkan opsi T.

Output
15M     /bin
83M     /home
144M    /boot
460M    /var
151G    /opt
15M     /sbin
862M    /lib

Pada contoh di atas /opt merupakan folder yang memenuhi 100% kapasitas. Maka selanjutnya adalah mencari penggunaan disk pada folder tersebut.

sudo du -cha --max-depth=1 /opt | grep -E "M|G"

Output
151G    /opt/kafka_2.12-2.3.0
151G    /opt
151G    total

Selanjutnya mencari penggunaan pada disk /opt/kafka_2.12-2.3.0.

sudo du -cha --max-depth=1 /opt/kafka_2.12-2.3.0 | grep -E "M|G"

Output
3.3M    /opt/kafka_2.12-2.3.0/site-docs
55M     /opt/kafka_2.12-2.3.0/libs
31M     /opt/kafka_2.12-2.3.0/plugin
151G    /opt/kafka_2.12-2.3.0/logs
151G    /opt/kafka_2.12-2.3.0
151G    total

Dari output di atas dapat dilihat bahwa folder logs yang membuat disk penuh. Langkah selanjutnya adalah dengan membersihkan folder tersebut.

Sumber: stackoverflow

Sabtu, 11 Januari 2020

Instalasi Kafka Beserta Service Pada Ubuntu 18.04

Instalasi Kafka Pada Ubuntu 18.04

Download kafka

wget <link_download>

Ekstrak file instalasi Kafka

tar -xvf <nama_file> [-C <path_lokasi_tujuan>]

Copy folder instalasi Kafka ke /opt

sudo cp -R <nama_folder> /opt/

Buat symbolic link ke folder tersebut

sudo ln -s /opt/<nama_folder> /opt/kafka

Instalasi Service Kafka Pada Ubuntu 18.04

Buat file kafka.service pada systemd

sudo nano /etc/systemd/service/kafka.service

Masukkan konfigurasi berikut, sesuaikan dengan kebutuhan

[Unit]
Description=Kafka Daemon
Documentation=http://kafka.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/kafka
User=root
Group=root
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
ExecReload=/opt/kafka/bin/kafka-server-stop.sh && kafka-server-start.sh -daemon /opt/kafka/config/server.properties
TimeoutSec=30
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=30


[Install]
WantedBy=default.target

Update .bashrc

source ~/.bashrc

Aktifkan service yang baru saja dibuat

sudo systemctl enable kafka

Untuk melakukan start/stop/reload, dapat menggunakan command

systemctl start kafka
service kafka start
systemctl stop kafka
service kafka stop
systemctl reload kafka
service kafka reload

Untuk mengecek status service

service kafka status
-----------------------------------------------------

Selasa, 07 Januari 2020

Catatan Pemrograman Android

Testing GPS Location

Konek ke simulator dengan telnet ke localhost port 5554
telnet localhost 5554
Jika menggunakan putty, gunakan method raw
putty -raw localhost 5554
Lalu lakukan autorisasi dengan auth_token simulator yang lokasinya dapat dilihat pada console yang muncul
auth <auth_token>
Untuk mengirimkan koordinat ke simulator
geo fix <longitude> <latitude>
Contoh
geo fix 103.32 -7.09

--

Rabu, 30 Oktober 2019

Konfigurasi Apache ZooKeeper Sebagai Service Pada Ubuntu 18.04

Pindahkan folder ZooKeeper ke dalam /opt/
sudo cp -R zookeeper_dir /opt/

Buat symbolic link ke direktori tersebut
sudo ln -s /opt/zookeeper_dir /opt/zookeeper

Buat file zookeeper.service di systemd
sudo nano /etc/systemd/system/zookeeper.service

Masukkan konten zookeeper.sevice berikut, sesuaikan jika perlu
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeperone
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop/ opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=30

[Install]
WantedBy=default.target
Pada kasus saya, tricky part ada di User dan Group, dimana saya harus memasukkan user yang digunakan pada waktu instalasi zookeeper, dalam hal ini zookeeperone.

Update .bashrc
source ~/.bashrc

Untuk mengaktifkan service
sudo systemctl enable zookeeper

Command lain terkait service zookeeper tersebut
systemctl start zookeeper
service zookeeper start
systemctl stop zookeeper
service zookeeper stop
systemctl reload zookeeper
service zookeeper reload


Catatan Command Ubuntu Server 18.04

Menjalankan aplikasi di background

Pause aplikasi dengan menekan  CTRL+Z  lalu jalankan command

bg

Mengecek hardware specs, brand

dmidecode | grep -A3 '^System Information'

Mengecek serial number

dmidecode -s system-serial-number 

Mengecek apakah system running di KVM

systemd-detect-virt

Mengecek hardware (CPU RAM dll) dan running processes

htop

Menambah maksimum heap JVM

sudo nano /etc/profile 
Tambahkan baris berikut: 
export _JAVA_OPTIONS=-Xmx2048m
Kemudian 
sudo reboot
Untuk mengecek heap JVM 
java -XshowSettings:vm

Menambah user kedalam sebuah group

sudo usermod -aG group username

Menghapus user dari sebuah group

sudo deluser username group

Mengecek apakah suatu port sedang digunakan

Dapat menggunakan salah satu command berikut: 
sudo lsof -i -P -n | grep LISTEN 
sudo netstat -tulpn | grep LISTEN 
sudo lsof -i:[port_number] 
sudo nmap -sTU -0 [ip_address]

Menambahkan directory ke dalam $PATH

sudo nano /etc/environment
Tambahkan directory ke dalam $PATH 
sudo reboot

Mengecek ketersediaan slot memory (RAM)

sudo lshw -class memory

Membuat file executable (misal: .sh bash script)

chmod +x path

Command cheatsheet

A ; B        # Run A then B, regardless of success of A 
A && B   # Run B if and only if A succeeded 
A || B       # Run B if and only if A failed 
A &         # Run A in background