22 Temmuz 2020 Çarşamba

DebugDiag ile Dump Almak

Merhaba Arkadaşlar,

Daha önceki yazımda WER ile otomatik IIS Dump almasını paylaşmıştım. Şimdi ise DebugDiag toolu ile nasıl dumplar alabileceğimize bakacağız.

Öncelikle DebuDiag'ın msi dosyasını indirip kurulumunu yapmanız gerekiyor. (Windows server'lar için anlattığımdan direkt msi dedim)

Kurulumlar sonrası, DebugDiag Collection tool'unu açalım. Bu sayede örneğin crash ya da response time 'a göre dump alabiliriz. Diyelim ki uzun response time'ı olan bir webservice'niz var. Onu izlemek ve dump'ını almak istiyorsunuz. 

Toolu açınca şöyle bir ekran göreceksiniz:

Add Rule diyerek ilerliyoruz. Akabinde aşağıdaki ekranı görmeniz gerekiyor:

Performance'a tıklayıp, gelen ekrandan HTTP Response Times tıklanır:


Çıkan ekrandan Add URL deriz:


Yukarıda değindiğim webservice'nizi başına / koymadan, sonuna / koyarak burada yazıyorsunuz. Örneğin webserviceniz https://ml.googleapis.com/$discovery/rest?version=v1 olsun. Tamamen atıyorum; arama kısmına discovery/ yazıyorsunuz.
Webservice'nizin 30 sn ve üstü sürelerdeki cevap anlarının dump'ını almak isteyelim.  Timeout after alanına kaç yazarsam, o kadar süre geçtikten sonra dump almaya başlar.

OK dedikten sonra, aşağıdaki ekran gelir; orada da next'e tıklanır.


Aşağıdaki ekran çıkacaktır. Bu ekrandan da  Add Dump Target butonuna tıklanır.

Çıkan ekrandan target type: web application pool deyip, hangi application pool'u seçersek, onun üstündeki uygulama servislerini izleyebiliriz. Uygulamalarımın listesi görüneceğinden, hepsini buzlamak da uzun iş, burayı yazılı olarak geçtim. :)

OK deyip, gelen ekranda Next dediğinizde, aşağıdaki ekrana geçmeniz lazım. İlk alanda şartı sağlar sağlamaz (yani 30saniyeyi geçtiği an servisimizin cevap verme süresi) 5 sn aralıklarla, 3 adet dump alacak demektir. Son seçimde de full mu mini mi onu seçiyorsunuz. 


Çıkan ekrandan Next deyip, Activate dediğinizde alt ekranda kuralın adı ve path'i yazar.


Dump'ınız hazır. Bu tool ile istediğiniz parametreye göre, çok kolay bir şekilde dump alabilirsiniz.

Sonra görüşürüz.

21 Temmuz 2020 Salı

WER ile Otomatik IIS Dump Almak

Merhaba Arkadaşlar,

Windows Error Reporting (WER), bildiğiniz üzere, Microsoft'un bize sunduğu, uygulama hatalarını, crahslerini, cevap vermeyen işlemlerini, kernel hatalarını vs raporlayan bir feature'dır. Biz de IIS'imiz için DebugDiag vb tool'lar yerine, direkt olarak WER üzerinden otomatik dump aldırabiliriz(gerçi ben DebugDiag seviyorum; arayüzü çok basitleştiriyor=) ).

Öncelikle Regedit'e girilip, şuraya gidilir
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\
Burada LocalDumps adında bir key var mı kontrol edilir. Yoksa Windows Error Reporting'e sağ tıklayarak: New Key deyin ve adını LocalDumps verin.

Sonra LocalDumps'a da sağ tıklayıp, orada tekrar New key diyerek, w3wp.exe adında yeni bir key oluşturun. Artık w3wp.exe için otomatik dump almasını sağlayacak parametreleri girebilir durumdayız.


DumpFolder, DumpType, DumpCount adında 3 value yaratırız burada.

DumpFolder: Oluşacak olan dump dosyası nerede yaratılsın
DumpCount: Kaç adet dump alsın
DumpType: Ne tür bir dump alınsın(1:mini , 2: Full -- Bir de 0 var ama wer üstünden hiç denemedim, bilen arkadaşım dürtebilir; revize edebiliriz yazıyı)


Örneğimizde(üstteki görsel) F altında Dumps adında bir klasöre atıyoruz. 3 defa, full dump aldırıyoruz. Bu sayede crash anında, arıza telaşına düşmeden, arka planda birileri bizim için dump alabilir.


Burada oluşan dump'ı yine DebugDiag'a verip, raporunu inceleyebilirsiniz.


Sonra görüşürüz.

IIS Application Pool Identity

Merhaba Arkadaşlar,

IIS kullanan arkadaşlarımın malumu olacağı üzere, IIS'te güvenlik kontrolü baabında application pool identity diye bir feature var. Bu özellik, application pool'larınıza nevi şahsına münhasır bir kimlik kazandırır. Yani her application pool'unuz, bu application pool'un sağladığı kimlik(identity) üzerinden çalışmış olur. 

Elimdeki w3processlerimin hepsinde spesifik isimlendirme olmasından mütevellit, internetten yürüttüğüm yukarıdaki resimden de görüleceği üzere, bir w3wp process'imiz, yani IIS'in worker process'i, DefaultAppPool diye bir kimlik ile çalışmaktaymış, windows üzerinde. (Task Manager'ın ekran görüntüsüdür, yukarıdaki resim)

Şimdi IIS üzerindeki application pool'lar bu kimlik tiplerinin neler olduğuna ve farklarına bakalım.

Önce IIS'e giriyoruz ve herhangi bir application pool'a normal tıklıyoruz ve sağ panelden Advanced Settings'e tıklıyoruz.



Burada Process Model altındaki, Identity kısmında 3 nokta var, üstteki ekrandan da göreceğiniz üzere. Ona tıklıyoruz.

Gördüğünüz üzere 4 adet Identity tipi var burada. Bunlara değinelim şimdi.

Local System: Verilebilecek en sakat yetkidir. :) Server'ınızın C dizini altındaki Windows'u bile kilitleyebilir uzaktan çalıştırılabilir kodlarla. NW'e sisteme özetle her yere erişir. Çok büyük patlamışsınızdır, yetkiden şüphelenirken, deployment esnasında anlık verilebilir ama onun dışında kullanmamanız önerilir.

Network Service: Local System'in bir tık daha az yetkili hali gibi düşünebilirsiniz. NW'e çıkıp işlem yapma yetkisi vermiş olursun uygulamaya. ActiveDirectory'ne veyahut database'ine erişmeyi deneyebilirler. Hatta nw search işlemi bile yapılabilir. Bu da örneğin bir NFS ortak diskiniz vardır; erişim sorununuz olduğunu düşünüyorsunuzdur, yine identity kaynaklı. Onu test etmeniz için faydalı olacaktır. Ancak yine önerilmez.

Local Service: Network Service'in network'e çıkamayan versiyonudur. :) Tavsiye edilmez. NW'den şüphelenmediğiniz durumlarda, yine sorun tespitinde kullanın en fazla derim.

Application Pool Identity: Yukarıdakilere göre en masum yetkilendirmedir.  IIS'te siz bir app pool yarattığınızda, IIS de sizin için app ppol ile aynı isimde bir sanal account yaratır. O account ile app pool'u kullanırsınız. Bu user sadece bulunduğu ilgili server'da iş yapar. Örneğin aynı örneği vereyim; NFS'e gideyim; veyahut ortak makinalarımın ftp'sine bağlanayım derseniz, bu user ile sorun yaşarsınız. 
 
Peki hepsine bir kulp taktık. O zaman ne yapmak lazım. Çözüm çok sevimli: Custom Account.
Yani ActiveDirectory üzerinde bir user yaratırsınız. Bu user ile gerekli yetkileri, ihtiyaç duyduğu ölçüde kontrollü verirsiniz. Bu sayede kontrolünüz dışında security açığı ortaya çıkmamış olur.

Sonra görüşürüz.

20 Temmuz 2020 Pazartesi

Perfmon User Defined Collector Ekleme

Merhaba Arkadaşlar,

Yakında kayıt ekleyeceğim deyip de, 1 saat sonra eklemeyi ben de beklemiyordum. :) Ani gelişen bir istek diyelim. :)

Bu yazımda, Windows sunucularımız üzerinde yer alan, Performance Monitoring aracı ile istediğimiz collector'ü nasıl ekleyeceğimize bakacağız. Çok kullanmayanlar için, kısaca PerfMon, server'ın, IIS'in performans verilerini toplayabileceğimiz bir tooldur. İşlemci, bellek, w3process'ler, paging... Aklınıza gelebilecek her şeyi izleyebilirsiniz.

Perfmon üzerinde varsayılan tanımlı ajanlar/collectorler sizin için data toplayabilir, aktiflerseniz şayet. Şimdi bu yazımızla birlikte, istediğimiz Collectoru eklemeyi göreceğiz.

Önce performance monitöre girilir.



Açılan ekrandan User Defined’a sağ tıklanır. Yeni bir data collector oluşturulmaya geçilir.

Bir isim uyduralım şimdi de. Collector'ümüzün adı ne olacaksa buraya bir isim verebilirsiniz. Sonra next'e tıklarsınız. Benim verdiğim isim Microsoft'taki abilerimizden bir hatıra. :)

Bu noktada, paketlenmiş, hazır collector templatei kullanacaksanız(yani open source bir ortamda veyahut başka birisi sizin yerinize 10-15 kriter seçip template yapmışsa), aşağıdaki ekrandan Browse deyip, template'i de yükleyebilirsiniz. Veyahut girip tek tek kendiniz neleri izlemek istiyorsanız, seçebilirsiniz. Bendeki template'i yükleyip, collector ekleme başlığından sapmayacağım.

İsterseniz ayarlamalarınızı yapmak için Properties'e girebilirsiniz. Burada önemli bir iki ayar var. Ben girilmiş şeklini göstereceğim.

Dosya adında makina ismi görünmesi için bir ayar yaptık önce:

Her 700mb'a geldiğinde yeni bir dosya başlasın diye ayar yaptık:

Apply dedik ve Collector'ümüz oluşmuş oldu:



Start verilerek data toplanmaya başlanır.

Bir sonraki yazıda görüşmek üzere.

Merhaba

Merhaba Herkese,
Çok uzun bir aradan sonra tekrar siteye giriş yaptım. Covid-19 salgını yüzünden birçok aktiviteyi gerçekleştiremediğimiz bu günlerde, en azından sitemi tekrar aktiflemeye karar verdim. Yakında yeni içeriklerle tekrar paylaşımlara başlayacağım.
Görüşmek üzere.

10 Ocak 2017 Salı

Oracle: Çalışan SQL ve Session Bilgileri

Merhaba Tekrar,
Şimdi başlığı görüp de Grid varken, neden lazım diyebilirsiniz.. Ancak herkes gride giremiyor malumunuz; özellikle kurumsal firmalarda roller ayrımından ötürü girmeniz pek mümkün değil, dba olmadığınız sürece.

Sıkça kullandığım ama umarım hep keyfi bakmanız gerektirecek bir sql paylaşmak istiyorum:(executing sql, username, lockwaits..)

select sid,serial#,username,lockwait,status,schemaname,
osuser,machine,logon_time,last_call_et,event,t2.sql_text from v$session t1,v$sql t2 where t1.sql_hash_value=t2.hash_value
and t1.status='ACTIVE' and t1.username<>'SYS'
order by username asc

Bu şekilde hem sid serial, hem hangi user hangi makinadan bağlı ve ne çekiyor göürsünüz.. Ayrıca lock var mı yok mu, wait oluşmuş mu, net şekilde yazıyor..

Lockları zaten anlarsınız da, wait oluşursa şurdan kopya çekersiniz:

https://docs.oracle.com/cd/B28359_01/server.111/b28320/waitevents003.htm#BGGIBDJI

SQL: Kolon İçeriğinde Değişim

Selamlar,
Sql'de ifade içindeki minik bir kısmı değiştirme ihtiyacım oldu. Belki işi düşen olursa, hızlıca kullansın diye paylaşıyorum. Bu arada Rusya'dan bir mail aldım; bir konuda yazımdan bir şey alaşılmamış, ödev konusuymu vs. Ara Ara orijinal ifadelerini de yazımda değinmeye çalışacağım, özellikle teknik konularda.

Bir kolon içindeki ifadeyi, başka bir ifade ile değiştirme(find a text --> replace with another text, using replace() function)
degisecekIfade-->mevcuttaki degerdir(current expressin in column)
dogruIfade-->dogru, gelmesini istediginiz deger(new value/expression/text)

update tabloAdiniz
set kolonAdi=REPLACE(kolonAdi, 'degisecekIfade', 'dogruIfade')
where kriterleriniz(criterias);

16 Ekim 2016 Pazar

please create a master key in the database or open the master key in the session before performing

Merhaba

Yine ETL paketi atarken, IS Deployment Wizard 'da şöyle bir hata aldım:
please create a master key in the database or open the master key in the session before performing

Db adı oluştururkenki şifreyi hatırlamıyorsanız, önce db'yi backuplayın.
Sonra yeniden oluşturun ve yeni şifreyi verin. Sonra şu komut ile üstteki hatayı geçebilirsiniz:

USE DBADINIZ
OPEN master Key decryption by password = 'YENİŞİFRENİZ'
ALTER Master Key ADD encryption by Service Master Key

Sonra görüşürüz.

an error occurred in the microsoft .net framework while trying to load assembly id 65536

Merhaba,

SQL Server'da ispac paketi yüklerken şöyle bir hata aldım geçenlerde:
an error occurred in the microsoft .net framework while trying to load assembly id 65536

Bir sürü öneri vardı ama sorunumu şu satır çözdü:
ALTER DATABASE DBADINIZ SET TRUSTWORTHY ON

Aynı hataya alanlara selamlar. :)



29 Ocak 2016 Cuma

Patch Adams

Merhaba,
Yıllardır izlemeyi planladığım ancak bir türlü fırsatını bulamadığım hoş bir filmden bahsetmek istiyorum: Patch Adams.

Günümüz doktorlarını taşlayan, insani yönü kuvvetli bir baş yapıt. Hayatını sorgulayan, intihar etmeyi düşünen bir hasta adamın(Patch Adams), doktorların umursamaz tavırları karşısında, konuşarak-mutlu ederek hastaları tedavi etme veya pozitif enerji verme üzerine atipik mücadelesini anlatıyor. Fazlaca"spoiler" vererek izlemeyenleri kızdırmayalım ancak başta doktorlar olmak üzere, herkesin izlemesi gerekiyor. Bilimin salt müktesebata göre değil, bazı insani değerleri de göz önüne almasına ihtiyaç duyduğunu yüzümüze çarpan bir film. Gerçek hayattan bir kesit olması da cabası.

Mutlaka izleyin der, kaçarım.

Düzenleme: Gelen bir mesaja istinaden cevap vereyim. 3 gün önce filmi izledim; duyumlar üstüne filmi yazmadım. :)