InfluxDB Kurulum ve İlk Yapılandırma
Zaman serisi veritabanları dünyasına adım atmak istiyorsanız, InfluxDB bu işin tam merkezi. Özellikle sistem metrikleri, uygulama performans verileri, IoT sensör ölçümleri gibi sürekli akan ve zaman damgasıyla etiketlenen verileri depolamak için tasarlanmış bu veritabanı, sysadmin dünyasında Prometheus ve Grafana ile birlikte adeta kutsal üçlünün bir parçası haline geldi. Bu yazıda InfluxDB’yi sıfırdan kuracak, temel yapılandırmayı tamamlayacak ve gerçek hayatta kullanabileceğiniz senaryolara göz atacağız.
InfluxDB Nedir ve Neden Kullanmalıyız?
InfluxDB, Influxdata tarafından geliştirilen açık kaynaklı bir zaman serisi veritabanıdır. Klasik ilişkisel veritabanlarından farklı olarak, verileri zaman damgasına göre optimize edilmiş bir yapıda saklar. Bunu şöyle somutlaştıralım: Bir sunucunun CPU kullanımını her 10 saniyede bir ölçüp kaydettiğinizde, bu veriler zamanla milyonlarca satıra ulaşır. İlişkisel bir veritabanında bu sorgulamak kabusa dönerken, InfluxDB bu tür workload için özelleşmiş sıkıştırma ve indeksleme algoritmaları kullanır.
Şu an piyasada InfluxDB 1.x ve InfluxDB 2.x olmak üzere iki ana sürüm aktif olarak kullanılıyor. 2.x sürümü ile birlikte yeni bir sorgu dili olan Flux geldi, web tabanlı arayüz entegre edildi ve kullanıcı yönetimi çok daha olgunlaştı. Bu yazıda InfluxDB 2.x üzerinden gideceğiz çünkü yeni kurulumlar için artık bu sürümü tercih etmek mantıklı.
Sistem Gereksinimleri
Kuruluma geçmeden önce sistemin hazır olduğundan emin olmak gerekiyor. InfluxDB oldukça hafif bir ayak izine sahip ancak yoğun yazma/okuma operasyonlarında disk I/O kritik hale geliyor.
- İşletim Sistemi: Ubuntu 20.04/22.04, Debian 11/12, CentOS 8/9, RHEL 8/9
- RAM: Minimum 1GB, üretim için 4GB ve üzeri önerilen
- Disk: SSD şiddetle tavsiye edilir, özellikle yazma yoğun senaryolarda
- CPU: 2 core minimum, yoğun sorgu workload için 4+ core
- Port: Varsayılan olarak 8086 TCP
Ubuntu/Debian Üzerine Kurulum
En yaygın senaryo olan Ubuntu/Debian kurulumundan başlayalım. Influxdata’nın kendi repository’sini sisteme ekleyerek kurulum yapacağız. Bu sayede güncellemeleri de rahatça yönetebilirsiniz.
# Gerekli bağımlılıkları kur
sudo apt update
sudo apt install -y curl gnupg2
# Influxdata GPG anahtarını indir
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
# Repository'yi ekle
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
# Paket listesini güncelle ve InfluxDB'yi kur
sudo apt update
sudo apt install -y influxdb2
# Servisi başlat ve enable et
sudo systemctl start influxdb
sudo systemctl enable influxdb
# Servis durumunu kontrol et
sudo systemctl status influxdb
Kurulum başarılıysa systemctl status komutu yeşil renkte “active (running)” çıktısı verecektir.
CentOS/RHEL Üzerine Kurulum
Red Hat tabanlı sistemlerde süreç biraz farklı işliyor. Özellikle SELinux ve firewalld ile uğraşmanız gerekebilir.
# Influxdata repo dosyasını oluştur
cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
EOF
# InfluxDB'yi kur
sudo dnf install -y influxdb2
# Servisi başlat
sudo systemctl start influxdb
sudo systemctl enable influxdb
# Firewall'da portu aç
sudo firewall-cmd --permanent --add-port=8086/tcp
sudo firewall-cmd --reload
SELinux aktifse ve InfluxDB’nin veri dizinine erişiminde sorun çıkarsa şu komutu çalıştırabilirsiniz:
sudo chcon -R -t var_t /var/lib/influxdb
İlk Yapılandırma: Setup Süreci
InfluxDB 2.x’in güzel yanlarından biri, hem web arayüzü hem de komut satırı üzerinden ilk kurulum sihirbazını desteklemesi. Komut satırı yolunu tercih ediyorum çünkü bu adımları script haline getirip otomatize etmek çok daha kolay.
# InfluxDB CLI ile ilk yapılandırmayı başlat
influx setup
--username admin
--password 'GucluBirSifre123!'
--org sirketim
--bucket sistem-metrikleri
--retention 30d
--force
Bu komuttaki parametrelere bakalım:
- –username: Admin kullanıcı adı
- –password: Admin şifresi, production ortamda kesinlikle güçlü bir şifre kullanın
- –org: Organizasyon adı, tüm kaynaklar bu organizasyon altında gruplanır
- –bucket: İlk veri kovası, verilerin depolandığı mantıksal birimler
- –retention: Veri saklama süresi, burada 30 gün ayarladık
- –force: Etkileşimli onay istemeden devam et
Komutu çalıştırdıktan sonra bir API token üretilecek. Bu token’ı mutlaka not alın, güvenli bir yere kaydedin. Daha sonra bu token’ı kullanarak InfluxDB ile iletişim kuracaksınız.
Yapılandırma Dosyası
InfluxDB’nin ana yapılandırma dosyası /etc/influxdb/config.toml adresinde bulunur. Ancak 2.x sürümünde pek çok ayar environment variable üzerinden de yapılabiliyor. Temel yapılandırma seçeneklerine bakalım:
# Mevcut yapılandırmayı görüntüle
sudo cat /etc/influxdb/config.toml
# Ya da influx CLI üzerinden
influx config ls
Kritik yapılandırma parametrelerini şöyle sıralayabiliriz:
- bolt-path: BoltDB metadata dosyasının konumu, varsayılan
/var/lib/influxdb/influxd.bolt - engine-path: Zaman serisi verilerinin depolandığı dizin
- http-bind-address: Hangi arayüzden dinleyeceği, varsayılan
:8086 - log-level: Log seviyesi, debug/info/warn/error seçenekleri mevcut
- reporting-disabled: Telemetri verilerini Influxdata’ya göndermeyi kapatır
Production ortam için mutlaka yapmanız gereken bir ayar:
sudo tee -a /etc/influxdb/config.toml << EOF
reporting-disabled = true
log-level = "warn"
EOF
sudo systemctl restart influxdb
İlk Bucket ve Veri Yazma Testi
Sistemi doğrulamak için bir test verisi gönderelim. InfluxDB, “Line Protocol” adı verilen kendine özgü bir metin formatı kullanır. Format şu şekilde: measurement,tag=değer alan=değer timestamp
# Token'ı environment variable olarak set et
export INFLUX_TOKEN="buraya_token_gelecek"
export INFLUX_ORG="sirketim"
export INFLUX_BUCKET="sistem-metrikleri"
# Test verisi yaz
influx write
--bucket sistem-metrikleri
--org sirketim
--token $INFLUX_TOKEN
"cpu_test,host=web01,environment=prod kullanim=75.5,core_count=8i $(date +%s)000000000"
# Veriyi sorgula
influx query
--org sirketim
--token $INFLUX_TOKEN
'from(bucket: "sistem-metrikleri")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu_test")'
Sorgu sonucunda az önce yazdığınız veriyi görüyorsanız, sistem düzgün çalışıyor demektir. Tebrikler!
Gerçek Dünya Senaryosu: Telegraf ile Sistem Metrikleri
Tek başına InfluxDB’yi kurmak yetmez, gerçek değer onu bir veri toplama aracıyla birleştirdiğinizde ortaya çıkıyor. Telegraf, yine Influxdata’nın geliştirdiği ve yüzlerce eklentisiyle neredeyse her şeyin metriğini toplayabilen bir agent. Hemen aynı makineye kuralım:
# Telegraf'ı kur (repository zaten eklendi)
sudo apt install -y telegraf # Ubuntu/Debian için
# sudo dnf install -y telegraf # CentOS/RHEL için
# Telegraf konfigürasyonunu oluştur
sudo tee /etc/telegraf/telegraf.conf << 'EOF'
[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://localhost:8086"]
token = "BURAYA_TOKEN_YAZIN"
organization = "sirketim"
bucket = "sistem-metrikleri"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.mem]]
[[inputs.net]]
[[inputs.system]]
EOF
# Telegraf'ı başlat
sudo systemctl start telegraf
sudo systemctl enable telegraf
Birkaç dakika bekleyin ve verilerin gelip gelmediğini kontrol edin:
influx query
--org sirketim
--token $INFLUX_TOKEN
'from(bucket: "sistem-metrikleri")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu")
|> limit(n: 10)'
Retention Policy ve Veri Yönetimi
Üretim ortamında verilerin ne kadar saklanacağı kritik bir karar. Disk dolunca sisteminiz çöküyor, çok erken silince tarihsel analiz yapamıyorsunuz. InfluxDB’de bucket bazlı retention policy yönetimi yapılıyor.
Yaygın kullandığım strateji şu şekilde: Yüksek frekanslı ham veriler için kısa saklama, özetlenmiş veriler için uzun saklama. Bu işlemi Continuous Query (Flux’ta Task olarak adlandırılıyor) ile otomatize edebilirsiniz.
# Kısa süreli ham veri için bucket oluştur
influx bucket create
--name ham-veriler
--org sirketim
--token $INFLUX_TOKEN
--retention 7d
# Uzun süreli özetlenmiş veri için bucket
influx bucket create
--name ozet-veriler
--org sirketim
--token $INFLUX_TOKEN
--retention 365d
# Mevcut bucket'ları listele
influx bucket ls
--org sirketim
--token $INFLUX_TOKEN
Şimdi ham verileri her saat özetleyip ozet-veriler bucket’ına yazacak bir Task oluşturalım. Bu, disk kullanımını dramatik biçimde azaltır:
influx task create
--org sirketim
--token $INFLUX_TOKEN
--file - << 'EOF'
option task = {
name: "CPU Saatlik Ozet",
every: 1h,
}
from(bucket: "ham-veriler")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r.cpu == "cpu-total")
|> filter(fn: (r) => r._field == "usage_user")
|> aggregateWindow(every: 1h, fn: mean)
|> set(key: "_measurement", value: "cpu_saatlik")
|> to(bucket: "ozet-veriler", org: "sirketim")
EOF
Kullanıcı ve Token Yönetimi
Özellikle birden fazla uygulama veya takımın aynı InfluxDB instance’ını kullandığı ortamlarda, her servis için ayrı token oluşturmak iyi bir pratik. Böylece bir token ele geçirildiğinde tüm sistem tehlikede olmuyor.
# Sadece okuma yapabilen token oluştur
influx auth create
--org sirketim
--token $INFLUX_TOKEN
--read-bucket sistem-metrikleri
--description "Grafana okuma tokeni"
# Sadece yazma yapabilen token (Telegraf için)
influx auth create
--org sirketim
--token $INFLUX_TOKEN
--write-bucket sistem-metrikleri
--description "Telegraf yazma tokeni"
# Mevcut tokenları listele
influx auth ls
--org sirketim
--token $INFLUX_TOKEN
Grafana entegrasyonunda şunu sık görürüm: Grafana için tüm izinleri olan admin token verilmiş. Bu kabul edilemez bir güvenlik açığı. Grafana dashboard’larınız için her zaman sadece okuma izni olan bir token kullanın.
Yedekleme Stratejisi
“Hiç yedek almayan bir sistem yöneticisi yoktur, sadece henüz veri kaybetmemiş olanlar vardır.” Bu söz InfluxDB için de geçerli. Özellikle önemli metrik geçmişini kaybetmek hem teknik hem de iş süreçleri açısından ciddi sorunlara yol açabilir.
# Tüm organizasyon verisini yedekle
influx backup
--org sirketim
--token $INFLUX_TOKEN
/yedekler/influxdb/$(date +%Y%m%d_%H%M%S)
# Sadece belirli bir bucket'ı yedekle
influx backup
--org sirketim
--token $INFLUX_TOKEN
--bucket sistem-metrikleri
/yedekler/influxdb/bucket-$(date +%Y%m%d)
# Yedeği geri yükle
influx restore
--org sirketim
--token $INFLUX_TOKEN
/yedekler/influxdb/20240115_020000
Bu komutları crontab’a ekleyip otomatize etmeyi unutmayın:
# /etc/cron.d/influxdb-backup
0 2 * * * root influx backup --org sirketim --token TOKEN /yedekler/influxdb/$(date +%Y%m%d) && find /yedekler/influxdb -type d -mtime +30 -exec rm -rf {} +
Performans İzleme ve Temel Troubleshooting
InfluxDB kendi iç metriklerini de yayınlıyor. Bunları takip etmek, sorunları erken tespit etmek açısından çok değerli.
# InfluxDB'nin kendi health endpoint'ini kontrol et
curl -s http://localhost:8086/health | python3 -m json.tool
# Detaylı metrics endpoint
curl -s http://localhost:8086/metrics | grep influxdb_
# Log dosyalarını incele
sudo journalctl -u influxdb -f
# Disk kullanımını kontrol et
du -sh /var/lib/influxdb/
du -sh /var/lib/influxdb/engine/data/
Karşılaştığım yaygın sorunlar ve çözümleri:
- “unauthorized” hatası: Token yanlış veya süresi dolmuş,
influx auth lsile kontrol edin - Yüksek bellek kullanımı: Çok fazla eş zamanlı sorgu veya büyük range sorguları, query timeout değerini düşürün
- Yavaş yazma performansı: Disk I/O darboğazı,
iotopile kontrol edin ve mümkünse SSD’ye geçin - “bucket not found” hatası: Bucket adını ve organizasyonu iki kez kontrol edin, büyük/küçük harf duyarlı
# Çalışan sorguları listele
influx query
--org sirketim
--token $INFLUX_TOKEN
'import "influxdata/influxdb/monitor"
monitor.deadman(bucket: "_monitoring", measurement: "cpu")'
# Disk shard bilgilerini görüntüle
ls -la /var/lib/influxdb/engine/data/
Web Arayüzü ile Çalışmak
Komut satırı sevdalısı olsam da InfluxDB’nin web arayüzü, özellikle Flux sorgularını öğrenme aşamasında ve hızlıca veri görselleştirmek istediğinizde gerçekten işe yarıyor. Tarayıcınızdan http://sunucu-ip:8086 adresine gidin ve kurulum sırasında belirlediğiniz kullanıcı adı/şifreyle giriş yapın.
Arayüzde özellikle dikkat etmeniz gereken bölümler:
- Data Explorer: Flux sorgularınızı test edebileceğiniz ve görselleştirebileceğiniz alan
- Tasks: Otomatik sorgu görevlerini yönetin
- Alerts: Eşik değerlerine göre uyarı kuralları tanımlayın
- Load Data: Telegraf konfigürasyonu ve veri kaynaklarını yönetin
Güvenlik Önlemleri
Üretim ortamında InfluxDB’yi doğrudan internete açmak tehlikeli. Mutlaka uygulamanız gereken birkaç güvenlik adımı var:
# UFW ile sadece belirli IP'lerin erişimine izin ver
sudo ufw allow from 192.168.1.0/24 to any port 8086
sudo ufw allow from 10.0.0.0/8 to any port 8086
sudo ufw deny 8086
# Ya da InfluxDB'yi sadece localhost'ta dinlemesini sağla
# /etc/influxdb/config.toml içinde:
# http-bind-address = "127.0.0.1:8086"
TLS sertifikası eklemek için:
# Self-signed sertifika oluştur (test için)
sudo openssl req -x509 -nodes -newkey rsa:4096
-keyout /etc/influxdb/influxdb-selfsigned.key
-out /etc/influxdb/influxdb-selfsigned.crt
-days 365
-subj "/CN=influxdb.sirketim.com"
sudo chown influxdb:influxdb /etc/influxdb/influxdb-selfsigned.*
Ardından /etc/influxdb/config.toml dosyasına şu satırları ekleyin:
- tls-cert: Sertifika dosyasının yolu
- tls-key: Özel anahtar dosyasının yolu
Sonuç
InfluxDB, zaman serisi verisi toplama ve analizi için güçlü ve olgun bir seçenek. Ubuntu’dan CentOS’a kurulum, ilk yapılandırma, Telegraf entegrasyonu, retention policy yönetimi ve yedekleme konularını ele aldık. Bu temel yapıyı kurduktan sonra üstüne Grafana entegrasyonu, alerting kuralları ve çok düğümlü clustering gibi ileri seviye konuları ekleyebilirsiniz.
En önemli nokta şu: InfluxDB’yi kurup bırakmayın. Disk kullanımını, query performansını ve servis sağlığını düzenli olarak izleyin. _monitoring bucket’ındaki dahili metrikleri Grafana üzerinde görselleştirin ve kritik eşikler için alert kurun. Sisteminizin sizi sürprizlerle uyandırmasındansa, siz sistemi proaktif olarak takip etmelisiniz.
Telegraf ile kapsamlı metrik toplama konusunu ve Grafana ile InfluxDB entegrasyonunu ilerleyen yazılarda ele alacağız.
