Pemantauan data untuk Java Virtual Machine (JVM) di kluster Kubernetes adalah solusi pengumpulan metrik yang fleksibel dan menyeluruh untuk semua layanan berbasis JVM. Pemantauan ini didukung melalui konfigurasi Logtail yang disesuaikan dengan Kubernetes serta penemuan layanan otomatis.
Prasyarat
Sebuah instance Observabilitas Full-stack telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance.
Implementasi
Teknologi Java Management Extensions (JMX) merupakan bagian standar dari platform Java SE. JMX digunakan terutama untuk memantau dan mengelola informasi seperti status aplikasi Java, server JVM, dan sumber daya lainnya. JMX mendukung Remote Method Invocation (RMI) untuk ingest data, yang fungsinya mirip dengan ekspor Prometheus. Pembacaan metrik menjadi lebih aman dan integrasi data lebih hemat biaya dengan menggunakan RMI daripada agen Java.
Di kluster Kubernetes, model penyebaran DaemonSet digunakan baik untuk komponen pengumpulan metrik JVM maupun log. Saat mengumpulkan data pemantauan dari JVM, Anda dapat memfilter data menggunakan variabel lingkungan, label Kubernetes, namespace, nama pod, dan nama kontainer. Pemfilteran dilakukan melalui komponen pengumpulan log yang mendukung pemilihan multidimensi sumber daya Kubernetes. RMI memerlukan komunikasi antara proses Java, dan pemilihan sumber daya Kubernetes mungkin mempengaruhi sejumlah besar proses yang tidak terkait. Dalam hal ini, Logtail menggunakan variabel lingkungan ILOGTAIL_JMX_PORT untuk mempersempit ruang lingkup data lebih lanjut.

Sebelum Anda mulai
Jika ingin menggunakan Logtail untuk secara otomatis mengumpulkan data pemantauan dari JVM untuk aplikasi Java yang diterapkan di kluster Kubernetes, lakukan langkah-langkah berikut:
Tambahkan deklarasi POD_IP ke variabel lingkungan Anda.
Contoh:
- name: POD_IP valueFrom: fieldRef: fieldPath: status.podIPKonfigurasikan parameter startup JVM.
Konfigurasikan parameter com.sun.management.jmxremote berikut untuk mengaktifkan akses jarak jauh JMX:
Atur parameter com.sun.management.jmxremote.local.only menjadi false.
Atur kedua parameter com.sun.management.jmxremote.ssl dan com.sun.management.jmxremote.authenticate menjadi false atau konfigurasikan parameter JMX Password dalam konfigurasi Logtail Anda.
Atur parameter com.sun.management.jmxremote.port dan com.sun.management.jmxremote.rmi.port menjadi port RMI yang dideklarasikan.
Atur parameter java.rmi.server.hostname menjadi nilai variabel lingkungan POD_IP.
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Djava.rmi.server.hostname=$(POD_IP)Tambahkan deklarasi ILOGTAIL_JMX_PORT ke variabel lingkungan Anda. Deklarasi ini menentukan port metrik yang diekspos dan ditunjukkan oleh nilai parameter
com.sun.management.jmxremote.port.Setelah menyelesaikan operasi sebelumnya, Anda dapat terhubung ke pod yang diperlukan dan menjalankan perintah jps untuk melihat parameter startup JVM. Deklarasi
JAVA_TOOL_OPTIONS=""dalam perintah jps digunakan untuk menghindari konflik port. Jika variabel lingkungan JAVA_TOOL_OPTIONS digunakan saat menjalankan perintah jps, konflik port mungkin terjadi.
Verifikasi variabel lingkungan: Hubungkan ke pod yang diperlukan dan jalankan perintah
env|grep ILOGTAIL_JMX_PORT.
Prosedur
Masuk ke konsol Simple Log Service.
Di bagian Log Application, klik tab Intelligent O&M. Lalu, klik Full-stack Observability.
Di halaman Simple Log Service Full-stack Observability, klik instance yang ingin Anda kelola.
Di panel navigasi di sebelah kiri, klik Full-stack Monitoring.
Pertama kali Anda menggunakan Full-stack Monitoring di instance tersebut, klik Enable.
Di panel navigasi di sebelah kiri, klik Data Import. Di halaman Data Import Configurations, temukan sakelar Kubernetes JVM Monitoring di bagian Kubernetes Monitoring.
Pertama kali Anda membuat konfigurasi Logtail untuk data pemantauan host, nyalakan sakelar untuk pergi ke halaman konfigurasi. Jika Anda telah membuat konfigurasi Logtail, klik ikon
untuk pergi ke halaman konfigurasi.Klik Use Existing Machine Groups.
Setelah komponen pemantauan diinstal, Simple Log Service secara otomatis membuat grup mesin dengan nama dalam format
k8s-group-${your_k8s_cluster_id}. Anda dapat menggunakan grup mesin ini.Pilih grup mesin
k8s-group-${your_k8s_cluster_id}, pindahkan grup mesin dari bagian Source Server Groups ke bagian Applied Server Groups, lalu klik Next.PentingJika status denyut jantung grup mesin adalah FAIL, Anda dapat mengklik Automatic Retry. Jika masalah tetap ada, lihat Apa yang harus saya lakukan jika grup mesin Logtail tidak memiliki denyut jantung?
Di langkah Specify Data Source, konfigurasikan parameter dan klik Complete. Tabel berikut menjelaskan parameter tersebut.
Setelah menyelesaikan konfigurasi, Simple Log Service secara otomatis membuat aset seperti Metricstores.
Parameter
Deskripsi
General configurations
Config Name
Nama konfigurasi Logtail. Anda dapat menentukan nama kustom.
Cluster
Nama kluster Kubernetes. Anda dapat memasukkan nama kustom.
Setelah Anda mengonfigurasi parameter ini, Simple Log Service menambahkan tag
cluster=Nama Clusterke data pemantauan JVM Kubernetes yang dikumpulkan menggunakan konfigurasi Logtail.PentingPastikan bahwa nama cluster unik. Jika tidak, konflik data mungkin terjadi.
JMX Username
Nama pengguna yang digunakan untuk mengakses server JMX.
Kami sarankan Anda tidak mengonfigurasi parameter ini di kluster Kubernetes.
JMX Password
Kata sandi yang digunakan untuk mengakses server JMX.
Kami sarankan Anda tidak mengonfigurasi parameter ini di kluster Kubernetes.
Global Tags
Tag kustom yang ditambahkan ke data pemantauan JVM Kubernetes yang dikumpulkan. Tag adalah pasangan kunci-nilai.
Setelah Anda mengonfigurasi parameter ini, Simple Log Service menambahkan tag kustom ke data pemantauan JVM yang dikumpulkan menggunakan konfigurasi Logtail.
Configurations for K8s Selector
Namespace
Ekspresi reguler yang digunakan untuk mencocokkan nama namespace dari mana data dikumpulkan.
Pod Name
Ekspresi reguler yang digunakan untuk mencocokkan nama pod dari mana data dikumpulkan.
Container Name
Ekspresi reguler yang digunakan untuk mencocokkan nama kontainer dari mana data dikumpulkan.
Environment Variable Whitelist
Daftar putih variabel lingkungan. Daftar putih menentukan kontainer dari mana data dapat dikumpulkan. Secara default, parameter ini kosong, yang menunjukkan bahwa sistem mengumpulkan data pemantauan JVM dari semua kontainer. Saat Anda mengonfigurasi daftar putih variabel lingkungan, parameter Key diperlukan. Parameter value opsional.
Jika parameter EnvValue kosong, kontainer yang variabel lingkungannya berisi kunci yang ditentukan oleh EnvKey akan cocok.
Jika parameter EnvValue tidak kosong, kontainer yang variabel lingkungannya terdiri dari pasangan kunci-nilai yang ditentukan oleh EnvKey dan EnvValue akan cocok.
Secara default, pencocokan string dilakukan untuk nilai parameter EnvValue. Kontainer hanya cocok jika nilai variabel lingkungan sama dengan nilai parameter EnvValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($) untuk parameter EnvValue, pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter EnvKey menjadi NGINX_SERVICE_PORT dan mengatur parameter EnvValue menjadi ^(80|6379)$, kontainer dengan nomor port 80 dan kontainer dengan nomor port 6379 akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki variabel lingkungan yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut cocok.
Environment Variable Blacklist
Daftar hitam variabel lingkungan. Daftar hitam menentukan kontainer dari mana data tidak dapat dikumpulkan. Secara default, parameter ini kosong, yang menunjukkan bahwa sistem mengumpulkan data dari semua kontainer. Saat Anda mengonfigurasi daftar hitam variabel lingkungan, parameter Key diperlukan. Parameter value opsional.
Jika parameter EnvValue kosong, kontainer yang variabel lingkungannya berisi kunci yang ditentukan oleh EnvKey akan difilter.
Jika parameter EnvValue tidak kosong, kontainer yang variabel lingkungannya terdiri dari pasangan kunci-nilai yang ditentukan oleh EnvKey dan EnvValue akan difilter.
Secara default, pencocokan string dilakukan untuk nilai parameter EnvValue. Kontainer hanya cocok jika nilai variabel lingkungan sama dengan nilai parameter EnvValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($) untuk parameter EnvValue, pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter EnvKey menjadi NGINX_SERVICE_PORT dan mengatur parameter EnvValue menjadi ^(80|6379)$, kontainer dengan nomor port 80 dan kontainer dengan nomor port 6379 akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki variabel lingkungan yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut difilter.
K8s Label Whitelist
Daftar putih label Kubernetes. Daftar putih menentukan kontainer dari mana data tidak dapat dikumpulkan. Saat Anda mengonfigurasi daftar putih label Kubernetes, parameter Key diperlukan, dan parameter value opsional.
Jika parameter LabelValue kosong, kontainer yang label Kubernetes-nya berisi kunci yang ditentukan oleh LabelKey akan cocok.
Jika parameter LabelValue tidak kosong, kontainer yang label Kubernetes-nya terdiri dari pasangan kunci-nilai yang ditentukan oleh LabelKey dan LabelValue akan cocok.
Secara default, pencocokan string dilakukan untuk nilai parameter LabelValue. Kontainer hanya cocok jika nilai label Kubernetes sama dengan nilai parameter LabelValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($), pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter LabelKey menjadi app dan mengatur parameter LabelValue menjadi ^(test1|test2)$, kontainer yang label Kubernetes-nya terdiri dari app:test1 atau app:test2 akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki label Kubernetes yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut cocok.
K8s Label Blacklist
Daftar hitam label Kubernetes. Daftar hitam menentukan kontainer dari mana data tidak dapat dikumpulkan. Saat Anda mengonfigurasi daftar hitam label Kubernetes, parameter Key diperlukan, dan parameter value opsional.
Jika parameter LabelValue kosong, kontainer yang label Kubernetes-nya berisi kunci yang ditentukan oleh LabelKey akan difilter.
Jika parameter LabelValue tidak kosong, kontainer yang label Kubernetes-nya terdiri dari pasangan kunci-nilai yang ditentukan oleh LabelKey dan LabelValue akan difilter.
Secara default, pencocokan string dilakukan untuk nilai parameter LabelValue. Kontainer hanya cocok jika nilai label Kubernetes sama dengan nilai parameter LabelValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($), pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter LabelKey menjadi app dan mengatur parameter LabelValue menjadi ^(test1|test2)$, kontainer yang label Kubernetes-nya terdiri dari app:test1 atau app:test2 akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki label Kubernetes yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut difilter.
Container Label Whitelist
Daftar putih label kontainer. Daftar putih menentukan kontainer dari mana data dapat dikumpulkan. Secara default, parameter ini kosong, yang menunjukkan bahwa sistem mengumpulkan data pemantauan JVM dari semua kontainer. Saat Anda mengonfigurasi daftar putih label kontainer, parameter Key diperlukan. Parameter value opsional.
Jika parameter LabelValue kosong, kontainer yang label kontainernya berisi kunci yang ditentukan oleh LabelKey akan cocok.
Jika parameter LabelValue tidak kosong, kontainer yang label kontainernya terdiri dari pasangan kunci-nilai yang ditentukan oleh LabelKey dan LabelValue akan cocok.
Secara default, pencocokan string dilakukan untuk nilai parameter LabelValue. Kontainer hanya cocok jika nilai label kontainer sama dengan nilai parameter LabelValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($) untuk parameter LabelValue, pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter LabelKey menjadi io.kubernetes.container.name dan mengatur parameter LabelValue menjadi ^(nginx|cube)$, kontainer bernama nginx dan kontainer bernama cube akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki label kontainer yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut cocok.
Container Label Blacklist
Daftar hitam label kontainer. Daftar hitam menentukan kontainer dari mana data tidak dapat dikumpulkan. Secara default, parameter ini kosong, yang menunjukkan bahwa Anda ingin mengumpulkan data dari semua kontainer. Saat Anda mengonfigurasi daftar hitam label kontainer, parameter Key diperlukan. Parameter value opsional.
Jika parameter LabelValue kosong, kontainer yang label kontainernya berisi kunci yang ditentukan oleh LabelKey akan difilter.
Jika parameter LabelValue tidak kosong, kontainer yang label kontainernya terdiri dari pasangan kunci-nilai yang ditentukan oleh LabelKey dan LabelValue akan difilter.
Secara default, pencocokan string dilakukan untuk nilai parameter LabelValue. Kontainer hanya cocok jika nilai label kontainer sama dengan nilai parameter LabelValue. Jika Anda menentukan nilai yang dimulai dengan caret (
^) dan diakhiri dengan tanda dolar ($) untuk parameter LabelValue, pencocokan ekspresi reguler dilakukan. Sebagai contoh, jika Anda mengatur parameter LabelKey menjadi io.kubernetes.container.name dan mengatur parameter LabelValue menjadi ^(nginx|cube)$, kontainer bernama nginx dan kontainer bernama cube akan cocok.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah kontainer memiliki label kontainer yang terdiri dari salah satu pasangan kunci-nilai yang ditentukan, kontainer tersebut difilter.
Advanced configurations
Collect Kubernetes Labels
Setelah label Kubernetes dikonfigurasi, Simple Log Service menambahkan bidang terkait label Kubernetes ke data pemantauan JVM yang dikumpulkan.
Sebagai contoh, atur nama label menjadi
appdan alias nama menjadik8s_label_app. Jika sebuah kluster Kubernetes berisi label bernamaapp, sepertiapp=serviceA, Simple Log Service menambahkan bidangk8s_label_app: serviceAke data pemantauan JVM.Collect Environment Variable
Setelah label variabel lingkungan dikonfigurasi, Simple Log Service menambahkan bidang terkait label variabel lingkungan ke data pemantauan JVM yang dikumpulkan.
Sebagai contoh, jika Anda mengatur nama variabel lingkungan menjadi
VERSIONdan alias nama menjadienv_version, sebuah kontainer berisi variabel lingkungan bernamaVERSION, sepertiVERSION=v1.0.0dan Simple Log Service menambahkan bidangenv_version: v1.0.0ke data pemantauan JVM.JMX Garbage Collector of New Version
Setelah Anda menyalakan sakelar, pengumpul sampah JMX versi baru seperti G1 didukung.
Default JVM Metrics
Setelah Anda menyalakan sakelar, Logtail mengumpulkan metrik inti JVM yang telah ditentukan sebelumnya.
JMX Metric Collection Filter
Pendukung filter dan pengumpulan menggunakan rentang bean JMX, ekspresi reguler bean JMX, tipe bean JMX, dan rentang atribut JMX.
Contoh konfigurasi
Sebagai contoh, Anda dapat memulai layanan SpringBoot Demo di namespace bernama default. Kemudian, gunakan deklarasi ILOGTAIL_JMX_PORT untuk mengekspos port 9999. Di variabel lingkungan JAVA_TOOL_OPTIONS, tambahkan parameter startup JVM untuk metrik JMX yang sesuai dengan port 9999 yang diekspos.
Sebelum menggunakan variabel lingkungan JAVA_TOOL_OPTIONS untuk mereferensikan variabel lingkungan POD_IP, Anda harus mendefinisikan variabel lingkungan POD_IP.
apiVersion: apps/v1
kind: Deployment
metadata:
name: jvm-new-1
namespace: default
spec:
...
template:
metadata:
labels:
app: jvm1
spec:
containers:
- image: evanljp/full-stack:jvm-new-0.1
name: jvm
env:
- name: "ILOGTAIL_JMX_PORT"
value: "9999"
- name: "ILOGTAIL_JMX_TAGS"
value: "a=b,c=d"
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: JAVA_TOOL_OPTIONS
value: >-
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.rmi.port=9999
-Djava.rmi.server.hostname=$(POD_IP)
-Dserver.port=8081
...
Setelah menentukan deklarasi di atas, Anda perlu menyelesaikan pengaturan berikut dalam konfigurasi Logtail Anda untuk mengumpulkan data pemantauan dari JVM Kubernetes ke Simple Log Service.

Apa yang harus dilakukan selanjutnya
Setelah data pemantauan JVM Kubernetes dikumpulkan dan dikirim ke aplikasi Pemantauan Full-stack, aplikasi tersebut secara otomatis membuat dasbor khusus untuk data pemantauan. Anda dapat menggunakan dasbor untuk menganalisis data pemantauan. Untuk informasi lebih lanjut, lihat Lihat Dasbor.