Linux Script
Genel Bakış
Amacı Nedir?
Integration Flow veya Connector adımlarının uzak Linux sunucularında betik/komut tetiklemesini sağlar ve DevOps otomasyonunu merkezileştirir.
Tekil credential yönetimi ile bakım, dağıtım veya gözlem betiklerini tekrar kullanılabilir hale getirir ve manuel SSH bağımlılığını azaltır.
Proje bazlı izolasyon sayesinde aynı yapılandırmanın Development/Test/Production ortamlarında izlenebilir şekilde kullanılmasını sağlar.
Bağlantı etkin/pasif yönetimi ile planlı bakım sırasında tetiklenen görevleri güvenli biçimde durdurmaya imkân tanır.
Çalışma Prensibi
Integration Flow veya Connector içerisinden Linux Script bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur.
Worker düğümleri SSH oturumlarını talep bazlı açar; aynı kimlik bilgileri için kısa süreli hafif bir cache kullanılarak gereksiz oturum açma maliyeti düşürülür.
Kullanıcı adı/şifre tabanlı SSH Authentication mekanizmasıyla hedef Linux sunucusuna kimlik doğrulaması yapılır.
Betik gövdesi ve değişkenleri SSH kanalı üzerinden gönderilir, çıktı akışı JSON olarak Connector'a geri döner.
İşlem tamamlandıktan sonra bağlantı kapatılır ve worker üzerindeki geçici credential verileri hafızadan temizlenir.
Bağlantı hatası, timeout veya authentication hatası durumunda CustomParameterizedException ile detaylı hata kodu ve mesaj üretilir; loglar üzerinden kök neden izlenir.
Kullanım Alanları
Deployment öncesi/sonrası betiklerinin otomatik tetiklenmesi
Log dökümlerinin veya metrik toplanmasının periyodik olarak yapılması
Konfigürasyon drift kontrolü için sistem sağlık kontrollerinin yürütülmesi
Güvenlik yamaları veya paket güncellemelerinin sıralı olarak dağıtılması
Teknik Özellikler ve Yetenekler
Temel Özellikler
Parametrik bash script'leri uzak Linux sunucusunda etkileşim gerektirmeden çalıştırır.
Standard output ve error akışlarını Integration Flow adımlarına geri taşır; Connector değişkenleri ile paylaşır.
Her bağlantı bir projeyle etiketlenir, ADMIN_PROJECT_ID dışındaki projeler diğer projelerin kaynaklarını göremez.
Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
İleri Düzey Özellikler
Connector adımlarındaki global, önceki görev veya döngü değişkenleri script gövdesine yerleştirilebilir.
connector-linux-script bileşeni connection listesini gerçek zamanlı çeker ve yeni bağlantılar eklenir eklenmez kullanılabilir hale getirir.
ApinizerMessageService ile kayıt başarı/hata senaryoları UI ve log katmanında aynı anda izlenir.
"Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
Connection Parametreleri
Zorunlu Parametreler
Açıklama: Connection adı (benzersiz olmalı)
Örnek Değer: Production_LinuxScript
Notlar: Boşlukla başlamaz, özel karakterler kullanılmamalı
Açıklama: SSH ile erişilecek Linux sunucusunun tam etki alanı veya IP adresi
Örnek Değer: ops-runner-01.apmz.local
Notlar: DNS çözümlemesi yapılabilir olmalı, ilgili worker'dan erişilebilir olmalı
Açıklama: SSH servisine bağlanmak için kullanılan port
Örnek Değer: 22
Notlar: Varsayılan 22; güvenlik nedeniyle farklı port kullanılıyorsa Network/Firewall'da açılmalıdır
Açıklama: Uzak sunucudaki servis veya otomasyon kullanıcısı
Örnek Değer: deploysvc
Notlar: Yalnızca gerekli klasör/script izinlerine sahip kısıtlı kullanıcı olmalı
Açıklama: Kullanıcıya ait parola (şifrelenmiş saklanır)
Örnek Değer: (Şifrelenmiş değer)
Notlar: UI'de zorunlu; kayıttan önce test bağlantısında doğrulanır
İsteğe Bağlı Parametreler
Açıklama: Connection'ın amaç veya kapsam açıklaması
Varsayılan Değer: (Boş)
Önerilen Değer: Görev, sunucu ve risk bilgisi eklenmeli
Açıklama: Bağlantının Integration Worker'larına dağıtılıp dağıtılmayacağını belirler
Varsayılan Değer: true
Önerilen Değer: Sadece kullanılacağı worker havuzlarına dağıtılması önerilir
Açıklama: Development/Test/Production seçimi
Varsayılan Değer: Development
Önerilen Değer: Ortama uygun credential seçimi yapılmalı
Timeout ve Connection Pool Parametreleri
Açıklama: Bağlantı kurulması için maksimum bekleme süresi
Varsayılan: 5000 ms
Min: 1000 ms | Max: 30000 ms
Açıklama: İstek yanıtı için maksimum bekleme süresi
Varsayılan: 60000 ms
Min: 5000 ms | Max: 180000 ms
Açıklama: Connection pool'daki maksimum bağlantı sayısı
Varsayılan: 5
Min: 1 | Max: 20
Açıklama: Uzun işlemlerde oturumu açık tutmak için gönderilen keep-alive aralığı
Varsayılan: 30000 ms
Min: 5000 ms | Max: 60000 ms
Kullanım Senaryoları
Durum: Rolling Deployment tamamlandıktan sonra servisleri yeniden başlatma ihtiyacı
Çözüm: Host name olarak servis düğümünü, script olarak systemctl restart komutlarını tanımla, SSH Port 22
Beklenen Sonuç: Betik başarıyla çalışır, servisler sırasıyla yeniden başlatılır
Durum: Günlük logları sıkıştırıp FTP'ye atma
Çözüm: Script içinde tar ve scp komutları kullanılır, kullanıcıya ilgili klasör izni verilir
Beklenen Sonuç: Loglar toplanır, transfer tamamlandı ğında Connector çıktısında dosya yolu döner
Durum: Patch seviyesini belirli aralıklarla raporlama
Çözüm: Scheduled Job'da bu connection seçilir, script yum check-update çıktısını döner
Beklenen Sonuç: Rapor Integration Flow üzerinden SIEM'e aktarılır
Durum: /etc altındaki kritik dosyaların checksum takibi
Çözüm: Script sha256sum çıktısını üretir, sonuç JSON olarak işlenir
Beklenen Sonuç: Drift tespit edilen dosyalar uyarı loguna düşer
Durum: DR senaryosunda failover öncesi altyapı doğrulaması
Çözüm: Host cluster'ları için ayrı connection kopyaları oluşturulur, her biri health-check.sh çalıştırır
Beklenen Sonuç: Başarılı sonuçta DR koşulları onaylanır, hata halinde süreç durdurulur
Durum: CPU/RAM artışı durumunda otomatik müdahale
Çözüm: Script top çıktısını analiz edip servisleri yeniden başlatır
Beklenen Sonuç: Eşik aşıldığında otomatik düzeltme yapılır, connector logu ayrıntı içerir
Connection Yapılandırma
Yeni Linux Script Oluşturma
Yapılandırma Adımları
- Sol menüden Connection → Linux Script bölümüne gidin.
- Sağ üstteki [+ Create] butonuna tıklayın.
Enable Status (Aktif Durumu):
- Toggle ile aktif/pasif durumu ayarlayın. Yeni connection'lar varsayılan olarak aktiftir.
Name (İsim) - Zorunlu:
- Örnek:
Production_LinuxScript - Benzersiz isim girin, boşlukla başlamaz.
- Sistem otomatik kontrol eder. Yeşil tik: kullanılabilir. Kırmızı çarpı: mevcut isim.
Description (Açıklama):
- Örnek: "Prod node restart betikleri"
- Maks. 1000 karakter.
- Connection'ın amacını açıklayın.
Sayfanın üst kısmındaki işlem butonları alanında, [<> Variable] butonunu kullanarak dinamik değer seçebilir, Global variable ifadeleri sayesinde connection parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz. Detaylı bilgi için Dinamik Değişkenler sayfasını inceleyebilirsiniz.
- Dropdown menüden ortam seçin: Development, Test, veya Production.
- Her ortam için farklı connection parametreleri tanımlanabilir.
- Host Name: Betiğin çalışacağı Linux sunucusunu tam etki alanı (FQDN) veya IP ile girin.
- SSH Port: Varsayılan 22'dir; güvenlik politikası farklıysa yeni portu yazın ve firewall'da açıldığından emin olun.
- Host erişimi worker'dan test edilmelidir; erişilemeyen sunucular kayıt sırasında hata verir.
- Username: Sadece gerekli dizin/script izinlerine sahip servis kullanıcısı kullanın.
- Password: Şifre alanı kaydetmeden önce test edilir ve veritabanında şifrelenerek saklanır.
- Kullanıcıya hedef scriptler üzerinde yürütme (execute) izni verildiğinden emin olun.
- Connection timeout, request timeout ve pool size değerlerini workload'a göre ayarlayın.
- Uzun süren komutlar için keep-alive aralığını düşürerek SSH oturumunun kapanmasını engelleyin.
- Kimlik bilgilerini secret manager veya environment variable üzerinden doldurun.
- SSL/TLS tünellemesi gerekiyorsa bastion host üzerinden port yönlendirmesi yapılandırın.
- Root hesap kullanmayın; sadece gerekli yetkiye sahip servis kullanıcısı tanımlayın.
- [Test Connection] butonuna tıklayın.
- Bağlantı parametrelerinin doğru olup olmadığını test edin.
- Başarılı: Yeşil onay mesajı
- Başarısız: Hata detayları gösterilir
- Sağ üstteki [Save and Deploy] butonuna tıklayın.
Kontrol Listesi:
- Benzersiz isim
- Zorunlu alanlar dolu
- Test connection başarılı (önerilir)
Sonuç:
- Connection listeye eklenir
- Integration Flow ve Connector adımlarında kullanılabilir hale gelir
- Ortama göre aktif olur
Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
Connection'ı Silme
Connection'ı silmek için:
- Connection listesinde satır sonundaki ⋮ menüsünden Delete seçeneğini tıklayın.
- Onay dialogunda silme işlemini onaylayın.
Silmeden Önce Kontrol Edin:
- Integration Flow veya Connector adımlarında kullanılıyor olabilir.
- Gerekirse alternatif bir connection atayın.
- Silmeden önce Export ile yedek alın.
- Silmek yerine connection'ın aktif durumunu pasif hale getirin.
- Connection pasif olur ancak silinmez.
- Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
Connection'ı Dışa/İçe Aktarma
Bu adımda kullanıcı, mevcut connection'ları yedekleme, farklı ortamlara taşıma veya paylaşma amacıyla dışa aktarabilir (export) ya da daha önce dışa aktarılmış bir connection'ı tekrar içe aktarabilir (import). Bu işlem, sürüm yönetimi, test ve üretim ortamları arasında geçiş veya ekipler arası paylaşım süreçlerinde veri bütünlüğünü korumak için kullanılır.
Dışa Aktarma (Export)
- Connection listesinde satır sonundaki ⋮ menüsünden Export seçeneğini tıklayın.
- ZIP dosyası otomatik olarak indirilir.
Format: {Date}-linux-integration-{ConnectionName}-export.zip
Örnek: 13 Nov 2025-linux-integration-Production_LinuxScript-export.zip
- Connection JSON dosyası
- Metadata bilgileri
- Bağımlılık bilgileri (örneğin sertifikalar, key store)
- Yedekleme
- Ortamlar arası taşıma (Test → Prod)
- Versiyonlama
- Ekip veya proje bazlı paylaşım
İçe Aktarma (Import)
- Ana listede [Import Linux Script] butonuna tıklayın.
- İndirilen ZIP dosyasını seçin.
- Sistem kontrolleri: Format geçerli mi? İsim çakışması var mı? Bağımlılıklar mevcut mu?
- Ardından [Import] butonuna tıklayın.
Senaryo 1: İsim Çakışması → Eski connection'ın üzerine yazın veya yeni bir isimle oluşturun.
Senaryo 2: Eksik Bağımlılıklar → Eksik sertifikaları veya key store'ları önce oluşturun veya import sırasında çıkarın.
Connection'ın Kullanım Alanları
Adımlar:
- Connection'ı oluşturun
- Test Connection ile bağlantıyı doğrulayın
- Save and Deploy ile kaydedin ve etkinleştirin
- Connection'ın Enabled durumda olduğundan emin olun.
SSH üzerinden Linux sunucularında komut ve betik çalıştırma gerektiren adımlarda connection seçilir. Örnek: "Execute Linux Script", "Pre-Deployment Hook", "Health Check", "Remote Command" gibi adımlar. Bağlantı seçimi bu adımların yapılandırmasında yer alan Connection alanından yapılır.
Zamanlanmış görevlerde (ör. belirli aralıklarla log arşivleme, kaynak kullanımı ölçümleri, sistem sağlık kontrolleri vb.) bağlantı seçilerek uzak Linux sunucularında komut çalıştırılır. Connection değiştiğinde, job çalışma davranışı da buna göre güncellenir.
Connection Test özelliği ile bağlantının doğruluğu Integration Flow'dan bağımsız olarak kontrol edilebilir. Bu test hata ayıklama sürecinde kritik önem taşır.
Best Practices
Yapılması Gerekenler ve En İyi Uygulamalar
Kötü: Root hesabını tüm betikler için paylaşmak
İyi: Her ekip için ayrı servis kullanıcısı oluşturmak
En İyi: Asgari yetki prensibine göre sudoers dosyasında yalnızca gerekli komutlara izin vermek
Kötü: Güncel scriptleri manuel tutmak
İyi: Script içeriğini VCS'de saklamak ve Connector'a kopyalamak
En İyi: Scripti pipeline sırasında otomatik olarak güncelleyen IaC süreçleri kullanmak
Kötü: Uzun çıktıları log'lara doğrudan yazmak
İyi: Kritik satırları filtrelemek
En İyi: Çıktıyı JSON formatında standartlaştırıp Integration Flow içindeki sonraki adımlara parametre olarak geçirmek
Kötü: Aynı anda onlarca uzun süreli script tetiklemek
İyi: Erişimi zamanlanmış job'larla yaymak
En İyi: Pool size ve keep-alive değerlerini trafiğe göre sürekli izleyip ayarlamak
Kötü: Tüm ortamlarda aynı connection parametrelerini kullanmak
İyi: Her ortam için ayrı connection oluşturmak
En İyi: Environment seçeneğini kullanarak tek connection'da tüm ortamları yönetmek, ortamlar arası geçişte sadece environment değiştirmek
Kötü: Connection'ı test etmeden kaydetmek ve deploy etmek
İyi: Kaydetmeden önce Test Connection ile doğrulamak
En İyi: Her parametre değişikliğinden sonra test etmek, production'a geçmeden önce test ortamında tam entegrasyon testi yapmak
Güvenlik En İyi Uygulamaları
Şifreleri periyodik olarak yenileyin, rotation planı sırasında yeni connection oluşturup eskisini devre dışı bırakın
Production sunucularına erişimde doğrudan internete açık port bırakmak yerine bastion üzerinden tünelleme yapın ve IP whitelisting uygulayın
Kullanıcıya yalnızca izin verilen dizinlerde script çalıştırma hakkı verin, sudo gereksinimini sudoers dosyasında komut bazlı kısıtlayın
Kullanıcı adı ve şifre gibi hassas bilgileri environment variable veya secret manager kullanarak saklayın. Kimlik bilgilerini kod veya konfigürasyon dosyalarına hardcode etmeyin. Periyodik olarak şifreleri güncelleyin
Production ortamında mutlaka SSL/TLS aktif edin. Self-signed sertifikalar sadece development ortamında kullanın. Sertifika expiration tarihlerini takip edin ve zamanında yenileyin
Connection yapılandırmasını sadece yetkili kullanıcıların değiştirmesine izin verin. Connection değişiklik loglarını saklayın. Kritik connection'lar için değişiklik approval süreci uygulayın
Kaçınılması Gerekenler
Neden kaçınılmalı: Tek hata tüm sunucuları etkiler, denetlenemez
Alternatif: Roller bazlı servis kullanıcılar tanımlayın
Neden kaçınılmalı: SSH portu kapalıysa betikler başarısız olur
Alternatif: Network ekibinden host/port için açılış onayı alın ve izleme kurun
Neden kaçınılmalı: Yanlış başarı mesajları süreçleri yanıltır
Alternatif: Çıktıyı parse edip Integration Flow içinde koşullu adımlar ekleyin
Neden kaçınılmalı: Test verileri production sistemine yazılabilir, gerçek kullanıcılar etkilenebilir, güvenlik riski oluşur
Alternatif: Her ortam için ayrı connection oluşturun, environment parametresini kullanın, connection isimlerini ortama göre prefix ekleyerek ayırın (Test_, Prod_)
Neden kaçınılmalı: Ağ gecikmelerinde connection sürekli timeout olur, Entegrasyon adımları başarısız olur
Alternatif: Gerçek kullanım senaryolarına göre timeout değerlerini ayarlayın, network latency'yi ölçün ve timeout'ları buna göre belirleyin
Neden kaçınılmalı: Her istekte yeni bağlantı açılır, performans düşer, kaynak tüketimi artar, hedef sistem yükü artar
Alternatif: Connection pool aktif edin, pool size'ı trafik hacmine göre ayarlayın, pool monitoring kurun
Performans İpuçları
Öneri: Connector çıktılarına süre metriği ekleyin, 95. persentil değerini izleyin
Etki: Uzayan betikler erken tespit edilir, ölçeklendirme yapılır
Öneri: Büyük çıktıları sıkıştırıp dosya olarak dönün, Integration Flow'da sadece özet gönderin
Etki: Payload küçülür, Gateway hafızası optimize edilir
Öneri: Aynı host'a yönelik iş yüklerini dağıtın, Cron zarflarıyla sıralı çalıştırın
Etki: Sunucu kaynakları dengeli kullanılır, SSH kuyrukları oluşmaz
Öneri: Pool size'ı peak trafiğe göre ayarlayın (önerilen: eşzamanlı istek sayısı × 1.5), idle connection timeout'ları belirleyin, pool health check yapın
Etki: Bağlantı açma maliyeti %80 azalır, yanıt süreleri düşer, kaynak kullanımı optimize edilir
Öneri: Gerçek network latency'yi ölçün, timeout değerlerini buna göre ayarlayın, çok düşük veya çok yüksek timeout'lardan kaçının
Etki: Gereksiz beklemeler önlenir, hızlı fail-over sağlanır, kullanıcı deneyimi iyileşir
Öneri: Connection pool kullanımını izleyin, timeout oranlarını takip edin, connection health check yapın, alerting kurun
Etki: Sorunlar proaktif tespit edilir, performans darboğazları erken belirlenir, kesinti süresi azalır
Sorun Giderme (Troubleshooting)
Betik Çalışıyor Ancak Çıktı Boş
Script stdout yerine dosyaya yazıyor, JSON format hatalı veya output key doğrulaması başarısız olabilir.
Scripti stdout'a yazacak şekilde güncelleyin.
JSON çıktısını jq ile doğrulayın.
Connector output key ayarını kontrol edin.
SSH Yetki Hatası
Kullanıcının hedef dizine erişimi yok, sudo gereksinimi karşılanmamış veya anahtar parmak izi doğrulanmamış olabilir.
Kullanıcının izinlerini kontrol edin.
sudoers dosyasına komut bazlı izin ekleyin.
Host fingerprint'ini worker'a ekleyin.
Connection Timeout
Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
Network connectivity kontrol edin.
Hedef sistem sağlığını kontrol edin.
Timeout değerlerini artırın.
Connection loglarını inceleyin.
Authentication Failed
Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
Kimlik bilgilerini doğrulayın.
Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
Gerekli yetkilerin verildiğini kontrol edin.
SSL/TLS sertifikalarını kontrol edin.
Pool Exhausted
Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
Pool size'ı artırın.
Connection'ların düzgün kapatıldığını kontrol edin.
Idle connection timeout'ları ayarlayın.
Connection kullanım metriklerini izleyin.
Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor
Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
Connection'ı tekrar deploy edin.
Integration Flow veya Job'ı redeploy edin.
Gateway loglarını kontrol edin.
Sık Sorulan Sorular (SSS)
Aynı Linux Script bağlantısını farklı projeler paylaşabilir mi?
Hayır, her connection belirli bir projeye aittir; paylaşım gerekiyorsa export/import veya move-to-global işlemi uygulanmalıdır.
Betik başarısız olduğunda otomatik tekrar deneme yapılır mı?
Hayır, connector tek çalıştırmayı gerçekleştirir. Yeniden deneme gerekiyorsa Integration Flow içinde Retry adımı konfigüre edilmelidir.
Şifreler nasıl saklanıyor?
UI üzerinden girilen parolalar kaydedilirken şifrelenir, worker tarafında UtilCommon.decryptWithDefaultAlgorithm ile sadece çalışma anında çözülür.
Test Connection hangi komutu çalıştırıyor?
Kayıt sırasında UtilRemoteLinux.runLinuxCommand üzerinden ls komutu tetiklenir; böylece SSH ve yetki doğrulaması yapılır.
Script çıktısını başka adımlarda nasıl kullanırım?
Connector'dan dönen output key'leri Integration Flow içindeki sonraki adımlarda değişken olarak seçebilirsiniz; JSON path ayarlarıyla sadece gerekli alanları alın.
Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?
Evet, aynı connection birden fazla Integration Flow veya Connector adımında kullanılabilir. Bu merkezi yönetim sağlar ve konfigürasyon tutarlılığını garanti eder. Ancak connection'da yapılan değişiklikler tüm kullanım yerlerini etkileyeceği için dikkatli olunmalıdır.
Connection pool kullanmak zorunlu mudur?
Connection pool kullanımı zorunlu değildir ancak yüksek trafikli sistemlerde şiddetle önerilir. Her istekte yeni bağlantı açmak yerine mevcut bağlantıları yeniden kullanmak performansı önemli ölçüde artırır.
Test ve Production için farklı connection'lar mı oluşturmalıyım?
Evet, her ortam için ayrı connection oluşturmanız önerilir. Alternatif olarak environment parametresini kullanarak tek connection içinde tüm ortamları yönetebilirsiniz. Bu yaklaşım daha kolay yönetim ve daha az hata riski sağlar.
Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?
Birkaç neden olabilir:
- Connection enable toggle'ı pasif olabilir
- Integration adımında farklı bir connection seçili olabilir
- Connection deploy edilmemiş olabilir
- Integration Flow henüz redeploy edilmemiş olabilir