diff --git a/healthMonitor.cpp b/healthMonitor.cpp
index 42bf77d..f7ca6ce 100644
--- a/healthMonitor.cpp
+++ b/healthMonitor.cpp
@@ -173,6 +173,51 @@
     readTimer.restart(std::chrono::milliseconds(sensorConfig.freq * 1000));
 }
 
+void HealthSensor::checkSensorThreshold(const double value)
+{
+    if (value > sensorConfig.criticalHigh)
+    {
+        if (!CriticalInterface::criticalAlarmHigh())
+        {
+            CriticalInterface::criticalAlarmHigh(true);
+            if (sensorConfig.criticalLog)
+                log<level::ERR>("ASSERT: Utilization Sensor has exceeded "
+                                "critical high threshold",
+                                entry("NAME = %s", sensorConfig.name.c_str()));
+        }
+    }
+    else
+    {
+        if (CriticalInterface::criticalAlarmHigh())
+        {
+            CriticalInterface::criticalAlarmHigh(false);
+            if (sensorConfig.criticalLog)
+                log<level::INFO>("DEASSERT: Utilization Sensor is under "
+                                 "critical high threshold",
+                                 entry("NAME = %s", sensorConfig.name.c_str()));
+        }
+
+        if ((value > sensorConfig.warningHigh) &&
+            (!WarningInterface::warningAlarmHigh()))
+        {
+            WarningInterface::warningAlarmHigh(true);
+            if (sensorConfig.warningLog)
+                log<level::ERR>("ASSERT: Utilization Sensor has exceeded "
+                                "warning high threshold",
+                                entry("NAME = %s", sensorConfig.name.c_str()));
+        }
+        else if ((value <= sensorConfig.warningHigh) &&
+                 (WarningInterface::warningAlarmHigh()))
+        {
+            WarningInterface::warningAlarmHigh(false);
+            if (sensorConfig.warningLog)
+                log<level::INFO>("DEASSERT: Utilization Sensor is under "
+                                 "warning high threshold",
+                                 entry("NAME = %s", sensorConfig.name.c_str()));
+        }
+    }
+}
+
 void HealthSensor::readHealthSensor()
 {
     /* Read current sensor value */
@@ -196,6 +241,9 @@
 
     /* Set this new value to dbus */
     setSensorValueToDbus(avgValue);
+
+    /* Check the sensor threshold  and log required message */
+    checkSensorThreshold(avgValue);
 }
 
 void printConfig(HealthConfig& cfg)
diff --git a/healthMonitor.hpp b/healthMonitor.hpp
index 09f5539..3534623 100644
--- a/healthMonitor.hpp
+++ b/healthMonitor.hpp
@@ -75,6 +75,8 @@
     void setSensorValueToDbus(const double value);
     /** @brief Set Sensor Threshold to D-bus at beginning */
     void setSensorThreshold(double criticalHigh, double warningHigh);
+    /** @brief Check Sensor threshold and update alarm and log */
+    void checkSensorThreshold(const double value);
 
   private:
     /** @brief sdbusplus bus client connection. */
