Pemantauan yang Di-Host Sendiri Untuk Aplikasi Spring Boot

1. Perkenalan

Salah satu dari banyak fitur hebat Spring Boot adalah seperangkat aktuator bawaan. Aktuator ini menyediakan cara mudah untuk memantau dan mengontrol hampir setiap aspek aplikasi Spring Boot.

Dalam tutorial ini, kita akan melihat penggunaan aktuator metrik untuk membuat solusi pemantauan yang dihosting sendiri untuk aplikasi Spring Boot.

2. Database Metrik

Bagian pertama dari pemantauan aplikasi Spring Boot adalah memilih database metrik . Secara default, Spring Boot akan mengonfigurasi registri metrik Micrometer di setiap aplikasi.

Implementasi default ini mengumpulkan kumpulan metrik aplikasi yang telah ditentukan sebelumnya seperti penggunaan memori dan CPU, permintaan HTTP, dan beberapa lainnya. Tetapi metrik ini hanya disimpan dalam memori , yang berarti metrik tersebut akan hilang setiap kali aplikasi dimulai ulang.

Untuk membuat solusi pemantauan yang dihosting sendiri, pertama-tama kita harus memilih database metrik yang berada di luar aplikasi Spring Boot. Bagian berikut hanya akan membahas beberapa opsi yang dihosting sendiri yang tersedia.

Perhatikan bahwa setiap kali Spring Boot mendeteksi database metrik lain di classpath, registri dalam memori secara otomatis dinonaktifkan.

2.1. InfluxDB

InfluxDB adalah database deret waktu sumber terbuka. Cara tercepat untuk memulai InfluxDB adalah dengan menjalankannya secara lokal sebagai container Docker:

docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb

Perhatikan bahwa ini akan menyimpan metrik di partisi local / tmp . Ini bagus untuk pengembangan dan pengujian, tetapi bukan pilihan yang baik untuk lingkungan produksi.

Setelah InfluxDB berjalan, kami dapat mengonfigurasi aplikasi Spring Boot kami untuk mempublikasikan metrik ke dalamnya dengan menambahkan ketergantungan Mikrometer yang sesuai :

 io.micrometer micrometer-registry-influx 

Selain itu, kita perlu menambahkan entri baru ke file application.properties :

management.metrics.export.influx.uri=//localhost:8086

Di luar kotak, nama database disetel ke mydb , sedangkan nama pengguna dan kata sandi tetap tidak disetel.

Namun, kami dapat mengganti nilai default menggunakan properti khusus:

management.metrics.export.influx.db=customDbName management.metrics.export.influx.user-name=myUserName management.metrics.export.influx.password=mySecret

InfluxDB tidak menyediakan alat visualisasi asli . Namun, ini menyediakan alat terpisah yang disebut Chronograph yang berfungsi dengan baik untuk memvisualisasikan data InfluxDB.

2.2. Prometheus

Prometheus adalah alat pemantauan dan peringatan sumber terbuka yang awalnya dibuat di SoundCloud. Ini bekerja sedikit berbeda dari InfluxDB.

Alih-alih mengonfigurasi aplikasi kami untuk memublikasikan metrik ke Prometheus, kami mengonfigurasi Prometheus untuk melakukan polling aplikasi kami secara berkala .

Pertama, kami mengkonfigurasi aplikasi Spring Boot kami untuk mengekspos titik akhir aktuator Prometheus baru. Kami melakukan ini dengan memasukkan dependensi micrometer-registry-prometheus:

 io.micrometer micrometer-registry-prometheus 

Ini akan membuat titik akhir aktuator baru yang menghasilkan data metrik dalam format khusus yang dipahami Prometheus.

Selanjutnya, kita harus mengkonfigurasi Prometheus untuk melakukan polling pada aplikasi kita dengan menambahkan konfigurasi yang diinginkan ke dalam file prometheus.yml .

Konfigurasi berikut menginstruksikan Prometheus untuk mengumpulkan aplikasi kita setiap 5 detik, menggunakan titik akhir aktuator baru:

scrape_configs: - job_name: 'spring-actuator' metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['127.0.0.1:8080']

Terakhir, kita dapat memulai server Prometheus lokal menggunakan Docker. Ini mengasumsikan file konfigurasi kustom kami terletak di file lokal /etc/prometheus/prometheus.yml :

docker run -d \ --name=prometheus \ -p 9090:9090 \ -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus \ --config.file=/etc/prometheus/prometheus.yml

Prometheus menyediakan alat visualisasinya sendiri untuk melihat metrik yang telah dikumpulkan. Ini dapat diakses di URL // localhost: 9090 /.

2.3. Grafit

Graphite adalah database deret waktu open-source lainnya. Arsitekturnya sedikit lebih rumit daripada database lain yang telah kita lihat, tetapi dengan Docker, menjalankan sebuah instance secara lokal sangatlah mudah:

docker run -d \ --name graphite \ --restart=always \ -p 80:80 \ -p 2003-2004:2003-2004 \ -p 2023-2024:2023-2024 \ -p 8125:8125/udp \ -p 8126:8126 \ graphiteapp/graphite-statsd

Then we can configure Spring Boot to publish metrics to our instance by adding the micrometer-registry-graphite dependency:

 io.micrometer micrometer-registry-graphite 

As well as adding the configuration properties to application.properties:

management.metrics.export.graphite.host=127.0.0.1 management.metrics.export.graphite.port=2004

Like Prometheus, Graphite includes its own visualization dashboard. It is available at the URL //localhost/.

3. Visualization Tools

Once we have a solution for storing metrics outside of our Spring Boot application, the next decision is how we want to visualize the data.

Some of the metrics databases mentioned previously include their own visualization tools. There is a stand-alone visualization tool that is worth looking at for our self-hosted monitoring solution.

3.1. Grafana

Grafana is an open-source analytics and monitoring tool. It can connect to all of the previously mentioned databases, as well as many others.

Grafana generally provides better configuration and superior alerting than most built-in visualization tools. It can easily be extended using plugins, and there are lots of pre-built dashboards that can be imported to quickly create our own visualizations.

To run Grafana locally, we can start it using Docker:

docker run -d -p 3000:3000 grafana/grafana

We can now access the Grafana home page at the URL //localhost:3000/.

At this point, we would need to configure one or more data sources. This can be any of the metrics databases discussed previously or a variety of other supported tools.

Setelah sumber data dikonfigurasi, kita dapat membuat dasbor baru atau mengimpor yang melakukan apa yang kita inginkan.

4. Kesimpulan

Pada artikel ini, kami telah membahas cara membuat solusi pemantauan yang dihosting sendiri untuk aplikasi Spring Boot.

Kami melihat tiga basis data metrik yang dengan mudah didukung oleh Spring Boot dan melihat bagaimana menjalankannya secara lokal.

Kami juga melihat secara singkat Grafana, alat visualisasi canggih yang dapat menampilkan data metrik dari berbagai sumber.