• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Jaranguda

Belajar Mengajar

  • Home
  • Sponsor/Jasa
  • Tentang

Cara Install Aplikasi ping di Ubuntu 20.04

Last Updated on 18 March 2022 By tommy Leave a Comment

Pada beberapa image Ubuntu 20.04, aplikasi ping tidak terinstall. Bila ping tidak ada anda akan mendapatkan pesan error

ping google.com
bash: ping: command not found

Install ping Ubuntu 20.04

ping ada di repository Ubuntu 20.04, untuk menginstallnya dibutuhkan akses ke Internet. Bila ini install pertama anda, update metadata apt

sudo apt update

setelah metadata terbaru selesai di update, install aplikasi ping

sudo apt install iputils-ping -y

install ping ubuntu 20.04

Tes aplikasi ping

Setelah terinstall, coba test aplikasi ping

ping -c 5 google.com
ping -c 5 1.1.1.1
 
# output
PING google.com (172.217.175.110) 56(84) bytes of data.
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=1 ttl=122 time=1.39 ms
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=2 ttl=122 time=1.45 ms
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=3 ttl=122 time=1.47 ms
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=4 ttl=122 time=1.50 ms
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=5 ttl=122 time=1.52 ms
 
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 1.390/1.463/1.515/0.042 ms
 
$ ping -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=61 time=1.54 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=61 time=1.57 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=61 time=1.56 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=61 time=1.67 ms
64 bytes from 1.1.1.1: icmp_seq=5 ttl=61 time=1.58 ms
 
--- 1.1.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 1.541/1.583/1.674/0.046 ms

Filed Under: Linux

Cara Instalasi dan Konfigurasi DNS Server bind9 di Ubuntu 20.04

Last Updated on 16 March 2022 By tommy 2 Comments

Ditutorial kali ini kita akan membahas cara membuat DNS (DOMAIN NAME SERVER) Server dengan bind9, distro Linux yang kita gunakan adalah Ubuntu 20.04. Penggunaan memory untuk DNS server bisa dibilang ramah memory, untuk DNS Server yang saya kelola saya menggunakan 1 GB memory, maksimum memory yang digunakan 200 MB untuk 100 Domain.

Dengan mengelola DNS anda, ada banyak kemudahan yang bisa didapatkan, seperti tidak perlu menggunakan DNS hosting yang mahal, lokasi server bebas dipilih. Diluar itu ada kekurangannya, yaitu anda perlu mengelola dan mengupdate server DNS tersebut.

DNS (Domain Name system) digunakan untuk menerjemahkan nama domain ke alamat IP. Sebagai contoh anda mengunjungi google.com, DNS server akan menerjemahkan alamat tersebut ke IP 172.217.194.102, dengan begitu data situs google.com yang anda buka akan diberikan oleh IP tersebut.

Kebutuhan System

1. Server Ubuntu dengan Public IP
2. Nama domain (bisa menggunakan subdomain)
Cara untuk mengkonfigurasi DNS untuk subdomain atau domain, caranya sama saja. Yang paling penting anda melakukan setting DNS untuk domain tersebut. Sebagai contoh untuk DNS, saya menggunakan Cloudflare untuk mengelola domain jaranguda.com, tetapi untuk subdomain cluster.jaranguda.com saya ingin DNS dikelola oleh bind9, caranya adalah tambahkan Name Server untuk cluster.jaranguda.com di Cloudflare.

Persiapan Sistem

Update dan upgrade semua software yang ada di Ubuntu 20.04 ke versi terbaru

sudo apt update && sudo apt upgrade -y

bila ada update kernel, sangat di sarankan untuk restart agar Ubuntu menggunakan kernel tersebut.

sudo reboot

Informasi domain dan IP

#NilaiKeterangan
DOMAIINjaranguda.com
IP Server192.168.88.20IP Publik server
Domain Name serverns1.jaranguda.com
ns2.jaranguda.com

saat mengikuti tutorial ini, ingat untuk mengganti jaranguda.com menjadi domain anda sendiri.

Domain Registrar

Di tempat anda mendaftarkan domain perlu diset nameserver ke ns1.jaranguda.com. Tiap-tiap registrar memiliki tampilan yang berbeda, untuk namesilo caranya seperti berikut ini
set default name server registrar

Install bind9 di Ubuntu

Software bind9 sudah tersedia di repository Ubuntu, jadi bisa langsung di install dengan apt

sudo apt install bind9 -y

Untuk menambahkan DNS untuk domain baru, tambahkan zone untuk domain tersebut di /etc/bind/named.conf.default-zones. Agar memudahkan konfigurasinya gunakana nama zone dan nama file konfignya sesuai dengan nama domain yang disetting, cara ini akan sangat membantu bisa anda mengelola banyak domain. Tiap zone file mengelola domain/subdomain yang berhubungan dengan domain/subdomain tersebut. Sebagai contoh kita akan mengkonfigurasi DNS untuk domain jaranguda.com.

Buka file /etc/bind/named.conf.default-zones tambahkan dibaris paling bawah

zone "jaranguda.com" {
        type master;
        file "/etc/bind/jaranguda.com.conf";
};

Untuk informasi dns jaranguda.com kita simpan di /etc/bind/jaranguda.com.conf, buat file tersebut lalu isi dengan

$TTL    86400
@       IN      SOA     jaranguda.com. dnsadmin.jaranguda. (
                     1647361418         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns1.jaranguda.com.
@       IN      NS      ns2.jaranguda.com.
@       IN      A       192.168.10.1
@       IN      AAAA    2a01:4xf8:1d1e:83fd::1
@       IN      MX      1 aspmx.l.google.com.
@       IN      MX      10 alt1.aspmx.l.google.com.
@       IN      MX      10 alt2.aspmx.l.google.com.
@       IN      MX      10 alt3.aspmx.l.google.com.
@       IN      MX      10 alt4.aspmx.l.google.com.
ns1     IN      A       192.168.10.1
ns2     IN      A       192.168.10.1
blog     IN      A       192.168.10.1

NS : bagian ini harus ditambahkan, agar bind9 mengenali name server yang bertanggung jawab.
@ : root domain, dalam contoh ini adalah jaranguda.com
A : IP address dari subdomain/domain, IP publik server
AAAA: A menggunakan IPv6
MX : record mail server, alamat dari mail server yang digunakan. Pada contoh saya menggunakan Google Workspace
ns1, ns2 dan blog pada contoh diatas adalah subdomain

Bagian serial, harus di update setiap kali anda melakukan perubahan. Pada contoh saya menggunakan unix time, yang bisa diambil dengan menjalankan perintah echo $(date +%s) di terminal Linux.

Sebelum service bind9 di restart, validasi terlebih dahulu

sudo named-checkconf

bila tidak ada pesan error yang muncul, restart bind9

sudo systemctl restart named

lalu cek status service bind9

sudo systemctl restart named

kurang lebh outputnya

● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-03-15 17:20:00 UTC; 41s ago
       Docs: man:named(8)
   Main PID: 3052 (named)
      Tasks: 5 (limit: 2275)
     Memory: 13.4M
     CGroup: /system.slice/named.service
             └─3052 /usr/sbin/named -f -u bind

verifikasi kalo kita sudah bisa melakukan query domain jaranguda.com dari server dengan mengeksekusi perintah dig jaranguda.com @127.0.0.1

; <<>> DiG 9.16.24-RH <<>> ns jaranguda.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1781
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;jaranguda.com.          IN  NS
 
;; ANSWER SECTION:
jaranguda.com.       86356   IN  NS  ns1.jaranguda.com.
jaranguda.com.       86356   IN  NS  ns2.jaranguda.com.
 
;; Query time: 10 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Mar 16 21:43:08 WIB 2022
;; MSG SIZE  rcvd: 59

Cek DNS dari Luar

Perubahan DNS (DNS propagation) bisa berlangsung sampai beberapa jam, di beberapa kasus sampai 24 jam. Untuk melewati batasan ini, kita bisa langsung melakukan query dari Public DNS server, contoh dari Cloudflare dan Google. Jalankan perintah ini di terminal

dig jaranguda.com @8.8.8.8
dig jaranguda.com @1.1.1.1

hasilnya harusnya sama dengan sewaktu melakukan query dari localhost

Filed Under: Linux

Cara Lengkap Install dan Konfigurasi Elastic Stack 8 Debian 11

Last Updated on 1 March 2022 By tommy Leave a Comment

Elastic stack (Elasticsearch, Kibana dan Logstash) sangat populer dikalangan startup, karena kesusahan setup :) dan kemudahan untuk menggunakannya. Kali ini akan kita bahas cara lengkap untuk menginstall Elasticsearch, Kibana dan Logstash di Debian 11. Dibagian paling akhir kita akan membahas cara mengirim log dari internal ataupun external, sehingga sangat memudahkan bisa menggunakan AWS, GCP ataupun cloud provider yang memberikan akses lokal, ataupun multiple cloud.

Kebutuhan System

Kebutuhan minimal system
Memory : 4 GB
Hardisk : 20 GB
CPU : 1

Update dan Upgrade System

Ingat untuk selalu update system anda agar stabil dan mendapatkan update terbaru.

sudo apt update; sudo apt upgrade -y

ingat untuk menjalankan ini secara berkala, misalkan tiap seminggu sekali.

Install Dependency

Install dependency untuk proses instalasi Elastic Stack ini. Dependency ini dibutuhkan agar proses instalasi lancar

sudo apt install curl wget gnupg apt-transport-https socat -y

Set Server Timezone

Set timezone server ke tempat anda. Ini diperlukan agar memudahkan waktu troubleshooting dan jamnya menyesuaikan jam lokal anda.

sudo timedatectl set-ntp true
sudo timedatectl set-timezone "Asia/Jakarta"
timedatectl

tampilan dari zona waktu yang sudah disetting
linux timezone

Install Java JRE

Untuk menjalankan Elasticsearch, Logstash dan Kibana kita memerlukan Java, untuk itu kita akan install versi bawaan distro yang tersedia saat ini.

sudo apt install default-jre -y

saat ini bawaan default JAVA di Debian 11 adalah Java 11, untuk verifikasi jalankan

java --version
which java
readlink -f $(which java)

verifikasi versii java

Repository Elasticsearch

Config file or folder for elasticsearch, kibana and logstash

#Config File/Folder
Elasticsearch/etc/elasticsearch and /etc/default/elasticsearch
Kibana/etc/kibana and /etc/default/kibana
Logstash/etc/logstash and /etc/default/logstash

Import PGP Key

Untuk memastikan software yang kita install di repository Debian merupakan software yang telah di-sign oleh pembuatnya, dalam hal ini Elasticsearch, maka kita perlu mengimport PGP key.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor | sudo tee /usr/share/keyrings/elasticsearch.gpg

verifikasi ini akan otomatis dijalankan oleh APT.

Tambah Repository

Tambah repository elastic stack versio 8.x

echo "deb [signed-by=/usr/share/keyrings/elasticsearch.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

Update cache APT agar mengenali repository yang baru ditambahkan

sudo apt update

Install Elasticsearch

Tahap pertama dari instalasi ini adalah menginstall Elasticsearch, elastic search merupakan inti dari Elastic Stack yang menyediakan full-text search engine dan juga HTTP API untuk dikonsumsi oleh client.

sudo apt-get install elasticsearch -y

tunggu sampai muncul

The generated password for the elastic built-in superuser is : bHBIzuVpyMtWmbaye1_4

Aktifkan Elasticsearch dengan Systemd

# aktifkan waktu boot
sudo systemctl enable elasticsearch.service
# jalankan elasticsearch
sudo systemctl start elasticsearch.service

Tes Query

curl -u "elastic:bHBIzuVpyMtWmbaye1_4" https://localhost:9200 -k

hasilnya

{
  "name" : "logs",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "sgt2mCBqSJq5HISN5BoztA",
  "version" : {
    "number" : "8.0.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "1b6a7ece17463df5ff54a3e1302d825889aa1161",
    "build_date" : "2022-02-03T16:47:57.507843096Z",
    "build_snapshot" : false,
    "lucene_version" : "9.0.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Install Kibana

Kibana merupakan web UI untuk mengakses fitur-fitur Elasticsearch, begitu juga untuk membuat tampilan dashboard yang menarik.

sudo apt install kibana -y

Edit file /etc/kibana/kibana.yml, update bagian

server.port: 5601
server.host: "0.0.0.0"

agar Kibana bisa diakses dari http://domain-atau-ip-server:5601

Generate token Kibana

sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

token ini akan digunakan untuk inisialisasi kibana dengan elasticsearch.

Buka http://domain-atau-ip-server:5601
enrolment token kibana
masukkan token yang tadi digenerate, klik Configure Elastic

Muncul permintaan verifikasi code
elasticsearch verification token

untuk mengambil token tersebut jalankan

sudo /usr/share/kibana/bin/kibana-verification-code

atau bisa juga dengan melihat tokennya dari log kibana

sudo journalctl -u kibana  | grep verification

masukkan code tersebut, lalu klik Verify

Tunggu beberapa saat, sampai setup selesai dan anda dihapankan dengan halaman login. Gunakan user elastic dan password dari hasil instalasi Elasticsearch, pada contoh saya passwordnya bHBIzuVpyMtWmbaye1_4
login kibana dengan user elastic

Akses Elasticsearch dari Internet

Elasticsearch hanya bisa diakses dari localhost, agar elasticsearch bisa diakses dari internet kita bisa menggunakan nginx sebagai reverse proxy. Setiap kali domain elasticsearch dipanggil, akan diteruskan oleh nginx ke Elasticsearch. Keuntungan menggunakan metode ini adalah kita bisa membuat banyak aturan (firewall) untuk membatasi akses dan juga menggunakan SSL.

1. Setup DNS
Sebagai contoh saya akan menggunakan DNS elastic.jaranguda.com
elastic dns
Cara konfigurasinya mungkin berbeda tiap provider, yang perlu di setting adalah A record dengan Public IP yang anda miliki. Proses update DNS ini bisa sampai 1 jam, untuk memastikannya bisa digunakan bantuan tool dig di linux

dig elastic.jaranguda.com +short
# dns google
dig elastic.jaranguda.com +short @8.8.8.8
# dns cloudflare
dig elastic.jaranguda.com +short @1.1.1.1

pastikan IP yang muncul adalah IP public yang sudah anda setting.
dig dns debian

2. Generate SSL Let’s Encrypt
Login sebagai root (sudo su), lalu eksekusi perintah dibawah ini

wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
bash acme.sh install
source ~/.bashrc
acme.sh --set-default-ca --server letsencrypt

install letsencrypt debian 11
Generate SSL dengan menjalankan

acme.sh --issue --domain elastic.jaranguda.com --standalone

tunggu sampai muncul informasi SSL telah berhasil

[Sun 27 Feb 2022 10:49:29 PM WIB] Your cert is in: /root/.acme.sh/elastic.jaranguda.com/elastic.jaranguda.com.cer
[Sun 27 Feb 2022 10:49:29 PM WIB] Your cert key is in: /root/.acme.sh/elastic.jaranguda.com/elastic.jaranguda.com.key
[Sun 27 Feb 2022 10:49:29 PM WIB] The intermediate CA cert is in: /root/.acme.sh/elastic.jaranguda.com/ca.cer
[Sun 27 Feb 2022 10:49:29 PM WIB] And the full chain certs is there: /root/.acme.sh/elastic.jaranguda.com/fullchain.cer

2. Install Nginx
Install nginx dari repository Debian 11

sudo apt install nginx -y

Buat virtual host untuk elastic.DOMAIN.com (/etc/nginx/sites-enabled/elastic.DOMAIN.com), yang berisi

server {
    listen 443 ssl http2;
    server_name elastic.DOMAIN.com;
    client_max_body_size 50M;
    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_pass https://localhost:9200;
    }
 
    ssl_certificate /root/.acme.sh/elastic.DOMAIN.com/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/elastic.DOMAIN.com/elastic.DOMAIN.com.key;
}

restart nginx

sudo nginx -t && sudo systemctl restart nginx

verifikasi SSL

curl -u "elastic:bHBIzuVpyMtWmbaye1_4" https://elastic.jaranguda.com

ssl nginx berhasil

Mengirim Log dengan Logstash

Di server yang akan kita kirim log aplikasi atau lainnya jalankan tahap “Repository Elasticsearch” agar bisa langsung menginstall logstash dengan apt

sudo apt install logstash -y

Tambah config untuk logstash di /etc/logstash/conf.d/server.conf yang berisi

input {
    file {
        path => [
            "/var/log/kern.log",
            "/var/log/user.log",
            "/var/log/dpkg.log",
            "/var/log/auth.log",
        ]
        start_position => "beginning"
    }
}
 
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "https://localhost:9200"
        user => "elastic"
        password => "bHBIzuVpyMtWmbaye1_4"
        index => "server"
        cacert => "/tmp/ca_1645975245142.crt"
    }
}

karena ini dijalankan di server tempat menginstall elastic stack, jadi kita bisa menggunakan localhost. Untuk digunakan di server lain confignya berubah menjadi

input {
    file {
        path => [
            "/var/log/kern.log",
            "/var/log/user.log",
            "/var/log/dpkg.log",
            "/var/log/auth.log",
        ]
        start_position => "beginning"
    }
}
 
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "https://elastic.jaranguda.com:443"
        user => "elastic"
        password => "bHBIzuVpyMtWmbaye1_4"
        index => "server"
    }
}

Keterangan
Hosts : server elasticsearch
User : user elasticsearch
Password : password elasticsearch
Index : index di elasticsearch
cacert : cek filenya di /etc/kibana/kibana.yml

Agar logstash bisa mengakses log di /var/log berikan akses adm untuk user logstash

sudo usermod -a -G adm logstash

lalu restart logstash

sudo systemctl restart logstash

cek status logstash

sudo journalctl -u logstash -f

output logstash linux

Filed Under: dll

Mengirim Log Laravel ke Elasticsearch dengan Logstash

Last Updated on 18 February 2022 By tommy Leave a Comment

Secara default Laravel menyimpan log error didalam file storage/logs/laravel.log, nah log ini kita bisa kirim ke Elasticsearch ataupun log agregator lainnya dengan bantuan logstash. Dengan mengirim data lewat aplikasi yang berbeda, kita mengurangi beban Laravel (PHP) untuk memproses log, sehingga kinerja aplikasi bisa lebih optimal.

Logstash adalah aplikasi yang digunakan untuk memproses, filter dan mengirim log. Dalam pengertian sederhana, kita bisa menggunakan Logstash untuk memformat log sesuai dengan kebutuhan. Ada banyak cara untuk memformat dan filter data di logstash, kali ini kita akan menggunakan grok, grok adalah plugin yang dikhususkan untuk memproses log yang tidak beraturan dengan merubahnya sesuai dengan aturan yang kita buat.

Cara ini bisa digunakan untuk aplikasi Laravel yang menggunakan banyak server, tinggal di install Logstash di masing-masing server dengan config yang sama.

Contoh log Laravel

Berikut ini adalah contoh log Laravel yang akan kita gunakan. Sebaiknya gunakan log dari server production, agar lebih memudahkan melihat hasilnya dan validasi apakah sudah sesuai dengan keinginan

[2021-09-20 15:06:32] local.ERROR: Method App\Http\Controllers\HelloData::() does not exist {"exception":"[object] (ReflectionException(code: 0): Method App\\Http\\Controllers\\BankController::() does not exist at /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php:48)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php(48): ReflectionMethod->__construct()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php(26): Illuminate\\Routing\\RouteSignatureParameters::fromClassMethodString()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Route.php(506): Illuminate\\Routing\\RouteSignatureParameters::fromAction()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php(25): Illuminate\\Routing\\Route->signatureParameters()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(832): Illuminate\\Routing\\ImplicitRouteBinding::resolveForRoute()
#5 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Router->substituteImplicitBindings()
#6 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#7 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#8 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#9 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#10 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#11 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#12 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#13 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#14 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#15 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#16 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#17 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#18 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then()
#20 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack()
#21 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute()
#22 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute()
#23 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\\Routing\\Router->dispatch()
#24 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#25 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#27 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#28 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#30 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#31 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#33 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#35 /var/www/project.jaranguda.com/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#37 /var/www/project.jaranguda.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#39 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\\Pipeline\\Pipeline->then()
#41 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#42 /var/www/project.jaranguda.com/vendor/laravel/octane/src/ApplicationGateway.php(36): Illuminate\\Foundation\\Http\\Kernel->handle()
#43 /var/www/project.jaranguda.com/vendor/laravel/octane/src/Worker.php(92): Laravel\\Octane\\ApplicationGateway->handle()
#44 /var/www/project.jaranguda.com/vendor/laravel/octane/bin/swoole-server(117): Laravel\\Octane\\Worker->handle()
#45 [internal function]: {closure}()
#46 /var/www/project.jaranguda.com/vendor/laravel/octane/bin/swoole-server(163): Swoole\\Server->start()
#47 {main}
"} 
[2021-11-23 03:05:51] production.ERROR: Class "Laravel\Octane\Octane" not found {"exception":"[object] (Error(code: 0): Class \"Laravel\\Octane\\Octane\" not found at /var/www/project.jaranguda.com/config/octane.php:71)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(72): require()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php(39): Illuminate\\Foundation\\Bootstrap\\LoadConfiguration->loadConfigurationFiles()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(237): Illuminate\\Foundation\\Bootstrap\\LoadConfiguration->bootstrap()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(310): Illuminate\\Foundation\\Application->bootstrapWith()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(127): Illuminate\\Foundation\\Console\\Kernel->bootstrap()
#5 /var/www/project.jaranguda.com/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()
#6 {main}
"}
[2022-02-18 04:27:08] local.ERROR: Connection refused {"exception":"[object] (RedisException(code: 0): Connection refused at /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:153)
[stacktrace]
#0 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(153): Redis->connect()
#1 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(84): Illuminate\\Redis\\Connectors\\PhpRedisConnector->establishConnection()
#2 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Support/helpers.php(263): Illuminate\\Redis\\Connectors\\PhpRedisConnector->Illuminate\\Redis\\Connectors\\{closure}()
#3 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(121): tap()
#4 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(28): Illuminate\\Redis\\Connectors\\PhpRedisConnector->createClient()
#5 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(32): Illuminate\\Redis\\Connectors\\PhpRedisConnector->Illuminate\\Redis\\Connectors\\{closure}()
#6 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(112): Illuminate\\Redis\\Connectors\\PhpRedisConnector->connect()
#7 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(91): Illuminate\\Redis\\RedisManager->resolve()
#8 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php(258): Illuminate\\Redis\\RedisManager->connection()
#9 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php(62): Illuminate\\Cache\\RedisStore->connection()
#10 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(97): Illuminate\\Cache\\RedisStore->get()
#11 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php(67): Illuminate\\Cache\\Repository->get()
#12 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(97): Illuminate\\Session\\CacheBasedSessionHandler->read()
#13 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(87): Illuminate\\Session\\Store->readFromHandler()
#14 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Store.php(71): Illuminate\\Session\\Store->loadSession()
#15 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(147): Illuminate\\Session\\Store->start()
#16 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Support/helpers.php(263): Illuminate\\Session\\Middleware\\StartSession->Illuminate\\Session\\Middleware\\{closure}()
#17 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(148): tap()
#18 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(116): Illuminate\\Session\\Middleware\\StartSession->startSession()
#19 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#20 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#21 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#23 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#25 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()
#27 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()
#28 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()
#29 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()
#30 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#31 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#32 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#34 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#35 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#37 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#38 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#40 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#42 /var/www/project.jaranguda.com/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#44 /var/www/project.jaranguda.com/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#46 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#48 /var/www/project.jaranguda.com/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#49 /var/www/project.jaranguda.com/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#50 /var/www/project.jaranguda.com/server.php(21): require_once('/home/tommy/git...')
#51 {main}
"}

Cara berikut ini bisa dijalankan di server Linux langsung.

1. Download Logstash

Download logstash versi terbaru

mkdir ~/src
cd ~/src
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.0.0-linux-x86_64.tar.gz
tar zxvf logstash-8.0.0-linux-x86_64.tar.gz

struktur file logstash

.
├── bin
├── config
├── CONTRIBUTORS
├── data
├── Gemfile
├── Gemfile.lock
├── jdk
├── lib
├── LICENSE.txt
├── logs
├── logstash-core
├── logstash-core-plugin-api
├── modules
├── NOTICE.TXT
├── tools
├── vendor
└── x-pack
 
12 directories, 5 files

2. Config Logstash

Di dalam folder config, buat file dengan nama laravel.conf, yang berisi

input {
    file {
        path => "/var/www/project.jaranguda.com/storage/logs/laravel.log"
        start_position => "beginning"
        codec => multiline { pattern => "\[[\d]{4}" negate => "true" what => "previous" }
    }
}
 
filter {
    grok {
        match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{DATA:env}\.%{DATA:severity}: %{DATA:message}" }
    }
}
 
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "server.elasticsarch.jaranguda.com"
        data_stream => "true"
    }
}

Keterangan :
path : lokasi log laravel
codec : untuk mendapatkan error beserta stacktrace-nya

agar logstash mengenali config laravel.conf diatas, tambahkan baris berikut di pipelines.yml

- pipeline.id: laravel
  path.config: "~/src/logstash-8.0.0/config/laravel.conf"

terakhir jalankan logstash dari terminal

~/src/logstash-8.0.0/bin/logstash

tunggu beberapa saat sampai muncul output, itu adalah format yang akan dikirim ke elasticsearch, bisa juga dicek di elasticsearch/kibana anda
logstash output parsing

Catatan

Ada cara yang lebih baik digunakan untuk memproses log dari Laravel ini, dengan catatan dari Laravel sendiri sudah menyimpan lognya dengan format json.

Filed Under: PHP

Deploy Elasticsearch dan Kibana 7.x di Kubernetes

Last Updated on 13 January 2022 By tommy Leave a Comment

Kali ini kita akan membahas cara untuk deploy Elasticsearch beserta Kibana di Kubernetes. Kali ini kita akan menggunakan DigitalOcean Kubernetes (DOKS), walaupun kita menggunakan DigitalOcean, anda tetap bisa menggunakannya di varian Kubernetes lainnya, mungkin yang perlu disesuaikan hanya dibagian LoadBalancer.

Spesifikasi

Kubernetes : 1.21
Elasticsearch : 7.16.2
Kibana : 7.16.2

Deploy Elasticsearch

Hal yang pertama akan kita lakukan adalah deploy elasticsearch, untuk itu kita harus membuat file YAML, disini akan kita namai elasticsearch.yaml. Bagian deployment adalah proses untuk deploy elasticsearch, dan services adalah agar elasticsearch bisa diakses menggunakan domain, contoh disini bisa diakses menggunakan elasticsearch, bila berada dalam satu namespace, kalo dari namespace yang berbeda gunakan elasticsearch.log

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: log
  name: elasticsearch
spec:
  selector:
    matchLabels:
      component: elasticsearch
  template:
    metadata:
      labels:
        component: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
        env:
        - name: discovery.type
          value: single-node
        - name: xpack.license.self_generated.type
          value: basic
        - name: xpack.security.enabled
          value: "true"
        ports:
        - containerPort: 9200
          name: http
          protocol: TCP
        resources:
          limits:
            cpu: 500m
            memory: 4Gi
          requests:
            cpu: 500m
            memory: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  namespace: log
  name: elasticsearch
  labels:
    service: elasticsearch
spec:
  type: ClusterIP
  selector:
    component: elasticsearch
  ports:
  - port: 9200
    targetPort: 9200

deploy elasticsearch

kubectl apply -f elasticsearch.yaml

Lihat pod dengan nama elasticsearch yang baru di deploy

kubectl get pods -n log
# output
NAME                             READY   STATUS    RESTARTS   AGE
elasticsearch-75c56f646d-7swl8   1/1     Running   0          1m
kibana-84657487dd-pggb8          1/1     Running   0          1m

Lalu, generate password agar elasticsearch lebih aman, karena menggunakan password random.

kubectl -n log exec -it elasticsearch-75c56f646d-5dk4q  -- bin/elasticsearch-setup-passwords auto -b
# output
Changed password for user apm_system
PASSWORD apm_system = 54QIqLvl7kdVhgpb1OUo
 
Changed password for user kibana_system
PASSWORD kibana_system = otrpineznPipsdk6k8xw
 
Changed password for user kibana
PASSWORD kibana = otrpineznPipsdk6k8xw
 
Changed password for user logstash_system
PASSWORD logstash_system = lB2MHUTNhDoylNFj3Op1
 
Changed password for user beats_system
PASSWORD beats_system = CtUD0oO5BFXeRbNqG2VB
 
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = vRmbU9s3xqswCEtmYd7J
 
Changed password for user elastic
PASSWORD elastic = mjZofGkihs4tjJ7Mywgo

simpan password diatas, terutama untuk user elastic, karena ini yang akan kita setting di Kibana dan digunakan untuk login ke dashboard juga.

Tes Koneksi Elasticsearch

Untuk tes koneksi ke elasticsearch, kita akan menggunakan port-forward, fitur Kubernetes yang bisa mem-forward dari POD ke localhost, dengan begini kita bisa bebas melakukan testing.

kubectl port-forward service/elasticsearch 9200:9200 -n log

buka terminal baru, lalu testing dengan password yang digenerate diatas

curl elastic:PASSWORD@localhost:9200
# contoh
curl elastic:mjZofGkihs4tjJ7Mywgo@localhost:9200

portforward kubernetes

Deploy Kibana

Kibana merupakah Web UI yang digunakan untuk mengakses dan mengelola Elastic Search, karena di support langsung oleh Elastic, Kibana biasanya memiliki versi yang sama dengan Elastic Search.

Untuk deploy kibana, pertama kita buat YAML file yang berisi Deployment dan Service.

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: log
  name: kibana
spec:
  selector:
    matchLabels:
      run: kibana
  template:
    metadata:
      labels:
        run: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.16.2
        env:
        - name: ELASTICSEARCH_URL
          value: "elasticsearch"
        - name: XPACK_SECURITY_ENABLED
          value: "true"
        - name: ELASTICSEARCH_USERNAME
          value: "elastic"
        - name: ELASTICSEARCH_PASSWORD
          value: "mjZofGkihs4tjJ7Mywgo"
        ports:
        - containerPort: 5601
          name: http
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  namespace: log
  name: kibana
  labels:
    service: kibana
spec:
  type: ClusterIP
  selector:
    run: kibana
  ports:
  - port: 5601
    targetPort: 5601

deploy YAML file tersebut.

kubectl apply -f kibana.yaml

untuk mengakses kibana, kita akan melakukan port forward ke localhost, same seperti di Elasticsearch. Cara ini digunakan untuk memastikan semuanya berjalan dengan lancar, sebelum melakukan deployment lebih lanjut.

kubectl port-forward service/kibana 5601:5601 -n log

lalu buka http://localhost:5601 di browser
kibana di localhost
Gunakan user elastic dan password yang digenerate sebelumnya.

Deploy Ingress

Untuk deployment Ingress

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml

Tunggu beberapa saat, lalu jalankan perintah dibawah ini untuk mendapatkan IP Public dari LoadBalancer.

kubectl get service ingress-nginx-controller --namespace=ingress-nginx

Setting DNS

Kita akan menggunakan subdomain per services, untuk itu kita harus set wildcard DNS, contoh recordnya

*.prd-sg.jaranguda IN A 132.12.xx.xx

setelah menambahkan DNS tersebut, bisa sampai 10 menit baru perubahan tersebut bisa dicek
Untuk setting dns/domain ini, akan atur oleh file nginx-ingress.yaml, buat isinya sebagai berikut

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: log
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: elastic.prd-sg.DOMAIN.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: elasticsearch
            port:
              number: 9200
  - host: kibana.prd-sg.DOMAIN.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: kibana
            port:
              number: 5601

deploy YAML file tersebut.

kubectl apply -f nginx-ingress.yaml

sekarang coba akses nama domain tersebut
akses kibana menggunakan subdomain

Dengan menggunakan Load Balancer (Public IP), kita bisa mengirim log ke Elasticsearch dari luar ataupaun dari dalam. Untuk mengakses elasticsearch dari dalam cluster cukup gunakan elasticsearch.log (formatnya menggunakan service.namespace)

ServiceInternalEksternal
Elastic Searchelasticsearch.log port 9200elastic.prd-sg.DOMAIN.com port 80
Kibanakibana.log port 5601kibana.prd-sg.DOMAIN.com port 80

Filed Under: Linux

Instalasi dan Konfigurasi Smokeping 2.8.x di Debian 11

Last Updated on 29 December 2021 By tommy Leave a Comment

Smokeping merupakah senjata utama untuk memonitoring services yang menggunakan PING/ICMP. Tidak semua versi smokeping tersedia di Debian 11, untuk itu kita harus compile dari awal untuk versi terbaru, karena kemungkinan besar versi terbaru tidak akan di ikutkan di Debian 11.

Mari mulai proses instalasi Smokeping 2.8.x di Debian 11 (“bullseye”)

Install Dependency

Install dependency berikut ini agar proses compile berjalan dengan sempurna.

sudo apt install gcc make libwww-perl libcgi-fast-perl libtext-soundex-perl libio-pty-perl libcrypt-ssleay-perl rrdtool librrds-perl libssl-dev -y

tambahannya kita install wget, yang akan digunakan untuk mendownload source Smokeping 2.8.2

sudo apt install wget -y

Install fping

Aplikasi ini yang akan digunakan untuk ping ke semua IP/Domain yang digunakan. Install fping dengan cara

sudo apt install fping -y

Download dan Install Smokeping 2.8.x

Saat ini versi terbaru adalah 2.8.2, cara yang sama bisa dijalankan untuk menginstall semua versi 2.8.x, download versi 2.8.2

wget https://oss.oetiker.ch/smokeping/pub/smokeping-2.8.2.tar.gz
# extract 
tar zxvf smokeping-2.8.2.tar.gz
# pindah ke folder smokeping
cd smokeping-2.8.2

Compile dan install

export LC_ALL=C
./configure --prefix=/usr/local/smokeping
# install
sudo make install

proses compile smokeping 2.8.2
tunggu beberapa waktu sampai instalasi selesai dan tidak ada informasi error diakhir instalasi.

Konfigurasi Smokeping 2.8.x

Buat folder untuk menyimpan cache dan data Smokeping

sudo mkdir /usr/local/smokeping/cache
sudo mkdir /usr/local/smokeping/data
sudo mkdir /usr/local/smokeping/var

Buat file baru /usr/local/smokeping/etc/config, untuk konfigurasi smokeping yang berisi

*** General ***
owner    = Jaranguda
contact  = some@address.nowhere
mailhost = my.mail.host
imgcache = /usr/local/smokeping/cache
imgurl   = cache
datadir  = /usr/local/smokeping/data
piddir  = /usr/local/smokeping/var
cgiurl   = http://some.url/smokeping.cgi
smokemail = /usr/local/smokeping/etc/smokemail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
syslogfacility = smokeping
 
*** Alerts ***
to = alertee@address.somewhere
from = smokealert@company.xy
+someloss
type = loss
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times  in a row
 
*** Database ***
step     = 300
pings    = 20
AVERAGE  0.5   1  1008
AVERAGE  0.5  12  4320
    MIN  0.5  12  4320
    MAX  0.5  12  4320
AVERAGE  0.5 144   720
    MAX  0.5 144   720
    MIN  0.5 144   720
 
*** Presentation ***
template = /usr/local/smokeping/etc/basepage.html.dist
charset  = utf-8
 
+ charts
 
menu = Charts
title = The most interesting destinations
 
++ stddev
sorter = StdDev(entries=>4)
title = Top Standard Deviation
menu = Std Deviation
format = Standard Deviation %f
 
++ max
sorter = Max(entries=>5)
title = Top Max Roundtrip Time
menu = by Max
format = Max Roundtrip Time %f seconds
 
++ loss
sorter = Loss(entries=>5)
title = Top Packet Loss
menu = Loss
format = Packets Lost %f
 
++ median
sorter = Median(entries=>5)
title = Top Median Roundtrip Time
menu = by Median
format = Median RTT %f seconds
 
+ overview 
 
width = 600
height = 50
range = 10h
 
+ detail
 
width = 600
height = 200
unison_tolerance = 2
 
"Last 3 Hours"    3h
"Last 30 Hours"   30h
"Last 10 Days"    10d
"Last 360 Days"   360d
 
 
*** Probes ***
+ FPing
binary = /usr/bin/fping
 
*** Targets ***
probe = FPing
menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of jaranguda.com Company.
 
+ DNS
menu = DNS
title = DNS Server
 
++ OpenDNS
menu = OpenDNS
title = OpenDNS
host = 208.67.222.222
 
++ Google
menu = GoogleDNS
title = GoogleDNS
host = 8.8.4.4
 
++ Cloudflare-DNS
menu = Cloudflare-DNS
title = Cloudflare-DNS
host = 1.1.1.1

test config yang baru dibuat

sudo /usr/local/smokeping/bin/smokeping --debug

smokeping debug mode

Systemd Smokeping

Agar mudah mengaktifkan smokeping sewaktu boot, maupun stop, start. Kita gunakan service systemd, buat file /usr/lib/systemd/system/smokeping.service yang berisi

[Unit]
Description=Smokeping Server
After=network.target
 
[Service]
Type=simple
ExecStart=/usr/local/smokeping/bin/smokeping --nodaemon /usr/local/smokeping/etc/config --logfile=/var/log/smokeping.log
 
[Install]
WantedBy=multi-user.target

lalu jalankan

# aktifkan sewaktu booting
sudo systemctl enable smokeping
# jalankan
sudo systemctl start smokeping
# cek status
sudo systemctl status smokeping

Web UI Smokeping

Grafik smokeping bisa diakses dari browser, tetapi sebelumnya harus diaktifkan. Web server yang akan kita gunakan adalah Apache, berikut ini caranya
1. Install Apache

sudo apt install apache2 libapache2-mod-fcgid -y

2. Setting VHOST Smokeping
Buat file virtual host untuk konfigurasi Smokeping di Apache pada file /etc/apache2/conf-enabled/smokeping.conf, yang isinya

Alias /smokeping/cache /usr/local/smokeping/cache
Alias /smokeping /usr/local/smokeping/htdocs/
 
 
<Directory "/usr/local/smokeping/cache">
  AllowOverride all
  Require all granted
</Directory>
 
<Directory "/usr/local/smokeping/htdocs/">
 Options FollowSymLinks ExecCGI
 AllowOverride all
 Require all granted
</Directory>

3. Aktifkan CGI dan restart Apache

sudo a2enmod cgi
# restart apache
sudo systemctl restart apache2

4. Set permission
Set permission agar apache bisa mengakses file Smokeping

sudo chown www-data:www-data -R /usr/local/smokeping

5. Akses Web UI Smokeping
Buka link http://IP-SERVER/smokeping/smokeping.fcgi.dist
smokeping di browser

Filed Under: Linux

  • « Go to Previous Page
  • Go to page 1
  • Go to page 2
  • Go to page 3
  • Go to page 4
  • Go to page 5
  • Go to page 6
  • Interim pages omitted …
  • Go to page 212
  • Go to Next Page »

Primary Sidebar

Pencarian

Tanya Jawab tentang DevOps SRE CPE, gabung di https://t.me/devopsindonesia

Terbaru

  • Cara Mengganti Port Screen Sharing macOS
  • Cara Menonaktifkan Pager di macOS
  • Cara Mengupdate Nama Apple silicon-as-a-Service Scaleway
  • Cara Force Delete Namespace di Kubernetes
  • Install PHP MariaDB di Mac Monterey

Komentar

  • mazda on Tutorial Lengkap Install Mail Server Postfix Dovecot MariaDB di CentOS 7
  • adi on Menggunakan Mikrotik Sebagai SSH Client
  • aris u on Solusi Simple Queue Mikrotik Tidak Berjalan
  • Bowo on Cara Mematikan SSID Molecool Balifiber
  • aris on Solusi Simple Queue Mikrotik Tidak Berjalan

Tulisan Populer

  • Password Router Huawei HG8245H5 Indihome 1.2m views
  • Password Terbaru ZTE F609 Indihome 784.5k views
  • Password Superadmin Huawei HG8245A 318.2k views
  • Cara Setting Manual Modem GPON ZTE F609 Indihome 273k views
  • Cara Setting Wireless ZTE F609 Indihome 257.1k views
  • Mengaktifkan Port LAN di Huawei HG8245 Indihome 169.8k views
  • Akses UseeTV Indihome via Wireless ZTE F609 156.8k views
  • Kemana Menghilangnya Saldo BCA 50 ribu 153.1k views
  • Cara Reset Password ZTE F609 Indihome 147.5k views
  • Cara Setting DHCP Server Modem/Router ZTE F609 113.5k views

Kategori

  • Delphi
  • dll
  • Gambas
  • Internet
  • Java
  • Lazarus
  • Linux
  • PHP
  • Review
  • Teknologi

Sponsor

kadal.id
carakami.com
kuotabisa.com
Untuk jadi sponsor, hubungi kita lewat halaman sponsor
© 2021. Jaranguda
  • Linux
  • PHP
  • Internet
  • Teknologi
  • Delphi
  • Gambas
  • Java