Opserver Monitoring

İbrahim ÖZGÖN
Arabam Labs
Published in
6 min readApr 27, 2018

Merhabalar,

Bu yazımda Stackexchange ekibinin geliştirip açık kaynak olarak sunduğu Opserver(Stack Exchange’s Monitoring System)’dan bahsetmeye çalışacağım.

Herşey bir pazartesi akşamı twitter’da gezinirken başladı :) Stackoverflow ekibinde çalışan Nick Craver bir twitini okudum. Nedir bu Opserver derken telefondan araştırmaya başladım, sonra birden bilgisayarda buldum kendimi.

Nedir

Opserver bir asp.net MVC uygulaması. Stackexchange ekibi tarafından kendi sunucu ve uygulamalarını takip etmek için yazılmış. Güzel tarafı ise sadece serverların ram, cpu, disk, network takibi yanında kullanılan araçların detaylı izlenmesi de sağlanabiliyor. Ben yazıyı yazarken destek verdiği araçlar alttaki gibi:

Kurulum

Opserver ı kurmak çok basit. Git üzerinden lokal bilgisayara clone alınabilir veya zip olarak download edilebilir. Visual studio yardımıyla Opserver.sln açılır. Bu işlemi ben Visual Studio 2017 ile yaptım. Lokal pc yerine bir server’da host etmek istenecektir. Tek yapmanız gereken publish alarak IIS üzerinde host etmeniz. Buralara orta seviye her .net developer’ın hakim olduğunu düşünerek geçiyorum.

Ayarlar

Opserver bu kısmı Config klasörü altında tuttuğu json dosyaları ile halletmiş. Tüm entegrasyonları için örnek bir konfigürasyon dosyası var. Örnekler üzerinden düzenleme yaptıktan sonra example ibarelerini silmemiz gerekli. Bu ayarlar hızlıca ve sadece açıklamaları okuyarak yapılabiliyor!

Configuration files go here!Example files are provided, these are close to the Stack Overflow production configs and serve as a reference. All JSON config files (not just the examples) support comments for easy editing, testing, etc.

Panel Ayarı (Dashboard Settings)

Arabam Dashboard

Bu ekran uygulamayı ilk açtığımızda karşımıza çıkacak ekran, takip ettiğimiz tüm sunucuları ekleyebileceğimiz kısım.

Sunucu takibi için 3 farklı seçenek sunuluyor. WMI, Orion ve Bosun.

Şimdilik ben sadece windows sunucularımızı panele ekledim. Örneğini altta veriyorum.

“wmi”: {
“nodes”: [
“arbweb”,
“arbelastic”,
“arbcache”,
“arbimg”
],
“historyHours”: 48 // (Optional) How long to retain data (in memory) — defaults to 24 hours
}

HistoryHours izlenen server’ın ne kadar sürelik datasının uygulama üzerinde tutulacağını gösteriyor. Bu değer normalde 24 saat, ben 48 saate çıkardım.

Kategorilendirme imkanımız da var. Bunu yapmak için alttaki şekilde her kategori için bir pattern belirlememiz gerekli. Birden fazla pattern | ile ayılarak verilebiliyor. Her kategori için farklı uyarı ve hata seviyeleri belirleme imkanımız da oluyor böylece. Yani bir sunucu için %98 ram kullanımı uyarı iken diğer bir sunucuda bu değer hata olarak gösterilebiliyor.

“categories”: [
{
“name”: “Database Servers”,
“pattern”: “sql”,
“cpuWarningPercent”: 20,
“cpuCriticalPercent”: 60,
“memoryWarningPercent”: 98,
“memoryCriticalPercent”: 99.2,
“primaryInterfacePattern”: “-TEAM$”
},
{
“name”: “Elastic Servers”,
“pattern”: “arbelastic”,
“cpuWarningPercent”: 25,
“cpuCriticalPercent”: 60,
“memoryWarningPercent”: 98,
“memoryCriticalPercent”: 99.2,
“primaryInterfacePattern”: “-TEAM$|-TEAM · Local”
},
{
“name”: “Web Servers”,
“pattern”: “arbweb”,
“cpuWarningPercent”: 25,
“memoryWarningPercent”: 75,
“primaryInterfacePattern”: “-TEAM$|-TEAM · Local”
}
]

Elasticsearch Ayarları (Elastic Settings)

Arabam Elasticsearch

Elasticsearch desteğinin öne çıkan yanı, sunucular veya indexler üzerindeki hata durumunda bildirim göstermesi. Örneğin ben ilk kurduğumda bazı indexlerimizde problem vardı ve indexler “yellow” durumdaydı.

Clusterların detayına girerek tüm detay bilgilere ulaşabiliyoruz. Yapılan search sayısından döküman adedine. Tüm node ların durumuna kadar. Ayrıca her index detayından shardların durumu ve diğer detaylar görülebiliyor.

Cluster

Elasticsearch için uzun zamandır bir monitoringimiz yoktu ne yazık ki. Elasticsearch bunun için güçlü bir api sunuyor ancak bunları arayüzden takip edebiliyor olmak çok daha güzel. Ayar kısmı çok basit. Sadece clusterlar girilip içerisine node olan sunucu isimleri ekleniyor.

“clusters”: [
{
“name”: “Live Elastic Servers”,
“refreshIntervalSeconds”: 120,
“nodes”: [
“arbelastic1”,
“arbelastic2”,

]
}
]

Redis Ayarları (Redis Settings)

Redis, severek kullandığımız nosql veritabanımız. Elasticsearch desteğine bakarak buradaki fonksiyonlar biraz daha az. Redis anasayfası master-slave sunucuları listeliyor. Her sunucunun içine girerek tüm anlık ve geçmiş bilgilere ulaşabiliyoruz. Şu ana kadar atılmış toplam istekler, toplam kurulan bağlantılar, saniyede kaç isteğe cevap verildiği ve dahası.

Arabam Redis

Clients sekmesinde şu an bağlantı kuran tüm clientları adetleri ile görebiliyoruz.

Slow Command Log’da ise tüm yavaş çalışan sorgular listeleniyor. Burası performans iyileştirmesi için iyi bir alan. Ne zaman çalışmış ve ne kadar sürmüş burada listeleniyor.

Redis ayarı da yine bizi yormuyor. Ben sadece 2 alanı kullanarak ayarı tamamladım.defaults ve servers.

“defaults”: {
“instances”: [
{
“name”: “Live Redis Servers”,
“port”: 6379
}
]
},
“Servers”: [
{
“name”: “arbcache1”
},
{
“name”: “arbcache2”
}
]

Sql Server Ayarları (Sql Settings)

Sql Server entegrasyonunu biz kullanmadık ancak incelediğim kadarıyla bahsedeceğim. Sql server için sunulan imkanlar takdire şayan. Always on desteği sunuluyor. Master ve sync durumdaki sunucular gösteriliyor. Sunucu detayları ise çok daha heyecanlı. Tüm performans, bellek ve disk kullanım detayları, cache’ler detaylı olarak gösteriliyor.

Sunucu bazlı tüm job’lar, veritabanına eklenen ufak stored-procedure’ler ile şu an çalışan sorgular ve sunucu üzerinde çalışmış query’lerin harcadığı zaman, ortalaması vs sunuluyor. Query içeriğinde execution planlar da cabası!

Job’lar son çalışma saatleri, başlama-bitiş ve geçen süreleri gösteriliyor. İsterseniz arayüzde sunulan tuşlara basarak job’ı çalıştırıp durdurabilir veya enable-disable edebilirsiniz.

Hata Ayarları (Exceptions Settings)

Hayat kolaylaştırıcı başka bir özellik ise exceptions kısmı. Stackexchange’in geliştirdiği Exceptional için destek sunulmuş. Açıkcası bu kısmı başta çok canımı sıktı :) Sonrasında oturup bize uygun olan kısmını geliştirdim, çok kısa bir sürede. Değdi mi diye soracak olursanız, evet değdi :)

Anasayfasında üstte kategorileyebilme imkanımız var. Bunu config dosyasından uygulama adına göre belirleyip yapıyoruz. Ben şimdilik 4 farklı gruba böldüm. Gruplara basılarak direkt o gruplar için arama yapılabiliyor. Ya da direkt bir app için arama yapabiliyorsunuz.

Arabam Exceptions

Ön izleme özelliği ile detaya girmeden göz atabiliyoruz. Hata detayında genel bilgiler veriliyor. Bunun yanında benim hoşuma giden iki kısım var. Sağ üstte view similar ile benzer hataları kolayca listeleyebiliyoruz!

Bonus: Jira bağlantısı

Eğer jira ayarları yapılırsa hata detayından tek tuş ile belirlenen board için bir task açılıyor. Çok kolay değil mi? Task alttaki gibi gözüküyor.

Ayar için gruplar şart değil ancak daha kolay filtre için tavsiye ediyorum. connectionstring ve tableName vererek baslayabiliyorsunuz.

“groups”: [{ “name”: “Web”, “applications”: [ “Web-1”,
“Web-2”
...
],
"stores": [
{ "name": "Arabam Live", "connectionString": "connectionString", "tableName": "[dbo].[Log]", "serviceTableName": "[dbo].[ServiceLog]", "isArabam": true }]

Jirayı bağlamak için Proje urlleri girildikten sonra bir kullanıcınızın kullanıcı adı şifresini girmeniz isteniyor. alttaki applications kısmı ise log’un geldiği applicationName. Yani web’den gelen hata kaydını açmaya izin verirken, servisten gelen hataya task açılmasına izin verilmeyebiliyor.

“defaultUrl”: “http://yourserver/rest/api/latest",“host”: “http://yourserver",“defaultUsername”: “username”,“defaultPassword”: “password”,“defaultProjectKey”: “PRJ1”, “applications”: [“Optional”,“APP1”,“APP2”]

Güvenlik (Security Settings)

Opserver hali hazırda 3 farklı authentication seçeneğiyle geliyor. Ben “Active Directory “ seçtim. Siz internal network’de kullanacaksanız ve güvenlik sorun olmayacaksa alladmin seçebilirsiniz. Bu yöntemle herhangi bir kullanıcı adı-şifre kabul ediliyor.

  • Active Directory (“ad”)
  • “Everyone’s an admin” (“alladmin”)
  • “View All” (the default)

Bu ayarı SecuritySettings.config.example dosyasından example ibaresini silmemiz yetecektir.

Daha Neler olabilirdi?

Üstte de bahsettiğim gibi Opserver’ı çok beğendim. Şu an hayatımı kolaylaştırdı.

Bunun yanında aradığım bir kaç özelliği de ekleyebilirim. Belki bir gün geliştirmesine destek oluruz!

  • Recycle olduğunda sunucuların geçmiş bilgileri silinmemesi.
  • Elasticsearch sunucu log kayıtlarının okunabilmesi. Log durumunda uyarı gösterebilmesi.
  • Elasticsearch dashboard gibi monitor kaydı tutarak server down, shard fail, node disconnected vs gibi bilgilerin anlık değil, geçmişe dönük okunabilmesi.
  • Elasticsearch hazır komutlar, bu komutların çalıştırılabilmesi
  • Hata durumunda mail, notification gönderimi

Elimden geldiğince hevesle öğrenip kullandığım opserver’ı anlatmaya çalıştım. Umarım faydalı olmuştur. Bu noktaya kadar okuduğunuz için teşekkürler.

Arabam.com’u ziyaret etmeyi unutmayın :)

Referanslar

--

--