Ana içeriğe geç

7.1.1. Giriş#

Uygulama Paketi (Instances)#

Gateway docker instance'ına buradan ulaşabilirsiniz.

Varsayılan Uygulama Parametreleri (Default Environment Variables)#

Değişken Adı Değeri Açıklama
SERVER_PORT 9999 Uygulamanın sunulduğu port bilgisidir.
SERVER_APP_NAME gateway-server Uygulama isim bilgisidir.
SERVER_DESCRIPTION Hvl Spring Gateway Server Uygulama açıklama bilgisidir.
SWAGGER_DESCRIPTION Havelsan gateway services info Uygulama swagger açıklama bilgisidir.
SERVER_APP_TYPE gateway Javalt monitoring üzerinde uygulama gruplaması için kullanılan parametredir.
SWAGGER_ENABLED false Swagger UI ve API dokümantasyonunun etkin olup olmadığını belirtir.
SERVER_CONFIGURATION_REMOTE_URL http://[username]:[password]@hvlconfigserver:8888/config Uzak Config Server adresidir (gerekirse kimlik bilgileri içerir).
LOGGING_CONFIG http://hvlconfigserver:8888/config/spring-gateway-server/default/framework(_)log4j2(_)cloud-instance(_)spring-gateway/log4j2.yml Log4j2 konfigürasyon dosyasının uzak konumudur.
REDIS_CM_CACHE_PREFIX hvl::sgw:: Redis önbellek anahtarı öneki/prefix’idir.
spring_cloud_loadbalancer_configurations default Spring Cloud LoadBalancer konfigürasyon profili (örn. default,health-check).
EUREKA_CLIENT_DISABLE_DELTA false Eureka delta güncellemelerini devre dışı bırakır (false ise delta güncellemeleri kullanılır).
EUREKA_CLIENT_FETCH_REGISTRY true Uygulamanın Eureka’dan servis kayıtlarını çekip çekmeyeceğini belirler.
KAFKA_SUPPORT_ENABLED false Kafka entegrasyonunun etkinleştirilip etkinleştirilmeyeceğini belirler.
MANAGEMENT_ACCESS none Actuator yönetim uçlarının (management endpoints) erişim seviyesidir.
RESTART_ACCESS none Actuator restart uç noktasına erişim seviyesidir.
SHUTDOWN_ACCESS none Actuator shutdown uç noktasına erişim seviyesidir.

Uygulama ile ilgili tüm parametrelere buradan ulaşabilirsiniz.

Request Loglama#

Eksen, gateway uygulamasına gelen isteklerin kafka, fluentd, elasticsearch pipeline'ı ile depolanmasını sağlar.

Bunu yaparken aşağıdaki başlıca istatistikler toplanabilir:

  • Request Uri, Method, Route Id, Route Uri
  • Request Headers
  • Request Body
  • Response Status
  • Response Headers
  • Response Body
  • Remote Address

Konfigürasyonlar yapılarak toplanan bilgiler arttırılabilir, bu durumda performans kayıpları göz önünde bulundurulmalıdır.

application-cloud-gateway.yml içerisinden config-server vasıtasıyla varsayılan olarak gelen ayarlar aşağıdaki gibidir.

hvl:
  cloud:
    gateway:
      request:
        logging:
          enabled: ${GATEWAY_REQUEST_LOGGING_ENABLED:false}
          include-list: ${GATEWAY_REQUEST_LOGGING_INCLUDE_LIST:request-body,request-headers,response-body,response-headers}
          exclude-filter-list: ${GATEWAY_REQUEST_LOGGING_EXCLUDE_FILTERS:}
          request-body-max-length: ${GATEWAY_REQUEST_LOGGING_REQUEST_MAX_LENGTH:1024}
          response-body-max-length: ${GATEWAY_REQUEST_LOGGING_RESPONSE_MAX_LENGTH:1024}

hvl.cloud.gateway.request.logging.enabled: Request loglamanın devreye girmesini sağlar.

hvl.cloud.gateway.request.logging.include-list: Loglanacak sistemsel verileri loglama dahil etmek için kullanılır. Her bir değerin metrik toplamak için performans düşüreceği göz önünde bulundurulmalıdır. Alabileceği değerler: request-body, request-headers, response-body, response-headers

hvl.cloud.gateway.request.logging.exclude-filter-list: Loglanması istenmeyen url'lerin bilgisidir. Regex olarak ve virgül ile ayrılarak liste şeklinde değerler girilebilir. Örnek: /actuator.*,/favicon.ico,.*/lookup/.*

hvl.cloud.gateway.request.logging.request-body-max-length: Loglanan request body max uzunluk değeridir.

hvl.cloud.gateway.request.logging.response-body-max-length: Loglanan response body max uzunluk değeridir.

Önemli Uyarı

include-list alanına eklenecek herbir değer için performans düşüşü göz önünde bulundurulmalıdır. Gerçekten ihtiyaç durumu varsa bu liste genişletilmelidir. Sistemde çok fazla yük olacağı öngörülüyorsa dikkatli olunmalıdır ve yük testleri yapılmalıdır.

Request loglarının kafkaya gönderilmesini sağlamak için loggers altına aşağıdaki ekleme yapılmıştır. Request loglarının konsola da yazdırılması isteniyorsa tr.com.havelsan.javarch.spring.gateway.server.filter.HvlSpringGatewayLoggingFilter isimli logger trace yapılmalıdır. Production ortamlarda trace yapılmaması tavsiye edilir.

Loggers:
  logger:
    - name: tr.com.havelsan.javarch.spring.gateway.server.filter.HvlSpringGatewayLoggingFilter
      level: info
      additivity: false
      AppenderRef:
        - ref: Console
        - ref: RollingFile
    - name: hvlRequestLogger
      level: info
      additivity: false
      AppenderRef:
        - ref: RequestKafkaRouting

Yukarıdaki örnekte name: hvlRequestLogger kısmı önemlidir ve değiştirilmemelidir.

  • Request loglaması yapılan sınıfta kullanılan logger name değeri hvlRequestLogger'dur.
  • ref: RequestKafkaRouting kısmı ise, Appender bölümünde tanımlanan RequestKafkaRouting appender'ının kullanılacağını gösterir. Böylece loglanacak request'ler kafka'ya yazılmış olacaktır.

Gateway için kullanılan log4j2 konfigürasyonuna buradan ulaşılabilir.

Yukarıdaki konfigürasyonlar yapıldıktan sonra Kafka appender içerisindeki topic'e loglar gönderilmeye başlayacaktır. hvl-infra içerisindeki fluentd uygulaması, varsayılan olarak javalt-request-logs topic'ini dinleyecek ve sonrasında elasticsearch'e gönderecek şekilde konfigüre edilmiştir. Kafka appender içerisindeki indexName bilgisine göre elasticsearch üzerinde index oluşacaktır.