Hogyan használj Grafana-t VPS-ek felügyeletére? előnézeti képe

Hogyan használj Grafana-t VPS-ek felügyeletére?

| Olvasási idő: 4 perc

Egy időben elég sok gondom volt az egyik VPS-emmel: időről-időre olyan szinten terhelődött le, hogy még SSH-n keresztül sem sikerült belépnem, így a hiba okát sem sikerült megtalálnom. Beüzemeltem hát egy teljes monitoring rendszert, ahol grafikonokon látom, hogy melyik projekt melyik konténere mennyi erőforrást használ, ami végül segített felgöngyölíteni az ügyet.

Úgy döntöttem, hogy a monitoring rendszernek legalább egy külön VPS-re van szüksége, így rögtön üzembe is állítottam egyet (l. Projekt konfiguráció fejezetig). A tervem az volt, hogy a monitoring rendszert Stefan Prodan kész csomagjára építem, amit "beültetek" az imént felhúzott reverse proxy mögé, mint "projekt".

Így hát miután a reverse proxy és a Let's encrypt companion konténerek elkészültek, kiadtam a

bash
git clone [email protected]:stefanprodan/dockprom.git

parancsot. Mielőtt azonban a használati útmutatóban található beállítások elvégzésével beindítottam volna a projektet, néhány változtatást még eszközöltem.

Monitoring "projekt" csatlakoztatása a reverse proxyhoz

A dockprom/docker-compose.yml fájlba fel kell vennünk a networkök (és a szolgáltatások networkjei) közé a hosting-with-docker_nginx_reverse_proxy-t azért, hogy a monitoring stack elérhető legyen a reverse proxyn keresztül, továbbá még néhány környezeti változót a grafana szolgáltatáshoz, melyeken keresztül a reverse proxynak meg tudja üzenni, milyen úton érhető el a webes felülete. Illesszük be tehát a 

  - LETSENCRYPT_HOST=monitoring.domain.hu
  - VIRTUAL_HOST=monitoring.domain.hu
  - VIRTUAL_PORT=3000

részletet a dockprom/docker-compose.yml fájl 96. sorába, a grafana szolgáltatás environment bejegyzése alá: ezzel tájékoztatjuk a reverse proxy-t és a Let's encrypt companion konténereket, hogy a szolgáltatásunk a monitoring.domain.hu címen érhető el, és ennek a szolgáltatásnak a 3000-es portján található a webszerver, melyre a kéréseket a reverse proxynak irányítania kell. 

Valamint adjuk hozzá a

- hosting-with-docker_nginx_reverse_proxy

sort a networks bejegyzéshez, így a grafana szolgáltatást leíró szakasz valahogy így fog kinézni: 

  grafana:
    image: grafana/grafana:7.1.5
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
      - LETSENCRYPT_HOST=monitoring.domain.hu
      - VIRTUAL_HOST=monitoring.domain.hu
      - VIRTUAL_PORT=3000
    restart: unless-stopped
    expose:
      - 3000
    networks:
      - monitor-net
      - hosting-with-docker_nginx_reverse_proxy
    labels:
      org.label-schema.group: "monitoring"

Vegyünk fel forrásokat!

Ahhoz, hogy hozzáférjünk a többi VPS-ünk adatához, fel kell vennünk őket forrásként. Ehhez nyissuk meg a dockprom/prometheus/prometheus.yml-t, és a scrape_configs alá adjuk hozzá az alábbi részletet: 

  - job_name: 'Trolo - nodeexporter'
    static_configs:
      - targets: ['1.2.3.4:9100']

  - job_name: 'Trolo - cadvisor'
    static_configs:
      - targets: ['1.2.3.4:8080']

Ezzel megadtuk, hogy a Trolo nevű gépünk használati adatai az 1.2.3.4-es IP cím 9100-as és 8080-as portján találhatók.  

Forrás VPS beállítása

A fentebb megadott használati adatok természetesen nem maguktól kerülnek az adott portra, ahhoz azokat "exportálnia" is kell valaminek - ehhez készült a dockprom/docker-compose.exporters.yaml fájl. Lépjünk be tehát a forrás VPS-re, klónozzuk le oda is a repository-t, de ott a szokásos docker-compose up -d parancs helyett futtassuk a következőt: 

bash
docker-compose -f docker-compose.exporters.yml up -d

Ha ezzel megvagy, visszatérhetsz a monitorozó szerveredhez, és a dockprom könyvtárba belépve elindíthatod a monitorozó szolgáltatásokat a docker-composer up -d parancssal. Látogass el a monitoring.domain.hu címre, ahol már látnod is kell az életre kelt Grafana webes felületét. 

Grafana dashboard

Tűzfal beállítása

Az útmutató alatt felmerülhetett benned, hogy ha publikusan elérhetővé tesszük a 9100-as és 8080-as portokat, akkor bárki hozzáférhetne ezekhez az adatokhoz, hiszen semmilyen hitelesítést nem állítottunk be hozzájuk. Ebben teljes mértékben igazad is van, ezért érdemes felvennünk tűzfal szabályokat a VPS-einkhez. A DigitalOcean esetében tudunk definiálni egy tűzfalszabály csomagot, majd azt több droplethez is hozzá tudjuk rendelni: ez kényelmes, mert egy egyértelmű grafikus felületen tudjuk "összekattintgatni" a szabályokat, ráadásul dinamikus legördülő listákból tudunk választani akár más dropleteket is.

A standard tűzfalszabály csomagomban a következő szabályok vannak:

  • minden irányból (All IPv4, All IPv6) engedélyezett a forgalom a HTTP (80-as) és HTTPS (443-as), valamint az SSH (a beállításos példában 62222) portokon,
  • a 8080 és 9100-as portokon csak a monitorozó dropletről fogadunk forgalmat. 

Miután a szabályokat beállítottad (ne felejtsd el átgondolni, hogy neked nincs-e több port beállítására szükséged!), a Droplets fülön add hozzá minden olyan droplethez, amelynél a használati adatokat exportálni szeretnéd. 

Standard firewall rules

(Nem, nem az a DK.)

Összegzés

Gratulálok, van egy monitorozó rendszered - ugyanakkor még csak az út elején jársz. A Grafanával nagyon jó dolgokat lehet összerakni (automatikus figyelmeztetések, ha bizonyos metrika túllép egy határ/lecsökken egy érték alá, uptime monitoring), illetve még több adatforrás is elérhető hozzá, ez azonban időt és matatást igényel - hajrá! :)