28 Ocak 2021 Perşembe

SpringBoot Actuator - Info Endpoint

Giriş
Info Actuator nesnesini etkinleştirmek için şöyle yaparız. Böylece contributor nesnelerde bilgiler derlenmeye başlar. 
management.endpoint.info.enabled: true
Ancak bu endpoint HTTP için açık değil. Açmak için şöyle de yaparız
management.endpoints.web.exposure.include=info,health,loggers
Bu aşamadan sonra şu adrese giderse info bilgilerini görebiliriz.
http://localhost:8080/actuator/info
Contributors
info adresinde gösterilen bilgileri sağlayan şeylere contributors deniliyor. Bunlar şöyle
build
Enabled by default: true
Goal: Exposes build information.
Requires: you to generate build information
Configuration property: management.info.build.enabled

env
Enabled by default: false (since Spring Boot 2.6. For the older Spring Boot version, this contributor is enabled by default!)
Goal: Exposes any property from the SpringEnvironment .
Required: to specify properties with names that start with info.*
in you application.yml or application.properties
Configuration property: management.info.env.enabled

git
Enabled by default: true
Goal: exposes git information.
Requires: you to generate git information
Configuration property: management.info.git.enabled

java
Enabled by default: false
Goal: exposes Java runtime information.
Configuration property: management.info.java.enabled
Bu contributor'ların da etkin olup olmadığını kontrol etmek mümkün.

Git Contributor
Açıklaması şöyle
Who never needed to quickly know which branch is deployed in the development server to know if a feature of bug-fix is already available?
Açıklaması şöyle
If the branch name, commit id, and timestamp are not enough, you can enable displaying more information by setting the property below in your application properties:

management.info.git.mode=full

This will add a lot more information, like commit message, commit author, and ahead/behind commits information.

Örnek
Şu satırı dahil ederiz
<plugin>
 <groupId>io.github.git-commit-id</groupId>
 <artifactId>git-commit-id-maven-plugin</artifactId>
</plugin>
Çıktısı şöyle
{
  "git": {
    "branch": "main",
    "commit": {
      "id": "d2035e1",
      "time": "2023-03-01T18:55:58Z"
    }
  }
}
Build Contributor
Örnek
Şöyle yaparız
<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <executions>
      <execution>
        <goals>
          <goal>build-info</goal>
        </goals>
        <configuration>
          <additionalProperties>
            <java.version>${java.version}</java.version>
            <some.custom.property>some value</some.custom.property>
          </additionalProperties>
        </goals>
      </execution>
  </executions>
</plugin>
Açıklaması şöyle. spring-boot-maven-plugin projeyi build etmek için kullanılınca ismi build-info.properties olan özel bir dosya oluşturur
When build-info of spring-boot-maven-plugin is run, it generates a property file containing all the build information. By default, it is located at ${project.build.outputDirectory}/META-INF/build-info.properties, but you can customize it by providing outputFile parameter.
Eğer bu dosya varsa Spring ismi BuildProperties olan özel bir bean yaratır. Açıklaması şöyle.
When Spring detects there is this file on the classpath, it creates BuildProperties bean unless it is explicitly declared.
Env Contributor
Örnek
Örneğin env contributor Spring2.6'dan sonra etkin gelmiyor. Etkinleştirmek için şöyle yaparız
management.info.env.enabled
Örnek 
Şöyle yaparız
management.info.env.enabled=true
info.app.name=Spring Boot Actuator Dashboard
info.app.description=Spring Boot backend to demonstrate actuator APIs
info.app.version=1.0
 http://localhost:8080/actuator/info adresine gidersek çıktı olarak şunu alırız
{
  "app": {
    "name": "Spring Boot Actuator Dashboard",
    "description": "Spring Boot backend to demonstrate actuator APIs",
    "version": "1.0"
  }
}
Örnek 
Şöyle yaparız. Burada farklı olarak info.java-vendor giriliyor
## Configuring info endpoint
info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0
info.java-vendor = ${java.specification.vendor}
Örnek
Şöyle yaparız. Burada farklı olarak info.application.spring-cloud-version giriliyor
spring:
  application:
    name: example-app

info:
  application:
    name: ${spring.application.name}
    description: Very cool Spring Boot application
    version: '@project.version@'
    spring-cloud-version: '@spring-cloud.version@'
    spring-boot-version: '@project.parent.version@'
Görmek için şöyle yaparız
curl http://localhost:8080/actuator/info | jq
{
  "application": {
    "name": "example-app",
    "description": "Very cool Spring Boot application",
    "version": "0.0.1-SNAPSHOT",
    "spring-cloud-version": "2020.0.4",
    "spring-boot-version": "2.5.7"
  }
}

InfoContributor 
Örnek
Elimizde şöyle bir kod olsun. Burada kendimiz InfoContributor olan bir bean yarattık
@Component
public class DemoInfoContributor implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("demo",
            Collections.singletonMap("info-timestamp", LocalDateTime.now().toString()));
    }
}
Şimdi bir istek gönderelim
GET http://127.0.0.1:8080/actuator/info
Çıktı olarak şunu alırız
{
  "app": {
    "name": "actuator-test",
    "description": "null"
  },
  "git": {
    "branch": "master",
    "commit": {
      "id": "ff889ec",
      "time": "2020-10-29T22:36:04Z"
    }
  },
  "build": {
    "artifact": "actuator-test",
    "name": "actuator-test",
    "time": "2020-10-30T21:53:59.493Z",
    "version": "0.0.1-SNAPSHOT",
    "group": "com.relaximus"
  },
  "demo": {
    "info-timestamp": "2020-10-30T23:23:07.241981"
  }
}


Hiç yorum yok:

Yorum Gönder