Loki ve Promtail Kurulumu (Log Management)

Cihat Küçükbağrıaçık
5 min readOct 9, 2023

--

Daha önceki yazılarda Loglamayı nasıl detaylandırabiliriz incelemiştik. Yine yazımız da Grafana’yı kurduğumuzu göre artık loglarımızı Grafana üzerinden daha kolay bir şekilde inceleyebiliriz.

Loki: Marvel karekterindeki kötülük tanrısından bahsetmeyeceğiz elbet. Ama dizisi güzel tavsiye ederim. Grafana Loki, log verilerini toplamak, depolamak, sorgulamak ve görselleştirmek için kullanılan bir açık kaynak log toplama ve analiz platformudur.

Promtail: Promtail, Grafana Loki ile birlikte kullanılan açık kaynaklı bir log koleksiyon ajanıdır.

Loki’yi Grafana yüklü olan sunucumuza, Promtail ise logu çekmek istediğimiz sunucuya yani Postgresql veritabanı kurulu olan sunucuya kuracağız.

Loki Kurulumu

Grafana yüklü olan sunucu üstüne kurulum adımlarını gerçekleştiriyoruz. Loki sayesinde log verilerini monitoring sunucusu üstünde tutabileceğiz. Grafana ile de kolayca loglarımızı inceleyip görselleştirebileceğiz.

# loki klasörü oluşturulur.
mkdir /opt/loki

# Oluşturulan klasöre giriş sağlanır.
cd /opt/loki

# Loki aşağıdaki linkten indirilir.
wget https://github.com/grafana/loki/releases/download/v2.9.1/loki-linux-amd64.zip

# Paketin açılması sağlanır.
unzip loki-linux-amd64.zip

# Loki'nin çalışma dizinini oluşturuyoruz.
mkdir /tmp/loki

# Verilerin depolanacağı dizini oluşturuyoruz.
mkdir /var/lib/loki

# Loki için YAML dosyasını oluşturuyoruz.
nano loki-local-config.yaml

# Aşağıdaki ayarları dosyaya kayıt edip çıkıyoruz.
# Burada bir çok ayar mevcut inceleyip kendinize göre revize edebilirsiniz.
---------------------------------------------------------

auth_enabled: false

server:
http_listen_port: 3100
grpc_listen_port: 9096


ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 1h
max_chunk_age: 1h
chunk_target_size: 1048576
chunk_retain_period: 30s
max_transfer_retries: 0


schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h


storage_config:
boltdb_shipper:
active_index_directory: /var/lib/loki/boltdb-shipper-active
cache_location: /var/lib/loki/boltdb-shipper-cache
cache_ttl: 24h
shared_store: filesystem
filesystem:
directory: /var/lib/loki/chunks


compactor:
working_directory: /tmp/loki/boltdb-shipper-compactor
shared_store: filesystem


limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h


chunk_store_config:
max_look_back_period: 0s


table_manager:
retention_deletes_enabled: false
retention_period: 0s


ruler:
storage:
type: local
local:
directory: /var/lib/loki/rules
rule_path: /tmp/loki/rules-temp
alertmanager_url: http://localhost:9093
ring:
kvstore:
store: inmemory
enable_api: true

---------------------------------------------------------



# Servis dosyasını oluşturuyoruz.
nano /etc/systemd/system/loki.service

# Aşağıdaki ayarları dosyaya kayıt edip çıkıyoruz.
[Unit]
Description=Grafana Loki service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/opt/loki/loki-linux-amd64 -config.file /opt/loki/loki-local-config.yaml

[Install]
WantedBy=multi-user.target


# Servis ayarlarını yeniden yüklemesini sağlıyoruz.
systemctl daemon-reload

# Sunucu yeniden başladığında servis otomatik olarak başlasın.
systemctl enable loki

# Servisi başlatıyoruz.
systemctl start loki

# Servisi kontrol ediyoruz.
systemctl status loki

# Firewall 3100 portuna izin veriyoruz.
firewall-cmd --zone=public --add-port=3100/tcp --permanent

# Firewall ayarlarını yeniden yüklüyoruz.
firewall-cmd --reload

# Sunucudaki erişilebilir portları listeliyoruz.
netstat -tulnp

Servisimiz aktif şeklinde çalışıyor olduğunu ve 3100 portuna erişimimiz açık olduğunu kontrol ettik.

Promtail Kurulumu

Postgresql yüklü olan sunucu üstüne kurulum adımlarını gerçekleştiriyoruz. Promtail ile Postgresql “log” dizinin içerisindeki bütün log verilerini Lokiye iletiyor olacağız.

# promtail klasörü oluşturulur.
mkdir /opt/promtail

# Oluşturulan klasöre giriş sağlanır.
cd /opt/promtail/

# promtail aşağıdaki linkten indirilir.
wget https://github.com/grafana/loki/releases/download/v2.8.2/promtail-linux-amd64.zip

# Paketin açılması sağlanır.
unzip promtail-linux-amd64.zip

# promtail paketi servis olarak çalışabilmesi için taşınır.
cp promtail-linux-amd64 /usr/local/bin

# Promtail için YAML dosyasını oluşturuyoruz.
nano config-promtail.yml

# Aşağıdaki ayarları dosyaya kayıt edip çıkıyoruz.
# clients bölümünde Loki'nin kurulu olduğu sunucuyu girmeyi unutmayın !!!
# path bölümünde Postgresql Log File konumunun doğru olduğu teyit edin !!!
---------------------------------------------------------

server:
http_listen_port: 9080
grpc_listen_port: 0

positions:
filename: /tmp/positions.yaml

clients:
- url: 'http://192.168.153.141:3100/loki/api/v1/push'

scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: postgresql_db
__path__: /var/lib/pgsql/15/data/log/*.log

---------------------------------------------------------


# Servis dosyasını oluşturuyoruz.
nano /etc/systemd/system/promtail.service

# Aşağıdaki ayarları dosyaya kayıt edip çıkıyoruz.
[Unit]
Description=Promtail service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/promtail-linux-amd64 -config.file /opt/promtail/config-promtail.yml

[Install]
WantedBy=multi-user.target

# Servis ayarlarını yeniden yüklemesini sağlıyoruz.
systemctl daemon-reload

# Sunucu yeniden başladığında servis otomatik olarak başlasın.
systemctl enable promtail

# Servisi başlatıyoruz.
systemctl start promtail

# Servisi kontrol ediyoruz.
systemctl status promtail

# Firewall 9080 portuna izin veriyoruz.
firewall-cmd --zone=public --add-port=9080/tcp --permanent

# Firewall ayarlarını yeniden yüklüyoruz.
firewall-cmd --reload

# Sunucudaki erişilebilir portları listeliyoruz.
netstat -tulnp

Servisimiz aktif şeklinde çalışıyor olduğunu ve 9080 portuna erişimimiz açık olduğunu kontrol ettik.

http://192.168.153.142:9080/metrics adresini tarayıcınızda açıyorsunuz. Tabi siz kendi sunucunuzun IP sini girmeyi unutmayın. Artık Promtail 9080 portu üzerinden Postgresql Loglarını yayınlıyor.

Grafana ile Loki Entegrasyonu

Loki ve Promtail kurulumlarımızı tamamladık. Servislerin çalıştıklarını kontrol ettik. Son adım olarak Grafana ile Loki entegrasyon etmek kaldı.

Grafana arayüzünü açıyoruz. “Toggle Menu” (3 çizgi iconu) tıklayıp. “Connections” altındaki “Data Sources” açıyoruz.

“Add new data source” butonuna tıklıyoruz.

“Loki” seçiyoruz.

“URL” alanına Loki ip adresimizi giriyoruz. http://192.168.153.141:3100/

“Save & Test” butonunu seçiyoruz. Başarılı mesajını gördükten sonra entegrasyonumuz tamamlanmış oluyor.

Grafana Üstünden Logları İnceleme

Grafana arayüzünü açıyoruz. “Toggle Menu” (3 çizgi iconu) tıklayıp. “Explore” açıyoruz.

En üst bölümdeki açılır menüden “Loki” seçin. “label filters” alanlarındaki açılır menülerden ise sırasıyla ilk önce “job” sonrasında “postgresql_db” seçin. Son olarak “Run Query” butonunu tıklayın.

Artık loglarımızı kolaylıkla Grafana üstünden inceleybilir. En önemlisi ise kolayca filtreleyebilir loglarınızı bulabilirsiniz.

--

--

No responses yet