VM Monitor Dokumentation
VM MonitorDokumentation
KravInstallationVad kan övervakasFAQ

PHP · MySQL / MariaDB · SNMP · Zabbix-agent

Övervaka servrar, hypervisors och nätverk från en sida

VM Monitor visar status för Windows- och Linux-servrar, NAS, Proxmox, VMware och Hyper-V, switchar, routrar och brandväggar samt vanliga tjänster. Du får larm när något går över dina gränsvärden.

Normal 0–70 %VarningKritisk
Ingen cron krävsEn systemd-tjänst eller öppen dashboard sköter kontrollerna
Svenska och engelskaByts med SV/EN i menyn
Fyra gränsvärdenCPU, minne, disk och svarstid
Larm på fyra sättE-post, Telegram, webhook, SMS

Innan du börjar

Krav

Installationen nedan utgår från Debian eller Ubuntu. Samma delar behövs på andra distributioner, med andra paketnamn.

Server (där VM Monitor körs)

DelKravAnvänds till
PHP8.0 eller nyare, installationen nedan använder 8.5Hela applikationen och bakgrundstjänsten
php8.5-mysqlPHP-tillägget pdo_mysqlDatabasanslutning
php8.5-curlPHP-tillägget curlURL-checks, Proxmox API, Telegram, webhook och SMS
php8.5-snmpPHP-tillägget snmpSNMP-checks, VMware, switchar, routrar och brandväggar
php8.5-mbstringPHP-tillägget mbstringTextfunktioner
opensslIngår i PHP-paketenKryptering av sparade lösenord och tokens (AES-256-GCM)
DatabasMariaDB 10.5+ eller MySQL 8.0+Inställningar, kontroller, historik och loggar
Webbservernginx eller Apache 2.4, med PHP-FPMGränssnittet. Kör det över HTTPS
iputils-pingKommandot ping, och PHP:s exec() får inte vara avstängtPing-checks och "server svarar inte"
systemdValfritt, rekommenderasBakgrundstjänsten vmmon-worker

Kontrollera tilläggen i kommandoradens PHP med php -m. Bakgrundstjänsten använder CLI-PHP, som kan ha andra tillägg än PHP-FPM.

Nätverk

Från monitorn tillPortBehövs för
Servrar och enheterICMPPing
Servrar, switchar, ESXiUDP 161SNMP
Servrar med Zabbix-agentTCP 10050Zabbix-agent (passiva kontroller)
ProxmoxTCP 8006Proxmox API
Telegram, SMS-leverantörTCP 443 utåtLarm
SMTP-serverTCP 25, 465 eller 587E-postlarm

Installation

Steg för steg

Följ stegen i ordning. Byt ut vmmon.example.se och lösenord mot dina egna värden.

  1. Installera webbserver, databas och PHP 8.5

    Uppdatera systemet och lägg först till en paketkälla för PHP 8.5. Debian och Ubuntu levererar ofta en äldre PHP-version som standard, så här används Ondřej Surýs paketkälla.

    bash
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y software-properties-common curl unzip
    sudo add-apt-repository -y ppa:ondrej/php
    sudo apt update

    Installera sedan PHP med alla tillägg. iputils-ping behövs för ping-checks och snmp ger dig kommandot snmpwalk för felsökning.

    bash
    sudo apt install -y php8.5-cli php8.5-fpm php8.5-mysql php8.5-curl \
      php8.5-snmp php8.5-mbstring iputils-ping snmp
    php -v
    php -m | grep -Ei 'pdo_mysql|curl|openssl|snmp|mbstring'

    Utskriften från php -m ska innehålla alla fem namnen.

    Välj webbserver och databas. Du behöver bara en av varje.

    bash
    sudo apt install -y nginx
    sudo systemctl enable --now nginx php8.5-fpm
    bash
    sudo apt install -y mariadb-server
    sudo systemctl enable --now mariadb
    sudo mysql_secure_installation

    På RHEL, Rocky och Alma heter paketen php-snmp, php-mysqlnd och så vidare. PHP 8.5 kommer då från Remi-repot. Resten av guiden gäller oförändrad, men filsökvägar och användaren www-data heter apache eller nginx.

  1. Skapa databasanvändare och importera databasen

    Zippen innehåller schema.sql. Den skapar databasen vmmon med alla tabeller och är komplett, så du ska inte köra några migrate_*.sql vid en ny installation.

    Skapa först en egen användare med rättigheter bara på databasen vmmon:

    bash
    sudo mysql
    sql
    CREATE DATABASE IF NOT EXISTS vmmon CHARACTER SET utf8mb4;
    CREATE USER 'vmmon'@'localhost' IDENTIFIED BY 'byt-till-ett-langt-losenord';
    GRANT ALL PRIVILEGES ON vmmon.* TO 'vmmon'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

    Importera sedan schemat från den uppackade mappen:

    bash
    cd /var/www/vmmon
    sudo mysql < schema.sql
    sudo mysql -e "USE vmmon; SHOW TABLES;"

    Listan ska innehålla 13 tabeller, bland annat users, servers, server_checks, alert_rules och app_log. Hoppa till steg 3 om du inte har packat upp filerna än, och kör importen när de ligger på plats.

    schema.sql är till för en tom installation. Kör den inte mot en databas med data, den skapar tabellerna från början.

    Ska databasen ligga på en annan server? Skapa användaren som 'vmmon'@'webbserverns-ip' och sätt bind-address i databasens konfiguration så att den lyssnar på nätverket.

  1. Lägg filerna på plats och ställ in config

    bash
    sudo mkdir -p /var/www/vmmon
    sudo unzip vmmon.zip -d /tmp/vmmon-unzip
    sudo cp -r /tmp/vmmon-unzip/vmmon/. /var/www/vmmon/
    sudo chown -R www-data:www-data /var/www/vmmon
    sudo find /var/www/vmmon -type d -exec chmod 750 {} \;
    sudo find /var/www/vmmon -type f -exec chmod 640 {} \;

    Webbanvändaren måste kunna skriva i mappen, eftersom programmet skapar filen secret.php vid första start.

    Databasuppgifter i config.local.php

    Kopiera exempelfilen och fyll i dina uppgifter. Redigera inte config.php. Den ersätts vid uppdateringar, medan config.local.php ligger kvar.

    bash
    cd /var/www/vmmon
    sudo -u www-data cp config.local.php.example config.local.php
    sudo -u www-data nano config.local.php
    config.local.php
    <?php
    const DB_DSN  = 'mysql:host=localhost;dbname=vmmon;charset=utf8mb4';
    const DB_USER = 'vmmon';
    const DB_PASS = 'byt-till-ett-langt-losenord';
    RadBetyder
    DB_DSNhost är databasservern (localhost eller ett IP-nummer), dbname är databasen. Lägg till ;port=3307 om du använder en annan port.
    DB_USERAnvändaren du skapade i steg 2.
    DB_PASSLösenordet till den användaren. Använd enkla citattecken, och tecknet ' i lösenordet måste skrivas \'.

    Ta backup på secret.php när den har skapats. Den innehåller nyckeln som krypterar lösenord och tokens i databasen. Utan den måste du skriva in dem igen. Nyckeln kan i stället sättas som SECRET_KEY i config.local.php.

  1. Konfigurera webbservern

    Konfigurationen pekar på PHP-FPM och stänger dessutom åtkomsten till filer som inte ska nås utifrån, som .sql, .txt och config.local.php.

    /etc/nginx/sites-available/vmmon
    server {
        listen 80;
        server_name vmmon.example.se;
        root /var/www/vmmon;
        index index.php;
    
        location / { try_files $uri $uri/ =404; }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.5-fpm.sock;
        }
    
        # Stäng åtkomst till filer som inte ska nås utifrån
        location ~* \.(sql|txt|service|example|md)$ { deny all; }
        location ~* ^/(config\.local|secret)\.php$ { deny all; }
        location ~ /\.ht { deny all; }
    }
    bash
    sudo ln -s /etc/nginx/sites-available/vmmon /etc/nginx/sites-enabled/vmmon
    sudo nginx -t && sudo systemctl reload nginx

    HTTPS

    Inloggningen och dina lösenord ska aldrig gå i klartext. Hämta ett gratis certifikat med Let's Encrypt:

    bash
    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d vmmon.example.se

    Har du bara ett internt nätverk får du använda en egen CA eller ett självsignerat certifikat.

  1. Första start och administratör

    1. Öppna https://vmmon.example.se. Så länge databasen saknar användare visar inloggningssidan formuläret Skapa första administratören.
    2. Fyll i användarnamn, e-post och ett lösenord på minst 8 tecken. E-postadressen används för "Glömt lösenord".
    3. Öppna Inställningar. Under Allmänt ställer du in intervall, gränsvärden och hur länge data och loggar sparas. Under SNMP anger du standard-community, och under Notifieringar fyller du i SMTP och eventuellt Telegram, webhook och SMS.
    4. Lägg till din första server under Servrar, och skapa larmregler under Larmregler.

    Fler användare skapas under Inställningar → Användare. Rollen admin kan ändra allt, rollen user kan bara titta.

  1. Bakgrundstjänsten (systemctl)

    Utan tjänsten körs kontroller och larm bara medan någon har dashboarden öppen, eftersom webbläsaren då anropar api/poll.php var 15:e sekund. Tjänsten vmmon-worker kör dem hela tiden. När den är igång hoppar dashboarden över egen pollning, och om tjänsten stannar tar webbläsaren över automatiskt.

    Filen vmmon-worker.service följer med i zippen:

    vmmon-worker.service
    [Unit]
    Description=VM Monitor worker (kontroller, hosts och larm)
    After=network-online.target mysql.service mariadb.service
    
    [Service]
    User=www-data
    WorkingDirectory=/var/www/vmmon
    ExecStart=/usr/bin/php /var/www/vmmon/worker.php
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target

    Justera User och sökvägarna om du valde andra. Användaren ska vara samma som webbservern kör som, eftersom den behöver läsa config.local.php och secret.php.

    bash
    sudo cp /var/www/vmmon/vmmon-worker.service /etc/systemd/system/
    sudo systemctl daemon-reload
    sudo systemctl enable --now vmmon-worker
    systemctl status vmmon-worker
    journalctl -u vmmon-worker -f

    I loggen ska du se startar, och vid första cykeln kördes: N kontroller…. Därefter kommer lever: … var tionde minut. Du kan också köra en enda cykel för hand: sudo -u www-data php /var/www/vmmon/worker.php --once.

    Vill du se tjänstens logg i gränssnittet under Inställningar → Loggar lägger du webbanvändaren i gruppen systemd-journal:
    sudo usermod -aG systemd-journal www-data, och startar sedan om PHP-FPM och tjänsten. PHP:s exec() måste vara tillåtet.

    Utan systemd

    • Cron, varje minut: * * * * * www-data php /var/www/vmmon/worker.php --for=55
    • Windows: nssm install VMMonitor php.exe C:\sökväg\worker.php, eller en schemalagd aktivitet vid start.

Underhåll

Uppgradera

  1. Ta backup på databasen: mysqldump vmmon > vmmon-backup.sql, och på secret.php och config.local.php.
  2. Ersätt filerna i /var/www/vmmon med de nya. Dina uppgifter ligger kvar i config.local.php.
  3. Kör de migreringsfiler som är nyare än din version, i ordning, till exempel sudo mysql vmmon < migrate_v19.sql. Filen README.txt anger vilken migrering som hör till vilken uppgradering. Kör bara dem du inte redan har kört.
  4. Starta om tjänsten: sudo systemctl restart vmmon-worker, och ladda om webbläsaren med Ctrl+F5.

Funktioner

Vad kan övervakas

Allt läggs till i gränssnittet. Varje server, host, nätverksenhet och tjänst har samma sida med rutan Pausa larm / Inaktivera / Dölj från dash och panelen Tjänster och kontroller, där varje kontroll kan testas för hand med Testa nu.

Servrar

Windows, Linux och NAS (till exempel TrueNAS).

  • CPU, minne och diskar
  • OS och version
  • Interface och trafik
  • Ping, SNMP, Zabbix-agent, TCP och URL

Virtualisering

Hosts med VM-lista och storage.

  • Proxmox VE via API-token
  • VMware ESXi via SNMP
  • Hyper-V via Zabbix-agent
  • Host-CPU, minne, storage och varje VM

Nätverk

Switchar, routrar och brandväggar via SNMP och ping.

  • Interface, trafik, fel och tappade paket
  • CPU, minne och uptime
  • Temperatur, fläktar och nätdelar

Tjänster

Fristående kontroller som inte hör till en server, till exempel en webbplats eller en extern IP.

  • Ping, TCP-portar och URL
  • Svarstid i ms
  • SSL-certifikatets giltighetstid

Kontrolltyper

TypVad den kontrollerar
PingICMP-svar och svarstid.
SNMPCPU, minne, disk, OS och nätverksinterface via standard-MIB:ar. Stöder SNMP v2c och v3. Standard-community och SNMPv3-uppgifter sätts under Inställningar → SNMP.
TCPAtt en port svarar, med färdiga val för vanliga tjänster samt egen port.
URLHTTP 200–399, exakt HTTP 200, att sidan innehåller en text, eller att SSL-certifikatet har minst 14 dagar kvar.
Zabbix-agentCirka 60 färdiga kontroller plus egen item-key. Se tabellen nedan.

TCP-portar med färdiga val

SSH 22FTP 21SMTP 25SMTPS 465Submission 587DNS 53HTTP 80HTTPS 443POP3 110POP3S 995IMAP 143IMAPS 993MySQL/MariaDB 3306SQL Server 1433PostgreSQL 5432RDP 3389SMB 445WinRM 5985LDAP 389LDAPS 636Redis 6379MongoDB 27017Docker API 2375

Zabbix-agent, grupper av kontroller

GruppExempel
AgentAgenten svarar (agent.ping), agentversion, agentens värdnamn
SystemCPU-användning, CPU-load 1/5/15 min, iowait, antal CPU-kärnor, CPU-modell, uptime, OS-version, inloggade användare, serverns lokala tid
MinneMinnesanvändning, totalt och tillgängligt minne, ledig swap
Disk och filerDiskanvändning, ledigt och totalt utrymme per disk, lediga inoder, fil finns, filstorlek, när filen ändrades, filens innehåll
Processer och tjänsterAntal processer, process körs, process-CPU och -minne, Windows-tjänst körs, systemd-enhet aktiv (Agent 2)
NätverkTrafik in och ut, nätkortsfel, TCP- och UDP-port lyssnar, nätverkstjänst svarar, DNS-uppslag, hämta webbsida från servern
WindowsPerformance Counter, WMI-fråga, registervärde
Applikationer (Agent 2)Docker, MySQL/MariaDB, PostgreSQL, Redis, MongoDB och Memcached. Kräver Zabbix Agent 2
EgenValfri item-key. system.run stöds avsiktligt inte

Varje Zabbix-kontroll kan ha ett villkor för OK, till exempel <90, >=1, =active eller ~text.

Nätverksenheter

Cisco IOS / IOS-XE / NX-OS / ASACisco MerakiHP ProCurve / ArubaHPE Aruba AOS-CXHuaweiUbiquiti UniFiOPNsensepfSenseAnnan SNMP-enhet

Välj roll (switch, router eller brandvägg) när du lägger till enheten. Enheter som inte finns i listan fungerar som Annan via standard-SNMP, men visar då färre sensorer.

Larm och notiser

Larmregler skapas i tre steg: vad som ska övervakas, villkor och mottagare. En regel kan gälla alla enheter, vissa enheter eller bara en viss tjänst, ett interface eller en VM.

GruppLarmtyper
ResurserCPU över X %, minne över X %, disk över X % (valfri disk)
Tjänster och servrarTjänst nere, tjänstens svarstid över X ms, server svarar inte på ping
NätverkFel per minut, tappade paket, interface nere, interface-belastning
VirtualiseringHost svarar inte på ping, host svarar inte (API), host-CPU, host-minne, storage, VM körs inte, VM-CPU, VM-minne
NätverksenheterSvarar inte på ping, svarar inte på SNMP, temperatur, fläkt eller nätdel felar

Kanaler

E-post

Via din SMTP-server. Mottagare anges som Larmkontakter under Inställningar → Notifieringar.

Telegram

Bot-token och ett eller flera chatt-ID, valfritt med tråd-ID.

Webhook

Skickar larmet som ett HTTP-anrop till en URL du anger.

SMS

REST-API med färdiga mallar för 46elks och Twilio, samt valfri generell REST-leverantör.

Larm kan pausas per enhet eller för alla på en gång, och en enhet kan sättas i underhållsläge.

Vanliga frågor

FAQ

Installation

Vilken PHP-version krävs?

PHP 8.0 eller nyare. Guiden använder PHP 8.5, men samma paket finns för äldre 8.x-versioner. Byt bara versionsnumret i paketnamnen, i sökvägen till PHP-FPM-socketen och i webbserverns konfiguration.

Måste jag köra tjänsten vmmon-worker?

Nej, men det rekommenderas. Utan den körs kontroller och larm bara när någon har dashboarden öppen i en webbläsare. Du får då inga larm på natten om ingen tittar.

Behövs cron?

Nej. Tjänsten ersätter cron. Cron är bara ett alternativ om du inte vill använda systemd.

Fel: "could not find driver" eller en tom sida direkt efter installationen

PHP-tillägget pdo_mysql saknas för PHP-FPM. Installera php8.5-mysql och starta om php8.5-fpm. Se även webbserverns fellogg, till exempel /var/log/nginx/error.log.

Fel: "Access denied for user" vid inloggning

Uppgifterna i config.local.php stämmer inte med databasanvändaren. Testa dem för hand: mysql -u vmmon -p vmmon. Kontrollera också att användaren skapades med rätt värd, 'vmmon'@'localhost' för en lokal databas.

Skapa-administratör-formuläret visas inte

Det visas bara när tabellen users är tom. Finns redan en användare loggar du in med den. Har du glömt lösenordet använder du Glömt lösenord, vilket kräver att SMTP är ifyllt.

Kan jag köra det på Windows?

Ja, med PHP, en webbserver och MySQL eller MariaDB för Windows. Bakgrundsprocessen startas med nssm install VMMonitor php.exe C:\sökväg\worker.php eller som en schemalagd aktivitet vid start. Guiden ovan är skriven för Linux.

Ping och SNMP

Ping fungerar inte, felet säger att exec() är avstängt

Ping körs som kommandot ping från PHP. Ta bort exec ur disable_functions i /etc/php/8.5/fpm/php.ini och /etc/php/8.5/cli/php.ini, kontrollera att iputils-ping är installerat och starta om PHP-FPM och tjänsten.

SNMP-checken ger "No response from …"
  • Kontrollera community (eller SNMPv3-användare) och att monitorns IP får fråga enheten.
  • UDP 161 måste vara öppen i brandväggen.
  • Testa från monitorn: snmpwalk -v2c -c community enhetens-ip 1.3.6.1.2.1.1. Svarar den inte där är felet inte i VM Monitor.
  • På Linux lyssnar snmpd ofta bara på localhost. Sätt agentAddress udp:161 i /etc/snmp/snmpd.conf.
Linux-servern visar fel OS-version

Skapa /usr/local/bin/osrelease.sh (körbar) med innehållet #!/bin/sh och . /etc/os-release; echo "$PRETTY_NAME". Lägg raden extend osrelease /usr/local/bin/osrelease.sh i snmpd.conf och starta om snmpd. Utan detta härleds Ubuntu- och Debian-versionen från kernelversionen.

Servern svarar på ping men inte på SNMP, vilket status får kortet?

Kortet blir rött (Critical) så fort en kontroll som är synlig på dashboarden är nere, i det här fallet SNMP. Pingen visas fortfarande grön i chipen.

Zabbix-agent

Zabbix-agent-kontroller svarar inte
  • Installera Zabbix Agent eller Agent 2 på målservern.
  • Lägg monitorns IP i Server= i agentens konfiguration. Kontrollerna är passiva och går mot port 10050.
  • Öppna TCP 10050 i brandväggen.
  • Använd Testa nu på kontrollen. Den visar agentens exakta felmeddelande.
  • Kontrollerna i gruppen Applikationer (och systemd-enhet) kräver Agent 2.
Varför fungerar inte system.run?

Den stöds avsiktligt inte, eftersom den låter agenten köra godtyckliga kommandon.

Virtualisering

Hur kopplar jag Proxmox?

Skapa en API-token i Proxmox under Datacenter → Permissions → API Tokens. Ge den rollen PVEAuditor. Avmarkera Privilege Separation eller ge token samma roll. Klistra in token-ID och hemlighet när du lägger till hosten under Virtualisering. Port 8006 måste vara nåbar från monitorn.

Hur kopplar jag VMware ESXi?

Via SNMP. Aktivera det på ESXi: esxcli system snmp set --communities community --enable true. VM-listan läses ur VMWARE-VMINFO-MIB.

Hur kopplar jag Hyper-V?

Via Zabbix-agent på Hyper-V-hosten. Nyckeln wmi.getall måste vara tillåten i agentens konfiguration.

Proxmox visar inga körande VM:ar via SNMP

Proxmox har ingen officiell MIB, så körande VM:ar härleds ur processlistan om du går via SNMP. Då måste net-snmp-vyn släppa igenom .1.3.6.1.2.1.25.4. API-vägen med token ger mer och bättre data och är den som rekommenderas.

Dashboard och inställningar

Vad är skillnaden mellan Pausa, Inaktivera, Dölj och Ignorera?
  • Pausa larm: övervakningen fortsätter, men inga larm skickas under vald tid.
  • Inaktivera: övervakningen stängs av helt.
  • Dölj från dash: kortet försvinner från dashboarden, men enheten övervakas och larmar som vanligt.
  • Ignore (på kortet): kortet blir grått och räknas inte som fel i sammanfattningen. Övervakningen fortsätter.
Vad styr färgerna normal, varning och kritisk?

De fyra reglagen under Inställningar → Allmänt: CPU, minne, disk (i procent) och svarstid (i ms). Varning och Kritisk justeras automatiskt så att nivåerna aldrig överlappar. De styr både färger och kortets status på dashboarden.

Hur ändrar jag sorteringen av korten?

Med sorteringsknappen på dashboarden. Egen layout behåller den ordning du lagt korten i. Kritikalitet lägger kort med kritiska tjänster först och därefter varning, och uppdateras automatiskt. Valet sparas i webbläsaren.

Kan jag stänga av ljudsignalen?

Ja, under Inställningar → Allmänt. Signalen spelas en gång när något blir kritiskt. Webbläsaren kräver att du har klickat på sidan minst en gång innan ljud får spelas.

Hur länge sparas data och loggar?

Övervakningshistoriken och loggarna har varsin lagringstid under Inställningar → Allmänt. Du kan alltså spara loggar kortare eller längre än mätdata.

Var ser jag loggar?

Under Inställningar → Loggar. Välj loggnivå och källa: Inloggning, SNMP, TCP, URL, Zabbix-agent, Proxmox/VMware/Hyper-V, Worker, Larm eller Konfiguration. Debug-loggning slås på i samma vy.

Kan en kollega bara titta utan att kunna ändra?

Ja. Skapa användaren med rollen user under Inställningar → Användare. Den kan se allt men inte ändra något.

Säkerhet

Hur lagras lösenord och tokens?

SNMP-communities, SMTP-lösenord, API-tokens, Telegram- och SMS-uppgifter lagras krypterade med AES-256-GCM. Nyckeln ligger i secret.php. Användarnas lösenord lagras som hash.

Vad måste jag skydda?
  • Kör alltid över HTTPS.
  • Se till att .sql, .txt och .service inte kan hämtas via webben (se webbserverns konfiguration ovan).
  • Begränsa databasanvändaren till databasen vmmon.
  • Ta backup på databasen och på secret.php.