Fiziksel sunucular, sanal makineler, kapsayıcılar ve kapsayıcıların içinde çalışan hizmetler için ölçüm depolaması, görselleştirme ve uyarılar sağlayabilen açık kaynaklı, kendi kendine barındırılan bir izleme çözümü arıyordum. Elastic Beats, Graphite ve Prometheus'u denedikten sonra Prometheus'u onayladım. Prometheus'u seçmenin ana nedeni, çok boyutlu ölçümü desteklemek ve kolay öğrenilen sorgu dilidir. Grafikler ve uyarılar için aynı dili kullanabilirsiniz, bu da izleme görevlerini kolaylaştırır. Prometheus, kara kutu algılamanın yanı sıra beyaz kutu ölçümlerini de yönetir, bu da altyapıyı inceleyip uygulamanın dahili durumunu izleyebileceğiniz anlamına gelir.
Neden Prometheus'u seçmelisiniz:
Tüm yığın, kapsayıcılar kullanılarak dağıtılabilir
Dağıtık sistemler ve altyapı için inşa edilmiştir
Ölçeklenebilir veri toplama, dağıtılmış depolamaya dayanmaz
Esnek hizmet keşfi (Kubernetes, Consul, EC2, Azure için yerleşik destek)
HAProxy, MySQL, PostgreSQL, Memcached, Redis ve diğer hizmetleri sağlayan özel ihracatçı
Prometheus ekosistemi büyük önem taşımaktadır.Çeşitli sistemlere uygun gösterge ihracatçıları bulabilirsiniz: veritabanları, MQ, HTTP sunucularından IoT veya IPMI gibi donanımla ilgili sistemlere. Whitebox gözetimi ayrıca geniş bir kapsama alanına sahiptir. Prometheus istemci kitaplığı, Go, Java, Python, Ruby, .NET, PHP ve daha fazla programlama dili için uygundur.
Prometheus ve Docker'a başlarken
Prometheus yığınını denemek istiyorsanız, GitHub'daki dockprom deposuna bakın. kullanabilirsin dockprom Kendi izleme çözümünüzü geliştirmek için bir başlangıç noktası olarak. kullanım dockprom, Tüm yığını tek bir komutla çalıştırabilirsiniz: Prometheus, Grafana, cAdvisor, NodeExporter ve AlertManager.
Bir Docker Swarm sürümü arıyorsanız, lütfen swarmprom blog gönderisine bakın.
Kurulum
Docker ana bilgisayarındaki dockprom deposunu klonlayın, dockprom dizinine kopyalayın ve compose up komutunu çalıştırın:
git klon cd dockprom ADMIN_USER = yönetici ADMIN_PASSWORD = yönetici docker-compose up -dkonteyner:
Prometheus (gösterge veritabanı) http: // < ana bilgisayar-ip > : 9090
AlertManager (Uyarı Yönetimi) http: // < ana bilgisayar-ip > : 9093
Grafana (görsel gösterge) http: // < ana bilgisayar-ip > : 3000
NodeExporter (ana bilgisayar metrik toplayıcı)
cAdvisor (kapsayıcı ölçümleri toplayıcı)
Caddy (ters proxy ve prometheus ve alertmanager için temel kimlik doğrulama sağlayıcısı)
Grafana'yı kur
Şu yöne rotayı ayarla http: // < ana bilgisayar-ip > : 3000 kullanıcı yönetici parola yönetici Ve oturum açın. Oluşturma dosyasındaki kimlik bilgilerini değiştirebilir veya oluştururken bunu sağlayabilirsiniz ADMIN_USER ile YÖNETİCİ ŞİFRESİ Ortam Değişkenleri.
Grafana, varsayılan veri kaynağı olarak Dashboard ve Prometheus ile önceden yapılandırılmıştır:
İsim: Prometheus
Türü: Prometheus
URL: http: // prometheus: 9090
Ziyaret: Temsilci
Docker ana bilgisayar kontrol paneli
Docker ana bilgisayar kontrol paneli, sunucu kaynak kullanımını izlemek için temel göstergeleri görüntüler:
Sunucu çalışma süresi, CPU boşta kalma yüzdesi, CPU çekirdeği sayısı, kullanılabilir bellek, takas ve depolama
Sistem yük ortalama grafiği, IO işlem grafiği, kesinti grafiği ile çalıştırılır ve bloke edilir
Modların CPU kullanım grafiği (misafir, boşta, iowa, irq, iyi, softirq, çalma, sistem, kullanıcı)
Dağıtıma göre bellek kullanımı grafiği (kullanılan, kullanılabilir, arabellek, önbellek)
IO kullanım grafiği (Bps okuyun, Bps ve IO zamanını okuyun)
Cihazın ağ kullanım şeması (inbound Bps, outbound Bps)
Exchange kullanım ve etkinlik çizelgeleri
Docker kapsayıcı panosu
Docker Container Dashboard, çalışan container'ları izlemek için temel göstergeleri gösterir:
Toplam konteyner CPU yükü, bellek ve depolama kullanımı
Çalışan konteyner diyagramı, sistem yükleme diyagramı, IO kullanım diyagramı
Konteyner CPU kullanım grafiği
Konteyner bellek kullanım grafiği
Konteyner önbelleğinin bellek kullanım grafiği
Konteyner ağının gelen kullanım diyagramı
Kapsayıcı ağı giden kullanım diyagramı
Bu panonun, izleme yığınına ait olan kapsayıcıları görüntülemediğini unutmayın.
Hizmet panosunu izleme
İzleme Hizmetleri Panosu, izleme yığınını oluşturan konteynerleri izlemek için kullanılan temel göstergeleri görüntüler:
Prometheus konteyner çalışma süresi, yığının toplam bellek kullanımını, Prometheus yerel depolama bellek bloğu ve serisini izleyin
Konteyner CPU kullanım grafiği
Konteyner bellek kullanım grafiği
Prometheus'un azminin aciliyet tablosu
Prometheus video engelleme ve kontrol noktası süre grafiği
Prometheus numune alım oranı, hedef çizilme ve çizilme süresi grafiği
Prometheus HTTP istek grafiği
Prometheus Uyarı Haritası
Prometheus saklama süresini 200 saat ve yığın boyutunu 1 GB olarak belirledim.Bu değerleri oluşturma dosyasında değiştirebilirsiniz.
prometheus: görüntü: balo / prometheus komut: -'- storage.local.target-heap-size = 1073741824 ' -'- storage.local.retention = 200h 'Yığın boyutunu maksimum toplam fiziksel belleğin% 50'sine ayarladığınızdan emin olun.
Alarmı tanımla
Üç uyarı profili oluşturdum:
Hizmet uyarı hedeflerini izleme. Kurallar
Docker Host, host.rules'i hatırlatıyor
Docker Kapsayıcıları uyarı container'ları.rules
Prometheus'a bir HTTP POST çağrısı yaparak uyarı kurallarını değiştirebilir ve yeniden yükleyebilirsiniz:
curl -X POST http: // < ana bilgisayar-ip > : 9090 / - / yeniden yükleServis uyarılarını izleyin
Herhangi bir izleme hedefi (node-exportorter ve cAdvisor) 30 saniyeden fazla kapalıysa, bir alarm tetiklenir:
ALERT monitor_service_down EĞER yukarı == 030 sn İÇİN ETİKETLER {severity = "kritik"} AÇIKLAMALAR { Summary = "Çalışmayan hizmeti izle", description = "{{$ labels.instance}} hizmeti çalışmıyor.", }Docker Ana Bilgisayar uyarısı
Docker ana CPU'su 30 saniyeden fazla yüksek yük altındaysa bir alarm tetiklenir:
ALERT high_cpu_load IF node_load1 > 1.530 sn İÇİN ETİKETLER {severity = "uyarı"} AÇIKLAMALAR { Summary = "Yüksek yük altında sunucu", description = "Docker ana bilgisayarı yüksek yük altında, ortalama yük 1m {{$ value}}. {{$ labels.job}} işinin {{$ labels.instance}} örneği tarafından rapor edildi.", }Yük eşiğini CPU çekirdeğine göre değiştirin.
Docker ana bilgisayar belleği neredeyse doluysa, bir uyarı tetiklenir:
ALERT high_memory_load EĞER (toplam (node_memory_MemTotal) -sum (node_memory_MemFree + node_memory_Buffers + node_memory_Cached)) / sum (node_memory_MemTotal) * 100 > 8530 sn İÇİN ETİKETLER {severity = "uyarı"} AÇIKLAMALAR { Summary = "Sunucu belleği neredeyse dolu", description = "Docker ana bilgisayar bellek kullanımı% {{humanize $ value}}. {{$ labels.job}} işinin {{$ labels.instance}} örneği tarafından rapor edildi.", }Docker ana bilgisayar depolama alanı neredeyse doluysa, bir alarm tetiklenir:
ALERT hight_storage_load IF (node_filesystem_size {fstype = "aufs"} - node_filesystem_free {fstype = "aufs"}) / node_filesystem_size {fstype = "aufs"} * 100 > 8530 sn İÇİN ETİKETLER {severity = "uyarı"} AÇIKLAMALAR { Summary = "Sunucu depolama alanı neredeyse dolu", description = "Docker ana bilgisayar depolama kullanımı% {{humanize $ value}}. {{$ labels.job}} işinin {{$ labels.instance}} örneği tarafından rapor edildi.", }Docker Container uyarısı
Konteyner 30 saniyeden fazla kapalı kalırsa bir alarm tetiklenir:
UYARI jenkins_down Yoksa (container_memory_usage_bytes {name = "jenkins"}) 30 sn İÇİN ETİKETLER {severity = "kritik"} AÇIKLAMALAR { özet = "Jenkins düştü", description = "Jenkins konteyneri 30 saniyeden fazla kapalı." }Konteyner, toplam CPU çekirdeklerinin% 10'undan fazlasını 30 saniyeden fazla kullanırsa, bir alarm tetiklenir:
UYARI jenkins_high_cpu IF sum (oran (container_cpu_usage_seconds_total {name = "jenkins"})) / count (node_cpu {mode = "system"}) * 100 > 1030 sn İÇİN ETİKETLER {severity = "uyarı"} AÇIKLAMALAR { Summary = "Jenkins yüksek CPU kullanımı", description = "Jenkins CPU kullanımı% {{humanize $ değer}}." }Konteyner 30 saniyeden fazla 1,2 GB'den fazla RAM kullanırsa bir alarm tetiklenir:
UYARI jenkins_high_memory IF toplamı (container_memory_usage_bytes {name = "jenkins"}) > 120000000030 sn İÇİN ETİKETLER {severity = "uyarı"} AÇIKLAMALAR { Summary = "Jenkins yüksek bellek kullanımı", description = "Jenkins bellek tüketimi {{$ değeri insanlaştır}} seviyesinde.", }Alarm kurmak
AlertManager hizmeti, Prometheus sunucusu tarafından gönderilen uyarıları işlemekten sorumludur. AlertManager, e-posta, Pushover, Slack, HipChat veya webhook arayüzünü açığa çıkaran başka herhangi bir sistem aracılığıyla bildirim gönderebilir. Entegrasyonların tam listesi burada bulunabilir.
Ziyaret ederek bildirimleri görüntüleyebilir ve sessize alabilirsiniz http: // < ana bilgisayar-ip > : 9093 .
Bildirim alıcısı, alertmanager / config.yml dosyasında yapılandırılabilir.
Slack aracılığıyla uyarı almak için, seçmeniz gerekir Gelen web kancası Özel entegrasyon gerçekleştirin. Slack entegrasyonunu kurma hakkında daha fazla bilgiyi burada bulabilirsiniz.
Slack Webhook URL'sini şuraya kopyala: api_url Alan ve Slack belirtin koridor .
rota: alıcı: 'slack'receiver'lar: -name: 'slack' slack_configs: -send_resolved: doğru text: "{{.CommonAnnotations.description}}" kullanıcı adı: 'Prometheus' kanal:'# < kanal > ' api_url: 'https: //hooks.slack.com/services/ < webhook kimliği > 'Genişletilmiş izleme sistemi
Dockprom Grafana kontrol paneli, birden fazla Docker ana bilgisayarını kapsayacak şekilde kolayca genişletilebilir. Daha fazla ana bilgisayarı izlemek için tek yapmanız gereken her ana bilgisayara dağıtım yapmaktır Düğüm dışa aktarıcı ile cAdvisor Kapsayıcılar ve onları almak için Prometheus sunucusunu işaret edin.
Her veri merkezi / bölgesi için Prometheus yığınını çalıştırmalı ve tüm altyapıya genel bir bakış olarak kullanılacak özel Prometheus örneğindeki tüm ölçümleri toplamak için federasyon işlevini kullanmalısınız. Bu şekilde, bir bölge başarısız olursa veya bölge birleştirme gerçekleştiren Prometheus örneği kapatılırsa, kalan bölgelerde bulunan izleme sistemlerine yine de erişilebilir.
Ayrıca, her bölgede iki özdeş Prometheus sunucusu çalıştırarak Prometheus'u yüksek oranda erişilebilir hale getirebilirsiniz. Alertmanager, tekilleştirme gerçekleştirdiği için, birden çok sunucunun aynı Alertmanager'a uyarılar göndermesine izin vermek, yinelenen uyarılara neden olmaz.