giriiş
Bu eğitimde, Ubuntu (sürüm 22.04) çalıştıran bir sunucuya Docker Compose kullanarak ELK STack'in nasıl kurulacağını öğreneceksiniz. ELK Stack, Elasticsearch, Kibana ve Logstash'ten oluşur.
- Elasticsearch bir arama ve analiz motorudur.
- Kibana, veri analizi için bir kullanıcı arayüzüdür.
- Logstash, uygulama ile ilgili günlükleri analiz edebilir.
Ön koşullar
- Ubuntu 22.04 veya üzerini çalıştıran bir sunucu: Bu sunucuya SSH erişimi ve kök veya sudo kullanıcı erişimi
- Docker, Docker Compose, ElasticSearch ve YAML hakkında temel bilgi
Adım 1 – Docker Compose'u yükleyin
Sunucunuzda Docker Compose yüklüyse, bu adımı atlayabilirsiniz. Öncelikle aşağıdaki komutu kullanarak sunucunuza SSH ile bağlanın:
ssh holu@<your_host>
apt paketlerini güncellediğinizden ve cURL'yi kurduğunuzdan emin olun:
sudo apt-get update && sudo apt-get install curl -y
curl'ün kurulu olduğundan emin olduktan sonra, Docker'ın sağladığı hızlı kurulum betiğini kullanarak Docker'ı ve Docker Compose'u kurabiliriz:
curl https://get.docker.com | sh
Bu komut, betiği get.docker.com adresinden indirir ve sh'ye "borular" (indirilen betiği sh'ye iletir, sh da betiği çalıştırır ve Docker'ı yükler). Yapabileceğimiz son şey, docker komutunu her kullandığımızda sudo kullanmak zorunda kalmamak için kendimizi Docker grubuna eklemektir.
sudo usermod -aG docker holu
Değişikliklerin geçerli olması için lütfen oturumunuzu kapatıp tekrar oturum açmayı unutmayın.
Adım 2 – docker-compose.yaml oluşturun
Dosya docker-compose.yaml ELK yığınının tüm altyapısını tanımlamak için kullanılacaktır. Tek bir komutla birden fazla kapsayıcı oluşturmak için kullanılır.
Sunucunuzda yeni bir klasör oluşturun ve bir dosya oluşturun docker-compose.yaml İçinde yarat:
mkdir elk-stack && cd elk-stack && touch docker-compose.yaml
Üç Docker konteyneri oluşturmak için Docker Compose'u kullanmak istiyoruz:
Bu üç kapsayıcıyı oluşturmak için dosyaya aşağıdaki içeriği ekleyin docker-compose.yaml Eklemek:
version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=falseŞu anda bir öğemiz eksik: .env dosyası. .env dosyası, parolalar ve API belirteçleri gibi gizli bilgileri, yapılandırmanızdan veya kodunuzdan kaldırmak için kullanılır. Docker Compose, .env dosyasını otomatik olarak algılar ve ${MY_VARIABLE} gibi değişkenleri env değişkeniyle değiştirir.
Env'i oluşturup aşağıdaki satırları ekleyin:
ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>Artık her şeyi çalışır hale getirmek için docker compose komutunu çalıştırabilirsiniz:
docker compose up -d
Çıktı:
[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch StartedKomutu kullanabilirsiniz docker ps Her şeyin beklendiği gibi çalışıp çalışmadığını kontrol etmek için kullanılır.
holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch
Artık web tarayıcınızda Kibana'yı başlatabilirsiniz. :5601 URL çubuğunda açın.
Kullanıcı adı ile elastik ve daha önce dosyaya kaydedilen şifre .çevre Giriş yapmaya karar verdiniz.
Giriş yaptığınızda bu sayfayı görüyorsanız “Kendi Başıma Keşfet”e tıklayın.
Artık Kibana ana sayfasına erişebiliyor olmalısınız. Sayfa şu şekilde görünüyor:

Adım 3 – Logstash
Şimdi bulmacanın son parçası olan Logstash'i ekleme zamanı. Logstash, uygulamanızdan gelen günlükleri analiz edebilir ve analiz edilen günlükleri Elasticsearch'e iletebilir.
docker-compose.yaml “Kibana” altındaki “Hizmetler” bölümünde dördüncü kapsayıcıyı düzenleyip ekleyin.
logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.confLogstash'i kurmak biraz daha karmaşıktır. logstash.conf adlı ek bir yapılandırma dosyasına ihtiyacınız var. Logstash, işlem hattı adı verilen bir sistem üzerinde çalışır. Bu dosya, Logstash'in ne yapması gerektiğini (günlüklerin nereden geldiğini, günlüklerin nasıl ayrıştırılacağını, nereye gönderileceğini) açıklar. İşlem hattı, logstash.conf dosyasında olacaktır.
Sahip olabileceğiniz en temel şeylerden biri şudur:
input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}Oldukça açıklayıcı. Giriş olarak bir dosya alıyor (bu durumda /var/log/dpkg.log) ve çıktıyı Elasticsearch ve standart çıktıya gönderiyor.
Yukarıdaki örneği logstash.conf dosyanıza yerleştirin.
Elk-stack dizini artık aşağıdaki dosyaları içermelidir:
elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.confArtık aşağıdaki komutu kullanarak Logstash'i başlatabilirsiniz:
docker compose up -d
Çıktı:
[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana RunningArtık Logstash'e Kibana üzerinden erişebilirsiniz. Öncelikle bir logstash veri görünümü oluşturmanız gerekiyor.
Analytics keşif sayfasına gidin. Şuna benzer bir şey görmelisiniz:
“Veri Görünümü Oluştur” butonuna tıklayarak veri görünümünüzü oluşturun:
Veri görünümünü kaydettikten sonra Logstash'ten gelen raporları görebilmelisiniz:

Adım 4 – Yığını yok edin
Son olarak, yığını durdurmak ve kapsayıcıları kaldırmak için aşağıdaki komutu çalıştırın:
docker compose down
Çıktı:
[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default RemovedSonuç
Docker Compose ile çalışan bir ELK yığınınız olmalıdır. Sonraki adımlar, Filebeat gibi rapor oluşturucuları eklemek veya resmi belgeleri incelemektir.
















