Prometheus Alertmanager Proaktif Ci /cd İzleme
Neden CI /CD Boruları için Proaktif İzleme Maddeleri
Sürekli bütünleşme ve Sürekli İşbirlikleri (CI/CD) boru hatları modern yazılım teslimatının arka kemiği oluşturur. Test etmek, bina etmek ve üretime dağıtmak için her şeyi otomatikleştirmektedir.Bir boru hattı molası olduğunda, tüm geliştirme ekibini engelleyebilir, gecikme sürümlerini engelleyebilir ve -eğer üretime geri dönmezlerse - el ele alınmaz kod.
Prometheus, uyarıcı, uyarıcının akıllı uyarılarını kullanarak, uyarıları kontrol etmek için karmaşık bir çalışmadır - ilgili bildirimleri, baskılı çoğaltmalar ve onları doğru insanlara veya sistemlere yönlendirmek.
Prometheus Alertmanager
Prometheus Alertmanager bir tek bir sistem değil - Prometheus sunucusu ile konserde çalışır. sunucu yapılandırmada tanımlanmış olan uyarı kurallarını çeşitli kanallarla toplar: e-posta, Pagerty, OpsGenie, webhooks ve daha fazlası.
Uyarıcının Temelleri
- [FONT=0)Alert ingestion:[Dönetici:[Dönetici:0)[0) ve bir notlar (örneğin, [[Dönemler, açıklama) içerir.
- [FONT:0] Gruplama mantığı:[Dönetici:[Dönetici:0) Benzer uyarıları tek bildirimlere konsolide eden, grup tüm boru hatları adı ve çevre tarafından başarısızlıklar inşa eder.
- [FONT:0]Kömül ağaç:[Dönetici:[Dönetici:0)[Dönlendirme ağacı:[Dönlendirme ağacı:[Dönlendirmeler:[Dönlendirmeler) Bir alıcı ağacı, uyarıların etiket eşleştirmeye dayalı nereye gittiğini karar verir. Alerts farklı konfigürasyonlarla birden çok şube takip edebilir.
- [FONT:0]Silencing ve engellenme: Bakım sırasında uyarıların geçici olarak bastırılması veya daha yüksek öncelikli uyarılarda daha düşük öncelikli olanları reddentmektedir.
- [FONT:0) Zaman tabanlı muting:[Dönetici:[Dönetici:[Dönetici:0) Bir programda uyarıları bastırmak için mute zamanlayıcıları kullanın (örneğin, rutin dağıtımlar veya bir gecede iş).
Sistem sayesinde nasıl akışlar
- Prometheus, ihracatçılardan veya uç noktalarından ölçümler çıkarır (örneğin, Jenkins metrics, GitLab CI metrics, Kubernetes pod statüsü).
- Prometheus yapılandırmasında tanımlanmış uyarı kurallarına dayanarak, koşullar bir uyarı tetikler (örneğin, 10 dakika içinde başarısızlık oranı >% 5).
- Uyarıcı yangın uyarısını alır, grup bekleme ve aralık ayarları, toplu uyarılar ve onları rotalar.
- Bildirimler, alıcılara gönderilir. Cevaplar otomatik eylemleri (örneğin, sıkı bir işi yeniden başlatması için webhook) tetikleyebilir.
Bu akışını anlamak, kritik olayların asla kaçırılmaması için uyarıcıları uyarmak için gereklidir.
Neden Alertmanager özellikle CI /CD İzleme için?
CI/CD boru hatları yüksek bir ölçüm ve olaylar üretir. Akıllı Uyarı olmadan, takımlar gürültülü bildirimde boğulur - her biri başarısız test, yavaş dağıtım veya aralıklı ağ blip bir mesaj tetikler. Alertmanager bunu çözer:
- [FONT:0) Gürültüyü azaltmak: [Dönder: 1) Gruplama aynı boru hattından uyarıları birleştirir veya neden bu yüzden bir bildirim birçok ilgili başarısızlıkları kapsar.
- [FONT:0] kritik konuları ifade etmek:[Dönetici:0][Dönetici:0) Düşük gürültü uyarıları bir Slack log kanalına gidebilir.
- [FONT:0]Handling deduplication:) Aynı koşul için tekrarlanan uyarıları önlemek, hangi ölçümler 15 saniyeden kazındığında yaygındır.
- [FONT:0]Enabling bakım pencereleri: [Dönetici: [Döneticiler veya altyapı yükseltmeleri planlı dağıtımlarda veya altyapı yükseltmeleri sırasında yanlış alarmlardan kaçınmak için sessiz uyarılar.
Uyarıcı ile proaktif izleme, boru bozulması eğilimlerini tespit edebileceğiniz anlamına gelir (örneğin, toplam bir başarısızlıka neden olan zaman).
CI/CD Boru Hattınız için Prometheus ve Alertmanager'ı açın
Katı bir uyarı temeli uygulamak hem Prometheus hem de Alertmanager'ı anlamak gerektirir. Aşağıda gerçek dünya gözleriyle bir adım kılavuzu vardır.
Adım 1: Deploy Prometheus ve Alertmanager
Zaten yapmadıysanız, Prometheus ve Alertmanager. Common yaklaşımlar Docker, Kubernetes Helm grafikler veya yerli paketler kullanarak içerir. Basit bir test ortamı için, docker-compose kullanabilirsiniz:
version: '3'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
alertmanager:
image: prom/alertmanager:latest
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
Resmi olarak noter:0)Alertmanager Belgeleri[Dönetici konfigürasyonlar için).
Adım 2: CI /CD-Specific Metriks
Prometheus'un CI/CD araçlarınıza metriklere ihtiyacı var. Ortak entegrasyonlar:
- [FONT:0]Jenkins: [DDÜT:1] Prometheus metrikleri kullanın. Expos iş süresi, sonuçları inşa edin ve kuyruk boyutları.
- [FONT:0)GitLab CI:[Dönetici:[Dönetici:0) GitLab'ın inşa edilmiş Prometheus metrikleri veya GitLab ihracatçısı koşucu için.
- [FONT:0)GitHub Actions:[Dönetici:[Dönetici:0)) Prometheus itgateway ile iş akışları için baskı Özel ölçümler.
- [FOubernetes: [Dönetici: [Dönetici: 0,4] Boru hattını izlemek ve iş tamamlanmalarını izlemek için kube-state-metrikleri kullanın.
Örneğin, Jenkins'in başarısızlıkları izlemek için, başarı için 0 değerle birlikte, 1 başarısızlık için bir metrik ortaya çıkar.
Adım 3: Prometheus'ta Uyarı Kuralları Oluşturun
Uyarı kuralları Prometheus'a yüklenen YAML dosyalarıdır. Aşağıda bir CI/CD boru hattı için örnek bir dosya:
groups:
- name: CI/CD Alerts
rules:
- alert: BuildFailureHigh
expr: rate(jenkins_job_last_result{result="failure"}[5m]) > 0.1
for: 2m
labels:
severity: critical
annotations:
summary: "High build failure rate in pipeline {{ $labels.job }}"
description: "Build failure rate > 10% over 5 minutes for job {{ $labels.job }} in environment {{ $labels.env }}"
- alert: DeploymentDurationAnomaly
expr: histogram_quantile(0.95, rate(deployment_duration_seconds_bucket[10m])) > 300
for: 5m
labels:
severity: warning
annotations:
summary: "Deployment duration anomaly for service {{ $labels.service }}"
description: "95th percentile deployment duration exceeds 5 minutes"
Adım 4: Configure Alertmanager Routing ve Bildirimler
Uyarıların nasıl işlendiğini tanımlayan birFLT:6 oluşturun. Örnek:
route:
group_by: ['alertname', 'job', 'env']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
continue: true
- match:
severity: warning
receiver: 'slack-warnings'
receivers:
- name: 'pagerduty-critical'
pagerduty_configs:
- service_key: <your-pagerduty-key>
- name: 'slack-warnings'
slack_configs:
- api_url: https://hooks.slack.com/services/...
channel: '#ci-cd-alerts'
send_resolved: true
Anahtar ayarları:
- [FONT:0)grup by:[Dönetici: [Dönetici: 0,4] Grup, her başarısız inşa için bildirimlerden kaçınarak iş ve çevre tarafından uyarılar.
- [FONT:0]grup bekle/interval:[Dönem:[Dönem: 1 ) Kontroller geçici gecikme ve ne sıklıkta devam eden sorunlar için gönderilen bildirimler.
- [FONT:0] ⁇ interval:[Dönetici:[Dönetici:[Dönetici: 0) Durum devam etmediği sürece, aynı uyarıyı tekrar tekrarlamak için uyarıda bulun.
Kapsamlı bir rehber için, [[Şerefli konfigürasyon belgeleri).
Adım 5: Olay Yanıt Otomasyonu ile Bütünleştir
Proaktif izleme sadece uyarıların harekete geçmesi durumunda etkilidir. Uyarıcıda otomatik yanıtları tetiklemek için webhooks kullanın:
- Rundeck veya başarısız bir dağıtım yeniden denemesi için bir araç için bir webhook gönderin.
- Yüksek bir su dağıtım uyarıları olduğunda, bilinen en iyi yapıya geri döner.
- Jira bileti veya PagerDuty olayı kritik uyarılardan oluşturun.
Birçok takım ayrıca, Uyarıcının üst kısmındaki uyarı programları yönetmek için (veya benzer) Grafana OnCall[FONT:1) kullanıyor.
Proaktif CI /CD İzleme için Gelişmiş Uyarıcı Özellikler
Temel routing ayarlandığında, izlemenizi iyi almak için gelişmiş özelliklerden yararlanın.
Inhibition Kuralları
Örneğin, Kubernetes node düşer (kahkadar uyarıları) Eğer program dışı uyarılar hakkında uyarılara ihtiyacınız yoktur (kahkaha uyarıları)
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['namespace', 'cluster']
Bu, hataların kalibrasyonu sırasında gürültüyü azaltır.
Silencing ve Mute Timers
Örneğin, her Salı günü 2 AM'de dağıtsanız, bu pencere sırasında dağıtımla ilgili uyarıları bastırırsınız:
mute_time_intervals:
- name: tuesday_deploy
weekdays: ['Tuesday']
time_intervals:
- times: ['02:00', '04:00']
Yolunuzda mutebi referans: 03:11. Bu, beklenen operasyonel aktivitelerden uyarı yorgunluğunu önler.
Alertmanager Webhooks for Custom Actions
Slack ve PagerDuty'nin ötesinde, iç araçla entegre etmek için webhooks kullanın. Örneğin, bir webhook alıcı sıkı bir boru hattını otomatik olarak başlatabilecek bir API çağırabilir:
receivers:
- name: 'webhook-auto-fix'
webhook_configs:
- url: 'https://internal-api.example.com/pipeline/restart'
send_resolved: true
Anahtar Toplayıcılar Her CI/CD Boru Hattı İzlemesi Gerekiyor
Etkili uyarı kuralları tanımlamak için, ne ölçümlerin önemli olduğunu bilmeniz gerekir. DORA (DevOps Research and Assessment) çerçevesi dört temel metrikleri tanımlar:
- [FONT=0)İşçi frekansı:[Dönetici:[Dönetici:0)))))İşçiliğin frekansı:[Dönetici:[Dönetici:0)))))))))))) Bir eşiğin altında düşme uyarı.
- [FONT:0) Değişim için zaman:[Dönetici:[Dönetici:0) Zaman:[Döneticiler için uyarı.
- [FONT:0) Kurtarma zamanı (MTTR): ) Başarısızlıklardan kurtarmak için Zaman. MTTR Uyarısı SLAs'yi aştı.
- [FONT=0)Değişim başarısızlığı oranı:[Döneticiler için Yüzde 1]
Prometheus bunları özel ihracat veya loglar-to-metrik boru hatlarıyla takip edebilir. Örnek uyarı MTTR için kural:
- alert: MTTRTooHigh
expr: avg by (service) (deployment_recovery_time_seconds) > 3600
for: 10m
labels:
severity: warning
annotations:
summary: "MTTR for {{ $labels.service }} exceeds 1 hour"
CI/CD Borularında Uyarılama için en iyi uygulamalar
Aşırı doldurma, bu yönergeleri uyarınızı etkili tutmak için takip eder.
Define Anlamlı Thresholds
Tarihi verilerle ilgili temel eşler tahmin edilmez. Gerçek bir uyarı vs. normal dalgalanmaları oluşturan olayları analiz etmek için geçmiş olaylar. Dinamik eşleri kullanın (hakayıt kuralları) uyumsuzluğu için.
Birden Çok Şiddetli Seviye Kullanın
Eylemlere cevap vermek için harita kıvrımları:
- [FONT:0)Critical:[Dönetici:[Dönetici: Boru hattı tamamen bloke edilir veya üretim dağıtım başarısız olur. acil insan müdahalesi gerektirir.
- [FONT:0)Warning:[Dönetici:[Dönlendirme:[Dönlendirme:[Dönlendirme: [Dönlendirme: [Dönlendirme: [Dönlendirme: [Dönlendirme:) Performans bozulma, artan başarısızlık oranı, önümüzdeki saatler boyunca yapılan limitler boyunca kaynak kullanımı.
- [FONT:0)Info:[Dönetici:[Dönetici:) Routine bildirimleri (e.g., bakım tamamlanma).
Gerçek Data ile Test Uyarı Kuralları
Prometheus'un yerleşik test araçları veya ESFLT:14, dağıtmadan önce kuralları doğrulamaya yardımcı olun. Simulate uyarı koşulları bir ortamda.
Doküman Uyarı Yapıları
Bir wiki veya runbook her uyarının amacını, ne zaman tetiklendiği ve gerekirse nasıl sessizliğin sağlanması. Bu hızlar olay yanıtı.
Düzenli olarak İnceleme ve Refine
Tüm uyarı kurallarının dörtte bir gözden geçirilmesi. Dur stale kuralları, eşleri ayarlama ve yenileri değiştirme hatları için ekleyin. Alertmanager'ın basitliği onu kolayca iterate'ye kolaylaştırır.
Popüler CI/CD Platformları ile birlikte tüm Uyarıcılar
Jenkins
İş inşa etmek için kullanılan değer, süresi ve sonuçları ortaya çıkarmak için, Prometheus metrics[[Döneticileri, süresi ve sonuçları.Geçmiş durumdaki kuyruk boyutlarında veya işlere uyarı.
GitLab CI
GitLab koşucular için uç noktası ortaya çıkarır. Monitor koşucu kullanılabilirlik ve boru hattı yürütme süreleri.Birleşme isteği boru hatları için, itenway aracılığıyla özel ölçümler kullanın.
GitHub Actions
GitHub Actions yerli olarak Prometheus metriklerini ortaya çıkarmadığından, iş akışlarından gelen ölçümler, iş akışları veya zaman kesinti oranları üzerinde uyarı kullanıyor.
# In a workflow step
- name: push metrics
run: |
echo "pipeline_status{workflow=\"deploy\",result=\"${{ job.status }}\"} 1" | curl --data-binary @- http://pushgateway:9091/metrics/job/github_actions/instance/${{ github.run_id }}
Kubernetes Yerli Borular (Tekton, Argo Workflows)
Boru hatları ve özel kaynak tanımlarını izlemek için [[UseDs) Feed on pipelineRun başarısızlıkları veya GörevRun zamanouts.
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
Güçlü bir kurulumla bile, takımlar zorluklarla karşılaşırlar. İşte onları nasıl gezebilirsiniz:
- [FONT:0]Alert yorgunluk:[Dönetici: 0,4][/FONT=0)) Aşırı hassas eşler veya çok fazla düşük sempozyum uyarıları. Çözüm: eşleri yükselt, gruplama ile toplu uyarıları ve bilinen çevrimler sırasında çamur kullanın.
- [FONT:0) eleştirel uyarıları ele geçiriyor:[Dönetici: 0) Belirli başarısızlık modları için tanımlanmamış kurallar (örneğin, flaky testleri nedeniyle sessiz bir başarısızlıklar inşa ediyor). Çözüm: periyodik olarak gözden geçirme olayı raporları ve ilgili uyarı kuralları ekleyin.
- [FONT=0) Aşırılık:[Dönlendirme:[Dönlendirme:0) Birden fazla kanala gönderilen aynı uyarı: PagerDuty'ye eleştirel uyarılar, uyarıları ve e-posta arşivlerine bilgi.
- [FONT:0)Configuration sürüklenme:[Dönetici:[Dönetici:0)Refiguration sürüklenme:[Dönlendirme olmadan yapılandırılan değişiklikler:) Uyarıcı imar değişiklikleri yorum yapmadan kontrol edin. Çözüm: sürümünüzü kontrol edin: sürümünüzü kontrol edin: CI/CD onay ile değiştirmek için CI/CD kullanın.
İzlemeyi İzlemeyi Kendini Takip Etmek
Prometheus ve Alertmanager birbirlerini izleyebilir. Expose Prometheus'un kendi metriklerini izleyebilir ve Uyarıcı başarısızlıklar için uyarıları ayarlayabilir (örneğin, bildirimler başarısız, sessizlikler expiring Örnek kuralı:
- alert: AlertmanagerNotificationFailing
expr: rate(alertmanager_notifications_failed_total[10m]) > 0.01
for: 5m
labels:
severity: critical
annotations:
summary: "Alertmanager notifications are failing"
İzleme döngünüzün kör noktalardan kaçınmak için dirençli olmasını sağlayın.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Prometheus Alertmanager for proaktif CI/CD izleme, boru hattınızı aktif hale getirmek için güvenli bir şekilde dönüştürmeye çalışır.Sistem herhangi bir CI /CD platformuyla entegre etmek için yeterince esnektir ve açık kaynak doğası, maliyetlerinizi belirlemek için tam ihtiyaçlarınızı tespit etme yeteneği kazanır - bunun doğru bir şekilde, gerçek kurtarma işlemine dayalı olarak, gerçek kurtarma olaylarıyla ilgili olarak, herhangi bir CI/CD platformu ile entegre etmek için zamanınızı yatırım yapmak için zamanında yatırım yapabilirsiniz.