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
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.
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.