Bu kurulum ne yapar
Kendi özel tüneliniz üzerinden sahip olduğunuz diğer her makineyi tarayan ve bir şey bozulmak üzereyken size e-posta gönderen tek bir küçük örnek. Node metrikleri, siteler arası blackbox sondaları, makul eşiklerle kural uyarıları ve sizi gece üçte dört yüz bildirim göndermek yerine gruplandıran bir Alertmanager yapılandırması.
Bu kurulumda pano yoktur. Panolar hoştur ve izleme değildir; kimsenin bakmadığı bir grafik kimseyi uyandırmamıştır. İsterseniz daha sonra aynı verinin üzerine bir tane ekleyin.
Başlamadan önce
- Monitör için bir R-4. On beş saniyelik aralıklarla yüz düğüm, dakikada birkaç yüz bin örnek demektir; bunu fark etmeden halleder.
- Onu filonuzun olmadığı bir yere koyun. İzlediği her şeyle aynı binayı paylaşan herhangi bir monitör, tam da bağırmanız gereken günde takdire şayan bir şekilde sessiz kalır. Avrupa'daysanız, Toronto veya Singapur onun için mantıklı yerlerdir.
- İzlenen her düğüme, WireGuard rehberinden bir tünel. Dışa aktarıcılar bir makine hakkında çok şey ifşa eder ve genel bir arayüzün yakınında olmamalıdır.
1. İzlenen her düğümde
apt update && apt install -y prometheus-node-exporter
mkdir -p /etc/systemd/system/prometheus-node-exporter.service.d
cat > /etc/systemd/system/prometheus-node-exporter.service.d/bind.conf <<EOF
[Service]
Environment=ARGS=--web.listen-address=10.7.0.11:9100 --collector.systemd --collector.processes
EOF
systemctl daemon-reload && systemctl restart prometheus-node-exporter
ss -ltn | grep 9100Her düğümün kendi tünel adresini kullanın. Tünele bağlanmak, her şeye bağlanmak yerine, güvenlik duvarını tek savunma değil ikinci savunma hattı yapar.
2. Monitörde
apt install -y prometheus prometheus-alertmanager prometheus-blackbox-exporter/etc/prometheus/prometheus.yml dosyasını yazın:
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
fleet: main
alerting:
alertmanagers:
- static_configs:
- targets: ['127.0.0.1:9093']
rule_files:
- /etc/prometheus/rules/*.yml
scrape_configs:
- job_name: nodes
file_sd_configs:
- files: ['/etc/prometheus/targets/*.yml']
- job_name: probe_https
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://app.example.com/health
- https://cloud.example.com/status.php
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115Statik bir liste yerine dosya tabanlı keşif, ekstra dizine değer. Bir düğüm eklemek tek bir dosya haline gelir ve dosya, makinelerinizi sağlayan herhangi bir araç tarafından yazılabilir. /etc/prometheus/targets/ams.yml:
- targets: ['10.7.0.11:9100']
labels: { site: AMS-01, role: web }
- targets: ['10.7.0.12:9100']
labels: { site: AMS-01, role: db }Bu etiketler uyarıları daha sonra okunabilir yapan şeydir. db in AMS-01 diyen bir uyarı eyleme geçirilebilir; 10.7.0.12 diyen bir uyarı sizi bir elektronik tabloya gönderir.
3. Sahip olmaya değer kurallar
/etc/prometheus/rules/fleet.yml:
groups:
- name: fleet
rules:
- alert: NodeDown
expr: up{job="nodes"} == 0
for: 3m
labels: { severity: page }
annotations:
summary: "{{ $labels.instance }} in {{ $labels.site }} stopped answering"
- alert: DiskFillingUp
expr: predict_linear(node_filesystem_avail_bytes{fstype=~"ext4|xfs|zfs|btrfs"}[6h], 4*3600) < 0
for: 30m
labels: { severity: page }
annotations:
summary: "{{ $labels.instance }} fills {{ $labels.mountpoint }} within four hours"
- alert: MemoryPressure
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.10
for: 15m
labels: { severity: warn }
- alert: IOWaitHigh
expr: avg by (instance) (rate(node_cpu_seconds_total{mode="iowait"}[5m])) > 0.25
for: 20m
labels: { severity: warn }
- alert: CertificateExpiring
expr: probe_ssl_earliest_cert_expiry - time() < 10*86400
labels: { severity: warn }
- alert: ProbeFailing
expr: probe_success == 0
for: 5m
labels: { severity: page }predict_linear bu kurulumun işe yaramasını sağlayan kuraldır. Boş alan için bir eşik size diskin dolu olduğunu söyler; altı saatlik bir eğilim ileriye doğru tahmin edildiğinde, bu öğleden sonra saat dört civarında dolu olacağını söyler; bu sakin bir şekilde çözebileceğiniz bir sorundur. Sabit bir yüzdeye dayalı disk uyarıları küçük birimlerde gürültülü veya büyük birimlerde işe yaramaz.
4. Alertmanager
route:
receiver: mail
group_by: [alertname, site]
group_wait: 45s
group_interval: 5m
repeat_interval: 12h
routes:
- matchers: [severity="warn"]
repeat_interval: 72h
inhibit_rules:
- source_matchers: [alertname="NodeDown"]
target_matchers: [severity="warn"]
equal: [instance]
receivers:
- name: mail
email_configs:
- to: [email protected]
from: [email protected]
smarthost: mail.example.com:587
auth_username: [email protected]
auth_password: "<the mailbox password>"Engelleme kuralı bir mesaj ile kırk mesaj arasındaki farktır. Bir düğüm kapandığında, o düğümle ilgili her uyarı bastırılır, çünkü zaten biliyorsunuz: düğüm kapalı.
alertname ve site'ye göre gruplama, tüm bir sitenin güç kaybetmesi durumunda her makine için bir e-posta yerine her makineyi listeleyen tek bir e-posta üretir. Bu posta sunucusu, e-posta rehberindeki sunucudur ve uyarı yolunuzun size de izlediğiniz altyapıya bağlı olması bilinen bir takastır; başka bir yerde bir webhook'a işaret eden ikinci bir alıcı ucuz bir sigortadır.
systemctl enable --now prometheus prometheus-alertmanager prometheus-blackbox-exporterSaklama süresi bilerek ayarlanmaya değer. Yüz düğümün doksan günü, birkaç on gigabayttır:
echo 'ARGS="--storage.tsdb.retention.time=90d --storage.tsdb.retention.size=40GB"' > /etc/default/prometheus
systemctl restart prometheusDoğrulayın
Önce sözdizimi, çünkü yazım hatası olan bir kurallar dosyası yüklemede sessizce başarısız olur ve olay sırasında fark edersiniz:
promtool check config /etc/prometheus/prometheus.yml
promtool check rules /etc/prometheus/rules/fleet.ymlArdından her hedefin tarandığını doğrulayın:
curl -s http://127.0.0.1:9090/api/v1/targets | grep -o "\"health\":\"[a-z]*\"" | sort | uniq -cHer hedef up rapor etmelidir. down rapor eden bir hedef ya bir güvenlik duvarı kuralıdır ya da yanlış adrese bağlanmış bir dışa aktarıcıdır.
Şimdi tüm zincirin çalıştığını kanıtlayan tek test: kasten bir şeyi kırmak. İzlenen herhangi bir düğümde:
systemctl stop prometheus-node-exporterÜç dakika sonra uyarı beklemede, ardından tetikleniyor olmalıdır. Hareketini izleyin:
curl -s http://127.0.0.1:9090/api/v1/alerts | head -c 400
amtool --alertmanager.url=http://127.0.0.1:9093 alert queryTetiklenmeden yaklaşık bir dakika sonra e-posta gelir. Uyarı tetiklenir ancak e-posta gelmezse, sorun akıllı ana bilgisayar kimlik bilgileridir ve journalctl -u prometheus-alertmanager bunu açıkça söyleyecektir. Dışa aktarıcıyı yeniden başlatın ve çözülen bildirimi de aldığınızı doğrulayın, çünkü size daha iyi olduğunu söylemeyen bir uyarı sistemi onu görmezden gelmenizi öğretir.
systemctl start prometheus-node-exporterSonrasında
Siteler arası blackbox sondaları ekleyin, her siteden diğer her siteye; kendi varlığınızın olay sırasında herhangi bir durum sayfasından çok daha kullanışlı olan bir gecikme matrisini elde edersiniz. Bizimki status adresinde ve looking glass bir rota yanlış göründüğünde sorunun diğer yarısını yanıtlar.