Telegraf Kurulumu ve InfluxDB Entegrasyonu

Sistem metrikleri toplamak ve izlemek, modern altyapı yönetiminin vazgeçilmez bir parçası. InfluxDB tek başına güçlü bir zaman serisi veritabanı olsa da, veriyi ona taşıyacak bir araca ihtiyacınız var. İşte tam bu noktada Telegraf devreye giriyor. InfluxData tarafından geliştirilen Telegraf, plugin tabanlı yapısıyla hem veri toplama hem de InfluxDB’ye gönderme konusunda gerçekten işinizi kolaylaştırıyor. Bu yazıda Telegraf’ı sıfırdan kuracak, InfluxDB ile entegre edecek ve gerçek dünya senaryolarında nasıl kullanacağınızı göstereceğiz.

Telegraf Nedir, Neden Kullanmalısınız?

Telegraf, Go diliyle yazılmış, hafif ve eklenti tabanlı bir metrik toplama ajanıdır. CPU, RAM, disk, ağ gibi sistem metriklerini toplamanın yanı sıra MySQL, PostgreSQL, Redis, Nginx gibi onlarca servisin metriklerini de pull veya push yöntemiyle alabilir.

Telegraf’ın öne çıkan özellikleri:

  • Plugin çeşitliliği: 300’den fazla input, output, processor ve aggregator plugin’i
  • Düşük kaynak tüketimi: Go ile yazıldığı için bellek ve CPU kullanımı minimal
  • Kolay yapılandırma: Tek bir TOML dosyası ile tüm ayarlar
  • InfluxDB ile kusursuz entegrasyon: Aynı şirketten çıktıkları için native destek mükemmel
  • Çoklu output desteği: Aynı anda hem InfluxDB’ye hem Kafka’ya hem de başka sistemlere yazabilir

Küçük bir senaryo düşünelim: 10 sunucunuz var ve hepsinin CPU, RAM, disk kullanımını merkezi bir yerde görmek istiyorsunuz. Her sunucuya Telegraf kuruyorsunuz, hepsi merkezi bir InfluxDB’ye yazıyor, Grafana üzerinden de görselleştiriyorsunuz. Bu klasik TIG stack (Telegraf + InfluxDB + Grafana) mimarisidir.

Kurulum Öncesi Hazırlık

Öncelikle InfluxDB’nin zaten kurulu ve çalışıyor olduğunu varsayıyoruz. Eğer henüz kurmadıysanız, bu serinin önceki yazısına göz atın.

Telegraf’ı kurmadan önce birkaç şeyi hazırlamamız gerekiyor:

  • InfluxDB’de Telegraf için bir bucket (ya da InfluxDB 1.x’te database) oluşturmak
  • API token veya kullanıcı bilgilerini hazırlamak
  • Hangi metrikleri toplayacağımıza karar vermek

InfluxDB 2.x için bucket ve token oluşturma:

# InfluxDB CLI ile bucket oluşturma
influx bucket create 
  --name telegraf 
  --org myorg 
  --retention 30d

# Telegraf için token oluşturma
influx auth create 
  --org myorg 
  --write-bucket telegraf 
  --description "Telegraf write token"

Bu komut size bir token üretecek. Bu token’ı bir yere not edin, Telegraf konfigürasyonunda kullanacaksınız.

Telegraf Kurulumu

Ubuntu/Debian Üzerine Kurulum

# InfluxData GPG key ve repo ekleme
curl -s https://repos.influxdata.com/influxdata-archive_compat.key | 
  gpg --dearmor | 
  sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null

echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | 
  sudo tee /etc/apt/sources.list.d/influxdata.list

# Paketi güncelle ve Telegraf'ı kur
sudo apt-get update && sudo apt-get install telegraf -y

# Servisi başlat ve enable et
sudo systemctl start telegraf
sudo systemctl enable telegraf

# Durum kontrolü
sudo systemctl status telegraf

RHEL/CentOS/Rocky Linux Üzerine Kurulum

# Repo dosyası oluştur
cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
EOF

# Telegraf'ı kur
sudo yum install telegraf -y

# Servisi başlat
sudo systemctl start telegraf
sudo systemctl enable telegraf

Kurulum tamamlandıktan sonra Telegraf’ın çalıştığını doğrulayın:

telegraf --version
# Beklenen çıktı: Telegraf 1.x.x (git: HEAD ...)

Temel Konfigürasyon

Telegraf’ın ana konfigürasyon dosyası /etc/telegraf/telegraf.conf konumunda bulunur. Bu dosya oldukça uzun ve detaylıdır. Telegraf ayrıca /etc/telegraf/telegraf.d/ dizinindeki .conf uzantılı dosyaları da okur. Bu özelliği kullanarak konfigürasyonlarınızı mantıklı parçalara bölebilirsiniz.

Önce varsayılan konfigürasyon dosyasını yedekleyelim ve temiz bir tane oluşturalım:

# Mevcut konfig dosyasını yedekle
sudo cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.bak

# Telegraf, kendi konfigürasyon şablonunu oluşturabilir
# Tüm plugin'lerle birlikte (büyük dosya):
telegraf config > /tmp/telegraf-full.conf

# Sadece belirli plugin'lerle:
telegraf --input-filter cpu:mem:disk:diskio:net:system 
         --output-filter influxdb_v2 
         config | sudo tee /etc/telegraf/telegraf.conf

InfluxDB 2.x ile Entegrasyon

Şimdi ana konfigürasyon dosyamızı düzenleyelim. InfluxDB 2.x için outputs.influxdb_v2 plugin’ini kullanıyoruz:

# /etc/telegraf/telegraf.conf

[global_tags]
  environment = "production"
  datacenter = "istanbul-dc1"

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false

[[outputs.influxdb_v2]]
  urls = ["http://influxdb-server:8086"]
  token = "YOUR_INFLUXDB_TOKEN_HERE"
  organization = "myorg"
  bucket = "telegraf"
  timeout = "5s"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[inputs.mem]]

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]

[[inputs.net]]
  interfaces = ["eth0", "ens3"]

[[inputs.system]]

Konfigürasyon dosyasını düzenledikten sonra önce test edin:

# Konfigürasyonu test et (1 kez çalıştır ve çıktıyı göster)
telegraf --config /etc/telegraf/telegraf.conf --test

# Sadece belirli input'u test et
telegraf --config /etc/telegraf/telegraf.conf --input-filter cpu --test

--test parametresi Telegraf’ı gerçekten çalıştırmadan konfigürasyonu doğrular ve ne tür metrik toplayacağını stdout’a yazar. Çok işe yarayan bir özellik.

Gerçek Dünya Senaryosu 1: Çok Sunuculu İzleme

Diyelim ki production ortamınızda 3 farklı rol için sunucularınız var: web sunucuları, uygulama sunucuları ve veritabanı sunucuları. Her birinin farklı metriklerini izlemek istiyorsunuz.

Bu durumda global_tags kısmını her sunucuya göre özelleştirmek mantıklı. Bunun için environment variable kullanabilirsiniz:

# /etc/default/telegraf dosyasına ortam değişkenleri ekle
sudo tee /etc/default/telegraf << 'EOF'
SERVER_ROLE=webserver
DATACENTER=istanbul-dc1
ENVIRONMENT=production
INFLUXDB_TOKEN=your-super-secret-token-here
EOF

sudo chmod 600 /etc/default/telegraf

Ardından telegraf.conf içinde bu değişkenleri referans alın:

[global_tags]
  role = "$SERVER_ROLE"
  datacenter = "$DATACENTER"
  environment = "$ENVIRONMENT"

[[outputs.influxdb_v2]]
  urls = ["http://influxdb.internal:8086"]
  token = "$INFLUXDB_TOKEN"
  organization = "myorg"
  bucket = "telegraf"

Bu yaklaşım güvenlik açısından da iyi çünkü token’ı konfigürasyon dosyasına gömmüyorsunuz. /etc/default/telegraf dosyasını 600 izniyle tuttuğunuzda sadece root ve telegraf kullanıcısı okuyabilir.

Gerçek Dünya Senaryosu 2: MySQL İzleme

Bir veritabanı sunucusunda MySQL’i izlemek istiyorsunuz. Bunun için önce MySQL’de Telegraf için bir kullanıcı oluşturmanız gerekiyor:

-- MySQL'de monitoring kullanıcısı oluştur
CREATE USER 'telegraf'@'localhost' IDENTIFIED BY 'guclu_bir_sifre';
GRANT PROCESS ON *.* TO 'telegraf'@'localhost';
GRANT SELECT ON performance_schema.* TO 'telegraf'@'localhost';
GRANT SELECT ON information_schema.* TO 'telegraf'@'localhost';
FLUSH PRIVILEGES;

Ardından /etc/telegraf/telegraf.d/mysql.conf dosyasını oluşturun:

[[inputs.mysql]]
  servers = ["telegraf:guclu_bir_sifre@tcp(localhost:3306)/?tls=false"]
  
  metric_version = 2
  
  gather_global_status = true
  gather_global_variables = true
  gather_slave_status = true
  gather_info_schema_auto_inc = true
  gather_innodb_metrics = true
  gather_table_schema = false
  gather_file_events_stats = false
  gather_perf_events_statements = false
  
  interval_slow_queries = "30m"
  perf_events_statements_digest_text_limit = 120
  perf_events_statements_limit = 250
  perf_events_statements_time_limit = 86400

telegraf.d dizinini kullanmanın güzelliği şu: Ana telegraf.conf dosyasına dokunmadan her servis için ayrı konfigürasyon dosyası oluşturabiliyorsunuz. Bakımı çok daha kolay hale geliyor.

Gerçek Dünya Senaryosu 3: Nginx Log Analizi

Nginx access loglarını parse edip InfluxDB’ye göndermek, web trafiğinizi analiz etmek için harika bir yöntem. Bunun için inputs.logparser veya daha modern olan inputs.tail plugin’ini kullanabilirsiniz:

# /etc/telegraf/telegraf.d/nginx.conf

# Nginx temel metrikleri (stub_status modülü gerektirir)
[[inputs.nginx]]
  urls = ["http://localhost/nginx_status"]
  response_timeout = "5s"

# Nginx access log parse etme
[[inputs.tail]]
  files = ["/var/log/nginx/access.log"]
  from_beginning = false
  pipe = false
  
  data_format = "grok"
  grok_patterns = ["%{COMBINED_LOG_FORMAT}"]
  name_override = "nginx_access_log"
  
  [inputs.tail.tags]
    service = "nginx"
    vhost = "main"

Nginx’te stub_status’u aktif etmek için:

# /etc/nginx/sites-available/default veya ilgili vhost dosyasına ekle
# server bloğu içine:
location /nginx_status {
    stub_status on;
    allow 127.0.0.1;
    deny all;
}

Bu konfigürasyonla hem Nginx’in genel metriklerini (aktif bağlantı sayısı, istek sayısı vb.) hem de access log’larından türetilmiş metrikleri InfluxDB’ye gönderebilirsiniz.

Processor ve Aggregator Plugin’leri

Telegraf sadece veri toplamakla kalmıyor, topladığı veriyi dönüştürme ve zenginleştirme kabiliyeti de sunuyor.

Processor örneği: Belirli tag’leri yeniden adlandırmak veya field değerlerini dönüştürmek için:

# /etc/telegraf/telegraf.d/processors.conf

# Belirli bir field'ı farklı bir isimle etiketle
[[processors.rename]]
  [[processors.rename.replace]]
    field = "used_percent"
    dest = "disk_usage_percent"

# Regex ile tag değerlerini normalize et
[[processors.regex]]
  namepass = ["disk"]
  [[processors.regex.tags]]
    key = "path"
    pattern = "^/dev/(.+)$"
    replacement = "${1}"

Aggregator örneği: Metrikleri belirli bir süre boyunca toplayıp özet istatistikler üretmek için:

[[aggregators.basicstats]]
  period = "30s"
  drop_original = false
  stats = ["count", "min", "max", "mean", "stdev", "s2", "sum"]
  namepass = ["cpu"]

Konfigürasyonu Doğrulama ve Debug

Telegraf konfigürasyonunu üretim ortamına almadan önce mutlaka test edin. Birkaç kullanışlı komut:

# Konfigürasyon sözdizimini kontrol et
telegraf --config /etc/telegraf/telegraf.conf --test 2>&1 | head -50

# Sadece belirli plugin'leri test et
telegraf --config /etc/telegraf/telegraf.conf 
  --input-filter mysql 
  --output-filter influxdb_v2 
  --test

# Debug modunda çalıştır (verbose log)
telegraf --config /etc/telegraf/telegraf.conf --debug

# Telegraf'ın hangi konfigürasyon dosyalarını yüklediğini göster
telegraf --config /etc/telegraf/telegraf.conf 
  --config-directory /etc/telegraf/telegraf.d 
  --test 2>&1 | grep "Loaded"

Servis log’larını takip etmek için:

# Journald ile log takibi
sudo journalctl -u telegraf -f

# Son 100 satır log
sudo journalctl -u telegraf -n 100

# Hata mesajlarını filtrele
sudo journalctl -u telegraf -p err

Telegraf’ı Systemd ile Yönetme

Telegraf bir systemd servisi olarak kurulduğundan standart systemd komutları geçerli:

# Servis durumunu kontrol et
sudo systemctl status telegraf

# Konfigürasyon değişikliği sonrası yeniden başlat
sudo systemctl restart telegraf

# Sadece yeniden yükle (bazı durumlarda yetmeyebilir)
sudo systemctl reload telegraf

# Servis loglarını izle
sudo journalctl -u telegraf -f --since "5 minutes ago"

# Telegraf'ın ne kadar kaynak kullandığını kontrol et
systemctl show telegraf --property=MemoryCurrent,CPUUsageNSec

Eğer Telegraf servis dosyasını özelleştirmek istiyorsanız, doğrudan düzenlemek yerine override dosyası kullanın:

sudo systemctl edit telegraf
# Bu komut /etc/systemd/system/telegraf.service.d/override.conf dosyasını açar

# Örnek override içeriği:
# [Service]
# EnvironmentFile=/etc/default/telegraf
# Restart=always
# RestartSec=5

Güvenlik Konuları

Production ortamında Telegraf kullanırken dikkat etmeniz gereken güvenlik noktaları:

  • Token güvenliği: InfluxDB token’larını konfigürasyon dosyasına değil, environment variable olarak saklayın. /etc/default/telegraf dosyasını chmod 600 ile koruyun.
  • Telegraf kullanıcısı: Telegraf, telegraf system kullanıcısı ile çalışır. Bu kullanıcının sadece ihtiyacı olan dosyalara erişimi olsun.
  • TLS/HTTPS: InfluxDB ile iletişimde TLS kullanın, özellikle farklı ağ segmentlerindeyseniz.
[[outputs.influxdb_v2]]
  urls = ["https://influxdb.internal:8086"]
  token = "$INFLUXDB_TOKEN"
  organization = "myorg"
  bucket = "telegraf"
  
  # TLS ayarları
  tls_ca = "/etc/telegraf/certs/ca.pem"
  tls_cert = "/etc/telegraf/certs/client.pem"
  tls_key = "/etc/telegraf/certs/client-key.pem"
  insecure_skip_verify = false

Eğer Telegraf’ın log dosyalarına veya sistem kaynaklarına erişmesi gerekiyorsa, bunu systemd capabilities üzerinden yönetin, gereksiz yere root ile çalıştırmayın.

Performans Tuning

Yüksek metrik hacimli ortamlarda Telegraf’ın [agent] bölümünü optimize etmeniz gerebilir:

[agent]
  # Toplama sıklığı - çok düşük yapmayın, sunucuya yük bindirir
  interval = "10s"
  
  # InfluxDB'ye gönderim batch boyutu
  metric_batch_size = 5000
  
  # Bellek buffer limiti - InfluxDB erişilemez olduğunda metrikleri tutar
  metric_buffer_limit = 50000
  
  # Flush sıklığı
  flush_interval = "10s"
  
  # Jitter ekle - çok sayıda Telegraf aynı anda yazmasın
  flush_jitter = "2s"
  collection_jitter = "1s"
  
  # Precision azaltmak yazma hızını artırır
  precision = "1s"

metric_buffer_limit değeri kritik. InfluxDB geçici olarak erişilemez hale geldiğinde Telegraf bu buffer’a yazar. Buffer dolduğunda eski metrikler silinmeye başlar. Ortamınızın metrik hacmine göre bu değeri ayarlayın.

Sorun Giderme

Sıkça karşılaşılan sorunlar ve çözümleri:

Telegraf metrik gönderemiyor:

# Bağlantı testi
curl -I http://influxdb-server:8086/health

# Token ve bucket doğrulama
curl -XPOST "http://influxdb-server:8086/api/v2/write?org=myorg&bucket=telegraf&precision=s" 
  -H "Authorization: Token YOUR_TOKEN" 
  --data-raw "test_metric value=1"

Disk kullanım metrikleri gelmiyor:

  • inputs.disk plugin’inde mount_points parametresiyle hangi mount point’leri izleyeceğinizi açıkça belirtin
  • Telegraf kullanıcısının ilgili dosyalara erişimi olduğundan emin olun

Yüksek bellek kullanımı:

  • metric_buffer_limit değerini düşürün
  • InfluxDB’nin erişilebilir olduğundan ve yazmaların başarılı gittiğinden emin olun
  • flush_interval değerini kısaltın

Sonuç

Telegraf, InfluxDB ile birlikte kullanıldığında son derece güçlü ve esnek bir izleme altyapısı oluşturmanızı sağlıyor. Plugin tabanlı yapısı sayesinde sistem metriklerinden uygulama metriklerine, log analizinden özel metrik toplamaya kadar neredeyse her senaryoya uyum sağlıyor.

Bu yazıda temel kurulumdan çok sunuculu izleme senaryolarına, MySQL entegrasyonundan Nginx log analizine kadar pratik örnekler üzerinde çalıştık. Kritik noktalara bakacak olursak: konfigürasyonlarınızı telegraf.d dizininde mantıklı parçalara bölün, token’ları environment variable olarak saklayın, --test parametresini sık kullanın ve metric_buffer_limit değerini ortamınıza göre ayarlayın.

Bir sonraki adım olarak Grafana ile InfluxDB’yi bağlayarak topladığınız bu metrikleri görselleştirebilirsiniz. TIG stack tamamlandığında production ortamınız üzerinde gerçek zamanlı ve güçlü bir görünürlük elde etmiş olacaksınız.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir