Alerting
Prometheus Alerting, Prometheus'ta tanımlanmış bir dizi kurala göre alarm oluşturmayı sağlayan bir bileşendir.
Prometheus Alerting, metriklerin değerlerini sürekli olarak izler ve tanımlanan kurala uyan metrikler için alarm üretir. Örneğin, bir kural, bir hizmetin yanıt verme süresinin normalde 500 ms'den az olduğunu belirleyebilir ve bu sürenin 500 ms'den yüksek olduğu durumlarda bir alarm üretir.
Alarm yöneticisi, tanımlanan alarm kurallarını gözlemler ve alarm durumlarına göre eylemler gerçekleştirir. Örneğin, bir hizmetin yanıt süresi belirtilen eşiği aşarsa, alarm yöneticisi bir bildirim gönderebilir veya bir dizi eylem gerçekleştirebilir.
Özetle,
Prometheus, belirli aralıklarla birçok farklı hizmetin ölçümlerini toplar ve bu ölçümleri zaman serileri olarak depolar. Bu ölçümler, sunucu kaynaklarının kullanımı, ağ trafiği, uygulama performansı vb. gibi birçok farklı alanda olabilir. Prometheus Alerting, bu ölçümleri kullanarak tanımlanmış kural veya koşullara göre alarm oluşturur. Örneğin, bir kural, bir sunucunun kullanılabilir belleğinin %10'dan az olmaması gerektiğini belirleyebilir ve bu koşul karşılanmadığında bir alarm oluşturabilir.
Bu kural ve koşullar YAML formatında yazılmaktadır.
Rule Oluşturmak;
Önceki bölümde oluşturduğumuz rule dosyamızın ismini, " recording_and_alerting_rules_1.yml " şeklinde güncelliyoruz. Ve içerisine aşağıdaki satırları ekliyoruz.
YAML dosyasındaki "my_rules_1" adlı grup içerisinde, "NodeExporterDown" adlı bir alarm tanımlandık.
Bu alarm, "up{job="node_exporter"} == 0" PromQL ifadesine göre tetiklenecektir. Bu ifade, "node_exporter" adlı işin çalışıp çalışmadığını kontrol eder. "up" metriği, bir işin çalışıp çalışmadığını gösteren 1 veya 0 değerini içerir. "job" etiketi, ölçümleri hangi işin sağladığını belirtir.
Eğer "node_exporter" adlı iş, 0 (çalışmıyor) değerini döndürürse, bu alarm tetiklenecektir. Alarm, bir bildirim veya başka bir işlemle yönetilebilir.
Örnek olması açısından, bir sunucumuza bağlanıp node_exporter servisimizi durdurduk. Ardından arayüzü kontrol ettiğimizde "firing" kısmında down olan sunucumuzu görebiliriz.
Ek olarak, "ALERTS" sorgusunu çalıştırarak, down durumda olan exporter hakkında bilgi alabiliriz.
For
"For" parametresi, bir alarmın ne kadar süre boyunca devam etmesi gerektiğini belirler. Bu parametre, bir alarmın yanlış bir şekilde tetiklenmesini engellemeye yardımcı olur.
Örneğin, "NodeExporterDown" adlı bir alarm, yukarıdaki örnekte olduğu gibi, "up{job="node_exporter"} == 0" PromQL ifadesine göre tetiklenecektir. Ancak, "for: 1m" parametresi, alarmın en az 1 dakika boyunca devam etmesi gerektiğini belirtir.
Bu, "node_exporter" adlı işin geçici bir kesintisi nedeniyle bir alarm tetiklenmesini önlemeye yardımcı olur. Örneğin, bir sistem güncellemesi sırasında "node_exporter" geçici olarak durabilir ve bu durumda alarm tetiklenebilir. Ancak, "for" parametresi, bu kesintinin geçici olduğunu ve alarmın devam etmesi gerektiğini belirtir.
Bu şekilde, alarm yöneticisi, alarmın yanlış bir şekilde tetiklenmesini önleyebilir ve yalnızca gerçek bir hizmet kesintisi durumunda bir bildirim gönderir.
"up{job="node_exporter"} == 0" koşulu sağlandığında hemen bir alarm tetiklenmez. Bunun yerine, alarm durumu "pending" durumuna geçer ve alarm koşulu 1 dakika boyunca sağlandıktan sonra yalnızca bir alarm tetiklenir.
"node_exporter" adlı işin geçici bir kesintisi olduğunda, alarm durumu "pending" durumuna geçer ve "for" parametresinde belirtilen süre boyunca bekler. Eğer işteki kesinti 1 dakikadan daha kısa sürerse, alarm tetiklenmez ve yanlış bir alarm gönderilmez.
Labels
"labels", bir alarm için ek bilgi veya metaveri sağlamak için kullanılan anahtar-değer çiftleridir. Bu etiketler, alarm yöneticisi tarafından kullanılabilen ve alarmı daha iyi yönetmeye yardımcı olan ek bilgiler sağlarlar.
Örneğin, yukarıdaki Prometheus kurallarında, "labels" parametresi kullanılarak iki farklı alarm için etiketler tanımlanmıştır. "severity" adlı bir etiket, her iki alarmda da kullanılmıştır. Bu etiket, bir alarmın önceliğini veya ciddiyetini belirtir.
"AppLatencyAbove5sec" adlı alarm için, "severity: critical" etiketi tanımlanmıştır. Bu etiket, alarmın kritik bir durumu işaret ettiğini belirtir. Bu, alarm yöneticisi tarafından daha hızlı bir şekilde işlenmesi gereken bir durum olduğunu gösterir.
Benzer şekilde, "AppLatencyAbove2sec" adlı alarm için, "severity: warning" etiketi tanımlanmıştır. Bu etiket, alarmın daha az ciddi bir durumu işaret ettiğini belirtir. Bu, alarm yöneticisinin bu durumu daha düşük bir öncelik seviyesinde ele alabileceğini gösterir.
Bu şekilde, "labels" parametresi, alarm yöneticisi tarafından alınacak aksiyonların önceliği veya ciddiyeti hakkında ek bilgi sağlar.
Alert Manager
Prometheus Alertmanager, Prometheus ile birlikte kullanılan açık kaynaklı bir uyarı yönetim sistemidir. Alertmanager, Prometheus'tan gelen alarm sinyallerini alır, gruplandırır, filtreler ve bunlara yanıt olarak belirli eylemler gerçekleştirir.
Alertmanager, gelen uyarıları e-posta, SMS, Slack, PagerDuty ve diğer bildirim kanalları aracılığıyla iletebilir. Ayrıca, uyarıların otomatik olarak tekrarlanmasını veya silinmesini sağlayabilir. Alertmanager, karmaşık alarm durumlarını işlemek için özelleştirilebilir ve genişletilebilir bir yapıya sahiptir.
Genel olarak, Prometheus Alertmanager, Prometheus'tan gelen alarm sinyallerini yönetmek, filtrelemek ve yanıtlamak için tasarlanmıştır.
Kurulum,
Kurulacak sunucu üzerinde "prometheus" kullanıcısı ve grubu mevcut değilse, oluşturmalısınız.
Yukarıdaki komut ile "Alert Manager" servisini kuruyoruz. Özetle yukarıdaki komut şunları yapar;
/tmp dizinine geçer: "cd /tmp"
Alertmanager'ın Linux AMD64 sürümünü indirir: "wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz"
İndirilen dosyayı açar: "tar xzf alertmanager-0.25.0.linux-amd64.tar.gz"
İndirilen dizine geçer: "cd alertmanager-0.25.0.linux-amd64"
Alertmanager ve amtool dosyalarını /usr/local/bin dizinine taşır: "mv -v alertmanager amtool /usr/local/bin/"
/etc/alertmanager dizinini oluşturur: "mkdir -v /etc/alertmanager"
alertmanager.yml dosyasını /etc/alertmanager dizinine taşır: "mv -v alertmanager.yml /etc/alertmanager"
/etc/alertmanager/data dizinini oluşturur: "mkdir -v /etc/alertmanager/data"
/etc/alertmanager/ dizinini prometheus:prometheus kullanıcısına ve gruba sahip olacak şekilde değiştirir: "chown -Rfv prometheus:prometheus /etc/alertmanager/"
Alert Manager systemd dosyasını oluşturalım.
Bu systemd dosyasını kaydettikten sonra, "systemctl daemon-reload
" komutunu kullanarak systemd'ye dosyayı yeniden yüklemelisiniz. Daha sonra, "systemctl start alertmanager
" komutunu kullanarak Alertmanager hizmetini başlatabilirsiniz. "systemctl stop alertmanager
" komutu ile de hizmeti durdurabilirsiniz.
Yukarıdaki adımları uygulayarak, Alert Manager servisini kurup, çalıştırdık.
Prometheus.yaml dosyamızda, yeni kurduğumuz alert manager servisini tanımlayıp servisi restart ediyoruz.
systemctl restart prometheus
komutu ile prometheus servisi restart ediyoruz.
Alert Manager kurulumu tamamlandı ve çalışır vaziyette olduğunu teyit ettik.
Sending email
global
bölümü: Bu bölüm, Alertmanager için küresel yapılandırma ayarlarını içerir.smtp_require_tls
ayarı, SMTP sunucusuyla iletişim sırasında TLS gerektirilip gerektirilmeyeceğini belirler. Bu örnekte,false
olarak ayarlandığı için TLS gerekli değildir.route
bölümü: Prometheus tarafından gönderilen uyarıların nasıl yönlendirileceğini belirler. Bu örnekte,admin
adlı bir alıcının belirtildiğireceiver
özelliği tanımlanmıştır.receivers
bölümü: Bu bölüm,admin
alıcısının ayrıntılarını içerir. Bu örnekte, e-posta göndermek için kullanılacak SMTP sunucusunun ayrıntıları tanımlanmıştır.email_configs
özelliği, SMTP sunucusu için gerekli yapılandırma ayarlarını içerir.to
, e-postanın gönderileceği alıcının e-posta adresini belirtir.from
, gönderenin e-posta adresini belirtir.smarthost
, SMTP sunucusunun adını ve bağlantı noktasını belirtir.auth_username
, SMTP sunucusuna kimlik doğrulama yapmak için kullanılan kullanıcı adını belirtir.auth_identity
, SMTP sunucusuna bağlanmak için kullanılan kimlik bilgisini belirtir.auth_password
, SMTP sunucusuna bağlanmak için kullanılan şifreyi belirtir.
annotations
annotations
, Alertmanager'daki bir uyarıya ek ayrıntılar eklemek için kullanılan bir özelliktir. Bu özellik, bir uyarı hakkında daha ayrıntılı bilgi sağlamak ve alıcının uyarıyı daha iyi anlamasına yardımcı olmak için kullanılabilir.
Alertmanager, annotations
özelliğinde belirtilen tüm ayrıntıları, bir uyarının gösterildiği arayüzlerde veya uyarı e-postalarında görüntüleyebilir.
summary
: Bu özellik, uyarı hakkında kısa bir özet sağlar. Bu örnekte, özet, "Python uygulaması gecikmesi 5 saniyenin üzerinde" olarak belirtilmiştir.description
: Bu özellik, uyarıyı daha ayrıntılı bir şekilde açıklar. Bu örnekte, açıklama, belirli bir uygulama örneğinin adını ({{ $labels.instance }}
), iş adının adını ({{ $labels.job }}
) ve ölçümleme verilerinin değerini ({{ $value }}
) içerir. Açıklama, "5 dakikadan daha uzun süre için {{ $value }} saniye olan {{ $labels.job }} işinin {{ $labels.instance }} örneğinin uygulama gecikmesi" olarak belirtilmiştir.app_link
: Bu özellik, uyarının açıklamasında bahsedilen uygulamanın bağlantısını sağlar. Bu örnekte, bağlantıhttp://10.90.0.144:8000/
olarak belirtilmiştir.
Alarm 'a annotations
kullanarak, detaylı bilgiler ekledik ve bu şekilde daha mantıklı uyarılar göndermeye başladı.
Last updated