Tutorijal: Monitoring i logovanje

Uvod u Monitoring i logovanje za DevOps inženjere

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.

Zašto su Monitoring i logovanje ključni u DevOps-u?

Monitoring

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.

Ključni koncepti monitoringa

Alati za monitoring

Praktičan primer: Monitoring Nginx-a sa Prometheusom i Grafanom

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: bridge

nginx.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 -d

2. 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 ranije

Pokrenite Prometheus:

docker-compose up -d

Sada 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: true

Pokrenite Grafanu:

docker-compose up -d

Sada 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

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.

Ključni koncepti logovanja

Alati za logovanje

Praktičan primer: Centralizovano logovanje sa ELK Stack-om

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: bridge

2. 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 hosta

Koraci za pokretanje:

  1. Kreirajte logstash/pipeline/ direktorijum i logstash.conf fajl unutar njega.
  2. Kreirajte logstash/config/ direktorijum i logstash.yml fajl unutar njega (može biti prazan za početak).
  3. Pokrenite ELK Stack: bash docker-compose up -d
  4. Instalirajte i konfigurišite Filebeat na serveru sa kojeg želite da prikupljate logove.
  5. Pristupite Kibana UI na http://localhost:5601. Kreirajte index pattern (npr. logstash-*) i počnite da istražujete logove.

Zaključak

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.

Reference


Autor: Manus AI Datum: 27. jul 2025.