12 Kasım 2020 Perşembe

SpringBoot Actuator - Health Endpoint

Giriş
SpringBoot Actuator eğer projede bazı bean'ler bulursa otomatik olarak bunlarla ilgili health indicator'ları da yaratıyor. Açıklaması şöyle
The following HealthIndicators are auto-configured by Spring Boot when appropriate. You can also enable/disable selected indicators by configuring management.health.key.enabled, with the key listed in the table below.
Liste uzun
cassandra,couchbase,datasource,diskspace,elasticsearch,hazelcast,influxdb,jms,ldap,mail,mongo,neo4j,ping,rabbit,redis,solr
Bean'leri Kontrol Etmek
Default yüklenen bean'ler aslında çok az çıktı veriyorlar. http://localhost:8080/actuator/health adresine gittiğimizde sadece şu çıktıyı alırız.
{
  "status": "UP"
}
Çünkü açıklaması şöyle. Yani bir sürü yerden toplanan status tek bir değere çevriliyor. 
Spring Actuator aggregates statuses from different subsystems of the application in one final status. 
application.properties Alanları
show-details Alanı
"always" veya "when_authorized" değerleri alabilir

Örnek
Eğer daha detaylı çıktı olmak istersek şöyle yaparız
management.endpoint.health.show-details=always
Bu sefer şu çıktıyı alırız. Burada PostgreSQL çıktısı görülebilir.
{
  "status": "UP",
  "details": {
    "diskspace": {
      "status": "UP",
      "details": {
        "total": 498989641727,
        "free": 80724643840,
        "threshold": 10485760
      }
    },
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "hello": 1
      }
    }
  }
}
Örnek
Çıktı olarak şunu alırız. Burada MySQL çıktısı görülebilir.
{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "MySQL",
        "validationQuery": "isValid()"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 101057732608,
        "free": 43956203520,
        "threshold": 10485760,
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}

3. defaults Alanı
Default yüklenen bean'leri kapatmak için şöyle yaparız
management.health.defaults.enabled=false
Belirli bir bean'i çalışmaz hale getirmek için şöyle yaparız
management.health.cassandra.enabled=false
4. show-components Alanı
"always" veya "when_authorized" değerleri alabilir

Örnek
Şöyle yaparız
management:
  endpoints:
    web:
      base-path: /
  endpoint:
    health:
      show-details: always
      show-components: always
Çıktı olarak şunu alırız. Burada db ve redis görülebilir.
{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "validationQuery": "isValid()"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 499963170816,
        "free": 309942484992,
        "threshold": 10485760,
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    },
    "redis": {
      "status": "UP",
      "details": {
        "version": "6.0.4"
      }
    }
  }
}
5. Kubernetes
SpringCloud Kubernetes projesi ile Health Endpoint biraz farklılaşıyor

1. probes Alanı
Şöyle yaparız
management.endpoint.health.probes.enabled=true
Böylece /actuator/health adresine ilave olarak iki tane endpoint etkin hale geliyor. Bunlar şöyle. Böylece bu iki endpoint Kubernetes içinde kullanılabilir.
/actuator/health/liveness
/actuator/health/readiness
Örnek
Şöyle yaparız
# enable liveness and readiness probes for the Kubernetes environment
management.health.kubernetes.enabled=true
management.health.livenessstate.enabled=true
management.health.readinessstate.enabled=true
management.endpoint.health.probes.enabled=true	

#  comprehensive health information
management.endpoint.health.validate-group-membership=true

management.endpoint.health.group.liveness.show-details=always
management.endpoint.health.group.liveness.show-components=always

management.endpoint.health.group.readiness.show-details=always
management.endpoint.health.group.readiness.show-components=always
Örnek
Şöyle yaparız
# Change addresses for
# /actuator/health/liveness
# /actuator/health/readiness
management.endpoint.health.probes.add-additional-paths=true
management.endpoint.health.group.liveness.additional-path=server:liveness
management.endpoint.health.group.readiness.additional-path=server:readiness
HealthIndicator Arayüzü
HealthIndicator Arayüzü yazısına taşıdım

CompositeHealthContributor Arayüzü
Bu arayüzden kalıtan sınıfımız, yine kendi kodladığımız HealthContributor sınıflarını kullanarak bileşik bir health bileşeni yaratabilmeyi sağlar.

Hiç yorum yok:

Yorum Gönder