Elasticsearch APM Server Kurulumu ve Uygulama İzleme
Tags: elasticsearch, kibana, apm, monitoring
Published: 2024-06-10 04:59:23

# İçindekiler

- [Elasticsearch Nedir?](#elasticsearch-nedir)
- [Kibana Nedir?](#kibana-nedir)
- [APM Nedir?](#apm-nedir)
- [Elasticsearch Kurulumu](#elastic-search-kurulum)
- [Kibana Kurulumu ve Doğrulama Kodu Alma](#kibana-kurulumu-ve-doğrulama-kodu-alma)
- [APM Server Kurulumu](#apm-server-kurulumu)
- [Java APM Agent ile Spring Boot Uygulaması İzleme](#java-apm-agent-ile-spring-boot-uygulaması-izleme)


<h2 id="elasticsearch-nedir">Elasticsearch Nedir?</h2>
Elasticsearch, dağıtılmış, RESTful arama ve analiz motorudur. Büyük miktarda veriyi gerçek zamanlı olarak işleyebilir ve bu veriler üzerinde arama, analiz ve keşif yapılmasına olanak tanır. Açık kaynaklı olan bu platform, ölçeklenebilirlik ve hız açısından oldukça etkilidir.

<h2 id="kibana-nedir">Kibana Nedir?</h2>
Kibana, Elasticsearch veri kümelerini görselleştirmek ve yönetmek için kullanılan açık kaynaklı bir analiz ve görselleştirme platformudur. Kibana, kullanıcılara verileri grafiksel olarak inceleme, raporlama ve sorgulama yetenekleri sunar, böylece verilerden elde edilen içgörüler maksimize edilebilir.

<h2 id="apm-nedir">APM Nedir?</h2>
Application Performance Management (APM), uygulamaların performansını izlemek ve yönetmek için kullanılan bir teknolojidir. APM araçları, uygulamaların gerçek zamanlı performans metriklerini toplar, analiz eder ve bu bilgileri performansı iyileştirmek ve sorunları çözmek için kullanır.

<h2 id="elastic-search-kurulum">Elasticsearch Kurulumu</h2>
Elasticsearch'i Docker kullanarak kurmak için öncelikle aşağıdaki adımları izleyin:

###1. Network Oluşturma:
Docker'da konteynerlar arası iletişim için bir network oluşturun:

```bash
docker network create elastic
```
###2. Elasticsearch Konteynerini Başlatma:
Aşağıdaki komut ile Elasticsearch konteynerini başlatın. Bu komut, belirtilen sürümü kullanarak Elasticsearch'i başlatır ve 9200 portundan yayın yapmasını sağlar:

```bash
docker run --name elasticsearch --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.13.4
```

Konteyner başlatıldıktan sonra, güvenlik özelliklerinin otomatik olarak yapılandırıldığını ve gerekli bilgilerin loglarda görülebileceğini belirten bir mesaj alırsınız.

```bash
Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  nZPwrx7p32-Vfib1pP4w

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  6bab504d566749138d5faef454a67afe0449339e768ef9f626bc986d1f90b9d2

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjEzLjQiLCJhZHIiOlsiMTkyLjE2OC4zMi4yOjkyMDAiXSwiZmdyIjoiNmJhYjUwNGQ1NjY3NDkxMzhkNWZhZWY0NTRhNjdhZmUwNDQ5MzM5ZTc2OGVmOWY2MjZiYzk4NmQxZjkwYjlkMiIsImtleSI6Im5UZUw0WThCbXphTUdXYlNDNEY4OldTdjFMaDFEU1BDc3piTkl3WFlENWcifQ==

ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjEzLjQiLCJhZHIiOlsiMTkyLjE2OC4zMi4yOjkyMDAiXSwiZmdyIjoiNmJhYjUwNGQ1NjY3NDkxMzhkNWZhZWY0NTRhNjdhZmUwNDQ5MzM5ZTc2OGVmOWY2MjZiYzk4NmQxZjkwYjlkMiIsImtleSI6Im56ZUw0WThCbXphTUdXYlNDNEdJOnBUUnFBQTNPUWNxNUE4X3laMW9yaGcifQ==

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.13.4`
```

Elasticsearch'in otomatik olarak oluşturduğu kullanıcı adı ve şifre, Kibana'yı ve diğer Elasticsearch düğümlerini bu klüstere bağlamak için kullanılacak kayıt anahtarları loglarda belirtilir.

###3. Elasticsearch Konteynerini Yeniden Başlatma:
Konteyneri interaktif moddan çıkarıp arkaplanda çalıştırın:

```bash
docker start elasticsearch
```

###4. Elasticsearch'e Erişim Sağlama:

Tarayıcınızda https://localhost:9200 adresine gidin ve kullanıcı adı ile şifrenizi girin. Bu bilgiler, Elasticsearch loglarında sağlanan güvenlik bilgileri arasında yer alır. Başarılı bir giriş sonrası, Elasticsearch cluster'ınızın aktif olduğunu görebilirsiniz.


<h2 id="kibana-kurulumu-ve-doğrulama-kodu-alma">Kibana Kurulumu ve Doğrulama Kodu Alma</h2>
Kibana'yı kurmak ve Elasticsearch cluster'ınıza bağlamak için aşağıdaki adımları takip edin:

###1. Kibana Konteynerini Başlatma:


```bash
docker run --name kibana --net elastic -p 5601:5601 -d docker.elastic.co/kibana/kibana:8.13.4
```

###2. Kibana'ya Bağlanma:

Tarayıcınızda localhost:5601 adresine gidin ve gerekli yerlere, Elasticsearch kurulumu sırasında loglarda verilen kayıt anahtarını girin.

###3. Doğrulama Kodunu Alma:

Kibana'nın başarılı bir şekilde yapılandırılması için doğrulama kodu gerekebilir. Bu kodu almak için:

- İlk olarak, Kibana konteynerine erişim sağlamak üzere aşağıdaki komutu kullanın:

```bash
docker exec -it kibana /bin/bash
```

- Konteyner içindeyken, doğrulama kodunu almak için şu komutu çalıştırın:

```bash
bin/kibana-verification-code
```
- Bu komut, Kibana'nın yapılandırılması sırasında gerekli olan doğrulama kodunu ekrana yazdıracaktır. Bu kodu kopyalayıp, Kibana kurulum ekranında istenen yere yapıştırarak devam edebilirsiniz.

###4. Kibana'ya Erişim Sağlama

Doğrulama kodunu girdikten sonra, Kibana arayüzüne tam erişim sağlanır. 



<h2 id="apm-server-kurulumu">APM Server Kurulumu</h2>
APM Server'ı kurmak ve yapılandırmak için:

###1. APM Server Yapılandırma Dosyası Oluşturma:
Aşağıda örnek bir apm-server.yml yapılandırma dosyası bulunmaktadır. Bu dosyada APM Server'ın Elasticsearch ve Kibana ile nasıl haberleşeceği belirtilmiştir:

> _Önemli Not: hosts, username, password, ve setup.kibana.host gibi gerekli kısımları kendi ortamınıza göre güncellemeniz gerekmektedir._

```bash
apm-server:
  host: "0.0.0.0:8200"
  concurrent_requests: 5
  rum:
    enabled: true

queue.mem.events: 4096
max_procs: 4

output.elasticsearch:
  hosts: ["https://elasticsearch:9200"]
  username: "elastic"
  password: "2Bm-FImtZ=EV4=O62LIA"
  ssl.verification_mode: none


setup.kibana.host: "kibana:5601"
setup.dashboards.enabled: true
setup.template.settings.index.number_of_replicas: 0
apm-server.kibana.enabled: true
apm-server.kibana.host: "kibana:5601"


#logging.level: info
#logging.to_files: false

logging.level: debug
logging.to_files: false
```

###2. APM Server Konteynerini Başlatma:
Yapılandırma dosyanızın dizinine göre, aşağıdaki komutla APM Server konteynerini başlatın:

> _Önemli Not: Aşağıdaki komutta /home/db/elk/apm-server.yml yolunu, apm-server.yml dosyanızın bulunduğu dizine göre güncellemeniz gerekmektedir._

```bash
docker run -d \
  -p 8200:8200 \
  --name=apm-server \
  --net=elastic \
  --user=apm-server \
  --volume="/home/db/elk/apm-server.yml:/usr/share/apm-server/apm-server.yml:ro" \
  docker.elastic.co/apm/apm-server:8.13.4
```

Konteyner başlatıldıktan sonra, Docker'da çalışan tüm konteynerleri görmek için aşağıdaki komutu kullanabilirsiniz.

```bash
java@java:~/elk$ docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED          STATUS          PORTS                                                 NAMES
1cfad7834915   docker.elastic.co/apm/apm-server:8.13.4                "/usr/bin/tini -- /u…"   35 minutes ago   Up 35 minutes   0.0.0.0:8200->8200/tcp, :::8200->8200/tcp             apm-server
a7186673415b   docker.elastic.co/kibana/kibana:8.13.4                 "/bin/tini -- /usr/l…"   2 hours ago      Up 2 hours      0.0.0.0:5601->5601/tcp, :::5601->5601/tcp             kibana
3b4e4edd0712   docker.elastic.co/elasticsearch/elasticsearch:8.13.4   "/bin/tini -- /usr/l…"   2 hours ago      Up 2 hours      0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp   elasticsearch
```

<h2 id="java-apm-agent-ile-spring-boot-uygulaması-izleme">Java APM Agent ile Spring Boot Uygulaması İzleme</h2>

###1. APM Agent İndirme:
Java APM Agent'ı Elastic'in resmi web sitesinden indirin. Agent, uygulamanızın performans metriklerini toplayacak ve Elastic APM sunucusuna gönderecektir.

###2. Java Uygulamasını Agent ile Başlatma:
Java Virtual Machine (JVM) üzerinde çalışan uygulamanıza agent'ı eklemek için aşağıdaki komutu kullanın:

> _Önemli Not: -Delastic.apm.server_url=`http://<your-apm-server-url>:8200` parametresinde, `<your-apm-server-url>` kısmını kendi APM Server URL'inize göre güncelleyin._

```bash
java -javaagent:/home/db/elastic-apm-agent-1.50.0.jar \
-Delastic.apm.service_name=java-apm \
-Delastic.apm.server_url=http://<your-apm-server-url>:8200 \
-Delastic.apm.application_packages=com.teksen \
-Delastic.apm.disable_bootstrap_checks=true \
-jar otel-demo-1.jar
```

Bu komutta belirtilen parametreler:

- `elastic.apm.service_name`: Uygulamanızın APM'de görünecek ismi.
- `elastic.apm.server_url`: APM Server'ın URL adresi.
- `elastic.apm.application_packages`: İzlenmesi gereken Java paketleri.
- `jar`: Çalıştırılacak Java uygulaması.

###3. Kibana Üzerinden Uygulamayı İzleme:
APM Agent tarafından toplanan veriler, APM Server üzerinden Kibana'ya iletilir. Kibana'da APM > Services sekmesine giderek uygulamanızın performans metriklerini görselleştirebilir ve analiz edebilirsiniz.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e23r457ar1o7168df292.png)

# Sonuç

Bu kılavuz, Elasticsearch, Kibana ve APM Server'ın Docker üzerinde kurulum ve yapılandırmasını adım adım ele alır. Bu araçlar, uygulama performansını izlemek ve operasyonel verimliliği artırmak için esastır. Kurulumdan sonra, Java ile Spring Boot uygulamasının performans izlemesi sağlanmış ve bu süreçlerin nasıl yönetileceği gösterilmiştir. Elastic Stack teknolojilerinin etkin kullanımı, modern uygulama yönetiminde kritik bir rol oynar.