ELKSTACK Kurulumu | Genel
Merhaba, elimizde sıfır bir Ubuntu Linux var.
Önce JDK’yı kuracağız.
- Paket yöneticisi güncellemek için;
sudo apt update
- JDK’yı yüklemek için;
sudo apt install openjdk-11-jdk
- Java kurulmuş mu teyit etmek için;
java -version
- Elasticsearch deposu ekleme ve elasticsearch kurulumu için;
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch
- Elasticsearch ayakta mı kontrol etmek için;
sudo systemctl status elasticsearch
- Aktif değildi. Onu başlatmak ve açılışta çalışmasını sağlamak için;
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
- Elasticsearch’e erişilebiliyor mu kontrol etmek için;
curl -X GET "localhost:9200"
- Elasticsearch’e dışarıdan erişime izin vermek için;
sudo nano /etc/elasticsearch/elasticsearch.yml
- Aşağıdaki satırlar yorumdu, açtık.
network.host: 0.0.0.0
http.port: 9200
Sonra CTRL + O ile çıktık. Dosya adını aynı bıraktık ve kaydettik.
- Ama hata verdi. Hatanın detaylarını araştırınca şunu bulduk: Elasticsearch canlı ortama çıkıyorsan ayarlarını kontrol ediyor.
network.host: 0.0.0.0 demek ben canlıya çıkıyorum demekmiş.
Hatadaki problemi gidermek için tek bir düğüm kullanacaksak elasticsearch.yml dosyasına şu satırı ekledik::> discovery.type: single-node
Sonra servisi restart ediyoruz. Bu sefer hata vermeyecek. sudo systemctl restart elasticsearch
- Ama bu sefer de herkes erişebiliyor. Sadece belirli IP’lerin erişmesi için; sudo ufw status
komutu ile güvenlik duvarına baktık. Aktif değilse aktif etmeliyiz şu şekilde:sudo ufw enable
Bunu yaparsak bizim bağantımız da gidecek. Onun uyarısını veriyor. O yüzden;sudo ufw allow 22/tcp
Bunu yaptıktan sonra UBUNTU’yu yeniden başlattım. Bakalım dışarıdan erişimi kısıtladık teyit edelim.sudo ufw enable
Açıldıktan sonra belirli IP adreslerine izin verip tekrar deniyoruz.sudo ufw allow from abc.abc.abc.abc to any port 9200
sudo ufw status
komutu ile güvenlik duvarı ayarlarını da kontrol ettik, her şey sağlam.
Elasticsearch kurulumu burada bitti.
Şimdi LOGSTASH kuracağız.
- Paket yöneticisini güncelleyip logstash paketini yüklemek için;
sudo apt update
sudo apt install logstash
- LOGSTASH için bir konfigürasyon dosyasına ihtiyacımız var. Oluşturmak için;
sudo nano /etc/logstash/conf.d/ectaro-logstash.conf input {
http {
host => "0.0.0.0" # Loglari dinlemek icin kullanilan IP adresi
port => 5044 # Gelen loglarin dinleneceği port
}
} filter {
json {
source => "message"
}
if [appcode] == "InApi" {
mutate {
add_field => { "application" => "inapi" }
}
} else if [appcode] == "OutApi" {
mutate {
add_field => { "application" => "outapp" }
}
} else if [appcode] == "UserApp" {
mutate {
add_field => { "application" => "userapp" }
}
} else if [appcode] == "Admin app" {
mutate {
add_field => { "application" => "adminapp" }
}
} else {
mutate {
add_field => { "application" => "unknownapp" }
}
}
} output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[application]}-logs-%{+YYYY.MM.dd}"
}}
Konfigürasyonu bu kadar detaylı yapmadan doğrudan tüm logları tek bir indekse atıp appcode alanından filtrelemek de mümkün.
O şekilde yaptım. POSTMAN’dan aşağıdaki gibi bir istek gönderdiğimizde sonuç başarılı olacaktır.{
"timestamp": "2024-12-02T12:00:00Z",
"appcode": "OutApi",
"content": "This is a test log message",
"level": "INFO"
}
- 5044 portuna da izin vermek için;
sudo ufw allow from abc.abc.abc.abc to any port 5044
- Servis olarak başlamasını sağlamak için;
sudo systemctl status logstash
komutu ile kontrol ettik aktif değil.sudo systemctl enable logstash
komutu ile otomatik başlamasını ayarladık. Arkadaş, “/etc/logstash/conf.d/” klasöründeki tüm
*.conf dosyalarını kullanacak şekilde yapılandırmış kendisini. O yüzden özel bir *.conf dosyası belirtmedik.
- LOGSTASH’taki hataları görmek için;
sudo journalctl -u logstash
sudo nano /var/log/logstash/logstash-plain.log
sudo systemctl restart logstash
- Elasticsearch ayar dosyasında da iki değişiklik yapmak için;
sudo nano /etc/elasticsearch/elasticsearch.yml
action.auto_create_index: true # bu satırı ekledim. her gün yeni bir indeks oluşturacak Logstash.
ingest.geoip.downloader.enabled: false # bu satırı ekledim. geoip indeksine ihtiyacımız yok.
- Her gün için bir indeks oluşturacak arkadaş. Bu indekslerin de yedeklemek için farklı node istiyor.
Biz de tek node olduğundan her seferinde NODE sağlığı sarı olmasın diye aşağıdaki gibi bir template oluşturduk.
Böylece her seferinde yedeksiz bir şekilde oluşturacak. Bunun için;curl -X PUT "abc.abc.abc.abc:9200/_template/inapi_logs_template" -H 'Content-Type: application/json' -d '{
"index_patterns": ["-logs-"],
"settings": {
"number_of_replicas": 0
}
}'
Logstash kurulumu burada bitti.
Şimdi KIBANA kuracağız.
- Elasticsearch için depolar eklediğimiz için burada bir daha eklemeye gerek yok. Kibana’yı yüklemek için;
sudo apt-get update
sudo apt-get install kibana
- Kurulumdan sonra yapılandırma da gerekiyor. Bunun için;
sudo nano /etc/kibana/kibana.yml
server.host: …. satırını açtım
elasticsearch.hosts: … satırını açtım.
- Kurduktan sonra açılışta servis olarak çalışması için;
sudo systemctl enable kibana
sudo systemctl start kibana Kibana'nın durumunu kontrol etmek için; sudo systemctl status kibana
- Yerel ağdaki bir IP bloğuna komple yetki vermek için;
sudo ufw allow from 10.0.0.0/24 to any port 9200
sudo ufw allow from 10.0.0.0/24 to any port 5044
sudo ufw allow from 10.0.0.0/24 to any port 5601
- Zaman zaman farklı yerlerden bağlanmam gerektiğinde şu şekilde IP’lere izin tanımlıyorum güvenlik duvarında şu şekilde;
sudo ufw allow from abc.abc.abc.abc to any port 9200 >>>> Elasticsearch için
sudo ufw allow from abc.abc.abc.abc to any port 5044 >>>> Logstash için
sudo ufw allow from abc.abc.abc.abc to any port 5601 >>>> Kibana için
- Sonra da bunları temizliyorum işim bitince şu şekilde;
sudo ufw delete allow from abc.abc.abc.abc to any port 9200
sudo ufw delete allow from abc.abc.abc.abc to any port 5044
sudo ufw delete allow from abc.abc.abc.abc to any port 5601
Selamlar.