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. 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. 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. 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. 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
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. Eksikleri
● Metrik için özelleşmiş değil
● API desteği eksik - ti (4.4 ile beta olarak gelmiş)
● Ölçek sorunu
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
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. Statsd
● Graphite/Carbon için ön uç (front-end)
● Sayaç ve Zamansal verinin bir araya getirilmesi (counting
& timing) → rrd, ganglia
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')
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. 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. 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