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önetiliyorKarşılaştırma Tablosu
| Özellik | Beats | Elastic Agent |
|---|---|---|
| Kurulum | Her Beat ayrı | Tek binary |
| Konfigürasyon | Her sunucuda dosya | Fleet'ten merkezi |
| Güncelleme | Manuel, her sunucuda | Fleet'ten tek tıkla |
| Policy yönetimi | Yok (dosya bazlı) | Agent Policy |
| Integration ekleme | Config + restart | Fleet UI'dan ekle |
| Monitoring | Her Beat'i ayrı izle | Fleet Dashboard |
| Standalone mod | Tek seçenek | Var (ama Fleet önerilir) |
| Performans | Hafif | Biraz daha ağır (tek binary) |
| Esneklik | Yüksek (config dosyası) | Orta (Fleet UI/API) |
| İleri config | Tam kontrol | Fleet 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ı
| Mod | Açıklama | Kullanım |
|---|---|---|
| Managed | Elastic Cloud tarafından yönetilen | ESS kullanıyorsanız |
| Self-managed | Kendi sunucunuzda kurduğunuz | On-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-1Fleet Server Konfigürasyonu (Kibana)
Kibana → Management → Fleet → Settings
Fleet Server hosts: https://fleet-server:8220
Elasticsearch hosts: https://elasticsearch:9200Fleet Server Ölçeklendirme
| Agent Sayısı | Fleet Server | RAM | CPU |
|---|---|---|---|
| 1-100 | 1 instance | 4 GB | 2 core |
| 100-500 | 1-2 instance | 8 GB | 4 core |
| 500-2000 | 2-3 instance | 16 GB | 8 core |
| 2000-10000 | 3-5 instance (LB arkasında) | 32 GB | 16 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 metricsPolicy Tipleri
| Tip | Açıklama |
|---|---|
| Default policy | Yeni agent'lar için varsayılan |
| Custom policy | Belirli sunucu grupları için |
| Fleet Server policy | Fleet 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, requestsMySQL 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 eventsKubernetes 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 logsIntegration 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 test5. 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-serversAgent 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.ymlStandalone 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-agent6. 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ılarAgent Durumları
| Durum | Açıklama | Aksiyon |
|---|---|---|
| Healthy | Normal çalışıyor | Yok |
| Unhealthy | Bir veya daha fazla integration hata veriyor | Detaya bak |
| Offline | Agent iletişim kurmuyor | Sunucuyu kontrol et |
| Updating | Policy veya versiyon güncellemesi devam ediyor | Bekle |
| Inactive | Uzun süredir offline (30 gün+) | Kaldır veya sunucuyu kontrol et |
| Unenrolled | Fleet'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 inspectAgent 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_secondsile 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: 1Logstash 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.keyMultiple 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ışabilirOrta Ortam (50-500 sunucu)
┌──────────────┐
┌─────▶│ Fleet Server │
│ │ #1 │──┐
┌──────────┐ │ └──────────────┘ │ ┌────────────────┐
│ Agents │──┤ ├───▶│ Elasticsearch │
│ (50-500) │ │ ┌──────────────┐ │ │ Cluster │
│ │ └─────▶│ Fleet Server │──┘ │ + Kibana │
└──────────┘ │ #2 │ └────────────────┘
└──────────────┘
Load Balancer arkasındaBü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ğlar9. 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-serverAgent 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 et10. Best Practices
❌ Yapma
Her sunucuya farklı policy atama — Grupla, standartlaştır
Standalone mode'u geniş ortamda kullanma — Fleet'in avantajını kaybedersin
Fleet Server'ı single point of failure yapma — HA için 2+ instance
Tüm agent'ları aynı anda upgrade etme — Rolling upgrade kullan
Agent'ı root olmadan kurma — Birçok log ve metrik root izni gerektirir
✅ Yap
Policy'leri sunucu rolüne göre oluştur — web-servers, db-servers, app-servers
Namespace kullan — production, staging, development
Fleet Server'ı ölçeklendir — 500+ agent için 2+ instance
Agent monitoring'i aç — Agent'ın kendisinin CPU/memory kullanımını izle
Integration'ları test ortamında dene — Production'a deploy etmeden önce
Özet
Bu derste öğrendiklerimizi toplayalım:
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.
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.
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.
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.
Enrollment token ile agent'lar Fleet'e kaydedilir. Kurulum tek komutla yapılır, policy otomatik uygulanır.
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.
AI Asistan
Sorularını yanıtlamaya hazır