diff --git a/config.go b/config.go
index cf096a7..5af1281 100644
--- a/config.go
+++ b/config.go
@@ -7,6 +7,8 @@ import (
 	"sync"
 
 	"github.com/jetkvm/kvm/internal/usbgadget"
+	"github.com/prometheus/client_golang/prometheus"
+	"github.com/prometheus/client_golang/prometheus/promauto"
 )
 
 type WakeOnLanDevice struct {
@@ -129,6 +131,21 @@ var (
 	configLock = &sync.Mutex{}
 )
 
+var (
+	configSuccess = promauto.NewGauge(
+		prometheus.GaugeOpts{
+			Name: "jetkvm_config_last_reload_successful",
+			Help: "The last configuration load succeeded",
+		},
+	)
+	configSuccessTime = promauto.NewGauge(
+		prometheus.GaugeOpts{
+			Name: "jetkvm_config_last_reload_success_timestamp_seconds",
+			Help: "Timestamp of last successful config load",
+		},
+	)
+)
+
 func LoadConfig() {
 	configLock.Lock()
 	defer configLock.Unlock()
@@ -144,6 +161,8 @@ func LoadConfig() {
 	file, err := os.Open(configPath)
 	if err != nil {
 		logger.Debug().Msg("default config file doesn't exist, using default")
+		configSuccess.Set(1.0)
+		configSuccessTime.SetToCurrentTime()
 		return
 	}
 	defer file.Close()
@@ -152,6 +171,7 @@ func LoadConfig() {
 	loadedConfig := *defaultConfig
 	if err := json.NewDecoder(file).Decode(&loadedConfig); err != nil {
 		logger.Warn().Err(err).Msg("config file JSON parsing failed")
+		configSuccess.Set(0.0)
 		return
 	}
 
@@ -164,6 +184,8 @@ func LoadConfig() {
 		loadedConfig.UsbDevices = defaultConfig.UsbDevices
 	}
 
+	configSuccess.Set(1.0)
+	configSuccessTime.SetToCurrentTime()
 	config = &loadedConfig
 
 	rootLogger.UpdateLogLevel()
diff --git a/wol.go b/wol.go
index 47f921a..e90d740 100644
--- a/wol.go
+++ b/wol.go
@@ -6,11 +6,27 @@ import (
 	"net"
 )
 
+var (
+	wolPackets = promauto.NewCounter(
+		prometheus.CounterOpts{
+			Name: "jetkvm_wol_sent_packets_total",
+			Help: "Total number of Wake-on-LAN magic packets sent.",
+		},
+	)
+	wolErrors = promauto.NewCounter(
+		prometheus.CounterOpts{
+			Name: "jetkvm_wol_sent_packet_errors_total",
+			Help: "Total number of Wake-on-LAN magic packets errors.",
+		},
+	)
+)
+
 // SendWOLMagicPacket sends a Wake-on-LAN magic packet to the specified MAC address
 func rpcSendWOLMagicPacket(macAddress string) error {
 	// Parse the MAC address
 	mac, err := net.ParseMAC(macAddress)
 	if err != nil {
+		wolErrors.Inc()
 		return ErrorfL(wolLogger, "invalid MAC address", err)
 	}
 
@@ -20,6 +36,7 @@ func rpcSendWOLMagicPacket(macAddress string) error {
 	// Set up UDP connection
 	conn, err := net.Dial("udp", "255.255.255.255:9")
 	if err != nil {
+		wolErrors.Inc()
 		return ErrorfL(wolLogger, "failed to establish UDP connection", err)
 	}
 	defer conn.Close()
@@ -27,10 +44,12 @@ func rpcSendWOLMagicPacket(macAddress string) error {
 	// Send the packet
 	_, err = conn.Write(packet)
 	if err != nil {
+		wolErrors.Inc()
 		return ErrorfL(wolLogger, "failed to send WOL packet", err)
 	}
 
 	wolLogger.Info().Str("mac", macAddress).Msg("WOL packet sent")
+	wolPackets.Inc()
 
 	return nil
 }