Linux Sistemlerini Yönetmek: Komut Çalıştırmaktan Daha Fazlası

Kariyerimin başında, Linux sistemleri ile çalışmaya başladığım ilk zamanlarda sistem yönetimini olduğundan daha kolay görüyordum. Bir servis çalışmıyorsa yeniden başlatılır, cpu yükselmişse süreçlere bakmak bana büyük resmi tek başına gösterebilir gibi fikirlerim vardı. Evet, bu yaklaşım küçük ve kritik olmayan sistemlerde çoğunlukla işe yarar.

Daha kritik ve üretim ortamlarında çalışan sistemler ile daha fazla vakit geçirdikçe bu basit yaklaşımın asla yeterli olmadığını tecrübe ettim. Gerçekten büyük ölçüdeki önemli sistemler hiçbir zaman tek bir makineden ibaret değildir. Bir web uygulaması çalışırken arka planda uygulama sunucuları, veritabanları, cache katmanları, ağ bileşenleri ve depolama sistemleri birlikte çalışırlar. Bu parçaların herhangi birinde yaşanan küçük bir problem ise sistemin genel davranışını gözle görülür ölçüde etkileyebilir.

Bu sebeple bir sistemde sorun ortaya çıktığında yalnızca hatayı o anlık örtmeye çalışmak asla yeterli değildir. Hızlı müdahale önemlidir, burada herkes ile aynı fikirdeyim fakat bu probleme yol açan root cause'un da peşine düşüp bunu ortadan kaldırmak da büyük önem arz eder. Büyük ölçekli ve büyük kitlelere hitap eden bir sistemde çıkan problem o an bastırılmalı, sistemlerin stabilitesinden emin olunduktan sonra da root cause incelenip çözülmelidir benim nezdimde.


Restart atalımcılar

Sistem tarafında sık gördüğüm reflekslerden biri, bir servis çalışmadığında hemen yeniden başlatılmasıdır. Bazen bu gerçekten ilginç bir şekilde problemi çözer fakat çoğu zaman problemin root cause'unun sebep olabileceği gerçek yıkımı sadece bir süreliğine erteler. Servis neden kilitlendi, bellek neden büyüdü, IO neden bekleme girdi gibi sorular sorulmadan yapılan her bir müdahale aslında sorunun kökenini anlamaya giden yolu uzatır.

Benim için sistem yönetimi yalnızca servisleri ayakta tutmak değildir. Sistemlerin nasıl davrandığını anlamak, bu sistemler gibi düşünebilmek çok daha değerlidir. Bir süreç neden bekliyor, bir disk neden yavaşladı, bir uygulama neden benklenenden farklı davranıyor gibi sorular restart atmaktan kesinlikle çok daha fazla şey öğretir.


Sistem davranışını anlamak, sistem gibi düşünmek

Linux bu açıdan oldukça ilginç bir ortam sunuyor. Sistem sürekli veri üretir. Load average, IO bekleme süreleri, bellek kullanımı, ağ bağlantıları ve süreç durumları sistemin o an nasıl davrandığını, o an ne hissettiğini gösterir. Bu verileri yorumlayıp sistemi muayene edebilmek ise zamanla gelişen bir beceridir.

Sistemin gerçekten nerede zorlandığını anlayabilmek için genellikle birkaç temel araca bakarım. Bazen uptime çıktısında sistemin ne kadar süredir ayakta olduğunu ve load durumunu incelerim. Bazen vmstat ve iostat ile CPU, bellek ve disk I/O davranışını gözlemlerim. Bazen ss -tuln ile sistemde hangi servislerin hangi portları dinlediğine bakar, bazen de journalctl ile sistem günlüklerinde neler olup bittiğini anlamaya çalışırım. Çalışan bir sistem dikkatle dinlendiğinde aslında size çok şey anlatır.

Bu blogda bu araçların her birinin ne iş yaptığını ve siz okuyuculara aslında neler anlatmak istediğini açıklayacağım yazılar bulacaksınızdır. Bu araçların verdiği çıktılar çoğu zaman yeterince ipucu sağlar ama asıl mesele bu çıktıları okumayı ve anlamayı öğrenmektir.


Stabil sistemler kendiliğinden oluşmaz

Zamanla fark ettiğim şeylerden biri de stabil sistemlerin hemen veya kendi kendine oluşmadığı, bir süreç ve plan istediğidir. Bir sistem uzun süre sorunsuz çalışıyorsa genellikle arkasında iyi gözlemlenebilirlik, doğru kapasite planlaması ve sistem davranışını anlayan, o sistem gibi düşünebilen insanlar vardır.


Bu blog neden var

Bu blogu açma sebebim oldukça basit. Çalışırken veya gündelik hayatımda karşılaştığım bazı problemleri, yaptığım otomasyonları veya kendi laboratuvarımda denediğim şeyleri daha doğru bir platformda yazıya dökmek istedim. Bu bazen bir Linux problemi olacak, bazen küçük bir altyapı deneyi, bazen de yalnızca sistem davranışları ile ilgili bir gözlem.

Burada paylaşacağım yazılar genellikle Linux troubleshooting, otomasyon ve altyapı tarafında öğrendiğim şeyler etrafında dönecektir.


İşinize yarayabilecek bazı kaynaklar

Bir sistemin nasıl çalıştığını anlamanın en fırsatlı yolu sistemde bir problem varken o problemi anlamak ve çözüme kavuştururken gidilen yoldur benim nezdimde. Linux sistemlerin davranışını anlamay açlışırken zaman içinde sık sık kullandığım bazı kaynaklar var. Sistemleri iyi anlamak isteyen kişiler için aşağıdaki kaynaklar oldukça faydalı olacaktır.

Brendan Gregg’in çalışmaları

Özellikle performans analizi ve sistem davranışını yorumlama konusunda Brendan Gregg’in çalışmaları oldukça değerli. Linux sistemlerinde CPU, IO ve latency gibi konuları çok anlaşılır şekilde ele alıyor.

Google’ın SRE kitabı

Site reliability engineering yaklaşımı üretim ortamlarında çalışan sistemlere farklı bir perspektiften bakmayı öğretiyor. Google’ın SRE kitabı bu konular için iyi bir başlangıç noktası.

Arch Wiki

Linux ile ilgili teknik bir detayın nasıl çalıştığını anlamaya çalışırken çoğu zaman Arch Wiki’ye de bakıyorum. Dağıtımdan bağımsız olarak birçok konuyu oldukça net anlatıyor.

Man sayfaları

Ve tabii ki Linux dünyasının en temel referanslarından biri olan man sayfaları. Birçok şeyin gerçekten nasıl çalıştığını anlamanın en doğrudan yolu çoğu zaman buradan geçiyor.