SpitfireYük Testi ve Gözlemlenebilirlikv1.4.9 · Yenilikler

Sürüm: 1.4.9Bu dokümantasyon Spitfire 1.4.9 içindir.

Altyapı izleme — bulut, vCenter, Kubernetes, Docker ve MongoDB Atlas

Lisansta her AWS hesabı, Azure subscription'ı, Google Cloud projesi, vCenter ve Kubernetes cluster'ı bir bulut hesabı / cluster sayılır; MongoDB Atlas izlenen sistem sayılır; Docker host'u sunucu sayılır.

AWS, Azure, Google Cloud ve vCenter Beta'dır; ne okunduğu, maliyet ve aralık her katalog kartındaki turuncu i'nin arkasında.

AWS

Hızlı kurulum

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın. Soruları yanıtlayın.
bash
curl -fsSL "https://<spitfire>/api/v1/setup/ds/aws.sh?t=<token>" -o /tmp/sf-aws.sh && bash /tmp/sf-aws.sh
  1. OK: ... satırını görünce bitti.

Elle kurulum (access key)

  1. IAM kullanıcısını oluşturun.
bash
aws iam create-user --user-name spitfire-monitor
  1. Salt okunur CloudWatch policy'sini verin.
bash
aws iam put-user-policy --user-name spitfire-monitor --policy-name SpitfireCloudWatchRead --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["cloudwatch:GetMetricData","cloudwatch:ListMetrics"],"Resource":"*"}]}'
  1. Access key'ini oluşturun.
bash
aws iam create-access-key --user-name spitfire-monitor --query 'AccessKey.[AccessKeyId,SecretAccessKey]' --output text
  1. Altyapı izleme → AWS CloudWatch'ta ekleyin.
text
Bölgeler: eu-central-1 · Access key ID / Secret access key: yukarıdaki iki değer · Test → Kaydet
  1. Policy'yi kontrol edin.
bash
aws iam list-user-policies --user-name spitfire-monitor --output text | grep -q SpitfireCloudWatchRead && echo "OK: spitfire-monitor CloudWatch okuyor"

Elle kurulum (role, başka hesap)

  1. İzlenen hesapta role'ü oluşturun.
bash
aws iam create-role --role-name spitfire-monitor --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::<tower-account-id>:root"},"Action":"sts:AssumeRole","Condition":{"StringEquals":{"sts:ExternalId":"<external-id>"}}}]}'
  1. Salt okunur CloudWatch policy'sini verin.
bash
aws iam put-role-policy --role-name spitfire-monitor --policy-name SpitfireCloudWatchRead --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["cloudwatch:GetMetricData","cloudwatch:ListMetrics"],"Resource":"*"}]}'
  1. Tower'ın kimliğine assume izni verin (Tower'ın hesabı).
bash
aws iam put-user-policy --user-name spitfire-monitor --policy-name SpitfireAssumeMonitor --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"sts:AssumeRole","Resource":"arn:aws:iam::<monitored-account-id>:role/spitfire-monitor"}]}'
  1. Altyapı izleme → AWS CloudWatch'ta ekleyin.
text
Bölgeler · Role ARN: arn:aws:iam::<monitored-account-id>:role/spitfire-monitor · External ID · Test → Kaydet
  1. Role'ü kontrol edin (izlenen hesap).
bash
aws iam list-role-policies --role-name spitfire-monitor --output text | grep -q SpitfireCloudWatchRead && echo "OK: spitfire-monitor role'ü CloudWatch okuyor"

Azure

Hızlı kurulum

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın. Soruları yanıtlayın.
bash
curl -fsSL "https://<spitfire>/api/v1/setup/ds/azure.sh?t=<token>" -o /tmp/sf-azure.sh && bash /tmp/sf-azure.sh

Windows'ta PowerShell'de:

powershell
Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/azure.ps1?t=<token>" -OutFile "$env:TEMP\sf-azure.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\sf-azure.ps1"
  1. OK: ... satırını görünce bitti.

Elle kurulum

  1. Azure'a giriş yapın.
bash
az login
  1. Monitoring Reader ile service principal oluşturun.
bash
az ad sp create-for-rbac --name spitfire-monitor --role "Monitoring Reader" --scopes /subscriptions/<subscription-id> --query "{tenant:tenant,appId:appId,password:password}" -o table
  1. Diğer her subscription'ı ekleyin.
bash
az role assignment create --assignee <appId> --role "Monitoring Reader" --scope /subscriptions/<subscription-id-2>
  1. Altyapı izleme → Azure Monitor'da ekleyin.
text
Tenant ID: tenant · Client (uygulama) ID: appId · Client secret: password · Subscription ID'leri · Test → Kaydet
  1. Rolü kontrol edin.
bash
az role assignment list --assignee <appId> --all --query "[?roleDefinitionName=='Monitoring Reader'] | length(@)" -o tsv | grep -qv '^0
  

 && echo "OK: spitfire-monitor Monitoring Reader"

Google Cloud

Hızlı kurulum

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın. Soruları yanıtlayın.
bash
curl -fsSL "https://<spitfire>/api/v1/setup/ds/gcp.sh?t=<token>" -o /tmp/sf-gcp.sh && bash /tmp/sf-gcp.sh
  1. OK: ... satırını görünce bitti.

Elle kurulum

  1. Cloud Monitoring API'sini açın.
bash
gcloud services enable monitoring.googleapis.com --project=<project-id>
  1. Service account'u oluşturun.
bash
gcloud iam service-accounts create spitfire-monitor --project=<project-id> --display-name="Spitfire monitor"
  1. monitoring.viewer verin (her project).
bash
gcloud projects add-iam-policy-binding <project-id> --member="serviceAccount:spitfire-monitor@<project-id>.iam.gserviceaccount.com" --role="roles/monitoring.viewer" --condition=None
  1. Key'ini oluşturun.
bash
gcloud iam service-accounts keys create "$HOME/spitfire-monitor-key.json" --iam-account=spitfire-monitor@<project-id>.iam.gserviceaccount.com && cat "$HOME/spitfire-monitor-key.json"
  1. Altyapı izleme → Google Cloud Monitoring'de ekleyin.
text
Project ID'leri · Service account key'i (JSON): yukarıdaki JSON'un tamamı · Test → Kaydet
  1. Key dosyasını silin.
bash
rm "$HOME/spitfire-monitor-key.json"
  1. Rolü kontrol edin.
bash
gcloud projects get-iam-policy <project-id> --flatten="bindings[].members" --filter="bindings.members:spitfire-monitor@" --format="value(bindings.role)" | grep -q monitoring.viewer && echo "OK: spitfire-monitor monitoring.viewer"

VMware vCenter

Hızlı kurulum

  1. Komutu kopyalayın, terminale yapıştırıp çalıştırın. Soruları yanıtlayın.
bash
curl -fsSL "https://<spitfire>/api/v1/setup/ds/vcenter.sh?t=<token>" -o /tmp/sf-vcenter.sh && bash /tmp/sf-vcenter.sh

Windows'ta PowerShell'de (PowerCLI):

powershell
Invoke-WebRequest "https://<spitfire>/api/v1/setup/ds/vcenter.ps1?t=<token>" -OutFile "$env:TEMP\sf-vcenter.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\sf-vcenter.ps1"
  1. OK: ... satırını görünce bitti.

Elle kurulum (govc)

  1. govc'yi administrator olarak bağlayın.
bash
export GOVC_URL='https://vcenter.corp' GOVC_USERNAME='administrator@vsphere.local' GOVC_PASSWORD='<admin-password>' GOVC_INSECURE=1
  1. SSO kullanıcısını oluşturun.
bash
govc sso.user.create -p '<password>' spitfire-monitor
  1. Kökte ReadOnly verin, alt nesnelere yayılsın.
bash
govc permissions.set -principal spitfire-monitor@vsphere.local -role ReadOnly -propagate=true /
  1. Altyapı izleme → vCenter'da ekleyin.
text
vCenter URL: https://vcenter.corp · Kullanıcı: spitfire-monitor@vsphere.local · Parola · Test → Kaydet
  1. Yetkiyi kontrol edin.
bash
govc permissions.ls / | grep spitfire-monitor | grep -q ReadOnly && echo "OK: spitfire-monitor ReadOnly"

Elle kurulum (PowerCLI, Windows)

  1. PowerCLI'ı kurun.
powershell
Install-Module VMware.PowerCLI, VMware.vSphere.SsoAdmin -Scope CurrentUser
  1. SSO kullanıcısını oluşturun.
powershell
Connect-SsoAdminServer -Server vcenter.corp -User administrator@vsphere.local -Password '<admin-password>' -SkipCertificateCheck; New-SsoPersonUser -UserName spitfire-monitor -Password '<password>'
  1. Kökte ReadOnly verin, alt nesnelere yayılsın.
powershell
Connect-VIServer -Server vcenter.corp -User administrator@vsphere.local -Password '<admin-password>'; New-VIPermission -Entity (Get-Folder -NoRecursion) -Principal 'VSPHERE.LOCAL\spitfire-monitor' -Role (Get-VIRole -Name ReadOnly) -Propagate:$true
  1. Altyapı izleme → vCenter'da ekleyin.
text
vCenter URL: https://vcenter.corp · Kullanıcı: spitfire-monitor@vsphere.local · Parola · Test → Kaydet
  1. Yetkiyi kontrol edin.
powershell
if (Get-VIPermission -Principal 'VSPHERE.LOCAL\spitfire-monitor' | Where-Object { $_.Role -eq 'ReadOnly' -and $_.Propagate }) { 'OK: spitfire-monitor ReadOnly' }

Kubernetes

Metrikler cluster'ın içinden toplanır: Spitfire'ın verdiği manifest her node'a bir Collector (DaemonSet, kubelet_stats) ve cluster'ın durumu için bir Collector (Deployment, k8s_cluster) kurar; Collector'lar Tower'a gönderir. Node'lar host sayılır. Ön koşullar, cluster'ın içinde Tower, doğrulama ve sık hatalar: Kubernetes'i bağlamak.

Hızlı kurulum

  1. Komutu kubectl erişimi olan bir terminalde çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/kubernetes.sh?t=<token>" -o /tmp/sf-kubernetes.sh && bash /tmp/sf-kubernetes.sh
  2. Bu satırı görünce bitti.

    text
    OK: Kubernetes Spitfire'a eklendi, ilk metrikler ~2 dk içinde
Not

Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. Betik kubectl context'ini, cluster adını, Tower adresini ve sfcol_ Collector token'ını sorar; secret'ı ve manifest'i uygular, rollout'u bekler.

Manuel kurulum

  1. Altyapı izleme → Kaynak ekle → Kubernetes → Manuel kurulum.

  2. Cluster adı (ör. prod-eu) ve Tower adresi (Tower cluster içindeyse ör. http://spitfire-tower.spitfire.svc:4318) girin.

  3. Kaydet.

  4. Secret komutunu Kopyala ile kopyalayıp cluster'a erişen bir terminalde çalıştırın. sfcol_ token'ı Tower eklerken gösterilen Collector token'ıdır.

  5. Manifest komutunu Kopyala ile kopyalayıp aynı terminalde çalıştırın. Tek komuttur: kubectl manifest'i komutun içinden okur, dosya kaydetmeniz gerekmez. Biçimi:

    bash
    kubectl apply -f - <<'EOF'
    # ... Spitfire'ın verdiği manifest ...
    EOF
  6. Rollout bitene kadar bekleyin:

    bash
    kubectl -n spitfire rollout status daemonset/spitfire-collector-node --timeout=120s
  7. Test et: sonuç "Cluster içinden toplanıyor" ise bekleyin; ilk veri 1-2 dakikada gelir.

Başarı kontrolü: collector pod'u burada Running görünür:

bash
kubectl -n spitfire get pods

Cluster görünümü

  1. Altyapı izleme → Kubernetes kaynağının satırında Dashboard.
  2. Cluster görünümü bölümünde node, namespace ve pod sayılarına, CPU ve bellek kutularına bakın. Altındaki üç kutu sorunları özetler: Hazır olmayan iş yükleri (hazır/istenen pod), Çalışmayan pod'lar (phase) ve En çok yeniden başlayan pod'lar; bir ada tıklayınca o seviye açılır.
  3. Namespace listesinden bir namespace seçin.
  4. Workload'lar tablosunda bir Deployment, DaemonSet ya da StatefulSet adına tıklayın.
  5. Pod'lar tablosunda bir pod'un okuna tıklayıp container'ları açın; bir container adına tıklayın.
  6. Bir bulgunun adına tıklayın: görünüm bulgunun pod'una, workload'una ya da node'una gider.

Başarı kontrolü: grafikler seçtiğiniz seviyenin CPU, bellek, dosya sistemi ve ağını gösterir; limiti olan container'larda CPU ve bellek grafiğinde lim çizgisi vardır.

Bulgular:

Bulgu Ne zaman
OOMKilled Container'ın son bitişi OOMKilled ve pencerede yeniden başladı ya da hazır değil
CPU limite yakın Container CPU kullanımı limitin %90'ı ya da üstü (throttle)
Bellek limite yakın Container working set'i limitin %90'ından fazla
DaemonSet eksik pod 5 dakikadır ready_nodes < desired_scheduled_nodes
StatefulSet / Deployment tam değil 5 dakikadır hazır/available pod < istenen
MemoryPressure / DiskPressure Node'un koşulu True
Not

Pod'un workload'u adından bulunur (Deployment pod'u <ad>-<hash>-<id>, DaemonSet ve Job pod'u <ad>-<id>, StatefulSet pod'u <ad>-<sıra>); ek RBAC ya da processor gerekmez. Değerler son 3 dakikanındır. Her pod node başına ~10, cluster'da ~7 seri üretir; noktası kalmayan seriler günde bir silinir, böylece biten pod'lar seri sınırından düşer. Container'ın son bitiş nedenini görmek için kaynağın penceresindeki manifest komutunu yeniden Kopyala ile kopyalayıp çalıştırın.

Ayrıntıya inmek: sayılar, pod'lar ve yeniden başlamalar

1.4.8'den beri cluster görünümünün özet sayıları listeleri açar, listenin satırı ayrıntısını açar, yeniden başlayan pod ya da container nedenini söyler. Aynı görünüm APM → Kubernetes'te ve Kubernetes kaynağının dashboard'unda vardır.

  1. Spitfire'ı 1.4.8'e güncelledikten sonra Collector manifest'lerini bir kez yeniden uygulayın (yeniden başlama nedeni yeni bir Collector ayarından gelir): Altyapı izleme → Kubernetes kaynağı → Manuel kurulum sekmesi → manifest komutunu Kopyala ile kopyalayıp kubectl erişimi olan bir terminalde çalıştırın. Sonra rollout'u bekleyin:

    bash
    kubectl -n spitfire rollout status daemonset/spitfire-collector-node --timeout=120s
  2. Panellerde Kubernetes event'lerini görmek için Kubernetes log toplayıcısını Kubernetes event'leri de işaretli kurun: Gözlemlenebilirlik → Log toplayıcılar → Kubernetes → Kubernetes event'leri de (k8sobjects) işaretleyin → Yapılandırmayı oluştur, sonra komutlarını çalıştırın (Log toplama: Kubernetes). Bu olmadan paneller çalışır, yalnız event listesi boş kalır.

  3. APM → Kubernetes'i (ya da kaynağın satırında Dashboard'u) açıp bir özet sayıya tıklayın, ör. Çalışmayan pod: o sayının listesi açılır. Bir satıra tıklayınca ayrıntısı açılır; Kapat, tüm listeler geri götürür.

  4. Bir Deployment'a (ya da ReplicaSet'e) tıklayın: Çalışmayan pod'lar pod'larının ayakta olup olmadığını nedeniyle (CrashLoopBackOff, ImagePullBackOff, Pending/Unscheduled, başarısız readiness probe…) listeler; Restart olan pod ve container'lar yeniden başlayanları listeler.

  5. Neden rozeti olan bir pod'a ya da container'a tıklayın: Neden yeniden başladı? paneli Kubernetes'in verdiği nedeni (şimdiki ve son bitişteki) anlamı ve neye bakılacağıyla, son bir saatteki yeniden başlamaları nedene göre, son yeniden başlamadan önceki 5 dakikadaki belleği limitle birlikte (OOMKilled böyle görünür), yeniden başlamadan önceki logları ve pod'un Kubernetes event'lerini gösterir.

Başarı kontrolü: bu iki komut Collector'ı ve (2. adımla) log toplayıcı pod'larını Running gösterir; yeniden başlayan bir pod 2 dakika içinde görünümde neden rozetiyle çıkar:

bash
kubectl -n spitfire get pods
bash
kubectl -n spitfire-logs get pods

Docker (Beta)

Collector, Docker host'unda bir container olarak çalışır ve Docker API'yi /var/run/docker.sock üzerinden okur (docker_stats: yalnızca çalışan container'ların list, inspect, stats ve events'i). Her Docker host'u host limitinde bir sunucu sayılır.

Not

Socket erişimi güçlüdür: Docker API'nin tamamı privileged bir container başlatabilir, bu da host'ta root demektir. :ro bağlama API'yi daraltmaz; yalnızca dosyanın değiştirilmesini engeller. Collector yalnızca okur, root olmayan bir kullanıcıyla socket'in grubuyla çalışır ve host'a başka erişimi yoktur. Kesin salt okunur için önüne yalnızca GET'e izin veren bir socket proxy'si koyup Docker API alanına tcp://proxy:2375 yazın.

  1. Altyapı izleme → Kaynak ekle → Docker.
  2. Docker host adı (ör. docker-1; tek sunucu sayılması için sunucu Collector'ının host adı) ve Tower adresi (ör. http://tower.corp:4318) girin.
  3. Kaydet.
  4. docker run komutunu Kopyala ile kopyalayın; <sfcol_…> yerine Tower'ın Collector token'ını yazın.
  5. Docker host'unda çalıştırın (Docker Desktop: --group-add değerini 0 yapın).
  6. Ya da Docker Compose 2.23 veya üstüyle ikinci bloğu Kopyala ile kopyalayıp onun yerine Docker host'unda çalıştırın.
  7. Collector'ın çalıştığını kontrol edin:
bash
docker logs --tail 20 spitfire-docker-collector
  1. Test et: sonuç metriklerin geldiğini söylüyorsa Docker kaynağının satırında Dashboard'u açın.

Container görünümü

  1. Altyapı izleme → Docker kaynağının satırında Dashboard.
  2. Container'lar içinde çalışan / toplam sayısını, CPU ve bellek kutucuklarını kontrol edin.
  3. Container adı alanına adın bir kısmını yazın ya da bir Image veya Compose projesi seçin.
  4. Bir container adına tıklayın: grafikler onun CPU, bellek (lim çizgisiyle), ağ ve blok I/O'sunu gösterir.
  5. Tüm host'un grafiğine dönmek için tüm container'lar'a tıklayın.

Başarı kontrolü: çalışan her container'ın CPU %, bellek ve limiti, ağ, blok I/O ve restart'larıyla bir satırı var; durdurduğunuz bir container 2-3 dakika içinde yok görünür.

Bulgular:

Bulgu Ne zaman
Yeniden başlıyor Docker'ın restart sayısı son 15 dakikada arttı
Bellek limite yakın Bellek limitin %90'ından fazla (limit yoksa host'un belleği)
CPU throttle 3 dakikada CPU periyotlarının %25'i veya fazlası throttle edildi (yalnızca CPU limiti varsa)
Durdu Host'un verisi gelirken container'ın verisi kesildi (çıktı, durduruldu ya da silindi)
Not

Docker yalnızca çalışan container'ları bildirir; bu yüzden duran container'ın çıkış kodu bilinmez: "Durdu" 0 ile çıkışı, sıfır olmayan çıkışı ve docker rm'i kapsar. CPU, docker stats'teki gibi bir çekirdeğin yüzdesidir. docker_stats receiver'ı Collector contrib v0.164.1'de alpha'dır.

MongoDB Atlas

Önce Atlas → Organization → Access Manager → API Keys → Create API Key → Organization Read Only ile bir API key oluşturun.

Hızlı kurulum

  1. Komutu herhangi bir makinede çalıştırın, soruları yanıtlayın.

    bash
    curl -fsSL "https://<spitfire>/api/v1/setup/ds/mongodbatlas.sh?t=<token>" -o /tmp/sf-mongodbatlas.sh && bash /tmp/sf-mongodbatlas.sh
  2. Bu satırı görünce bitti.

    text
    OK: MongoDB Atlas Spitfire'a eklendi, ilk metrikler ~5 dk içinde
Not

Ürün arayüzünde (Hızlı kurulum sekmesi) komut adresiniz ve yeni bir token ile hazır gelir; token 1 saat geçerlidir ve tek bir izlenen sistem ekler. Betik public ve private key'i sorar, Atlas Admin API'de (digest auth) dener ve kaynağı ekler.

Manuel kurulum

  1. Key'i deneyin.

    bash
    curl -fsS --digest -u '<public-key>:<private-key>' -H 'Accept: application/vnd.atlas.2023-01-01+json' https://cloud.mongodb.com/api/atlas/v2/orgs >/dev/null && echo 'OK: Atlas key çalışıyor'
  2. Altyapı izleme → MongoDB Atlas → Manuel kurulum ile ekleyin.

Başarı kontrolü

  1. Kubernetes: kubectl -n spitfire get pods içinde collector pod'u Running.
  2. Docker: docker ps --filter name=spitfire-docker-collector onu Up gösterir.
  3. Kaynaklar tablosunda Son veri dolu (bulut hesapları: bir aralık içinde, varsayılan 5 dakika, artı sağlayıcının bir dakikayı yayınlaması için 2 dakikaya kadar).
  4. Dashboard kullandığınız servislerin panellerini gösterir; bulgular dashboard'un altında çıkar.