«სერვერი ნელია» უსარგებლო შეცდომის ანგარიშია, თუ არ შეგიძლიათ გრაფიკის გახსნა და დანახვა, რომ მეხსიერება ავარიამდე სამი დღე იზრდებოდა. სწორედ ამას გაძლევთ Prometheus და Grafana: ყოველი სერვერის CPU, RAM, დისკი და ქსელი, ჩაწერილი ყოველ 15 წამში და დახატული გრაფიკებად, რომლებშიც უკან გადახვევა შეგიძლიათ. განათავსეთ ისინი საკუთარ პატარა VPS-ზე და ისინი დაკვირვებას განაგრძობენ მაშინაც კი, როცა production მანქანა ეცემა.
ნაწილები
- node_exporter ყოველ სერვერზე, რომლის დაკვირვებაც გინდათ: სისტემის მეტრიკებს 9100 პორტზე აჩვენებს.
- Prometheus მონიტორინგის VPS-ზე: ამ მეტრიკებს კითხულობს (scrape) და ინახავს.
- Grafana: დაფები, HTTPS-ის უკან.
- სურვილისამებრ Alertmanager ან Grafana-ს შეტყობინებები, რომ მოგწეროთ, როცა რაიმე ზღვარს გადააჭარბებს.
რა გჭირდებათ
- Micro-IP ($10/თვე, 2 vCPU, 2 GB RAM, 25 GB) ათიდან ოც სერვერამდე აკვირდება. მეტი ჰოსტისთვის, მორგებული აპის მეტრიკებისთვის ან თვეების შენახვისთვის: Small-IP.
- გამოყოფილი IPv4 მონიტორინგის სერვერისთვის: Grafana HTTPS-ით მიეწოდება და თქვენს სამიზნეებს შეუძლიათ ერთი სტაბილური მისამართის 9100 პორტისთვის whitelist-ში დამატება.
1. node_exporter ყოველ სამიზნეზე
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
შეცვალეთ 203.0.113.10 თქვენი მონიტორინგის VPS-ის მისამართით. არასდროს დატოვოთ 9100 სამყაროსთვის ღია; ის თქვენს სერვერზე ბევრს ამჟღავნებს.
2. Prometheus და Grafana მონიტორინგის VPS-ზე
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
HTTPS Grafana-ს წინ:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
შედით (admin / admin, შემდეგ შეცვალეთ), დაამატეთ Prometheus მონაცემთა წყაროდ http://prometheus:9090-ზე და დააიმპორტეთ საზოგადოების დაფა «Node Exporter Full» (ID 1860). დაახლოებით ერთ წუთში სისტემის სრული დაფა გექნებათ.
სერვერები NAT ტარიფებზე
NAT სერვერი შემომავალ კავშირებს მხოლოდ თავის პერსონალურ SSH პორტზე იღებს, ამიტომ Prometheus ვერ წაიკითხავს მის ექსპორტერს. შეატრიალეთ მიმართულება: გაუშვით Prometheus agent რეჟიმში NAT მანქანაზე და გაგზავნეთ მონიტორინგის სერვერზე, რომელიც დისტანციურ ჩაწერას უკვე იღებს (ზემოთ --web.enable-remote-write-receiver ფლაგი).
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
ეს push-წერტილი Caddy-ით basic auth-ით გამოაჩინეთ, ნაცვლად 9090 პორტის ღიად დატოვებისა.
გულწრფელი შენიშვნები
Prometheus იზიდავს (pull); ეს შესანიშნავია თქვენს კონტროლქვეშ მყოფი სერვერებისთვის და მოუხერხებელი ყველაფრისთვის NAT-ის უკან, აქედან agent-ის ხრიკი. მისი ლოკალური საცავი წლების ისტორიისთვის არ არის განკუთვნილი; გრძელი შენახვისთვის მოგვიანებით დისტანციურ საცავს დაამატებთ. და დაფები მხოლოდ ღირებულების ნახევარია: პირველივე დღეს დააყენეთ მინიმუმ სამი შეტყობინება (დისკი 85%-ზე მეტი, მეხსიერების დატვირთვა, სამიზნე მიუწვდომელია), თორემ გრაფიკებს მხოლოდ მაშინ შეხედავთ, როცა რაღაც უკვე გაფუჭდა.
დაკავშირებული
- VPS ხელმისაწვდომობის მონიტორინგისთვის (Uptime Kuma): გათიშვის შეტყობინებები და სტატუსის გვერდები
- როგორ დავაყენოთ UFW firewall
- რამდენი RAM სჭირდება VPS-ს?
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.