:::: MENU ::::
Monthly Archives: Kasım 2016

Sysdig Nedir ? Sysdig Kullanarak Sunucu İzleme

sysdig_logo

Sysdig Nedir ?

Bazı durumlarda bir işlem tarafından yapılan ve alınan sistem çağrılarını takip etmek gerekebilir bunun için  akla gelen ilk şey nedir? Muhtemelen haklı olarak düşünceniz strace olur ve haklısın. strace hakkında bilgi sahibi değilseniz ilgili paylaşımımı inceleyebilirsiniz.

Hangi araç ile komut satırından ham ağ trafiğini izlemek için kullanırsınız? Hakkında bilgi sahibiyseniz  tcpdump , kullanarak yine doğru bir seçim yapmış oluruz. (unix’de her şey bir dosyadır)

Açık dosyaları izlemek zorunda kaldığımızda ise ilk kullanacağımız lsof‘dur. lsof ile daha önce payaştığım yazıya göz atabilirsiniz.

Sysdig, açık kaynak kodlu linux (RHE,Debian,Container),OSX ve Windows sistemlerde çalışan ve strace , tcpdump ve lsof gibi (strace+tcpdump+lsof+iftop+htop) sysadmin’in sıklıkla kullandığı klasik ama gerçekten harika araçları tek çatıda toplayan ve  farklı birçok  kabiliyet ve özelliğe sahip gelişmiş bir araçtır.

Ayrıca, çok güzel de bir filtreleme sistemine sahiptir. Bu şekilde spesifik olarak system çağrıların(syscall) ve olayların(event) belirttiğiniz kriterlere göre görüntülenmesini veya istersek bir dosyaya(trace file) yazılmasını sağlayabiliriz. Bu trace file’ları MacOS X ya da Windows gibi farklı platformlar üzerinde de analiz edebiliriz.

Sysdig’in bir diğer güzel özelliği ise “chisels” adını verdikleri analiz scriptleridir. Bu scriptler toplanan verinin anlamlandırılması için kullanılan Lua dilinde yazılmış scriptlerdir ve sisteminiz hakkında detaylı bilgi edinmek için kullanabileceğiniz ve analiz ihtiyaçlarınıza göre kendi scriptlerinizi geliştirebileceğiniz bir mekanizmadır. Yazının sonunda örnekler ile bu kısmı daha iyi analayacaksınız.

Bu yazıda sysdig ile Linux sistem izleme ve sorun gidermek için kurulum ve temel kullanımını inceleyeceğiz.

Sysdig Kurulumu

Bu yazı için ben, kısalık ve kolaylık uğruna resmi internet sitesinde açıklanan otomatik yükleme işlemini kullanmayı tercih ettim.

Sysdig kurulumu gerçekleştirmek için sudo olarak aşağıdaki komutu çalıştırmanız yeterli oluyor. Herşey otomatik olarak kuruluyor. Tüm kurulum seçenekleri için sayfayı inceleyebilirsiniz.

Sysdig Kullanımı

Yükleme tamamlandıktan sonra, sysdig’in en basit (primitive) kullanımı komut satırından doğrudan sysdig komutunu çalıştırmaktır.

Bu şekilde o an çalışan sistem çağrıları ve event’ler ekrandan akacaktır. Bu çıktıda her bir olay bir satır olacak şekilde görüntülenmektedir ve her bir satırda aşağıda sıralaması verilen bilgiler ekrana basılacaktır:

İlgili bilgilerin açıklaması da şu şekildedir:

  • evt.num     :  Event numarası
  • evt.time     : Event tarihi
  • evt.cpu      : Event’in hangi kaç numaralı CPU core üzerinde çalıştığı
  • proc.name: Süreç ismi.
  • thread.tid : Thread ID ( tek thread’li süreçler için PID)
  • evt.dir        : Event yönü, giriş eventleri için > ve çıkışlar için <
  • evt.type      : Event tipi, örm: ‘open’, ‘read’, ‘write’
  • evt.args      : event’in aldığı argüman.

Sysdig Filtreleme (class.field) Parametreleri

Sysdig’i yukarıda verilen şekilde tüm sistem olaylarını görüntüleyecek şekilde kullanmak aynı anda binlerce olayın ekrandan akıp gitmesine ve bu bilgi akışı içerisinde kaybolup gitmenize neden olacaktır; işte strace’den alışık olduğumuz bu verimsiz durumu ortadan kaldırmak için sysdig’in çok gelişmiş bir filtreleme sistemi bulunmaktadır.

Bu sistem sayesinde binlerce sistem çağrısını en ince ayrıntısına kadar filtreleyerek spesifik aramalar yapabiliriz.

Örnek olarak vim komutuna ait aktiviteyi görüntülemek için sysdig’i aşağıdaki şekilde kullanabilirsiniz:

Yukardaki komutu verip aşağıdaki gibi bir vim komutu çalıştırırsanız.

Aşağıdaki şekle benzer bir çıktı görürsünüz.

Sysdig’in fitreleme yapısı standart karşılaştırma operatörlerini ( =, !=, <, <=, >, >= ) ve boolean operatörleri (“and”, “or” ve “not”) desteklediği için filtrelemeyi genişletmek çok kolaydır.

Örnek olarak cat ve vim komutunun aktivitelerini görüntülemek için komutu şu şekilde kullanmak mümkündür:

ya da ping haricindeki tüm diğer süreçlerin kapadığı dosyaları görüntülemek için örnek şu şekildedir:

Tüm filtreleme (class.field) seçeneklerini aşağıdaki komut ile görebiliriz:

Sysdig Kullanışlı Örnekler

Belirli bir dizin altında işlem yapan süreçleri görüntülemek için:

Bellibir süreç haricinde dosyalar üzerinde aktivite gerçekleştiren süreçler ve yaptıkları işlemler:

Java ve MySQL süreçlerine ait aktivite:

Komutların aldığı parametreler üzerinden filtreleme yapmak için proc.args filtresi yani class.filed’i kullanılmaktadır.

Örnek olarak parametre olarak www.omeroner.com alan bir uygulamanın hareketlerini izlemek için (örn: dig www.omeroner.com)

Spesifik bir ip adresi tarafından yapılan bağlantılar sonucu oluşan ve sshd süreci ile alakalı olmayan aktiviteyi incelemek için:

Mysql dışındaki süreçler tarafından karşılanan gelen network bağlantılarını incelemek için:

Belli bir  kullanıcıya ait tüm aktivitenin izlenmesi:

Belli bir gruba ait tüm aktivitenin izlenmesi:

Event tipine göre çağrıları görüntülemek için: (LINUX System Call Quick Reference için bu dosyayı inceleyebilirsiniz.)

Tüm event listesini görmek için:

Sysdig Çıktı Formatlarını Düzenleme

Sysdig ile filtreleme sonuçlarının  çıktılarını customize edebililiyoruz. Örnek olarak event tipi chdir (change dir) olan sistem çağrılarını, komutu (cd) çalıştıran kullanıcı ve ilgli dizini görüntülemek üzere formatlı bir şekilde ekrana basmak için şu komut kullanılabilir:

shell üzerinden gerçekleştirilen tüm komutları, kullanıcı, komut ve komut agrümanını içerecek şekilde ekrana basmak için:

Sysdig ile Trace Dosyaları

Yazının başında’da ifade ettiğim gibi sysdig ile elde ettiğimiz sonuçları daha sonra incelemek için bir dosyaya (trace file) yazdırabiliriz.

Örnek olarak tüm sysdig çıktısını trace.scap dosyasına yazılması için kullanılacak komut:

Sadece 50 adet event’in ilgili dosyaya yani trace.scap yazılmasını sağlamak için komut:

Trace dosyasına yazdırdığımız bir sysdig çıktılarını okumak için kullanılacak komut:

 

Sysdig ‘de Chisels Kullanımı

chisels , sysdig üzerinden elde edilen verinin anlamlandırılması üzere kullanılan scriptlere verilen addır ve öntanımlı olarak bir çok chisel bulunmaktadır.

Öncelikle bu chisel’lerin bir listesini -cl parametresi kullanarak görebiliriz:

chisel’ler hakkında daha detaylu bilgi almak üzere -i parametresi kullanılabilir. Örnek olarakbottlenecks isimli chisel’in ne iş yaptığına bakmak için aşağıdaki komut kullanılabilir:

 

Sysdig  Chisels Kullanışlı Örnekler

Ençok cpu kullanan süreçleri görmek için:

1 ms’den uzun süren I/O aktivitesi:

1 ms’den uzun süren network aktivitesi:

Syscall bazında en çok error üreten süreçler:

Süreçlere ait standart çıktıları ekrana basmak için (class.field kullanılabilir):

Yazma + Okuma anlamında en çok disk I/O’nun yapıldığı dosyalar:

En çok disk I/O üreten (Read + Write) süreçler:

Byte cinsinden toplam I/O miktarı:

Hangi süreçlerin hangi log dosyalarına ne yazdığının ekrana basılması:

Syslog’a yazılan her mesajın görüntülenmesi:

Spesific bir ip’nin ürettiği trafiğin görüntülenmesi (dikkat edeceğiniz üzere chisel’leri filtreleme seçenekleri kullanabiliyoruz):

Spesifik bir port üzerinde gerçekleşen trafiğin görüntülenmesi:

Byte cinsinden en çok trafik üreten bağlantıların listenmesi:

En çok trafik üreten portların listelenmesi:

En çok trafik üreten süreçlerin görüntülenmesi:

Sistemdeki kullanıcılara ait aktivitenin interaktif olarak izlenmesi:

Örnekleri çoğaltmak kendinize kalmış ve daha fazlası için bu sayfayı ziyaret edebilirsiniz.

 

 


HTTP İsteklerinin Zamanlamalarını cURL İle Görme

 Basit bir istek 4 temel aşamadan oluşur,


Bazen sayfa yüklenme sürelerinin tespitini (daha doğrusu sayfanın indirilme )sürelerinin tespiti için curl mükemmel bir tercih olabilir.

Basit Kullanım:

ZSH ile döngüye sokabiliriz:

BASH ile:

CURL komutu için varsayılan davranış GET’dir, ancak POST, DELETE PUT ve daha karmaşık istekleri yapabilirsiniz. Eğer cURL ‘e aşina değilseniz, başlamak için en iyi yer manpage ‘dir.

Bu şekilde HTTP zamanlama testi için bir “şablon” oluşturabilirsiniz :

Şablon dosyası olarak  yukarıdaki içerik ile  “curl-format” adında dosya oluşturup bu dosya ile bir istek yapabiliriz. Aşağıdaki gibi dns araması,transter öncesi,yönlendirme,toplam süre gibi zamanlamaları ayrı ayrı görebiliriz.

Options:

  • -w “@curl-format”Biçim dosyası olarak curl-format’ın kullanma cURL söyler
  • -o /dev/null isteğin output’unu /dev/null’ a yönlendirir.
  • -s  ilerleme çubuğu göstermemek için kullanılır.
  • http://www.mynet.com/ istek yapılan URL..

Daha ayrıntılı bir sonuç arıyorsanız Apache Benchmark deneyebilirsiniz: Daha önceki paylaşımımda ab ile ilgili yazımı inceleyebilirsiniz.



Kubernetes Cluster Kurulumu: Admin Node Yapılandırma

Kubernetes containerized uygulamaların dağıtımını,düzenlenmesini, ölçeklendirme ve yönetimini otomatikleştirmek için kullanılan açık kaynak bir sistemidir.

kubernetes

Anlatmaya çalışacağım Kubernets cluster yapısı bir Admin Node iki 2 Container Node şeklinde bir yapı olacak.

Bu bölümde admin node’u yapılandırılalım başka bir yazıda node’ların yapılandırılmasından bahsedeceğim.

Kubernetes architecture diyagramı aşağıdaki gibidir.

kubernetes-architecture-diagram

[1] Gerekli paketleri yükleyin

 [2] Kubernetes yapılandırın. Aşağıdaki eklemeleri ve değişiklikleri config dosyasında yapalım.

Servisler çalıştıralım ve başlangıça ekleyelim.

[3] Flannel Ağ yapılandırma.

Konteyner Düğümler içinde kullanılacak istediğiniz ağ aralığı belirtin

[4] Eğer tüm yapılandırmalar doğru bir şekilde uygulandı ise aşağıdaki şekilde bir ekran çıktısı görmemiz gerekiyor.

 

 


Centos 7 Üzerine Cockpit Kurulumu

Cockpit ile kolayca web tarayıcısı üzerinden GNU/Linux sunucularını yönetebilirsiniz. Docker sistem kullanıyorsanız docker sistemlerinizide cockpit üzerinden kolayca yönetebilirsiniz.

Centos 7 Üzerine Cockpit Kurulumu

[1] Cockpit Kurulumu


[2] Web tarayıcısı ile “https: //(Sunucunun adı veya IP adresi):9090/” , daha sonra cockpit giriş formu görüntülenir.Aşağıdaki gibi mevcutda kullanılan bir kullanıcı ile oturum açın.Bu örnek root kullanıcı ile gösterir

cockpit_0

[3] Cockpit ana sayfası. Bu ekran üzerinden sistemi yönetmek mümkündür.

cockpit_1

[4] Sol menüdeki “Services”  bölümünden, Sistem hizmetlerini yönetmek mümkündür.

cockpit_2

[5] Sol menüdeki “Containers” bölümünden,  Docker container’ları yönetmek mümkündür.

cockip_3

[6] Sol menüdeki  “Log” bölümünden, Sistem günlüklerini(loglarını) yönetmeniz mümkündür.

cockpit_4

[7] Sol menüdeki “Networking” bölümünden,  Ağ ayarlarını ve yapılandırmalarını yönetmeniz mümkündür.

cockpit_5

[8]Sol menüdeki “Storage” bölümünden,  Depolama ayarlarını ve yapılandırmalarını yönetmeniz mümkündür.

cockpit_7

[9]Sol menüdeki “Tools-Accounts” bölümünden,  Kullanıcı hesaplarını yönetmek mümkündür.

cockpit_6

[10] Sol menüdeki  “Terminal” bölümünden, doğrudan komutlar ile sistemi yönetmek mümkündür.

cockpit_8


389 Directory Server ve Client Kurulumu ve Yapılandırılması

389 Directory Server ve Client Kurulumu ve Yapılandırılması için aşağıdaki adımları takip edebilirsiniz.

SERVER KURULUMU VE YAPILANDIRMASI

Arge Ortamı

Master-Slave yapılandırması için yukarıdaki host bilgililerini kullanacağız.

Sistem üzerinde ön hazırlıklar ardından kuruluma geçebiliriz;

Aşağıdaki adımları cevaplayarak kurulumu tamamlayabiliriz.

Kurulumu tamamladık. Kurulum log dosyası; Log file is ‘/tmp/setupZKynnZ.log’. Sunucu üzerinde son ayarlamaları yapalım ve ardından servisin çalışıp çalışmadığı kontrolünü yapalım.

Son olarak gui bağlantısını yapabiliriz. 389 console’a erişebiliriz.

Ardından açılan pencerede;

ldap389_1

ldap389_1

SSH-PUBLIC KEY YAPILANDIRMASI

Server Tarafı

SSH-PUBLIC Key yapılandırması için Ldap master sunucuda aşağıdaki ldif uzantılı dosyayı;

aşağıdak belirtilen içerik ile oluşturuyoruz.

Dosya üzerindeki düzenlemeleri yapıp değişikliğin aktif olması için servisi restart ediyoruz.

Ldap gui üzerinden ssh-public-key tanımlayacağımız kullanıcın özelliklerinden sırasıyla;

Object Class –> Add Value –> ldappublickey –> OK
Add Attribute –> sshpublickey –> OK
Ardından kullanıcı tarafından oluşturulan public-key girişi yapılır.

ldap389_3

 

 

ldap389_4

 

Client Tarafı

SSH-PUBLIC Key tanımlaması için client tarafında ssh servisi üzerinden yapılacak değişiklikler.

get-sshkey-from-ldap.sh dosyasının içeriği;

dosya yetkilendirmeleri ve ldap üzerindeki bir user ile test edilmesi.

SSL YAPILANDIRMASI

Directory Server için;

Sertifika listesini görmek için;

GUI üzerinden ssl aktif etmek için sırasıyla;

Directory Server –> Configuration -> Encryption
Enable SSL for this server checkbox’ını seçiyoruz.

ldap389_5

Sonrasında servisi restart ettiğimizde bize ssl sertifikası sırasında oluşturduğumuz parolayı soracak.

Şifre sormadan directory server servisi restart etmek için;

SSL port testi;

Client üzerinden SSL ile bağlanmayı test etmek için;

Administrator Server için;

Sertifika listesini görmek için;

GUI üzerinden ssl aktif etmek için sırasıyla;

Administrator Server –> Configuration -> Encryption
Enable SSL for this server checkbox’ını seçiyoruz.

ldap389_6
Sonrasında servisi restart ettiğimizde bize ssl sertifikası sırasında oluşturduğumuz parolayı soracak.

Şifre sormadan directory server servisi restart etmek için;

CLIENT KURULUMU VE YAPILANDIRMASI

NSLCD SERVICE İLE YAPILANDIRMA

veya authconfig-tui ile yapılandırabiliriz.

nslcd config dosyasına aşağıdaki satırları eklemeliyiz.

ldap config dosyasına aşağıdaki satırları eklemeliyiz.

ssl için

clear text control için

ssl için ldap ve nslcd config dosyalarında yapılacak düzenlemeler

SSSD SERVICE İLE YAPILANDIRMA

Örnek sssd config dosyası

kontrol için

 


ESX’de Grep ile NIC Driver Bilgisi Okuma

 ESX üzerindeki tüm sanal sunucuların NIC Driver bilgilerini grep kullanarak görmek için aşağıdaki komut/script kullanabiliriz

ESX’de Grep ile NIC Driver Bilgisi Okuma için:

Aşağıdaki script’i kullanabiliriz.

Yukardaki script çalıştırıldığında aşağıdaki gibi bir çıktı verecektir:


SendGrid ile Komut Satırından E-Posta Göndermek

Mail gönderimi oldukça zahmetli ve zor bir iş özellikle mailleri kullanıcının gelen kutusu’na düşürmek (inbox) oldukça zorlaştı. Bundan dolayı mail’lerinizi sadece bu işi yapan platformlar üzerinden göndermek isteyebilirsiniz. Sendgrid, mail gönderimlerinizi yapabileceğiniz birçok platformdan biridir. Benim tercihim Sendgrid oldu. Aylık 12 bin mail’e kadar gönderim ise ücretsiz. Sendgrid API gayet başarılı. Projenize entegre etmek’de gayet basit.

Sendgrid API dokümanları için sayfayı ziyaret edebilirsiniz.

SendGrid ile Komut Satırından E-Posta Göndermek;

Shell script olarak değişken kullanarak göndermek için,