WorldEnd: What do you do at the end of the world? Are you busy? Will you ~~save us~~ profile your application using Prometheus and Grafana?
Hujan April
" Hari yang indah bukan?"
Komentar itu sama sekali tidak masuk akal buat anda. Anda menolehkan kepala anda ke jendela yang sebenarnya bisa anda lihat dari sudut mata anda, hanya untuk memberikan pertanda ke lawan bicara anda. Anda mendongkol dalam hati. Apa maksudmu hari yang indah? Tidakkah kau melihat hujan lebat di luar sana? Jendela padahal hanya 2 jengkal dari matamu? Dan kita jadi diberikan tugas tambahan karena tidak dapat pulang. Namun, setelah menimbang-nimbang anda memutuskan untuk menyimpan kata-kata tersebut dalam hati. Anda yakin Tracy punya maksud lain.
"Apakah kakak membenci hujan?"
Pertanyaan itu sedikit mengagetkan anda tentunya. Sepertinya junior anda menyadari kekesalan anda mengenai cuaca saat ini yang menghalangi anda untuk segera angkat kaki dari kantor. Tanpa melihat wajahnya lagi anda lalu berjalan menjauh dari jendela dengan langkah sendu.
"Waktu bermain-main sudah selesai, kita masih ada task yang harus diselesaikan." desis anda. Tracy hanya diam beberapa saat, sebelum akhirnya mengikuti anda dari belakang. Anda hanya berharap agar dia berhenti bertanya mengenai hujan. Karena pada dasarnya... anda membencinya untuk suatu alasan jauh dalam relung memori anda. Ini adalah perulangan ke-577890 anda dalam dunia ini. Dunia dimana anda hidup sebagai berbagai orang berbeda. Terkadang anda ingat sesuatu dari perulangan sebelumnya, terkadang mereka menghilang begitu saja. Saat ini anda mengingat semuanya, dari perulanagn sebelumnya. Dari pengetahuan anda mengenai software engineering dan mengenai hujan yang membekas dalam luka hati anda.
Profiling, Prometheus, dan Grafana
"Hmm kakak. " Tracy memanggil anda dan hanya sampai di sana. Ia lalu terdiam dan tidak melanjutkan kata-katanya. Keadaan canggung lalu bertahan beberapa detik hingga Tracy kembali membuka mulutnya. "Maaf membuat kakak harus juga ikut mengerjakan task ini. "
Anda tidak serta merta menjawabnya. Anda terus berjalan ke meja kerja anda sebelum membalas Tracy.
"Apakah kamu pernah memasang Profiler sebelumnya?"
Tracy menggelengkan kepalanya. "Sejujurnya... belum. Aku bahkan baru pertama kali mendengarnya tadi."
Ya Tuhan! Aku harus memulai dari sana? Keadaan anda tidak semakin membaik. Anda benar-benar ingin meninggalkan anak itu sekarang juga. Faktanya, jika anda berada dalam keadaan yang sama pada beberapa perulangan yang lampau, anda akan melakukannya tanpa ragu. Namun, saat ini berbeda. Tidak setelah semua itu terjadi dan membayangkan kapan Tracy akan pulang jika anda tidak membantunya. Anda cukup mengenal Tracy dan sudah pasti junior anda itu tidak akan mau pulang hingga task yang diberikan kepadanya selesai. Mengetahui hal tersebut, anda tidak tega meninggalkannya.
"Apakah sekarang kamu sudah tahu?" Setelah melempar pertanyaan tersebut anda lalu berdoa sekuat tenaga berharap keadaan yang sudah buruk ini tidak menjadi sangat buruk.
"Aku sudah sempat membacanya tadi. Yang aku pahami itu adalah suatu alat yang mengambil berbagai informasi dari aplikasi kita."
"Betul." jawab anda lega. Anda setidaknya tidak harus memanggil nama Tuhan satu kali lagi untuk menjaga kewarasan anda sore itu. "Informasi dari profiler bisa kita gunakan untuk berbagai macam hal. Salah satunya untuk mengambil keputusan mengenai scaling. Selain itu hal sederhana seperti mencari sumber masalah pada performa aplikasi juga dapat dilakukan dengan data yang didapat tadi. Kebetulan perusahaan kita menggunakan Prometheus dan Grafana. "
Anda lalu membuka salah satu aplikasi yang sudah pernah anda pasangi Prometheus. Ada beberapa hal yang anda perhatikan sebelum akhirnya anda mulai menjelaskan apa yang harus tracy lakukan.
"Pertama buka build.gradle
lalu tambahkan dependency implementation 'org.springframework.boot:spring-boot-starter-actuator'
"
"Oke, tambahkan dependency baru ke build dot grigle"
"Gradle..."
"Ah maaf.." Tracy tertawa kecil, lalu berhenti setelah melihat wajah anda yang tidak terkesan dengan reaksinya.
Anda menghela nafas panjang. Anak itu benar-benar tidak punya harapan. Tapi, bagaimana pun anda sudah memilih untuk membantu Tracy.
"Oke, coba refresh Gradle dan buka endpoint /actuator
"
Anda lalu meminta Tracy untuk mengunduh Prometheus.
Pada dasarnya setelah diinstall, Prometheus sudah dapat digunakan pada localhost:9090
.
Namun, agar Prometheus dapat mengambil data dari aplikasi masih ada beberapa tahap yang harus dilakukan:
1. Menambahkan 'io.micrometer:micrometer-registry-prometheus'
dependency pada build.gradle
.
2. Expose metriks endpoint dengan menambahkan management.endpoints.web.exposure.include=*
pada application.properties
Dua langkah ini sebenarnya sudah cukup untuk melihat metriks Prometheus pada /actuator/prometheus
. Namun,
pada keadaan ini Prometheus belum bisa membaca endpoint dari aplikasi Spring Boot. Ada satu langkah lagi yang perlu dilakukan:
- Edit
prometheus.yml
pada folder Prometheus agar endpoint yang dibaca oleh Prometheus menunjuk pada aplikasi Spring Boot. (Cukup gunakan localhost, tidak perlu melakukan deployment pada tutorial ini.)
"Setelah semuanya selesai berarti, kita sudah bisa mengakses metriks melalui Prometheus ya?"
"Betul. Kamu bisa mencoba melakukan query beberapa metriks dasar dari Spring Boot. Coba melakukan
query http_server_requests_count
untuk melihat berapa kali sebuah endpoint dipanggil. Kamu juga bisa mencoba beberapa query
lain yang disedikan oleh Prometheus."
"Kita juga dapat menggunakan Grafana untuk memperlihatkan metriks dari aplikasi. Ada sebuah dashboard bernama JVM Micrometer dashboard yang bisa digunakan untuk menampilkan metriks yang berasal dari Prometheus."
Grafana merupakan
hal selanjutnya yang anda jelaskan kepada Tracy. Grafana pada dasarnya dapat digunakan
untuk menampilkan metriks dengan berbagai preset dashboard untuk melakukan monitoring berbagai
infrastruktur dan arsitektur dari aplikasi.
Biasanya Grafana dapat berjalan pada localhost:3000
dan kita perlu untuk menyetel Grafana agar membaca data source dari
Prometheus.
Setelah login dan mengatur data source, kita dapat membuat panel dan melakukan beberapa query Prometheus yang sudah digunakan sebelumnya.
"Selanjutnya aku ingin kamu mencoba membuat JVM Micrometer Dashboard."
"Eh bagaimana caranya meng-import dashboard ya?"
"Coba perhatikan menu dimana kamu menambahkan panel baru. Di bagian bawahnya ada pilihan untuk import. Pilih dari web Grafana dan masukkan link tadi."
"Ah oke. Lalu pilih data source-nya dari Prometheus?"
"Ya. Gunakan data source yang sudah kamu buat sebelumnya. "
Tracy lalu mengikuti instruksi anda dan perlahan menghilang ke dunianya sendiri. Ia seolah terserap oleh layar komputernya dan mengabaikan sekitarnya. Suara ketikan keyboard dan rintik hujan yang tidak mau mengalah menguasai ruang. Di dalam ruangan yang mulai sepi itu anda hanya duduk menatap junior anda yang kesadarannya entah kemana. Anda lalu menghibur diri dengan membuka halaman Issue untuk membaca apa yang menjadi task Tracy. Task junior anda pada dasarnya sudah selesai. Anda cukup heran kenapa dia masih belum memutuskan untuk pulang. Setelah beberapa menit membiarkan Tracy bekerja anda lalu membuka mulut anda.
"Bukannya task mu sudah selesai?" Anda menatap Tracy lekat-lekat. Anak itu hanya menoleh sedikit.
"Ah. Aku ingin mencoba beberapa hal dengan Grafana. " jawabnya singkat.
"Oh. Bagaimana kalau aku berikan sedikit tantangan? Apa kamu tertarik?"
Tracy mengangguk tegas. Wajahnya sudah lelah dan matanya pun sudah memerah. Tidak perlu bertanya lebih lanjut pun anda sudah tahu dia sangat lelah. Tapi, melihat keinginan belajarnya anda akhirnya memutuskan tetap memberikan satu task tambahan.
"Jika aku lihat aplikasi ini adalah pekerjaan anak magang yang masih bermasalah ya? " Aplikasi yang dikembangkan oleh anak magang pada liburan tahun lalu. Anda belum menjadi 'senior Tracy' pada saat itu dan mungkin sedang melanglang buana ke berbagai tempat pada perulangan lain. Namun, anda memiliki informasi, atau mungkin lebih tepat disebut pengetahuan mengenai ingatan dari si 'senior Tracy' ini.
"Benar. Dari tahun lalu perusahaan tidak mempedulikan aplikasi ini. Namun, setelah melihat aplikasi ini sepertinya mereka memustuskan untuk menggunakan aplikasi itu sebagai kelinci percobaan junior engineer atau mungkin anak magang lainnya."
Aplikasi yang malang. Tapi, tindakan yang tidak salah sama sekali. Low risk, high return. Tidak perlu merisiko kan aplikasi working dan tidak perlu membuat studi kasus kecil bodoh untuk digunakan. Anda lalu mencoba aplikasi tersebut. Setelah beberapa kali akses anda lalu menarik kata-kata anda kembali. Pantas saja mereka tidak mempedulikan aplikasi ini untuk beberapa bulan. Response time nya sangat-sangat buruk
"Oke, aku rasa kamu tahu masalah utama aplikasi ini bukan?" Walau sepertinya Tracy sudah tahu, anda hanya ingin memastikan beberapa hal. Mungkin beberapa tips sebelum mungkin pergi.
"Response aplikasi ini benar-benar lambat. Itu yang aku tahu."
"Jika begitu aku menyarankan kamu mencoba beberapa fungsi dari Grafana untuk mencari tahu bagaimana keadaan penggunaan resources aplikasi. Dengan begitu aku rasa kamu akan dengan mudah mengetahui kemungkinan penyebabnya."
"Terima kasih sarannya kak. "
"Sudah kubilang jangan panggil aku kakak.. Itu terdengar aneh." Anda mengambil barang-barang anda membiarkan Tracy berkoceh sendiri mengenai panggilan tersebut.
"Kalau begitu aku pergi dulu."
"Walau di luar tidak ada apa-apa lagi?" Tracy melempar pertanyaan tersebut dengan nada dingin. Suatu hal yang belum pernah anda bayangkan akan keluar dari mulut anak itu.
Anda sama sekali tidak melihat ke Tracy. Saat ini anda tidak dapat membayangkan wajah seperti apa yang diperlihatkan olehnya.
"Kakak tahu kan... Perulangan kakak di sini sudah selesai dan juga dunia yang mensimulasikan hal tesebut..."
Anda hanya diam. Tidak menjawab dan tidak menolak. Bahkan anda tidak kaget dengan reaksi Tracy tersebut. Tidak. Hal itu juga tidak benar. Anda sebenarnya kaget. Tapi, ada hal yang lebih menarik perhatian anda. Rintik hujan lalu terhenti. Suara jam dinding adalah hal terakhir yang menggema sebelum perlahan memudar dan menghilang. Lalu berhenti.
Tasks
Set up
- Unduh
postgresql
- Buat sebuah database di lokal. Misalkan nama database-nya
t9
- Ubah
application.properties
dengan credentials database-mu - Jalankan aplikasi. Akan ada sebuah mekanisme seeding yang berjalan saat aplikasi pertama dijalankan yang akan mengisi database dengan data-data yang banyak. tidak diperbolehkan untuk mengubah kode seeding.
Checklists
- Membaca dokumen ini
- Berhasil membuka endpoint
/actuator
- Install Prometheus, dan menjalankannya pada port
localhost:9090
- Mengatur project agar dapat memperlihatkan data pada
/actuator/prometheus
- Mengatur Prometheus anda agar membaca endpoint dari aplikasi Spring Boot anda
- Coba beberapa query dasar Prometheus dan menampilkannya sebagai graf pada Prometheus. (Minimum:
count
,max
,sum
) - Mengatur Grafana dan dapat menampilkan data Prometheus (menggunakan custom panel dan JVM Micrometer Dashboard)
- Menemukan fitur terlambat dan penyebabnya dengan bantuan profiling
- Tingkatkan performa aplikasi dengan data yang anda dapatkan dari proses Profiling. (Melakukan optimasi pada fitur terlambat)
- Jawablah pertanyaan berikut pada
README.md
:- Bagaimana mengatur Grafana agar menampilkan data Prometheus?
- Berdasarkan hasil Profiling yang anda dapatkan, jelaskan analisis anda terhadap keadaan aplikasi saat ini
- Bagaimana anda mengintepretasikan temuan anda? Jelaskan dan berikan gambar screenshot setiap graph query yang anda dapatkan dari dashboard Prometheus dan Grafana
Notes
-
Beberapa screenshot dijalankan menggunakan docker. Untuk anda yang tidak menggunakan Docker untuk instalasi Prometheus dan Grafana, anda perlu mengarahkan Prometheus dan Grafana ke
localhost
bukanhost.docker.internal
Anda dipersilahkan menggunakan instalasi jenis apapun yang anda inginkan. Namun, tidak disarankan menggunakan docker jika anda belum punya pengalaman sebelumnya dengan docker. -
Anda diperbolehkan untuk mengubah seluruh code base selain bagian models dan seeding selama semua fitur masih berjalan dengan benar.
-
Ingat kembali materi analisis kompleksitas.
WorldEnd Compendium
"Katakan Tracy. Siapa kamu sebenarnya?" Jelas saja pertanyaan itu tidak bermaksud untuk menanyakan identitas. Anda tahu siapa Tracy. Anda sadar siapa dia sebenarnya. Anda telah bertemu dengannya di berbagai perulangan dengan peran yang berbeda-beda. Yang anda tanyakan adalah siapa dia yang asli? Adik anda? Teman masa kecil anda? Rekan anda? Senior anda? Junior anda? Dalam permainan peran dari berbagai perulangan, mana Tracy yang sebenarnya?
"Aku pun tidak tahu..."
Jawaban tersebut tepat seperti bayangan anda. Karena bahkan anda sendiri tidak tahu siapa anda sebenarnya. Anda telah melewati 577890 perulangan. Dari semua perulangan anda tidak tahu pasti mana anda yang asli. Bahkan anda tidak yakin kehidupan anda sebelum dipindahkan ke dunia ini adalah yang asli. Bagaimana kalau itu juga salah satu perulangan yang anda tidak sadari? Kemungkinan itu terjadi tidak 0.
Dalam ratusan ribu perulangan, anda berkali-kali lupa akan perulangan sebelumnya. Lalu teringat pada perulangan lain dan siklus tersebut akan terus berulang. Anda kadang mempertanyakan mengapa anda masih bisa mempertahankan kewarasan anda setelah semua itu. Anda telah hidup dalam 577890 skenario berbeda, sebagai orang berbeda. 577890 hari sebagai manusia berbeda. Terkadang sebagai pria, terkadang wanita. Tapi, yang tidak berubah adalah fakta anda selalu hidup sebagai orang programmer di setiap perulangan. Mengapa begitu? Anda tidak pernah mendapat jawabannya.
Anda menoleh ke samping. Sebuah kehadiran kuat anda rasakan. Anda kemudian memasang sikap siaga. Sebenarnya anda merasakan kehadirannya sejak beberapa menit yang lalu. Kehadirannya sangat kuat, bahkan cukup untuk membuat rintik hujan terhenti.
"Alice..." panggil anda.
Sosok itu menundukkan tubuhnya. Sembari memejamkan matanya ia memberi anda salam. "Selamat malam.." ucapnya.
Tracy tidak kaget melihat sosok Alice walau wajahnya sedikit bergedik ngeri saat saling berpapasan mata dengannya. Ia terus menghentakkan kakinya dan berusaha tidak melihat langsung ke sosok yang supernatural tersebut. Alice sendiri tidak menghiraukannya dan terus berjalan ke arah anda.
"Dalam lebih 1600 tahun anda berjalan di dunia ini, apa yang sudah anda ketahui?"
Anda tidak mau menjawabnya. Anda hanya tahu keputusasaan tak berujung yang terus anda lalui pada berbagai perulangan. Tidak semuanya menyedihkan tentu saja. Beberapa memori indah sempat anda buat dalam beberapa kali kesempatan. Hanya saja anda sudah tidak mengingatnya. Mempertahankan kewarasan dalam sebegitu banyak perulangan jelas bukan perkara mudah. Anda harus picky dalam memilih apa yang perlu anda ingat dan apa yang perlu dilupakan. Wadah anda, jiwa anda tidak mampu menahan beban jika dibiarkan mengingat segalanya.
"Apa aku dapat bertemu dengan mereka lagi?" 'Mereka' yang anda tahu adalah teman. Siapa mereka? Anda tidak bisa menjawab pasti. Yang anda tahu anda telah berjanji kepada mereka untuk kembali. Kemana? Pertanyaan lain yang anda tidak tahu jawabannya. Hingga anda ingat sebuah kata.'Taman'
Alice menatap dingin ketika anda melempar pertanyaan tersebut. Entah ia kecewa karena anda mengabaikan pertanyaannya atau ia tidak suka dengan pertanyaan yang baru anda lempar.
"Jujur, bahkan aku tidak tahu. " jawabnya singkat. Setelah diam beberapa lama, Alice lalu melanjutkan: "Aku pada dasarnya hanya boneka yang ditugaskan untuk mengawasi dan membantu anda."
"Apa itu kehendak dari dunia ini? Apakah itu kenyataan yang harus kami terima?"
"Mengatakan ini adalah kenyataan pada dasarnya juga tidak tepat." balasnya. "Pada dasarnya kalian hanya memainkan peran dari buku ini. WorldEnd Compendium. Aku yakin anda masih mengingat nama tersebut bukan?"
Anda hanya diam. Tentu saja anda tahu mengenai nama benda tersebut. Dalam taman bunga pada dunia asal anda, anda menemukan buku tersebut. Suatu benda yang mungkin seharusnya anda tidak perlu temukan. Itulah hukuman dari mereka yang membuka 'kotak pandora'. Anda tidak yakin asalnya, tapi setelah buku tersebut anda buka, anda terpisah dari teman-teman anda dan dipaksa melewati berbagai skenario dalam perulangan.
"WorldEnd Compendium pada dasarnya bukan suatu benda untuk dimain-mainkan. Benda itu dapat memberikan kekuatan bagi mereka yang berhasil melewati ujiannya. Tidak hanya satu, tapi ada banyak WorldEnd Compendium di dunia asal anda. Koleksi kisah dari dunia yang telah berakhir dan berisikan ujian dari dunia-dunia tersebut. Tidak semuanya mengenai menyelamatkan dunia dari kehancuran masal. Sebagian besar bahkan hanya berisikan kisah remeh, tapi bermakna. Selain itu, jumlahnya besar. WorldEnd Compendium yang kalian buka adalah 1 Juta Kisah Programmer."
"Apa yang ada di halaman terakhir buku itu? "
"Sudah aku katakan: kekuatan. Dalam bentuk apa? Aku tidak tahu. Anda harus mencari tahunya sendiri."
"Bagaimana untuk mereka yang gagal?"
"Mudah. Mereka dikembalikan ke dunia asal. Namun, aku tidak yakin mereka masih utuh. Mereka mungkin sudah tidak waras atau menjadi sesuatu yang tidak manusiawi. Wadah mereka kemungkinan tidak dapat bertahan setelah menerima begitu banyak beban dalam perulangan yang begitu banyak. "
Alice mengatakannya dengan tenang dan dingin. Sesuatu yang menurut anda sangat mengerikan. Keadaan yang bisa dibilang lebih buruk dari kematian. Dia tidak berbohong ketika ia mengatakan bahwa dia adalah boneka. Ia sama sekali tidak memiliki emosi.
"Pertanyaan terakhir. Apa dengan kekuatan itu aku bisa bertemu kembali dengan mereka dan menyelamatkan mereka yang gagal dalam ujian WorldEnd Compendium?"
Alice diam dan lalu berjalan menjauh. "Aku tidak tahu pasti karena aku tidak tahu kekuatan seperti apa yang ditawarkan oleh WorldEnd Compendium anda."
"Kalau begitu, antar aku ke perulangan berikutnya. " tegas anda.
Alice kali ini sedikit bereaksi. Boneka itu terlihat tersenyum.
"Walau anda tidak tahu apa yang menanti anda di ujung jalan?"
"Ini tidak seperti aku punya pilihan lain bukan?"
Tracy berlari ke arah anda. Junior anda itu menatap anda khawatir. "Apa kakak yakin?" Matanya terus berputar kiri dan kanan. Hentakan kakinya yang terus terdengar selama percakapan anda dengan Alice semakin cepat dan keras. Ia jelas tidak tenang.
"Maafkan aku. Aku tidak akan tahu kalau belum mencoba. Aku tidak bisa mengeluh dan berharap orang lain akan menyelamatkanku bukan?"
Pada akhirnya semuanya demi kembali ke kehidupan normal anda. Anda harap-harap cemas tentunya. Satu sisi anda sudah melewati setengah jalan ujian ini, di sisi lain anda menyesali telah mencoba membuka WorldEnd Compendium dan takut akan tidak ada yang menanti di ujung jalan, pada perulangan ke satu juta. Namun, berhenti di sini berarti melewati sesuatu yang lebih buruk dari kematian.
Tracy dengan berat hati melepas anda. Anda lalu menepuk pundak junior anda itu.
"Pastikan tugasmu selesai saat kita bertemu lagi."
Tracy sepertinya berusaha menahan beban dan mencoba tersenyum. Senyum yang berat tapi berusaha jujur.
"Baik" jawabnya.
Anda lalu pergi meninggalkannya dengan maksud untuk kembali. Bukan hanya untuknya. Untuk kembali ke kehidupan normal anda. Perulangan demi perulangan akan anda lalui tapi jika itu berarti anda dapat merebut kembali kehidupan lama anda, anda akan lewati itu semua. Ketika anda melewati pintu ke perulangan selanjutnya anda meningat kembali ketika anda tertawa bersama mereka pada taman bunga itu. Pada taman dengan bunga-bunga red spider lily tumbuh subur di sekitarnya.
fin
Created: 2022-05-18 17:02:16