Ana içeriğe geç

3.4.3. Log Producer Jpa Data Provider#

Transactional uygulamalarda transactional bütünlüğü sağlamak ve uygulamanın hızını artırmak için outbox pattern kullanılabilir. Bu patternde veriyi üreten kaynak bir RDBMS üzerine transactional biçimde veriyi yazar. Veriyi okuyan kaynak ise RDBMS üzerinden bu datayı alarak işler.

Logları sisteme göndermek için kullanılacak Jpa Data sağlayıcı altyapısıdır. Bu altyapı kullanılarak logların veritabanı üzerinden loglanması sağlanmaktadır. Böylece loglar hem veritabanında bulunmuş olur hem de kafka üzerinden elastic search sistemine aktarılmış olur.

Bağımlılıklar#

Gradle Dependencies

api (
    [group: 'tr.com.havelsan.framework.logger', name: 'hvl-logger-producer-jpa-data-provider'],
)

Veritabanı Kurulumu (Liquibase)#

Log Producer Jpa Data Provider paketinin düzgün bir şekilde çalışabilmesi için veritabanı tablolarının oluşturulması gerekmektedir. Eğer liquibase kullanılıyorsa, paket içerisinden gelen liquibase dosyasının, projedeki liquibase dosyasına include edilmesi gerekmektedir.

Örnek liquibase root yaml dosyası aşağıdaki gibidir.

databaseChangeLog:
  - include:
      file: liquibase/logger-producer-jpa-data-provider/changelog-root.yaml

liquibase/logger-producer-jpa-data-provider/changelog-root.yaml yolundaki dosya, kütüphanenin içinde bulunmaktadır ve liquibase dosyasına bu şekilde include edilerek gerekli veritabanı tablolarının oluşmasını sağlar.

Log Producer Jpa Data Provider Kullanımı#

HvlLogProducerJpaDataProvider sınıfı inject edilerek kullanılmalıdır.

Log Processor Kurulumu#

Bu sınıf yardımıyla gönderilen olay kayıtları ilk olarak veritabanındaki {şema_adı}.log_producer_task tablosuna kaydedilecektir. Bu tablodaki kayıtları işleyip sıradaki adım olan kafka'ya yollaması için Logger Processor uygulamasına ihtiyaç vardır.

Yukarıdaki docker-compose yaml'ına benzer şekilde bir logger processor uygulaması oluşturulmalıdır. Buradaki önemli nokta; oluşturulacak docker compose yaml'ındaki DB_SCHEMA parametresidir. {şema_adı}.log_producer_task tablosunun şema adı bilgisi DB_SCHEMA parametresine verilmesi gerekmektedir.

Bununla ilgili örnek docker-compose kullanımları hvl-infra içerisinde mevcuttur. Eksen uygulamalarını içeren docker-compose yaml'ındaki logger-processor-bpmn-service ve logger-processor-oauth-service servisleri incelenebilir. Eksen uygulamalarından da anlaşılacağı üzere Log Producer Jpa Data Provider paketini kullanan uygulamaların kendi logger processor instance'ları bulunmaktadır.

Log processor uygulaması doğru bir şekilde çalıştırıldıktan sonra {şema_adı}.log_producer_task tablosuna atılan kayıtların logger processor tarafından işlenerek {şema_adı}.log_producer_task_history tablosuna aktarıldığı görülmelidir. Bu aşamada olay kaydı, kafkadaki varsayılan topic olan javalt-logger-producer-log topic'ine yazılmış anlamına gelir. Sonrasında fluentd bu topic'i consume ederek olay kayıtlarını elastic-search'e aktaracaktır. Detaylı bilgi ve istek yaşam döngüsü için Logger Processor sayfası incelenebilir.