Trendyol Tech
Published in

Trendyol Tech

Couchbase Cluster Health Check Dashboard with PowerShell

Merhaba arkadaşlar,
Bu yazımda bir ihtiyaçtan doğan bir yapıyı paylaşmak istiyorum sizlerle.

Ortamımızda nosql veri için Couchbase kullanıyoruz. Cluster ve buna bağlı node sayımız çok fazla. Olası bir problemde tümünün ya da bazılarının cluster sağlığını kontrol etmemiz gerekebiliyor. Bunu tek tek yapmak çok zor ve hataya açık. Hele ki problem anlarındaki kaosta bu daha da zor olur.

Bu tarz durumlar için temel seviyede bir kontrole ihtiyacımız vardı. Bu kontrol bize makinelerin erişilebilir ve node ve cluster seviyelerinde sağlık durumlarını vermeliydi.
Basit, anlaşır bir tasarım olmalıydı. Herhangi bir bağımlılığı olmayan statik bir sayfa olmalıydı.

Sunucuların durumunu kontrol etmek için Couchbase’in kendi REST API endpointlerini kullandım. Couchbase api konusunda alternatiflerine göre kesinlikle çok iyi durumda. Bu endpointler ile Couchbase sunucularınızı yönetebilir, performans metriklerini takip edebilir ya da query çalıştırabilirsiniz.

Bu apilere istekleri yapmak ve bir HTML dashboard oluşturmak için de PowerShell kullandım. Bir DBA olarak Powershell’i çok fazla kullanırım. Sadece Windows adminlerin kullandığını düşünmeyin. Tüm platformlarda çok güçlü :)

Makalenin sonunda şöyle bir çıktımız olacak.

Kullandığım endpointler

Bu endpointlere istekleri PowerShell’in Invoke-RestMethod fonksiyonu ile yaptım. (Curl ile aynı işi yapıyor)

Kaynak kodunu GitHub sayfamda paylaştım. Bu kod ilgili endpointlere çağrı yaparak bir json üretiyor. Json tercih ettim çünkü çıktıyı ihtiyacıma göre kişiselleştirebilirim.
https://github.com/ahmetrende/PowerShell/blob/master/Get-CbServer.ps1

Couchbase apilerinden aldığım bilgiler:
- Server adresi
- Node’un sağlık durumu
- Node’un cluster seviyesindeki sağlık durumu
- Node üzerindeki servisler
- Clusterdaki bucket isimleri
- Cluster adı
- Exception detayı (varsa)

Bir Couchbase sunucusunun sağlıklı olduğuna karar vermek için node status ve clusterMembership metriklerine bakıyoruz. Tabii ki bunun yanında bir çok performans metriği var. Fakat temel seviyede bu iki metrik yeterli.
Node status healthy ve clusterMembership active ise o sunucu healthy kategorisine dahil olur.

Şimdi de bu kod ile HTML üretelim.

PSWriteHTML isminde benim çok sevdiğim bir PowerShell modülü var. Bu modül ile birlikte hiçbir HTML bilgisine ihtiyaç duymadan HTML sayfalar üretebilirsiniz.
Örneğin; oluşturacağımız HTML çıktısında PDF, Excel, CSV exportları alabilir, paging ya da arama yapabiliriz.

Get-CbServer fonksiyonunu çağırmak için ortamdaki tüm Couchbase sunucuların DNS veya IP adresi gerekiyor. Bunu bir liste halinde CSV’den okutabiliriz. (Ben Hyper-V’den dinamik olarak çekiyorum)

PowerShell 7 ile birlikte native olarak parallel foreach desteği geldi. Makalenin başında da söylediğim gibi çok azla sunucuda kontrol yapacağız. Bunu paralel yaparak çok daha kısa sürede sonuç elde edebiliriz.

Çıktıyı 3 ana kategoriye böldüm. Siz bunu kendinize göre kişiselleştirebilirsiniz.
1- Unhealthy Servers
2- Healthy Servers
3- Unauthorized Servers

Kod içine yorum satırı olarak yaptığı işleri yazdım fakat anlaşışmayan bir yer varsa lütfen sorun :)

Execute Get-CbServer.ps1

Bu kodu bir joba bağlayarak sayfayı sürekli güncel tutabilirsiniz. Sayfa otomatik refresh olsun diye -AutoRefresh 300 parametresi ile her 5 dakikada bir güncellenmesini sağladık. Böylece sunucuların durumlarını yansıttığınız büyük ekranlarınız varsa herhangi bir işlem yapmadan direkt kullanabilirsiniz.

Oluşturduğumuz HTML’de sadece unhealthy durumda olan sunucular açık bir şekilde gelecek. Healthy sunucular ilk aşamada gizli gelecek. Amacımız unhealthy durumda olan sunucuların ilk bakışta dikkat çekmesi.

Umarım faydalı bir yazı olmuştur. Anlaşılmayan bir kısım varsa lütfen sorun. Kodu kendi ortamınıza ve ihtiyaçlarınıza göre kişiselleştirerek daha etkin bir çıktı alabilirsiniz.
Teşekkür ederim okuduğunuz için :)

Ahmet Rende

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store