Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sunucularımızı Gözleyelim

471 views

Published on

Inet-tr 2014 kapsamında Yaşar Üniversitesi'nde verdiğim sunum

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Sunucularımızı Gözleyelim

  1. 1. Sunucularımızı Gözleyelim Oğuz Yarımtepe @oguzy oguzyarimtepe ~ gmail.com http://about.me/oguzy
  2. 2. Gözlem yapmak kolay değildir! Eğer başarılı ise, farklı gözlem yöntemlerini uygun ve hassas bir şekilde güzel bir modele oturtabilmeliyiz.
  3. 3. Büyük veri ~25metrics/server 100M active users = 200K QPS 10.000 servers = 25.000 metric 12 type servers = 3.000.000 metrics 10.000 metrics/second O(10K) metrics/second O(32MB) data/sweep Ops @ 1 min O(50K) metrics/second O(320MB)/sweep O(420G)/24hours DNS server Load balancer monitoring
  4. 4. Neyi gözlüyoruz? Named value at some time ● K-tuple & timestamped 127.0.0.1 - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" <remote ip, timestamp, request type and the url, response type, response amount> ● Metrik değerler Sayaçlar (counters), Anlık değerler (Gauges), Yüzdelik değerler (Percentiles)
  5. 5. Nasıl Gözlüyoruz? ● Çözünürlük Ne sıklıkta veri toplanıyor? (her 6 sn?, her 5 dk?, her dakika?) ● Gecikme Veriler okunduktan sonra ne kadar sürece tepki veriliyor (sn, dk?) ● Çeşitlilik Kaç çeşit veri var (10, 25, 50, 10K?)
  6. 6. Gereksinim? ● Evrensel (*nix, win, sistem kaynakları, aktif cihazlar) ● Uyarı (alert) – sms, e-posta, pager duty, – Belli zamanda belli kişiler – Erken ● Web arayüzü – Şu anki durum ne? – Sezonsal durumlar neler? – Belli bir eğilim var mı? ● Ölçeklenebilir – Ölçülen metrik sayısı ~ veri tabanı boyutu ● Özgür Yazılım – Güven (test edilip onaylandı) – Özelleştirilebilir ● Kullanımı kolay
  7. 7. Nagios
  8. 8. Nagios Özellikleri ● NRPE (nagios remote plugin executer) – Plugin Return Code Service State Host State 0 OK UP 1 WARNING UP or DOWN/UNREACHABLE* 2 CRITICAL DOWN/UNREACHABLE 3 UNKNOWNDOWN/UNREACHABLE ● Uç makine ayarları elle yapılıyor – Host, hangi zaman aralıklarında komutların çalışacağı, hangi gruba dahil olduğu, kimlere uyarının gönderileceği ... ● Farklı dillerde eklenti desteği ● Nagios XI – Eğilim (Trend) – Ticari destek
  9. 9. Eksikleri ● Metrik için özelleşmiş değil ● API desteği eksik - ti (4.4 ile beta olarak gelmiş) ● Ölçek sorunu
  10. 10. Sensu
  11. 11. Özellikleri ● Bulut için özelleşmiş – JSON ile yapılandırma – API erişimi ve API üzerinden yönetim – RabbitMQ – Omnibus ● HTTP dostu (üyelik & hiyerarşi → Rest Api) ● Nagios plugin desteği ● Web arayüzü daha dinamik
  12. 12. Uchiwa
  13. 13. Uchiwa - 2
  14. 14. Uchiwa - 3
  15. 15. Peki ya metrik? ● http://www.apache.org/server-status
  16. 16. collectd ● Ajan olarak çalışır ● Bütünleşik eklentileri – Veritabanı (doğal - influxdb) – TCP portu (graphite) – HTTP POST (json) ● Özelleşmiş eklenti yazmak mümkün – Python & statsd
  17. 17. Bazı eklentileri ● cpu, df, load, memory, disk ● Apache ● Mysql ● Interface ● Ping ● Filecount ● Nginx ● Ntpd ● tcpconns
  18. 18. Graphite
  19. 19. Grafana
  20. 20. Özellik ● <hostname>.load.load.shorttem ● Farklı grafik seçeneklerini destekler ● İstemci taraflı (client side) ● Zaman ayarlaması yapılabiliyor (5 saniyede bir yenile, son 1 saati göster) ● Threshold belirtilebiliyor ● Fonksiyon tanımları yapmak mümkün (graphite-api nin desteklediği, max min avg sum)
  21. 21. Statsd ● Graphite/Carbon için ön uç (front-end) ● Sayaç ve Zamansal verinin bir araya getirilmesi (counting & timing) → rrd, ganglia
  22. 22. Statsd - 2 ● Farklı dillerde yazılmış sunucu ve istemci uygulamaları var (Go, Python, Java, C, Ruby, Node) ● Timer >>> import statsd >>> >>> timer = statsd.Timer('MyApplication') >>> >>> timer.start() >>> # do something here >>> timer.stop('SomeTimer')
  23. 23. Statsd - 3 ● Counter >>> import statsd >>> >>> counter = statsd.Counter('MyApplication') >>> # do something here >>> counter += 1
  24. 24. Statsd - 4 ● Gauge >>> import statsd >>> >>> gauge = statsd.Gauge('MyApplication') >>> # do something here >>> gauge.send('SomeName', value)
  25. 25. Diamond ● Artalan süreci (daemon) ● Python ● Graphite ● Başka „handler“ da var: riemann, statsd, zmq ● Python ile yazılmış pek çok „collector“ var > collectd
  26. 26. Diamond - 2 import diamond.collector class ExampleCollector(diamond.collector.Collector): def collect(self): # Set Metric Name metric_name = "my.example.metric" # Set Metric Value metric_value = 42 # Publish Metric self.publish(metric_name, metric_value)
  27. 27. Influxdb ● Zamansal verinin saklanması için tasarlanmış (timescale) ● Cluster (experimental) ● Ölçeklenebilir ● Art ve Ön uçları var ● Statsd, Graphite ● Go ile yazılmış ● Harici bağımlılıkları yok (! zookeeper % hadoop, storm) – dpkg -i influxdb.deb ● HTTPS ● HTTP API → SQL Like
  28. 28. Influxdb - 2 [ { "name" : "hd_used", "columns" : ["value", "host", "mount"], "points" : [ [23.2, "serverA", "/mnt"] ] } ]
  29. 29. Veri tabanındaki verinin parçalanması (shardening) { "spaces": [ { "name": "everything_30d", "retentionPolicy": "30d", "shardDuration": "7d", "regex": "/.*/", "replicationFactor": 1, "split": 1 }, { "name": "rollups", "retentionPolicy": "365d", "shardDuration": "30d", "regex": "/^d+.*/", "replicationFactor": 1, "split": 1 } ] }
  30. 30. riemann ● Olan bazlı iş tanımlama (event processor) ● Collectd den metrik göndermek mümkün ● Cloujour ile tanımlamalar yapmak mümkün (where (or (service #"^api") (service #"^app")) (where (tagged "exception") (rollup 5 3600 (email "dev@foo.com")) (else (changed-state (email "ops@foo.com")))))
  31. 31. Riemann - 2 ● Websocket ● Cloujure ile kendi alerting çatınızı yazabilirsiniz ● Websocket → web arayüzü (def tell-ops (rollup 5 3600 (email "ops@rickenbacker.mil"))) (streams (where (state "error") tell-ops) (tagged "exception" tell-ops))
  32. 32. Teşekkürler

×