14 Ağustos 2018 Salı

Linux watch komutu kullanımı

Linux sunucu yönetiminde hem log dosyalarını hem de sistem kayıtlarını incelerken kullandığımız bir çok yardımcı komut var. Bunların başında dosyaların başını gösteren head komutu, sonunu gösteren tail komutu ve tamamını ekrana basan cat komutu geliyor. Bu komut satırı araçları sayesinde bir çok dosyayı rahatlıkla inceleyebiliyor ve takip edebiliyoruz. Hatta tail -f komutu ile web sunucusu, veritabanı gibi gibi sürekli işlem yapmakta olan daemonların log dosyalarına bağlanıp anlık olarak ekrana çıktı alabiliyoruz. Bu yazımızda ise aynı komutu sürekli olarak çalıştırıp çıktısını ekrandan takip etmek için kullanabileceğimiz watch komutunu inceleyeceğiz.


Watch komutunun kullanımı oldukça basit. watch "çalıştırmak istediğimiz komut" şeklinde sade bir çalışma prensibi var. Bunun dışında -n parametresi ile bu komutu kaç saniyede bir çalıştırmak istediğimiz belirtebiliyoruz.

Örneğin redis sunucumuza bağlı olan ipleri netstat ile çekip görmek istediğimizi düşünelim. redis sunucumuzun portu olan 6379 u "|"  yani linux pipe operatoru ile  grep'e vererek filtreledikten watch komutuna saniyede bir kez çalışacak şekilde gönderiyoruz. 

watch -n1 "netstat -tnp  | grep 6379"

Eğer redis sunucusuna bağlı kullanıcı sayısını görmek istersek grep'in çıktısını da wc -l komutuna pipe ile gönderip satır sayısını alarak o an bağlı olan kullanıcı sayımızı görebiliriz. Özellikle servisleri farklı bir sunucuya taşırken tüm bağlantılar düzgün şekilde yapılandırılmış mı, eski sunucuda kullanıcı kalmış mı gibi sorulara anlık cevap ararken bu komut oldukça yararlı olabiliyor.

watch -n1 "netstat -tnp  | grep 6379 | wc -l"

Farklı bir örnek olarak da bir linux processine ait tüm file descriptorlerin sayısını listeyen alttaki komuta bakabiliriz. Açık olan dosya ve bağlantıların tamamının ortak sayısını bu şekilde görebiliriz. Özellikle sorunlu servislerde fd sayısı sürekli olarak artabiliyor. Bunu anlık olarak takip etmek ve gerektiğinde bu servislere restart atmak watch komutu sayesinde kolaylaşıyor.
watch -n1 "ls /proc/2943/fd |wc -l"

Farklı senaryolar üzerinden watch ile sunucu servisi takibi yapabiliyoruz. Detaylı bilgi için kaynaklar:

redisgreen ile redis performans takibi

NoSQL veritabanları arasında rahat kullanımı, düşük kaynak tüketimi ile dikkat çeken Redis key-value deposunun uygulama geliştiriciler büyük bir dezavantajı var. Performans takibi ve monitoring. MongoDB, couchbase gibi daha büyük dağıtımlarda bu dahili dashboardlar ile sağlanabiliyor. MongoDB bunu ücretsiz cloud monitoring hizmeti ile sağlarken Couchbase ise belki en gelişmiş dahili yönetim panellerinden birine sahip. Redis çok ufak boyutu, inanılmaz hızı ile dağıtık cache sistemlerinin standartı olmuşken (Hazelcast'i lisans ve JVM yüzünden saymıyorum) bu yönetim meselesinde ciddi anlamda dezavantajlı durumda. 

Tabi ki bu redis performans takibi için çözüm yok anlamına gelmiyor. Aslında komut satırından dahili MONITOR ve INFO komutları ile birçok bilgi alabiliyoruz. Bunun araç haline çevrilmiş hali ise dahili olarak rediste yok. Github'da bu işi yapan bir çok proje var. Bunlardan biri LittlePeng/redis-monitor:

Bir diğer çözüm ise redisgreen. Redis green cloud üzerinden çalışan, verdiğimiz bilgilerle bizim redis sunucumuza bağlanıp oldukça detaylı bilgi veren bir servis. Kullanılan bellek, kayıtlı key sayısı gibi temel verilerden tutun da bellek fragmantasyonuna kadar oldukça işe yarar verilere ulaşmamızı sağlıyor



Memory fragmentation değeri 1'in altına düştüğünde belleğin yetersiz kalmaya başladığını ve swapa düşme ihtimaliniz arttığını yani performansın ciddi anlamda düşebileceğini gözlemleyebiliyoruz. 1.0'ın üzerindeki değerler ise redis'in belleği etkin kullanamadığını söylüyor. Böyle bir durumda dump alıp restart atarak 1'e yakın değer elde edebiliyoruz.

Redis green ile alabildiğimiz diğer önemli bir metrik ise cache ve miss değerleri. Sorgularımızın kaçı redisten cevap alabilmiş kaçı yanıtsız kalmış doğrudan redis üzerinden bu değerlere ulaşabiliyoruz. Açıkçası bunu doğrudan nasıl elde ederiz bilmiyorum, redisgreen'i görmeden önce bu tarz bir metriği uygulama tarafında oluşturmaya çalışırdım.


Bunun dışında komut bazlı olarak oldukça işe yarar istatistikler alabiliyoruz:

Bunun dışında yavaş çalışan komutlar gibi verilere de redisgreen üzerinden oluşup buna göre optimizasyon yapmak mümkün.

Daha fazla bilgi için:

3 Ağustos 2018 Cuma

Sunucu performans testi nasıl yapılır


Birçok firma sanal sunucu, vps, vds ve bare metal, dedicated sunucu hizmeti sunuyor. Peki ödediğimiz ücret karşılığını ne alıyoruz. Sunucumuz donanımsal olarak, hat olarak ne kadar hızlı. Şimdi bunu nasıl ölçebiliriz ona bakalım.

Hat hızını ölçmek için speedtest'in komut satırı uygulamasını kullanabiliriz. Python bazlı çalışan bu uygulamayı


ile indirip çalışma için yetkilendirdikten sonra

./speedtest-cli

ile çalıştıyoruz. Ubuntu, CentOS, Debian gibi dağıtımların hepsinde çalışıyor fakat sistemden python yüklü olmalı.


Örnekte Vultr üzerinde çalışan bir sunucunun hat hızını görebiliyoruz. 800mbit simetrik bir hat sorunsuzca çalışıyor.

Speedtest ile sadece hat hızını ölçebiliyoruz ve kendisi en uygun datacenterı seçerek bize bu bilgiyi veriyor. Eğer daha fazla lokasyon için hat hızımızı ölçme ve bunun yanında hdd hızı dahil sistem hakkında daha fazla bilgi almak istersen bench.sh kullanabiliriz.

Bench.sh ile sistem performans testi yapmak için şu komutu  kullanabiliriz:
wget -qO- bench.sh | bash

Ekran çıktısı ise şu şekilde karşımıza çıkıyor:


Görüldüğü gibi sadece hat hızı değil, hdd, ssd performasını ve sistemin kullandığı işlemciden sanallaştırma teknolojisine ve işletim sistemine kadar  bir çok konuda bilgi alabiliyoruz. Ayrıca internet hızını da farklı konumdaki sunucular ile test ettiği için daha sağlıklı bilgi alabiliyoruz. 
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

Upstart ile linux başlangıç servisi yönetimi

Upstart Ubuntu linux dağıtımının yapımcısı olan Canonical Ltd. tarafından geliştirilen, Ubuntu 6'dan 16'ya kadar kullanılmış olan, sistemin yüklenmesi ve başlangıç hizmetlerinin çalıştırılmasından sorumlu init sistemidir.  SysV init ile uyumlu olması kolay anlaşılır yapılandırma dosyaları sayesinde upstart ubuntu dışında da bir kaç linux distrosunda kullanılan bir sistem olmuştu. Ubuntu 16 ile beraber CentOS, Debian, Archlinux gibi birçok dağıtım gibi bir çok dağıtım systemd ye geçti. 

Systemd çok büyük yazılım olması ve işletim sisteminin neredeyse tamamını kontrol etmesi sebebiyle linux caimasında pek sevilmedi. Küçük programların kendilerine özel işleri yaptığı ve bu işlerin birbirine bağlanması mantığına dayalı linux felsefine ters olan systemd'ye geçmek istemiyorsanız desteği 2019 nisana kadar sürecek olan Ubuntu 14.04 ile yola devam edebilirsiniz. Bunun dışında mail-in-a-box gibi bazı büyük uygulama dağıtımları yalnızca upstart destekliyor. Bu gibi dağıtımlarla da çalışacaksanız upstart sizin için hala önemli diyebiliriz.

Upstart scriptleri /etc/init içerisine .conf uzantılı dosyalar yazılıyor. İhtiyacımız olan bir çok özelliği barındıran örnek bir yapılandırma dosyası aşağıdaki gibi oluşturabilirisiniz.

nano /etc/init/ornekservis.conf

description "ornekservis"

env ortamdegiskeni1=deger1
env ortamdegiskeni2=deger2

start on runlevel [2345]
stop on runlevel [!2345]

respawn
post-stop exec sleep 5
limit nofile 65000 65000

setuid root
setgid root

chdir /root/ornekservis
exec /usr/bin/python ornekservis.sh

Servisimiz sistem hazır olduğunda çalışması için start on runlevel [2345] ifadesini kullanıyoruz. respawn ile servis kapatılırsa yeniden başlayacak şekilde tanımlanmış oluyor. Sorunlu bir servisin üst üste kendini çalıştırmayı engellemek için araya post-stop exec sleep ile bekleme süresi koyabiliyoruz. setuid setgid ile uygulamanın hangi kullanıcı ve grup üzerinden çalışacağını upstarta bildirebiliyoruz. Örnekte kullanım rahatlığı olarak root kullanmış olsak da normalde yetkileri sınırlı kullanıcılar kullanmak sistem güvenliği adına daha doğru olacaktır.

lsof +D /var/log/upstart/
komutu ile çalışmakta olan servislerin log dosyalarının konumlarını görebiliriz.

Bu dosyaları anlık takip etmek için tail -f kullanabiliriz
tail -f /var/log/upstart/redis-server.log


upstart servisilerini başlatıp durdurmak için ise service start, service stop, ya da doğrudan start stop komutlarını kullanabiliriz. status ile de servisin çalışıp çalışmadığını kontrol edebiliriz.

service ornekservis start
service ornekservis status
service ornekservis stop

start ornekservis
status ornekservis
stop ornekservis

start, stop, status gibi komutlar arkaplanda initctl kullanıyor. yani start servisadi arkaplanda initctl start servisadi olarak çalışıyor. Bunu status komutunu takip ederek görebiliriz:

çalışan servisleri görmek için ise:
initctl list | grep running

komutunu kullanabiliyoruz.



Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2 Ağustos 2018 Perşembe

Bitcoin ile ödeme kabul eden Bitcoin harcanabilecek yerler

Bitcoin, Ethereum gibi elektronik para birimleri popülerliğini korumaya devam ediyor. Peki bu dijital para sistemleri sadece spekülatif sözde yatırım araçları mı yoksa aynı dolar tl gibi doğrudan harcanabilen para birimleri mi ?

Merkez bankalarının olmadığı, güvenliğin devletler tarafından değil kriptolu protokollerinden alan bu teknolojik paralar için bu tartışmalar uzun süre sürecek. Peki bir yerde internetin para birimi olan bu teknolojileri gerçek hayatta kullanabiliyor muyuz ? Bu yazımda öncelikle bitcoin ve diğer dijital para birimleri ile sanal sunucu ve domain, alan adı hizmeti veren firmaları incelemeye çalışacağım.

Benim için bu firmaların başında cloud vps hizmeti veren vultr geliyor. Amerika, Asya ve Avrupa'da bulunan datecenterlar üzerinden vds, vps hizmeti veren vultr bitcoin ve bitcoin cash ile ödeme kabul ediyor. Ödeme altyapısı olarak bitpay şirketini kullanan vultr son derece kaliteli hizmet veriyor. Uzun süre kullandım ve hizmet kalitesi olarak digitalocean, linode seviyesinde bir firma olduğunu söyleyebilirim. Fiyatları ise 1gb vps aylık 5$ civarından başlıyor. Sunucu performansları oldukça iyi, sunucularınız arası private network ücretsiz ve ücretsiz snapshotlar ile sunucu yedekleme, kopyalama işlemlerine izin veriyor.  



Hizmet kalitesinden ziyade bütçe önemli diyorsanız bitcoin, ethereum ve diğer altcoin sistemleri ile ödeme kabul eden diğer bir çok firmayı lowendbox sitesi üzerinden bulabilirsiniz. Burada listelenen her firma bitcoin benzeri sistemler ile ödeme kabul etmiyor fakat eden firmaları da bulabilirsiniz. Özellikle bitpay'den sonra coinify, coinpayments gibi altcoin destekleyen firmaların da yaygınlaşmasından sonra orta sınıf hosting hizmeti veren bir çok firma bu ödeme yöntemlerini de sistemlerine dahil etmeye başladılar.  




Kısa sürece önce yine lowendtalk sitesindeki sanal sunucu firmalarını incelerken denk geldiğim bir firma supremevps. Sadece Los Angeles'da vps hizmeti veren firma OpenVZ ile sanallaştırma yapıyor. Bu da vultr, digitalocean gibi firmaların bir alt seviyesinde hizmet kalitesi beklememiz anlamına geliyor. Yine de fiyatları inanılmaz cazip olduğu için denemek istedim. 1.5gb ram li ssd li vps si yıllık 14$'a veriyorlar. Şu an için performans, hat hızı gibi konularda sorun yaşamadım. Yine de bu vpsleri kritik önem taşıyan yerlerde kullanmamak gerektiği aklımızın bir köşesinde dursun. Oralarda vultr, digital ocean, linode hatta Amazon web services, Azure vs. düşünülmeli. Bu arada 14$ lık kampanya sitelerinde mevcut değil lowendbox sitesinden gitmeniz gerekiyor:

 

Bitcoin ve diğer altcoin çeşitleri ile ödeme kabul eden bir diğer firma uzun süre kullandığım Kanada merkezli GestionDBI firması. Açıkçası benim için fiyat cazibelerini kaybettikleri için ben diğer firmalara bakmaya başladım. Yine de sorunsuz, ortalama performanslı sunucu hizmeti sağlıyorlar.

SupremeVPS ödeme yöntemi olarak coinpayments kullanırken gestiondbi coinify kullanıyor. Bunlar kredi kartları için skrill, payza neyse dijital paralar için aynı hizmeti sunuyorlar. Firmalara komisyon karşılığı kolay ödeme alma şansı sunuyor. Aşağıda bu aracı firmaların en köklüsü olan Bitpay'in ödeme ekranını görüyoruz. QR kodu telefonla taratarak ya da ekrandaki miktarı ilgili adrese gönderek ödememizi tamamlayabiliyoruz. Bitpay şu an yalnızca bitcoin ve bitcoin cash desteliyor. 

 

Alttaki ekran ise coinpayments'ın ödeme ekranı. Bu ödeme sistemini kullanan firmalara Ethereum, litecoin gibi popüler altcoinler de dahil olmak üzere bir çok dijital para birimiyle ödeme yapabiliyoruz.



Aşağıdaki ekran görüntüsünde ödeme ekranı olan Coinify da CoinPayments gibi bir aracı şirket. O da bir çok altcoini destekliyor. Ödeme miktarının yanındaki BTC logosuna tıklayarka diğer coinleri seçebilir ve onlarla da ödeme yapabilirsiniz.

Coin sistemleri ile ödeme kabul eden aracı sistemler bu şekilde. Bunun dışında domain satışı yapan namecheap ise bitcoin ödemelerini doğrudan kendisi kabul ediyor ve bitcoin transfer ücreti hariç hiçbir harici komisyon ödemeden domain kaydı yapabiliyorsunuz. Alttaki ekran görüntüsünde namecheap için bitcoin ile bakiye yükleme seçeneğini görebilirsiniz.


Bitcoin ile ödeme kabul etmesi sevinç ile karşılanan bir diğer firma da pc dağıtım oyun dünyasının en büyük ismi olan Steam idi. Malesef steam bitcoin fiyat volatilitesini ve işlem ücretlerini bahane ederek geri adım attı.

Bunun dışında yurt dışı alışverişlerde oldukça büyük bir firma olan Newegg'in bitcoin ile ödeme aldığı duyruldu. Şahsen deneme imkanım olmadı fakat NewEgg'in isim yapmış güvenilir bir firma olduğunu düşünürsek yurt dışından alışveriş yapmayı düşünürseniz bir göz atın derim.

Türkiye'de de BTC ile ödeme alan bir firma buldum. Binbirçeşit sipariş ekranında bitcoin ile ödeme seçeneğini bulunduruyor. Fiyatları piyasaya göre biraz yüksek gibi olduğu için deneme şansım olmadı.


Cointurk store'u da doğal olarak BTC ile ödeme kabul ediyor fakat burada ürünler sitenin kendi ürünleri ve genellikle kupa, anahtarlık, hatıra para gibi bitcoin dünyasına meraklılara hitap eden ürünler. 

Şimdilik bulabildiğim bitcoin benzeri ile ödeme kabul eden şirketler bunlar. Sizlerde bildiklerinizi yorumlarda belirtebilirsiniz.

MxToolbox nedir ve nasıl kullanılır ?

Mxtoolbox domain ve dnsler ile bir çok yararlı araç bulunduran bir web sitesidir. Özellikle karmaşık dns yapılandırmalarından sonra ilgili kaydın oluşup oluşmadığını kontrol etmek için kullanılabilir. Ayrıca mail sunucunuzun ip adresinin ve domain adresinin spam olarak işaretlenip işaretlenmediğini de kontrol edebilirsiniz.

DNS kayıtları 2 dakikadan günlere varan cache sürelerinden dolayı yenilendikleri zaman sorun 
çıkartabiliyorlar. A, AAAA, CNAME gibi alan adı yönlendirmelerine yarayan kayıtları her zaman kendi çalışma bilgisayarımızdan bu nedenle kolaylıkla kontrol edemiyoruz. Hem kendi işletim sistemimizin oluşturduğu dns cacheler hem de internet servis sağlacılarının cacheleri gerçek alan adı çözümleme sonuçlarına ulaşmamızı zorlaştırabiliyor. MXToolbox ise tüm bu cache sorunlarını kendi içinde çözmüş ve bize anlık sonuç verebiliyor. 

Kullanım için ise bizlere oldukça basit bir arayüz sunuyor. İstediğimiz kaydı ardından iki nokta üstüste ve domain adını yazarak sonuçlara ulabiliyoruz. Aşağıdaki örnekte blog sentaks'ı google webmaster araçlarına eklemek için kullandığım TXT kaydının başarılı bir şekilde eklenip eklenmediğini kontrol ettim.


Sonuçlarda ilgili dns txt record'unun başarılı bir şekilde eklendiğini görüyoruz.


blacklist: komutu ile ise domain ve ip adresiminizin spam kara listelerine eklenip eklenmediğini kontrol edebiliyoruz:


Görüldüğü gibi hiçbir kara listeye sunucu ve mail alan adımız düşmemiş.



systemd ile linux başlangıçta program çalıştırma

Linux sunucu yönetimine başlayan birçok kişinin zorlandığı konulardan biri sistem başlangıcında komut veya program çalıştırma oluyor. Bunun bir çok sebebi var fakat en bariz olanı farklı linux dağıtımlarının farklı init sistemleri yani windows terimleriyle ifade etmek gerekirse farklı servis, hizmet yöneticileri kullanmasıdır. systemd ise artık hemen hemen her linux dağıtımda standart olan, oldukça kapsamlı bir init sistemi, servis yöneticisidir. Kernel yani işletim sistemimiz çekirdeği yüklendikten sonra systemd devreye girer ver kabuk ortamı yani bash dahil tüm temel başlangıç servislerini, aygıtlarını ve diğer unitleri yükler.


systemd den önce her linux dağıtımı farklı bir init sistemi kullanıyordu. ubuntu14 ve bazı debian sürümlerinde upstart, daha bazı linux sistemlerde init yaygın olarak kullanılan daha basit ve sade sistemlerdi. systemd ise bunlardan çok daha kapsamlı işletim sisteminin her yerine müdehalede bulunan daha büyük bir init sistemi. Sadece başlangıç yönetimi ve servisler ile kalmıyor unit sistemi sayesinde aygıtlardan, dizin bağlantılarına işletim sisteminin bir çok noktasına müdehalede bulunuyor. Bu nedenle ufak programların sadece kendi işlerini yapması üzerine kurulu linux felsefesine uyumlu olmadığı düşünüldüğü için yaygınlaşması zaman aldı. Fakat şu an centos7 den ubuntu16 ya hatta archlinux'e kadar birbirinden oldukça farklı dağıtımlar systemd kullanıyor.


systemd unit mantığı oldukça geniş bunla ilgili uzun uzun yazmaktansa ubuntu'nun sitesine link vermeyi daha faydalı buluyorum. Oldukça güzel çevrilmiş yararlı bir kaynak:

Systemd servislerini ubuntu altında /etc/systemd/system dizinine kaydediyor. Bu dizinde temel 1-2 servis dışında sistem servislerinin yapılandırma dosyaları bulunmuyor. 

nano /etc/system/systemd/denemescript.service

ile gerekli servis dosyamızı oluşturyor ve aşağıdaki gibi yapılandırıyoruz:

[Unit]
Description=denemescript
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target

[Service]
Environment=envdegisken1=deger1
Environment=envdegisken2=deger2
Environment=envdegisken3=deger3
User=root
Group=root
Type=simple
ExecStart=/root/denemescript.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Dosyayı oluşturmak servisin başlangıca yerleşmesi anlamına gelmiyor. Programın başlangıçta çalışması için:

systemctl enable denemescript.service

komutunu kullanıyoruz. Servisi el ile başlatıp durmak içinse

systemctl start denemescript.service
systemctl stop denemescript.service

komutlarını kullanabiliriz.

Dosyanın sonunda .service olması dikkatinizi çekmiştir. Bunun özel bir anlamı var. service tipi systemd unitlerinden sadece biri. Diğer tipler için yukarıdaki ubuntu linkine göz atın derim.  Bu arada .service unit tipi için systemctl de .service ifadesini kullanmadan da işlem yapabiliyoruz. Aşağıdaki komutlar da çalışacaktır.

systemctl enable denemescript
systemctl start denemescript
systemctl stop denemescript

servis hakkında ne kadar süredir çalışıyor, son ekran çıktısı gibi bilgileri almak için:
systemctl status denemescript

Bunun dışında yapılandırma dosyasındaki Requires, After, WantedBy gibi ifadeler servisin diğer systemd unitleri ile olan ilişkilerini belirliyor. Bu haliyle kernelden sonraki çoklu kullanıcı ortamı yüklendikten ve network-online işlemi gerçekleştikten sonra servisimiz çalışacak. Eğer sonlanırsa Restart komutları sayesinde 10 saniye bekleyip tekrardan çalışacak. Bu şekilde bir yapılandırmayı yaygın olarak kullanmamım sebebi birbiriyle ilişkili servislerinin sorunsuzca başlatılabilmesini sağlaması. Örneğin mongodb yi ve mongodb yi kullanan scripti bu şekilde iki ayrı servis olarak eklediğimizi düşünelim. script mongodb den önce çalışırsa bağlantı sağlayamadığından çalışamayacak ve sonlanacak, fakat systemd aynı scripti 10 saniye sonra tekrar çalıştırmayı denediğinde veritabanı uygun olacağından bağlanacaktır.

Systemd logları varsayılan olarak dosyaya kaydetmiyor. Tabi bunu istersek >> operatoru ile execstart'da el ile verebiliriz fakat buna gerek yok. syslog'da tutulan bu loglara journalctl ile erişebiliyoruz. Örneğin

journalctl -u denemescript

ile loglara erişebilir ve:
journalctl -u denemescript -f

ile logları akarken stream olarak izleyebiliriz. Burdaki -u parametresi unit in kısaltmasıdır.

Sistemde şu an çalışan tüm systemd servis unitlerini görnek için şu komutu kullanabilirsiniz:
systemctl list-units --type service --state running

hmm