Monitoring i logovanje su vitalni stubovi svakog uspešnog DevOps okruženja. Bez adekvatnog uvida u performanse aplikacija i infrastrukture, timovi ne mogu efikasno dijagnostikovati probleme, optimizovati resurse ili osigurati visoku dostupnost sistema. Monitoring pruža real-time podatke o zdravlju sistema, dok logovanje beleži događaje i aktivnosti, omogućavajući detaljnu analizu nakon incidenata. Za DevOps inženjera, razumevanje kako implementirati i koristiti alate za monitoring i logovanje je ključno za proaktivno upravljanje sistemima i brzo rešavanje problema. Ovaj tutorijal će vas provesti kroz ključne koncepte, alate i najbolje prakse u oblasti monitoringa i logovanja.
Monitoring je proces prikupljanja, analize i vizualizacije metrika o performansama i zdravlju sistema. Metrike mogu uključivati iskorišćenost CPU-a, memorije, diska, mrežni protok, broj zahteva po sekundi, latenciju, stope grešaka, itd.
Ovaj primer će vas provesti kroz osnovno postavljanje Prometheusa i Grafane za monitoring Nginx web servera.
Preduslovi:
1. Nginx Exporter:
Prometheus prikuplja metrike putem “exportera”. Za Nginx, koristićemo nginx-exporter.
Kreirajte docker-compose.yml za Nginx i Nginx Exporter:
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- monitoring_net
nginx-exporter:
image: nginx/nginx-prometheus-exporter:latest
ports:
- "9113:9113"
environment:
NGINX_SCRAPE_URI: http://nginx/stub_status
networks:
- monitoring_net
networks:
monitoring_net:
driver: bridgenginx.conf (omogućite stub_status modul):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /stub_status {
stub_status on;
access_log off;
allow 127.0.0.1; # Dozvolite pristup samo sa localhosta ili IP adrese exportera
deny all;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Pokrenite Nginx i Nginx Exporter:
docker-compose up -d2. Prometheus:
Kreirajte prometheus.yml konfiguracioni fajl:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['nginx-exporter:9113']Kreirajte docker-compose.yml za Prometheus:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
command: --config.file=/etc/prometheus/prometheus.yml
networks:
- monitoring_net
networks:
monitoring_net:
external: true # Koristite postojeću mrežu kreiranu ranijePokrenite Prometheus:
docker-compose up -dSada možete pristupiti Prometheus UI na http://localhost:9090 i videti metrike od Nginx Exportera.
3. Grafana:
Kreirajte docker-compose.yml za Grafanu:
version: '3.8'
services:
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
- monitoring_net
networks:
monitoring_net:
external: truePokrenite Grafanu:
docker-compose up -dSada možete pristupiti Grafana UI na http://localhost:3000 (korisničko ime/lozinka: admin/admin). Dodajte Prometheus kao data source i importujte Nginx dashboard (npr. ID 9608 sa Grafana Labs).
Logovanje je proces beleženja događaja koji se dešavaju u sistemu ili aplikaciji. Logovi su ključni za rešavanje problema, reviziju, sigurnost i analizu performansi.
Ovaj primer će vas provesti kroz osnovno postavljanje ELK Stack-a za prikupljanje i analizu logova.
Preduslovi:
1. docker-compose.yml za ELK Stack:
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false # Za jednostavnost, isključite sigurnost za testiranje
ports:
- "9200:9200"
- "9300:9300"
volumes:
- esdata:/usr/share/elasticsearch/data
networks:
- elk_net
kibana:
image: docker.elastic.co/kibana/kibana:7.17.0
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
networks:
- elk_net
logstash:
image: docker.elastic.co/logstash/logstash:7.17.0
container_name: logstash
ports:
- "5044:5044" # Beats input
- "9600:9600" # Monitoring API
volumes:
- ./logstash/pipeline/:/usr/share/logstash/pipeline/
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
depends_on:
- elasticsearch
networks:
- elk_net
volumes:
esdata:
networks:
elk_net:
driver: bridge2. Logstash konfiguracija (logstash/pipeline/logstash.conf):
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
3. Filebeat (za prikupljanje logova sa hosta):
Instalirajte Filebeat na mašini sa koje želite da prikupljate logove. Konfigurišite filebeat.yml da šalje logove u Logstash:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log # Primer: prikupljajte sve .log fajlove
output.logstash:
hosts: ["your_logstash_ip:5044"] # Zamenite sa IP adresom Logstash kontejnera ili hostaKoraci za pokretanje:
logstash/pipeline/ direktorijum i logstash.conf fajl unutar njega.logstash/config/ direktorijum i logstash.yml fajl unutar njega (može biti prazan za početak).bash docker-compose up -dhttp://localhost:5601. Kreirajte index pattern (npr. logstash-*) i počnite da istražujete logove.Monitoring i logovanje su neophodni za razumevanje, održavanje i optimizaciju modernih softverskih sistema. Ovladavanje alatima kao što su Prometheus, Grafana i ELK Stack omogućiće vam da steknete dubok uvid u performanse vaših aplikacija i infrastrukture, proaktivno rešavate probleme i donosite informisane odluke. Kontinuirano učenje i eksperimentisanje sa ovim alatima, kao i praćenje novih trendova u oblasti opservabilnosti, ključni su za vaš uspeh kao DevOps inženjera.
Autor: Manus AI Datum: 27. jul 2025.