diff --git a/src/monitoring/service/ManagementDBTools.py b/src/monitoring/service/ManagementDBTools.py
index 6c0a69e0ec6ec22a9fff24a1de073f2df03e2115..d2a63685f17b58c0f92acb4ef9606f3df929b9e0 100644
--- a/src/monitoring/service/ManagementDBTools.py
+++ b/src/monitoring/service/ManagementDBTools.py
@@ -36,12 +36,13 @@ class ManagementDB():
                     kpi_id INTEGER PRIMARY KEY AUTOINCREMENT,
                     kpi_description TEXT,
                     kpi_sample_type INTEGER,
-                    device_id INTEGER,
-                    endpoint_id INTEGER,
-                    service_id INTEGER,
-                    slice_id INTEGER,
-                    connection_id INTEGER,
-                    monitor_flag INTEGER
+                    device_id STRING,
+                    endpoint_id STRING,
+                    service_id STRING,
+                    slice_id STRING,
+                    connection_id STRING,
+                    link_id STRING,
+                    monitor_flag STRING
                 );
             """)
             LOGGER.debug("KPI table created in the ManagementDB")
@@ -87,13 +88,13 @@ class ManagementDB():
             LOGGER.debug(f"Alarm table cannot be created in the ManagementDB. {e}")
             raise Exception
 
-    def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id):
+    def insert_KPI(self,kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id):
         try:
             c = self.client.cursor()
-            c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ? AND service_id is ? AND slice_id is ? AND connection_id is ?",(device_id,kpi_sample_type,endpoint_id,service_id,slice_id,connection_id))
+            c.execute("SELECT kpi_id FROM kpi WHERE device_id is ? AND kpi_sample_type is ? AND endpoint_id is ? AND service_id is ? AND slice_id is ? AND connection_id is ? AND link_id is ?",(device_id,kpi_sample_type,endpoint_id,service_id,slice_id,connection_id,link_id))
             data=c.fetchone()
             if data is None:
-                c.execute("INSERT INTO kpi (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id) VALUES (?,?,?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id))
+                c.execute("INSERT INTO kpi (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id) VALUES (?,?,?,?,?,?,?,?)", (kpi_description,kpi_sample_type,device_id,endpoint_id,service_id,slice_id,connection_id,link_id))
                 self.client.commit()
                 kpi_id = c.lastrowid
                 LOGGER.debug(f"KPI {kpi_id} succesfully inserted in the ManagementDB")
diff --git a/src/monitoring/service/MetricsDBTools.py b/src/monitoring/service/MetricsDBTools.py
index fd9c092b2d061865cb8c3d625eef8b5d2ef0eab7..ad20b5afaa6d8510e0e39267ef6e1d71782e3e22 100644
--- a/src/monitoring/service/MetricsDBTools.py
+++ b/src/monitoring/service/MetricsDBTools.py
@@ -96,6 +96,7 @@ class MetricsDB():
                     'service_id SYMBOL,' \
                     'slice_id SYMBOL,' \
                     'connection_id SYMBOL,' \
+                    'link_id SYMBOL,' \
                     'timestamp TIMESTAMP,' \
                     'kpi_value DOUBLE)' \
                     'TIMESTAMP(timestamp);'
@@ -106,7 +107,7 @@ class MetricsDB():
             LOGGER.debug(f"Table {self.table} cannot be created. {e}")
             raise Exception
 
-    def write_KPI(self, time, kpi_id, kpi_sample_type, device_id, endpoint_id, service_id, slice_id, connection_id, kpi_value):
+    def write_KPI(self, time, kpi_id, kpi_sample_type, device_id, endpoint_id, service_id, slice_id, connection_id, link_id, kpi_value):
         device_name = self.name_mapping.get_device_name(device_id) or ''
         endpoint_name = self.name_mapping.get_endpoint_name(endpoint_id) or ''
 
@@ -125,7 +126,9 @@ class MetricsDB():
                             'endpoint_name': endpoint_name,
                             'service_id': service_id,
                             'slice_id': slice_id,
-                            'connection_id': connection_id,},
+                            'connection_id': connection_id,
+                            'link_id': link_id,
+                        },
                         columns={
                             'kpi_value': kpi_value},
                         at=datetime.datetime.fromtimestamp(time))
diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py
index 3bfef65ff0c52f110b9a091e96b6f6b97dfa79cf..608b0bad9d5869cde35be60157fec9e0a6d34c90 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -65,13 +65,14 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         kpi_service_id = request.service_id.service_uuid.uuid
         kpi_slice_id = request.slice_id.slice_uuid.uuid
         kpi_connection_id = request.connection_id.connection_uuid.uuid
+        kpi_link_id = request.link_id.link_uuid.uuid
         if request.kpi_id.kpi_id.uuid != "":
             response.kpi_id.uuid = request.kpi_id.kpi_id.uuid
             # Here the code to modify an existing kpi
         else:
             data = self.management_db.insert_KPI(
                 kpi_description, kpi_sample_type, kpi_device_id, kpi_endpoint_id, kpi_service_id, kpi_slice_id,
-                kpi_connection_id)
+                kpi_connection_id, kpi_link_id)
             response.kpi_id.uuid = str(data)
         return response
 
@@ -100,6 +101,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             kpiDescriptor.service_id.service_uuid.uuid          = str(kpi_db[5])
             kpiDescriptor.slice_id.slice_uuid.uuid              = str(kpi_db[6])
             kpiDescriptor.connection_id.connection_uuid.uuid    = str(kpi_db[7])
+            kpiDescriptor.link_id.link_uuid.uuid                = str(kpi_db[8])
         return kpiDescriptor
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
@@ -117,6 +119,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             kpi_descriptor.service_id.service_uuid.uuid         = str(item[5])
             kpi_descriptor.slice_id.slice_uuid.uuid             = str(item[6])
             kpi_descriptor.connection_id.connection_uuid.uuid   = str(item[7])
+            kpi_descriptor.link_id.link_uuid.uuid               = str(item[8])
             kpi_descriptor_list.kpi_descriptor_list.append(kpi_descriptor)
         return kpi_descriptor_list
 
@@ -135,11 +138,12 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
             serviceId = kpiDescriptor.service_id.service_uuid.uuid
             sliceId   = kpiDescriptor.slice_id.slice_uuid.uuid
             connectionId = kpiDescriptor.connection_id.connection_uuid.uuid
+            linkId = kpiDescriptor.link_id.link_uuid.uuid
             time_stamp = request.timestamp.timestamp
             kpi_value = getattr(request.kpi_value, request.kpi_value.WhichOneof('value'))
 
             # Build the structure to be included as point in the MetricsDB
-            self.metrics_db.write_KPI(time_stamp, kpiId, kpiSampleType, deviceId, endpointId, serviceId, sliceId, connectionId, kpi_value)
+            self.metrics_db.write_KPI(time_stamp, kpiId, kpiSampleType, deviceId, endpointId, serviceId, sliceId, connectionId, linkId, kpi_value)
         return Empty()
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)