<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alexey Lapin</title>
    <description>The latest articles on DEV Community by Alexey Lapin (@alexeylapin).</description>
    <link>https://dev.to/alexeylapin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1043699%2F551955d4-f2ac-4f59-8367-11c22268bb21.jpeg</url>
      <title>DEV Community: Alexey Lapin</title>
      <link>https://dev.to/alexeylapin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexeylapin"/>
    <language>en</language>
    <item>
      <title>Spring Boot Admin Prometheus Service Discovery</title>
      <dc:creator>Alexey Lapin</dc:creator>
      <pubDate>Sun, 26 Mar 2023 16:47:04 +0000</pubDate>
      <link>https://dev.to/alexeylapin/spring-boot-admin-prometheus-service-discovery-1692</link>
      <guid>https://dev.to/alexeylapin/spring-boot-admin-prometheus-service-discovery-1692</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/alexey-lapin/spring-boot-admin-prometheus-service-discovery"&gt;SBAPSD&lt;/a&gt; - expose your Spring Boot Admin registered applications for Prometheus monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Monitoring your applications is crucial for maintaining a healthy system. &lt;strong&gt;Spring Boot Admin&lt;/strong&gt; is a popular tool for managing and monitoring Spring Boot applications, providing a central dashboard to visualize application status and metrics. On the other hand, &lt;strong&gt;Prometheus&lt;/strong&gt; is a powerful open-source monitoring and alerting toolkit that has become the go-to solution for many developers. When you're using Spring Boot Admin to manage your applications and Prometheus as your monitoring solution, it's essential to find an efficient way to expose application instances to Prometheus. That's where &lt;strong&gt;SBAPSD&lt;/strong&gt; comes in. This new Java library allows you to expose application instances registered in Spring Boot Admin in Prometheus HTTP service discovery format, making it easier to monitor your applications without any additional manual configuration or setup.&lt;/p&gt;

&lt;p&gt;✔ SBAPSD is the perfect solution if you already have a setup with Spring Boot-based applications registered in Spring Boot Admin and want to introduce a monitoring stack based on Prometheus without manually adding each instance to the scrape configuration or setting up any other service discovery tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with SBAPSD
&lt;/h2&gt;

&lt;p&gt;SBAPSD can be used in two ways: as a &lt;strong&gt;standalone application&lt;/strong&gt; or as a &lt;strong&gt;library&lt;/strong&gt; integrated into your existing Spring Boot Admin server application or any other app. Here's how to get started with both use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using SBAPSD as a Library
&lt;/h3&gt;

&lt;p&gt;1️⃣ Add the &lt;code&gt;sbapsd-server&lt;/code&gt; dependency to your project:&lt;/p&gt;

&lt;p&gt;For Gradle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nf"&gt;implementation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.github.alexey-lapin.sbapsd:sbapsd-server:latest"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Maven:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.github.alexey-lapin.sbapsd&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;sbapsd-server&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;latest&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure you have the Spring Web stack on your classpath, such as &lt;strong&gt;spring-boot-starter-webflux&lt;/strong&gt; or &lt;strong&gt;spring-boot-starter-web&lt;/strong&gt;. It is not necessary when &lt;strong&gt;spring-boot-admin-starter-server&lt;/strong&gt; already added.&lt;/p&gt;

&lt;p&gt;2️⃣ Enable the service discovery feature by applying the &lt;code&gt;@EnableAdminServerServiceDiscovery&lt;/code&gt; annotation to your main class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@SpringBootApplication&lt;/span&gt;
&lt;span class="nd"&gt;@EnableAdminServer&lt;/span&gt;
&lt;span class="nd"&gt;@EnableAdminServerServiceDiscovery&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;SpringApplication&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using SBAPSD as a Standalone Application
&lt;/h3&gt;

&lt;p&gt;1️⃣ Download the latest standalone JAR from the &lt;a href="https://github.com/alexey-lapin/spring-boot-admin-prometheus-service-discovery/releases/latest"&gt;releases page&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v2 is based on Spring Boot 2 and requires Java 8&lt;/li&gt;
&lt;li&gt;v3 is based on Spring Boot 3 and requires Java 17&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2️⃣ Run the JAR file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; sbapsd-standalone-v2-latest.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; sbapsd-standalone-v3-latest.jar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Standalone app is also available as &lt;strong&gt;GraalVM&lt;/strong&gt; native binaries for Linux and Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuring SBAPSD
&lt;/h3&gt;

&lt;p&gt;Whether you're using SBAPSD as a library or a standalone application, you'll need to configure it by adding properties to your &lt;code&gt;application.yml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;sbapsd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;server-1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
      &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:8092/instances&lt;/span&gt; &lt;span class="c1"&gt;# SBA v2/v3&lt;/span&gt;
      &lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# optional&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-name&lt;/span&gt;
          &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-.*&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;status&lt;/span&gt;
          &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;UP,DOWN&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# optional&lt;/span&gt;
        &lt;span class="na"&gt;static-label-1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;value-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, configure &lt;strong&gt;Prometheus&lt;/strong&gt; to use the provided endpoints for service discovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spring"&lt;/span&gt;
    &lt;span class="na"&gt;http_sd_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:8080/service-discovery/prometheus/server-1&lt;/span&gt;
    &lt;span class="na"&gt;relabel_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source_labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;__meta_discovery_actuator_path&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;target_label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;__metrics_path__&lt;/span&gt;
        &lt;span class="na"&gt;replacement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$1/prometheus&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source_labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;__meta_discovery_app_name&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;target_label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With &lt;a href="https://github.com/alexey-lapin/spring-boot-admin-prometheus-service-discovery"&gt;SBAPSD&lt;/a&gt;, integrating your Spring Boot Admin registered applications with Prometheus monitoring is super easy. The library simplifies the process, allowing you to efficiently monitor your applications without the need for manual configuration or additional service discovery tools. Give &lt;strong&gt;SBAPSD&lt;/strong&gt; a try and streamline your application monitoring setup!&lt;/p&gt;

</description>
      <category>java</category>
      <category>spring</category>
      <category>prometheus</category>
      <category>servicediscovery</category>
    </item>
  </channel>
</rss>
