← Kursa Dön
📄 Text · 30 min

Elastic Agent ve Fleet — Merkezi Yönetim

Giriş — Tek Agent, Tüm Veriler

Bir apartman yöneticisi düşün. Eskiden her daire için ayrı bir görevli vardı: birisi suyu kontrol eder, birisi elektriği izler, birisi güvenlik kamerasına bakar, birisi kapının kilidini kontrol eder. Dört görevli × 100 daire = 400 kişi yönetmen gerekiyor. Kabus.

Şimdi tek bir "akıllı görevli" var. Hem suyu, hem elektriği, hem kamerayı, hem kilidi izliyor. Üstelik tüm görevlileri merkezden yönetiyorsun — "bugünden itibaren hepsi sıcaklık da ölçsün" dediğinde, 100 görevli aynı anda güncelleniyor.

Beats dünyasında bu "eski model" idi: Filebeat loglar için, Metricbeat metrikler için, Heartbeat uptime için, Packetbeat ağ trafiği için — her biri ayrı kurulum, ayrı konfigürasyon, ayrı güncelleme. Elastic Agent ise hepsini tek bir binary'de topladı, Fleet Server ile merkezden yönetiyor.


1. Elastic Agent vs Beats — Detaylı Karşılaştırma

Beats'in Sorunu

SUNUCU: web-server-42
├── Filebeat      → /etc/filebeat/filebeat.yml
├── Metricbeat    → /etc/metricbeat/metricbeat.yml
├── Heartbeat     → /etc/heartbeat/heartbeat.yml
├── Packetbeat    → /etc/packetbeat/packetbeat.yml
└── Auditbeat     → /etc/auditbeat/auditbeat.yml

× 500 sunucu = 2500 ayrı konfigürasyon dosyası!

Her Beat için:

  • Ayrı kurulum

  • Ayrı config dosyası

  • Ayrı güncelleme

  • Ayrı monitoring

  • Config değişikliği = SSH ile her sunucuya git, dosyayı düzenle, servisi restart et

Elastic Agent'ın Çözümü

SUNUCU: web-server-42
└── Elastic Agent  → Fleet Server'dan policy alır (tek binary)
    ├── Log collection (Filebeat işlevi)
    ├── Metric collection (Metricbeat işlevi)
    ├── Uptime monitoring (Heartbeat işlevi)
    └── ... istediğin kadar integration

× 500 sunucu = 500 agent, hepsi Fleet'ten yönetiliyor

Karşılaştırma Tablosu

ÖzellikBeatsElastic Agent
KurulumHer Beat ayrıTek binary
KonfigürasyonHer sunucuda dosyaFleet'ten merkezi
GüncellemeManuel, her sunucudaFleet'ten tek tıkla
Policy yönetimiYok (dosya bazlı)Agent Policy
Integration eklemeConfig + restartFleet UI'dan ekle
MonitoringHer Beat'i ayrı izleFleet Dashboard
Standalone modTek seçenekVar (ama Fleet önerilir)
PerformansHafifBiraz daha ağır (tek binary)
EsneklikYüksek (config dosyası)Orta (Fleet UI/API)
İleri configTam kontrolFleet UI kısıtlamaları

Ne Zaman Beats, Ne Zaman Elastic Agent?

Elastic Agent seçin:

  • Çok sayıda sunucu yönetimi (50+)

  • Merkezi yönetim ve güncelleme ihtiyacı

  • Standart use case'ler (log, metrik, APM)

  • Hızlı kurulum ve kolay bakım

Beats seçin (hâlâ geçerli senaryolar):

  • Çok özel konfigürasyon ihtiyacı

  • Elastic Agent'ın desteklemediği processor/input

  • Minimal footprint gereken edge cihazlar

  • Mevcut Beats altyapısı iyi çalışıyorsa (bozma, değiştirme!)


2. Fleet Server — Merkez Üssü

Fleet Server Nedir?

Fleet Server, Elastic Agent'ların merkezi yönetim noktasıdır. Agent'lar Fleet Server'a bağlanır, policy'lerini alır, durum raporlar, güncelleme komutlarını alır.

                    ┌─────────────┐
                    │   Kibana    │
                    │  Fleet UI   │
                    └──────┬──────┘
                           │ Policy, config
                           ▼
                    ┌─────────────┐
                    │ Fleet Server│
                    │ (ES'e yazar)│
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        ┌──────────┐ ┌──────────┐ ┌──────────┐
        │  Agent   │ │  Agent   │ │  Agent   │
        │ Server-1 │ │ Server-2 │ │ Server-3 │
        └──────────┘ └──────────┘ └──────────┘

Fleet Server Modları

ModAçıklamaKullanım
ManagedElastic Cloud tarafından yönetilenESS kullanıyorsanız
Self-managedKendi sunucunuzda kurduğunuzOn-prem veya custom cloud

Fleet Server Kurulumu (Self-Managed)

# 1. Elastic Agent'ı indir (Fleet Server da Agent üzerinde çalışır)
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.12.0-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.12.0-linux-x86_64.tar.gz
cd elastic-agent-8.12.0-linux-x86_64

# 2. Fleet Server olarak kur
sudo ./elastic-agent install \
  --fleet-server-es=https://elasticsearch:9200 \
  --fleet-server-service-token=AAEAAWVsYXN0aWMv... \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-port=8220

# Service token oluşturma (ES'te):
# POST _security/service/elastic/fleet-server/credential/token/fleet-token-1

Fleet Server Konfigürasyonu (Kibana)

Kibana → Management → Fleet → Settings

Fleet Server hosts: https://fleet-server:8220
Elasticsearch hosts: https://elasticsearch:9200

Fleet Server Ölçeklendirme

Agent SayısıFleet ServerRAMCPU
1-1001 instance4 GB2 core
100-5001-2 instance8 GB4 core
500-20002-3 instance16 GB8 core
2000-100003-5 instance (LB arkasında)32 GB16 core

3. Agent Policy — Merkezi Konfigürasyon

Policy Nedir?

Agent Policy, bir grup Elastic Agent'ın ne yapacağını tanımlar. Policy = "Bu agent'lar hangi verileri toplayacak?"

// Policy yapısı (kavramsal)
{
  "policy_name": "Web Servers",
  "agents": ["server-1", "server-2", ..., "server-50"],
  "integrations": [
    "System (CPU, memory, disk, network)",
    "Nginx (access log, error log, metrics)",
    "Docker (container metrics, logs)"
  ],
  "outputs": [
    { "type": "elasticsearch", "hosts": ["es:9200"] }
  ]
}

Policy Oluşturma (Kibana Fleet UI)

Kibana → Management → Fleet → Agent policies → Create agent policy

Name: production-web-servers
Description: Production web sunucuları için policy
Default namespace: production
Monitoring: 
  ✅ Collect agent logs
  ✅ Collect agent metrics

Policy Tipleri

TipAçıklama
Default policyYeni agent'lar için varsayılan
Custom policyBelirli sunucu grupları için
Fleet Server policyFleet Server kendisi için

Policy Revisions

Her policy değişikliğinde yeni bir "revision" oluşur. Agent'lar otomatik olarak yeni revision'ı alır ve uygular — restart gerekmez!

Policy: "Web Servers"
├── Revision 1: System integration
├── Revision 2: + Nginx integration eklendi
├── Revision 3: + Docker integration eklendi
└── Revision 4: Nginx log path değişti
# Fleet API ile policy'leri listele
GET kbn:/api/fleet/agent_policies

# Belirli policy detayı
GET kbn:/api/fleet/agent_policies/{policy_id}

4. Integrations — Veri Kaynakları

Integration Nedir?

Integration, belirli bir teknoloji veya servisten veri toplamak için hazır paketlerdir. Her integration şunları içerir:

  • Input konfigürasyonu — Nereden, nasıl toplanacak

  • Ingest pipeline — Veri nasıl parse edilecek

  • Dashboard'lar — Kibana'da hazır görselleştirme

  • Index template — Mapping ve settings

  • ML job'ları — Anomali tespiti (bazı integration'larda)

Popüler Integration'lar

System Integration

Topladığı veriler:
├── System metrics
│   ├── CPU usage (per core)
│   ├── Memory usage (RSS, swap)
│   ├── Disk I/O (read/write bytes, IOPS)
│   ├── Network I/O (bytes in/out, packets)
│   ├── Load average
│   └── Filesystem usage
├── System logs
│   ├── syslog (/var/log/syslog, /var/log/messages)
│   ├── auth log (/var/log/auth.log)
│   └── kern log (/var/log/kern.log)
└── Process metrics
    ├── Top N processes (CPU, memory)
    └── Process state (running, sleeping, zombie)

Nginx Integration

Topladığı veriler:
├── Access logs
│   ├── Request method, URI, status code
│   ├── Response time, bytes sent
│   ├── Client IP, user agent
│   └── Upstream response time
├── Error logs
│   ├── Error level, message
│   ├── Client, server, request
│   └── Upstream errors
└── Stub status metrics
    ├── Active connections
    ├── Requests per second
    ├── Reading/writing/waiting
    └── Accepts, handled, requests

MySQL Integration

Topladığı veriler:
├── Slow query log
│   ├── Query text, execution time
│   ├── Lock time, rows examined
│   └── User, host, database
├── Error log
│   ├── Error code, message
│   └── Subsystem, severity
├── Performance metrics
│   ├── Queries per second
│   ├── Connections (active, max, errors)
│   ├── InnoDB buffer pool (hits, misses)
│   ├── Table locks (waited, immediate)
│   └── Thread states
└── Galera cluster metrics (MariaDB)

Docker Integration

Topladığı veriler:
├── Container metrics
│   ├── CPU usage (per container)
│   ├── Memory usage (RSS, cache, limit)
│   ├── Network I/O (per interface)
│   ├── Block I/O (read/write)
│   └── PID count
├── Container logs
│   ├── stdout/stderr
│   ├── Container name, image
│   └── Labels, environment
└── Docker daemon metrics
    ├── Images, containers count
    ├── Data space used
    └── Docker events

Kubernetes Integration

Topladığı veriler:
├── Pod metrics
│   ├── CPU, memory (request vs limit vs actual)
│   ├── Network (rx/tx bytes, packets)
│   └── Restart count, status
├── Node metrics
│   ├── Node conditions (Ready, DiskPressure, MemoryPressure)
│   ├── Allocatable resources
│   └── Pod count per node
├── Container logs
│   ├── Autodiscovery (label-based)
│   ├── Multiline handling
│   └── JSON parsing
├── Deployment/StatefulSet/DaemonSet
│   ├── Replicas (desired, available, ready)
│   └── Rolling update status
├── Events
│   ├── Warning events
│   ├── Normal events
│   └── Event reason and message
└── API Server audit logs

Integration Ekleme (Fleet UI)

Kibana → Management → Fleet → Agent policies 
→ Seçili policy → Add integration

1. Integration seçin (ör. Nginx)
2. Ayarları yapılandırın:
   - Log paths: /var/log/nginx/access.log
   - Metrics: http://localhost:80/nginx_status
3. "Save and deploy" tıklayın

Agent'lar otomatik olarak yeni integration'ı alır
ve veri toplamaya başlar — restart gerekmez!

Custom Integration

# Kendi integration'ınızı oluşturabilirsiniz
# elastic-package ile:

# 1. Integration iskeleti oluştur
elastic-package create --type integration

# 2. Manifest dosyasını düzenle
# package/manifest.yml:
format_version: 2.0.0
name: my-custom-app
title: My Custom Application
version: 1.0.0
description: Custom application monitoring
type: integration
categories:
  - custom

# 3. Data stream tanımla
# package/data_stream/logs/manifest.yml
# package/data_stream/metrics/manifest.yml

# 4. Build ve test
elastic-package build
elastic-package test

5. Enrollment ve Agent Yönetimi

Enrollment Token

Yeni agent'ı Fleet'e kaydetmek için enrollment token gerekir:

Kibana → Fleet → Enrollment tokens → Create enrollment token

Token: cXVpY2stc3RhcnQtdG9rZW4...
Policy: production-web-servers

Agent Kurulumu ve Enrollment

# Linux
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.12.0-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.12.0-linux-x86_64.tar.gz
cd elastic-agent-8.12.0-linux-x86_64

# Fleet managed kurulum
sudo ./elastic-agent install \
  --url=https://fleet-server:8220 \
  --enrollment-token=cXVpY2stc3RhcnQtdG9rZW4...

# macOS
# Homebrew veya .pkg ile kurulum

# Windows
# PowerShell as Admin:
# .\elastic-agent.exe install `
#   --url=https://fleet-server:8220 `
#   --enrollment-token=cXVpY2stc3RhcnQtdG9rZW4...

# Docker
docker run -d \
  --name elastic-agent \
  -e FLEET_URL=https://fleet-server:8220 \
  -e FLEET_ENROLLMENT_TOKEN=cXVpY2stc3RhcnQtdG9rZW4... \
  -e FLEET_INSECURE=true \
  docker.elastic.co/beats/elastic-agent:8.12.0

# Kubernetes (DaemonSet)
# Elastic Agent Helm chart veya manifest ile
kubectl apply -f elastic-agent-managed-kubernetes.yml

Standalone Mode (Fleet Olmadan)

# elastic-agent.yml — Standalone konfigürasyon
outputs:
  default:
    type: elasticsearch
    hosts:
      - 'https://elasticsearch:9200'
    username: 'elastic'
    password: 'changeme'

inputs:
  - type: system/metrics
    data_stream.namespace: production
    use_output: default
    streams:
      - data_stream:
          dataset: system.cpu
          type: metrics
        metricsets:
          - cpu
        period: 10s
      - data_stream:
          dataset: system.memory
          type: metrics
        metricsets:
          - memory
        period: 10s

  - type: logfile
    data_stream.namespace: production
    use_output: default
    streams:
      - data_stream:
          dataset: custom.myapp
          type: logs
        paths:
          - /var/log/myapp/*.log
        processors:
          - add_host_metadata: ~
          - add_cloud_metadata: ~
# Standalone kurulum
sudo ./elastic-agent install --standalone

# Config değişikliği sonrası restart gerekir
sudo systemctl restart elastic-agent

6. Agent Monitoring ve Yönetim

Fleet UI'da Agent İzleme

Kibana → Management → Fleet → Agents

Görüntülenecek bilgiler:
├── Agent durumu (Healthy, Unhealthy, Offline, Updating)
├── Last activity
├── Policy adı ve revision
├── Agent version
├── Hostname ve OS
├── CPU ve memory kullanımı
├── Toplanan data stream'ler
└── Hatalar ve uyarılar

Agent Durumları

DurumAçıklamaAksiyon
HealthyNormal çalışıyorYok
UnhealthyBir veya daha fazla integration hata veriyorDetaya bak
OfflineAgent iletişim kurmuyorSunucuyu kontrol et
UpdatingPolicy veya versiyon güncellemesi devam ediyorBekle
InactiveUzun süredir offline (30 gün+)Kaldır veya sunucuyu kontrol et
UnenrolledFleet'ten çıkarılmışGerekirse yeniden enroll et

Agent Diagnostik

# Agent durumunu kontrol et
sudo elastic-agent status

# Çıktı:
# Status: HEALTHY
# Message: Running
# Components:
#   - filebeat: HEALTHY
#   - metricbeat: HEALTHY
#   - fleet-server: HEALTHY

# Agent logları
sudo journalctl -u elastic-agent -f

# Log dosyası konumu
# Linux: /opt/Elastic/Agent/data/elastic-agent-*/logs/
# macOS: /Library/Elastic/Agent/data/elastic-agent-*/logs/

# Diagnostik bundle oluştur
sudo elastic-agent diagnostics

# Agent inspect (konfigürasyonu göster)
sudo elastic-agent inspect

Agent Upgrade (Fleet Üzerinden)

Kibana → Fleet → Agents
→ Agent seç (veya toplu seç)
→ Actions → Upgrade agent

Upgrade options:
- Immediate: Hemen güncelle
- Scheduled: Belirli zamanda güncelle
- Rolling: Gruplar halinde güncelle (agent sayısı çoksa)
// Fleet API ile upgrade
POST kbn:/api/fleet/agents/{agent_id}/upgrade
{
  "version": "8.12.0"
}

// Toplu upgrade
POST kbn:/api/fleet/agents/bulk_upgrade
{
  "agents": ["agent-id-1", "agent-id-2"],
  "version": "8.12.0"
}

// Policy bazlı toplu upgrade (query ile)
POST kbn:/api/fleet/agents/bulk_upgrade
{
  "agents": "policy_id:production-web-servers",
  "version": "8.12.0",
  "start_time": "2024-01-20T02:00:00Z",
  "rollout_duration_seconds": 3600
}

💡 İpucu: Büyük Fleet'lerde (500+ agent) rolling upgrade kullanın. rollout_duration_seconds ile agent'ları kademeli güncellersiniz. Tüm agent'ları aynı anda güncellemek Fleet Server'a yük bindirir.


7. Output Konfigürasyonu

Elasticsearch Output

Kibana → Fleet → Settings → Outputs

Name: production-elasticsearch
Type: Elasticsearch
Hosts: https://es-node1:9200, https://es-node2:9200
Default output: Yes

Advanced settings:
- Preset: balanced (veya throughput, latency, scale, custom)
- Worker: 1
- Bulk max size: 1600
- Compression level: 1

Logstash Output

Kibana → Fleet → Settings → Outputs → Add output

Name: logstash-pipeline
Type: Logstash
Hosts: logstash1:5044, logstash2:5044
SSL: 
  Certificate authorities: /path/to/ca.crt
  Client certificate: /path/to/agent.crt
  Client key: /path/to/agent.key

Multiple Outputs

Output 1: production-es (varsayılan)
  → Elasticsearch cluster 1

Output 2: security-es
  → Elasticsearch cluster 2 (SIEM)

Policy: Web Servers
├── System logs → production-es (default)
├── System metrics → production-es (default)
├── Auditd logs → security-es (farklı output)
└── Nginx logs → production-es (default)

8. Elastic Agent Mimarileri

Küçük Ortam (< 50 sunucu)

┌──────────┐     ┌──────────────┐     ┌────────────────┐
│  Agents  │────▶│ Fleet Server │────▶│ Elasticsearch  │
│ (1-50)   │     │ (1 instance) │     │   + Kibana     │
└──────────┘     └──────────────┘     └────────────────┘

Fleet Server: Aynı ES node'unda çalışabilir

Orta Ortam (50-500 sunucu)

                     ┌──────────────┐
              ┌─────▶│ Fleet Server │
              │      │     #1       │──┐
┌──────────┐  │      └──────────────┘  │    ┌────────────────┐
│  Agents  │──┤                        ├───▶│ Elasticsearch  │
│ (50-500) │  │      ┌──────────────┐  │    │   Cluster      │
│          │  └─────▶│ Fleet Server │──┘    │   + Kibana     │
└──────────┘         │     #2       │       └────────────────┘
                     └──────────────┘
                     Load Balancer arkasında

Büyük Ortam (500+ sunucu)

                        ┌───────────────┐
                   ┌───▶│ Fleet Server  │
                   │    │ (3-5 instance)│
                   │    │ LB arkasında  │──────┐
                   │    └───────────────┘      │
┌──────────────┐   │                           │    ┌──────────────┐
│   Agents     │───┤                           ├───▶│     ES       │
│ (500-10000)  │   │    ┌───────────────┐      │    │   Cluster    │
│              │   └───▶│   Proxy       │──────┘    │   + Kibana   │
└──────────────┘        │ (edge/remote) │           └──────────────┘
                        └───────────────┘
                        
Proxy: Uzak lokasyonlardaki agent'lar için
       Fleet Server'a erişimi sağlar

9. Yaygın Hatalar ve Troubleshooting

Agent Enroll Olmuyor

# Hata: "fail to enroll: fail to execute request to fleet-server"

# Kontroller:
# 1. Fleet Server çalışıyor mu?
curl -k https://fleet-server:8220/api/status

# 2. Enrollment token geçerli mi?
# Kibana → Fleet → Enrollment tokens → Token aktif mi?

# 3. Sertifika sorunu mu?
# --insecure flag'i ile deneyin (test için!)
sudo ./elastic-agent install \
  --url=https://fleet-server:8220 \
  --enrollment-token=... \
  --insecure

# 4. Firewall: 8220 portu açık mı?
telnet fleet-server 8220

# 5. DNS çözümleniyor mu?
nslookup fleet-server

Agent Unhealthy

# Agent durumunu detaylı gör
sudo elastic-agent status --output json

# Hangi component hata veriyor?
# {
#   "components": [
#     {
#       "name": "filebeat",
#       "status": "DEGRADED",
#       "message": "error reading file: permission denied"
#     }
#   ]
# }

# Çözüm: Log dosyası izinlerini kontrol et
ls -la /var/log/nginx/access.log
# elastic-agent kullanıcısının okuma izni olmalı

Veri Gelmiyor

Kontrol listesi:
1. Agent healthy mi? → sudo elastic-agent status
2. Fleet'te agent görünüyor mu? → Kibana → Fleet → Agents
3. Policy revision güncel mi? → Agent'ın revision'ı policy ile eşleşmeli
4. Data stream oluşmuş mu? → GET _data_stream/logs-*
5. Index'te veri var mı? → GET logs-nginx.access-*/_count
6. Ingest pipeline hata veriyor mu? → GET _ingest/pipeline/logs-nginx*
7. Permission sorunu mu? → Agent log'larını kontrol et

10. Best Practices

❌ Yapma

  1. Her sunucuya farklı policy atama — Grupla, standartlaştır

  2. Standalone mode'u geniş ortamda kullanma — Fleet'in avantajını kaybedersin

  3. Fleet Server'ı single point of failure yapma — HA için 2+ instance

  4. Tüm agent'ları aynı anda upgrade etme — Rolling upgrade kullan

  5. Agent'ı root olmadan kurma — Birçok log ve metrik root izni gerektirir

✅ Yap

  1. Policy'leri sunucu rolüne göre oluştur — web-servers, db-servers, app-servers

  2. Namespace kullan — production, staging, development

  3. Fleet Server'ı ölçeklendir — 500+ agent için 2+ instance

  4. Agent monitoring'i aç — Agent'ın kendisinin CPU/memory kullanımını izle

  5. Integration'ları test ortamında dene — Production'a deploy etmeden önce


Özet

Bu derste öğrendiklerimizi toplayalım:

  1. Elastic Agent, Beats'lerin (Filebeat, Metricbeat, vb.) tek bir binary'de birleştirilmiş halidir. Kurulum, konfigürasyon ve güncelleme merkezi olarak Fleet'ten yönetilir.

  2. Fleet Server, agent'ların merkezi yönetim noktasıdır. Policy dağıtımı, versiyon güncelleme, durum izleme hep Fleet Server üzerinden yapılır. HA için 2+ instance önerilir.

  3. Agent Policy, bir grup agent'ın ne yapacağını tanımlar. Policy değişikliği otomatik olarak tüm agent'lara yayılır — restart gerekmez.

  4. Integration'lar, hazır veri toplama paketleridir. System, Nginx, MySQL, Docker, Kubernetes gibi 300+ integration mevcuttur. Her biri dashboard, ingest pipeline ve mapping ile gelir.

  5. Enrollment token ile agent'lar Fleet'e kaydedilir. Kurulum tek komutla yapılır, policy otomatik uygulanır.

  6. Fleet UI üzerinden agent'ları izleyebilir, upgrade edebilir, policy değiştirebilir, toplu operasyonlar yapabilirsiniz. 500+ sunuculu ortamlarda bile tek noktadan yönetim mümkündür.