14 Kasım 2018 Çarşamba

Event Trace for Windows (ETW) ile canlı IIS izleme

Bir uygulamada log tutuluyorsa ve bu loglar ETW'ye yönlendirilebiliyorsa, aşağıdaki kütüphaneler ile ETW'ye (Windows) subscribe olup, Provider+Event filtreleme yöntemiyle bu event'ler toplanabilir.

Örnek: IIS logları, bir uygulamadaki System.Net namespace'i altındaki operasyonlar (HttpWebRequest), Ado.Net, .NET CLR Events

>Bir uygulamadan ETW'ye log yazmak için: EventSource
https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource/

Okumak için: TraceEvent
https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent


ETW Kavram detayları
https://docs.microsoft.com/en-us/message-analyzer/common-provider-configuration-settings-summary
https://docs.microsoft.com/en-us/message-analyzer/system-etw-provider-event-keyword-level-settings

Detaylar:

ETW için detaylar
https://github.com/mehmetilker/mehmetilker.github.io/blob/master/_posts/app-monitoring-etw-detaylar.md

Uygulama Monitoring / İzleme sistemi kurmak için
https://github.com/mehmetilker/mehmetilker.github.io/blob/master/_posts/app-monitoring.md

14 Mart 2018 Çarşamba

Stanford Core NLP Notları

Stanford Core NLP için CLI ve API kullanımıyla ilgili notlar;

-Annotators
-Regexner (POS tagging üzerinden pattern matching)
-CLI: Farklı durumlar için örnekler
-Web sunucusu üzerinde kullanımı (singleton instance)
-Performans : Model karşılaştırmaları
-POS Tags (Universal)
-Dependency Tags (Universal)
-Diğer Notlar (extension...)

Stanford Core NLP Parse annotation ve model alternatifleri

Ön bilgi:
annotator (fiil) : To furnish (a literary work) with critical commentary or explanatory notes;
annotator (isim): a commentator who writes notes to a text
annotation (isim):  a note added in explanation, etc, esp of some literary work.

Doğal dil işlemede dependency parsing (bağımlı / bağlantılı eşleştirme), cümledeki sözcük diziminin yapısı ve sözcükler arasındaki ilişkiyi tanımlama işlevi görür.
Örnek olarak subject-object ilişkisi ya da adjectival modifier.
Gösterim şekli : labelName(GovernorWord, DependentWord)

Stanford Core NLP dependency parsing için iki farklı annotator sunuyor: parse ve depparse.

parse ve depparse annotator farklı modeller kullanmakla birlikte farklı yöntemler üzerinden dependency parsing işlemini gerçekleştiriyor.
Bu nedenle hem hız hemde çıktı anlamında farklı sonuçlar üretiyorlar.


-Dependency Parsing annotator alternatifleri
--parse
--depparse

-Dependency Label listesi ve açıklamalar
-Performans
-Diğer Konular

8 Mart 2018 Perşembe

Linux üzerinde Python web uygulaması yayına alma alternatifleri

Digital Ocean (DO) - Ubuntu üzerinde Python web uygulaması kurulumu / yayına alma ve güncelleme ile ilgili notlar.

Ubuntu 16.04
Nginx 1.10.3
Python 3.6.4


Problemler 

-Tüm kurulumlardan sonra çalışan sistemde güncellemelerde.

Bir paket güncellemesinde "pip install -U x" wheel üretilme adımında kurulum killed olarak sonlanıyorsa bellek yetmezliğinden kaynaklanıyor olabilir. örn: https://github.com/explosion/spaCy/issues/1586
Normalde 2GB kurulumlarda yetmişti linux güncellemelerinden yada yeni python package den kaynaklı sıkıntı olabilir.
Bu durumda uygulama başlamaz ve alttaki problem ortaya çıkabilir.
gunicorn connect() to unix:/*.sock failed (2: No such file or directory) while connecting to upstream,

Daha detay bilgi almak için systemd service dosyasında gunicorn için log gile parametreleri belirtilebilir.
ExecStart=/home/app/_env/bin/gunicorn --workers 2 --bind unix:lingoapi.sock -m 007 wsgi:flask_app -e LINGOAPPENV=PROD --error-logfile /home/app/logs/gunierr.txt, --log-file /home/app/logs/guni.log

Normalde yetmesi gereken 2GB yetmediğinde swap dosyası tanımı yapılabilir.
Yapmak için : https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04

Swap tanımı yapıp güncellemeyi (pip install) yaptıktan sonra eğer sunucu reboot edilirse swap dosyası uçacaktır. Dolayısıyla güncelleme de aynı problem tekrar edecektir.

-Artan bellek problemine bir çözüm önerisi
gunicorn apps.wsgi:application -b 127.0.0.1:8080 --workers 8 --max-requests 1000
Her bin istekten sonra app pool recycle benzeri işlem
https://rayed.com/posts/2014/09/django-memory-leak-with-gunicorn/


-Bellek kullanım detaylarını görmek için kullanılabilecek bir script
https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
>python3 ps_mem.py

-Memory leak tespiti için:
https://pypi.org/project/Dozer/
Dozer was originally a WSGI middleware version of Robert Brewer’s Dowser CherryPy tool that displays information as collected by the gc module to assist in tracking down memory leaks. It now also has middleware for profiling and for looking at logged messages.


Sistem kurulum adımları


1. Tanımlar / Configler
-non-root kullanıcı oluşturma - putty ile bağlanma
-Uygulama dizinler, dizin yazma hakkı, firewall vs güvenlik tanımları

2. Kurulumlar (nginx, python...)

3. Geliştirilen uygulamanın kurulum : virtual env, ...
Alternatifler: herşey manuel, docker, dokku, captainduckduck, rancher?)
---Deployment/Güncelleme (deploy, config change) / staging, live... > blue/green deployment

4. Diğer Konular
---SSL (Nginx üzerine)
---Güvenlik
---Kayıtlar / Loglar
---Performans
---Coğrafi dağıtık kurulum alternatifleri
----DNS, IP, istemci performans ölçümüne göre



21 Ocak 2018 Pazar

Azure Web App Service üzerinde SpaCy (veya diğer Python native module) kurulumu



Azure App Service üzerinde Python ile geliştirilmiş uygulamayı çalıştırabilmek için:
-İstenirse güncel Python extension kurulumu (3.4 mevcut)
-Eğer geliştirilen uygulama "native module" kullanıyorsa gerekli çevrim işleminin yapılması (Windows App Service üzerinde çalışabilmesi için)

Aşağıdaki açıklamalarda Azure Web App Service ortamına bir Cython native compiler'a ihtiyaç duyan Python paketi olan spaCy NLP kurulumu anlatılmakta. Aynı yöntem ile diğer compiler kullanan Python paketleri kurulumu da yapılabilir.

Ön bilgi

Azure App Service üzerinde Python 3.4 kurulu geliyor. Uygulama ayarlarından açık konuma getirilip kullanılabilir.

Baştan sonra Git üzerindeki hazır bir örnek uygulamayı Azure App Service de çalışır hale getirme örneği:
-"Deployment user" oluşturma
-"Resource Group" oluşturma
-"App Service Plan" oluşturma
-Uygulamayı oluşturma
-Git üzerinden Azure'daki uygulamaya kurulum


11 Ocak 2018 Perşembe

Azure App Service üzerinde problem çözümü


Farklı katmanlarda hatalar oluşabilmekte. Bunlar;

1-Uygulamanın kendisi: 
"object reference not set" hatasından "An error occurred while sending the request." hatasına kadar çeşitli hatalar oluşabilmekte.
Tabi bir de StackOverflowException hatasını unutmamalı. https://blogs.msdn.microsoft.com/spike/2011/11/04/how-to-create-a-stackoverflowexception-and-how-to-figure-out-where-it-is-happening/

2-Uygulamanın üzerinde çalıştığı ortam: 
Yani .Net Framework / .Net Core. Uygulamanın geliştirildiği ortam ve çalışma ortamı (production) arasındaki farklılıklardan kaynaklanabilir.
Kendilerini "Unhandled Exception: System.TypeInitializationException: The type initializer for 'System.Diagnostics.DiagnosticListener' threw an exception." hatası olarak belli ederler.
Yani uygulama çalışırken değil daha en baştan (Program.Main(String[] args)) uygulamanın başlamasına engel olurlar.
Bu bazen uygulama doğru version üzerinde çalışıyor olsa bile ortaya çıkabilir. Azure örneğinde "App Service" uygulamasına eklenen bir extension ile uyumsuzluk da sebep olabilir.
Örneğin: Application Insight 2.4.7 https://stackoverflow.com/questions/47411101/could-not-load-type-system-diagnostics-productionbreakpointsstub-error-in-app-d?rq=1