Kibana ile Log Aramak
Bu sayfada
Kibana
Kibana, Elasticsearch'ün web ön yüzü. Basitleştirilmiş bir sorgu dili veya tam DSL kullanarak index'ler arasında arama ve filtreleme yapmanıza imkân veriyor.
Aramaları kaydedip sonuçları görselleştirmelere dönüştürebilirsiniz. Kibana'yı kullanmak oldukça kolay ve ileri kullanıcılar kendi dashboard'larını kurabiliyor.
Kaynaklar
- Kibana Sorgu Dili (KQL) — basit aramalar için
- Data view oluşturmak — birden fazla index üzerinde arama yapmak için
- Discover sekmesini kullanmak — Kibana'da veriyi keşfetme yolunuz
Kibana'yı Elasticsearch ve Logstash ile çalıştırmak
Tüm ELK yığınını (Elasticsearch, Logstash ve Kibana) container'larda çalıştıracağız:
- compose.yml — Kibana'yı varsayılan port 5601'de yayınlıyor
ve Logstash'i yapılandırma ile veri dizinleri bağlanmış halde kuruyor
Container'ları başlatıp Kibana loglarını izleyin:
docker compose -f labs/kibana/compose.yml up -d
docker compose -f labs/kibana/compose.yml logs -f kibanaElasticsearch açılırken birkaç hata logu göreceksiniz, ama son log satırı şuna benzer olacak:
{"type":"log","@timestamp":"2021-07-19T05:26:10Z","tags":["info","http","server","Kibana"],"pid":1,"message":"http server running at http://0.0.0.0:5601"}Bunlar yapılandırılmış loglar. Biçimin kendisi Kibana 8'de değişti (artık ECS alanları kullanıyor), dolayısıyla sizdeki satır bununla harfi harfine aynı olmayacak — önemli olan JSON olması, düz metin olmaması.
Kibana veriyi saklamak için Elasticsearch'ü kullanıyor; yani birden fazla Kibana sunucusuyla yatay ölçeklenebilirsiniz ve hepsi aynı veri deposunu paylaşır.
Index listesini sorgulayın:
# log komutundan cikmak icin Ctrl-C
curl 'localhost:9200/_cat/indices?v&expand_wildcards=all'Kibana'nın kendi .kibana* index'lerini göreceksiniz. Artık Kibana'yı
kullanmaya hazırız.
expand_wildcards=allönemli: Elasticsearch 8'den beri nokta ile başlayan sistem index'leri_cat/indicesçıktısında varsayılan olarak gizli, dolayısıyla düz bir istek burada hiçbir şey göstermiyor.
Kibana Console'u kullanmak
http://localhost:5601 adresini açın. Birkaç başlangıç kılavuzu içeren bir karşılama sayfası ve sol üstte bir menü göreceksiniz. Menüyü açıp Dev Tools bölümüne gidin — bu, Kibana Console'u açıyor.
Bu, Elasticsearch ile etkileşmenin çok daha hoş bir yolu — hantal curl komutları olmadan API'ye istek yapabiliyorsunuz, API sözdizimi için otomatik tamamlama var ve önceki sorgularınız saklanıyor.
Soldaki kutuya yazmaya başlayın:
GET /_catOtomatik tamamlama, Elasticsearch API'sinde yolunuzu bulmanıza yardım edecek.
📋 Console'u kullanarak Kibana index'i hakkında CAT bilgisi yazdırın.
Biraz yardım lazım mı?
indices uç noktası tek bir index için sorgulanabiliyor:
GET /_cat/indices/.kibana*?v&expand_wildcards=allBunlar yalnızca basitleştirilmiş sözdizimiyle yapılan HTTP istekleri. HTTP fiilini ve API yolunu belirtiyorsunuz; JSON biçiminde bir istek gövdesi de ekleyebiliyorsunuz.
Birkaç yeni döküman oluşturun — bu, ayrıştırılmış bir CSV log kaydı:
POST /logs-parsed/_doc
{
"timestamp" : "2021-06-30T09:31:02Z",
"level" : "INFO",
"source" : "766D2D343716",
"message" : "Fulfilment completed. Request ID: 21304897"
}Burada
logs-parsedindex adı,_docise yeni döküman göndermek için kullanılan uç nokta.
Her zamanki API yanıtını, index adı ve döküman ID'siyle göreceksiniz. Bir döküman daha oluşturun, bu kez yapılandırılmış bir log için:
POST /logs-structured/_doc
{
"timestamp" : "2021-06-30T09:31:02Z",
"level" : "INFO",
"source" : "766D2D343716",
"event_type" : "Fulfilment.Completed",
"document_id" : 21304897,
"message" : "Fulfilment completed. Request ID: 21304897"
}Otomatik tamamlama istek gövdesinin içinde de çalışıyor — şu satırları yazmaya başlayın ve DSL'de bir match sorgusunun kurulduğunu göreceksiniz:
GET/l <tab>/_s <tab> <enter>{ <enter>q <tab> <enter>m <tab>
Kibana, değerler için şablonlar sunarak sorgu kurmanıza yardım ediyor — şuna benzer bir şey göreceksiniz:
GET /logs-parsed/_search
{
"query": {
"match": {
"FIELD": "TEXT"
}
}
}📋 Yapılandırılmış log index'indeki tüm Fulfilment.Completed olaylarını
bulmak için bir match sorgusu çalıştırın.
Biraz yardım lazım mı?
Şuna benzer bir sorgu kuracaksınız:
GET /logs-structured/_search
{
"query": {
"match": {
"event_type": "Fulfilment.Completed"
}
}
}Otomatik tamamlama alan adları için de çalışıyor; sorgu üzerinde çalışırken index'teki mevcut alanların listesini göreceksiniz.
21304897 istek ID'si için tek bir yanıt göreceksiniz.
Veriyi keşfetmenize yardım eden bir arayüzle sorgulamak çok daha kolay — console'daki otomatik tamamlama bunun bir parçası, ama Kibana data view'larla daha da ileri gidiyor.
Kibana ile arama ve filtreleme
Data view'lar, üzerinde arama yapılacak bir veya daha fazla index'i bulmak için kullanılıyor. Bir data view oluşturduğunuzda Kibana, eşleşen index'lerdeki tüm dökümanlardaki alanların listesini kuruyor; böylece arama ve filtreleme seçenekleri sunabiliyor.
Ana menüden Management > Stack Management, sonra Kibana > Data Views bölümünü açıp Create data view tıklayın.
Bunlara Kibana 7'ye kadar index pattern deniyordu ve Elastic dökümantasyonunun bir kısmı hâlâ eski adı kullanıyor. Kavram birebir aynı.
Şuna benzer bir ekran göreceksiniz:

Index adı için bir desen belirtiyorsunuz; böylece tek bir sorguda bir veya daha fazla index üzerinde arama yapabiliyorsunuz.
Logstash alıştırmalarında Elasticsearch'te her günün logları için ayrı bir index kullanarak, index adında tarihle veri oluşturmuştuk. Bir ayın veya bir yılın tüm logları üzerinde arama yapacak data view'lar oluşturabilirdik.
İki data view oluşturun:
logs-*— tüm yeni index'lerdeki dökümanlar üzerinde çalışıyorlogs-structured— yalnızca yapılandırılmış log index'iyle eşleşiyor
Her data view için Kibana'nın filtre olarak kullandığı bir timestamp field
belirtmeniz gerekiyor. Bu index'lerin ikisinde de kullanabileceğiniz bir
timestamp alanı var.
Data view oluşturulduğunda alan listesi gösteriliyor — bu, eşleşen tüm index'lerdeki tüm dökümanlardaki tüm alanların birleşimi.
Ana menüden Discover sekmesini açın. logs-* data view'ınız varsayılan
olarak seçili olmalı, ama hiç sonuç yok. Sağ üstteki takvim simgesine tıklayıp
tarih aralığını Haziran 2021'i kapsayacak şekilde genişletin, örneğin
Last 1 year.
Zaman içinde oluşturulan döküman sayısını gösteren bir grafikle birlikte iki dökümanı da göreceksiniz:

Kibana'nın gerçekten o kadar kolay olup olmadığını görme zamanı 🙂
📋 Tamamlanmış dökümanlara ait tüm logları bulun. Bunu arayarak veya filtreleyerek yapabilirsiniz.
Biraz yardım lazım mı?
Arama kutusunda:
completedterimi tüm alanlarda bulurmessage: completedterimimessagealanında bulur
Ya da + Add filter tıklayabilirsiniz:
- alan
event_type, operatöris— bir değer yazmanız gerekir - alan
event_type.keyword, operatöris— bir değer seçebilirsiniz,Fulfilment.Completedseçin
Elasticsearch veriyi farklı alan tiplerinde saklıyor ve Kibana bazı alan tipleriyle diğerlerinden daha fazla şey yapabiliyor.
Sayısal alanlarda bir değer aralığına göre filtreleyebilirsiniz. +Add filter
tıklayıp document_id is between seçin — aralığı 21000000 başlangıç ve
21500000 bitiş olarak girin.
Belirli bir tipte, belirli bir ID aralığında ve log mesajında belirli terimler içeren dökümanları bulmak için kolayca bir sorgu kurabilirsiniz:

Lab
Şimdi Kibana'yı gerçek bir arama için kullanacağız.
Logstash, CSV dosyalarını izleyip ayrıştırılmış logları Elasticsearch'e
gönderen bir pipeline ile çalışıyor. data/fulfilment-20210707.csv dosyasını
bir index'e yüklemek için Logstash veri dizinine kopyalayın:
cp data/fulfilment-20210707.csv labs/kibana/data/Sonra yeni veriyi sorgulamak için Kibana'da bir data view ekleyin ve Discover sekmesini kullanarak 30.000.000'dan büyük istek ID'leri için kaç hata logu olduğunu bulun.
Takıldınız mı? İpuçlarına bakın veya çözümü inceleyin.
Temizlik
Bu lab'ın container'larını kaldırın:
docker compose -f labs/kibana/compose.yml downBu komut yalnızca bu lab'in baslattigi container'lari kaldırır. Tamamen temiz bir başlangıç istiyorsanız
docker psile hâlâ çalışan varsa görebilirsiniz.