diff --git a/ChangeLog.d/bugfix/ZBX-23667 b/ChangeLog.d/bugfix/ZBX-23667
new file mode 100644
index 00000000000..8128719322b
--- /dev/null
+++ b/ChangeLog.d/bugfix/ZBX-23667
@@ -0,0 +1 @@
+.......PS. [ZBX-23667] added vmware datastore uuid to *discovery items (MVekslers)
diff --git a/src/zabbix_server/poller/checks_simple_vmware.c b/src/zabbix_server/poller/checks_simple_vmware.c
index 4f50308aefc..a64503086f3 100644
--- a/src/zabbix_server/poller/checks_simple_vmware.c
+++ b/src/zabbix_server/poller/checks_simple_vmware.c
@@ -107,6 +107,36 @@ static zbx_vmware_datastore_t	*ds_get(const zbx_vector_vmware_datastore_t *dss,
 	return dss->values[i];
 }
 
+/******************************************************************************
+ *                                                                            *
+ * Purpose: return id of dsname data from vector with uuid or name            *
+ *                                                                            *
+ * Parameters: hv_dsnames   - [IN] the vector with all hv Datastores          *
+ *             uuid_or_name - [IN] the name or uuid of Datastore              *
+ *                                                                            *
+ * Return value:                                                              *
+ *        id   - the operation has completed successfully                     *
+ *        FAIL - the operation has failed                                     *
+ *                                                                            *
+ ******************************************************************************/
+static int	dsnameid_get(const zbx_vector_vmware_dsname_t *hv_dsnames, const char *uuid_or_name)
+{
+	int			i;
+	zbx_vmware_dsname_t	dsname_cmp;
+
+	dsname_cmp.name = (char *)uuid_or_name;
+	dsname_cmp.uuid = (char *)uuid_or_name;
+
+	if (FAIL == (i = zbx_vector_vmware_dsname_bsearch(hv_dsnames, &dsname_cmp, vmware_dsname_compare)) &&
+			FAIL == (i = zbx_vector_vmware_dsname_search(hv_dsnames, &dsname_cmp,
+					vmware_dsname_compare_uuid)))
+	{
+		return FAIL;
+	}
+
+	return i;
+}
+
 static zbx_vmware_hv_t	*service_hv_get_by_vm_uuid(zbx_vmware_service_t *service, const char *uuid)
 {
 	zbx_vmware_vm_t		vm_local = {.uuid = (char *)uuid};
@@ -1677,6 +1707,7 @@ int	check_vcenter_hv_datastore_discovery(AGENT_REQUEST *request, const char *use
 
 		zbx_json_addobject(&json_data, NULL);
 		zbx_json_addstring(&json_data, "{#DATASTORE}", dsname->name, ZBX_JSON_TYPE_STRING);
+		zbx_json_addstring(&json_data, "{#DATASTORE.UUID}", dsname->uuid, ZBX_JSON_TYPE_STRING);
 		zbx_json_adduint64(&json_data, "{#MULTIPATH.COUNT}", (unsigned int)total);
 		zbx_json_adduint64(&json_data, "{#MULTIPATH.PARTITION.COUNT}",
 				(unsigned int)dsname->hvdisks.values_num);
@@ -1705,7 +1736,6 @@ static int	check_vcenter_hv_datastore_latency(AGENT_REQUEST *request, const char
 	zbx_vmware_service_t	*service;
 	zbx_vmware_hv_t		*hv;
 	zbx_vmware_datastore_t	*datastore;
-	zbx_vmware_dsname_t	dsname_cmp;
 	int			i, ret = SYSINFO_RET_FAIL;
 	zbx_str_uint64_pair_t	uuid_cmp = {.value = 0};
 
@@ -1739,9 +1769,7 @@ static int	check_vcenter_hv_datastore_latency(AGENT_REQUEST *request, const char
 		goto unlock;
 	}
 
-	dsname_cmp.name = (char *)name;
-
-	if (FAIL == (i = zbx_vector_vmware_dsname_bsearch(&hv->dsnames, &dsname_cmp, vmware_dsname_compare)))
+	if (FAIL == (i = dsnameid_get(&hv->dsnames, name)))
 	{
 		SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Datastore \"%s\" not found on this hypervisor.", name));
 		goto unlock;
@@ -1896,15 +1924,13 @@ static int	check_vcenter_ds_size(const char *url, const char *hv_uuid, const cha
 
 	if (NULL != hv_uuid)
 	{
-		zbx_vmware_dsname_t	dsname_cmp = {.name = (char *)name};
-
 		if (NULL == (hv = hv_get(&service->data->hvs, hv_uuid)))
 		{
 			SET_MSG_RESULT(result, zbx_strdup(NULL, "Unknown hypervisor uuid."));
 			goto unlock;
 		}
 
-		if (FAIL == (i = zbx_vector_vmware_dsname_bsearch(&hv->dsnames, &dsname_cmp, vmware_dsname_compare)))
+		if (FAIL == (i = dsnameid_get(&hv->dsnames, name)))
 		{
 			SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Datastore \"%s\" not found on this hypervisor.",
 					name));
@@ -2285,7 +2311,7 @@ int	check_vcenter_hv_datastore_multipath(AGENT_REQUEST *request, const char *use
 
 		dsname_cmp.name = (char *)ds_name;
 
-		if (FAIL == (i = zbx_vector_vmware_dsname_bsearch(&hv->dsnames, &dsname_cmp, vmware_dsname_compare)))
+		if (FAIL == (i = dsnameid_get(&hv->dsnames, ds_name)))
 		{
 			SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Datastore \"%s\" not found on this hypervisor.",
 					ds_name));
@@ -2464,6 +2490,7 @@ int	check_vcenter_datastore_discovery(AGENT_REQUEST *request, const char *userna
 		zbx_vmware_datastore_t	*datastore = service->data->datastores.values[i];
 		zbx_json_addobject(&json_data, NULL);
 		zbx_json_addstring(&json_data, "{#DATASTORE}", datastore->name, ZBX_JSON_TYPE_STRING);
+		zbx_json_addstring(&json_data, "{#DATASTORE.UUID}", datastore->uuid, ZBX_JSON_TYPE_STRING);
 		zbx_json_addobject(&json_data, "{#DATASTORE.EXTENT}");
 
 		for (j = 0; j < datastore->diskextents.values_num; j++)
@@ -2868,7 +2895,6 @@ int	check_vcenter_vm_discovery(AGENT_REQUEST *request, const char *username, con
 					ZBX_JSON_TYPE_STRING);
 			zbx_json_addstring(&json_data, "{#VM.FOLDER}",
 					ZBX_NULL2EMPTY_STR(vm->props[ZBX_VMWARE_VMPROP_FOLDER]), ZBX_JSON_TYPE_STRING);
-
 			zbx_json_close(&json_data);
 		}
 	}
diff --git a/src/zabbix_server/vmware/vmware.c b/src/zabbix_server/vmware/vmware.c
index 5b5cedc49cb..42741ef443e 100644
--- a/src/zabbix_server/vmware/vmware.c
+++ b/src/zabbix_server/vmware/vmware.c
@@ -3935,6 +3935,19 @@ int	vmware_dsname_compare(const void *d1, const void *d2)
 	return strcmp(ds1->name, ds2->name);
 }
 
+/******************************************************************************
+ *                                                                            *
+ * Purpose: sorting function to sort Datastore names vector by name           *
+ *                                                                            *
+ ******************************************************************************/
+int	vmware_dsname_compare_uuid(const void *d1, const void *d2)
+{
+	const zbx_vmware_dsname_t	*ds1 = *(const zbx_vmware_dsname_t * const *)d1;
+	const zbx_vmware_dsname_t	*ds2 = *(const zbx_vmware_dsname_t * const *)d2;
+
+	return strcmp(ds1->uuid, ds2->uuid);
+}
+
 /******************************************************************************
  *                                                                            *
  * Function: vmware_service_init_hv                                           *
diff --git a/src/zabbix_server/vmware/vmware.h b/src/zabbix_server/vmware/vmware.h
index 4170533c6d0..77f79852d1e 100644
--- a/src/zabbix_server/vmware/vmware.h
+++ b/src/zabbix_server/vmware/vmware.h
@@ -148,8 +148,9 @@ typedef struct
 	zbx_vector_vmware_hvdisk_t	hvdisks;
 }
 zbx_vmware_dsname_t;
-
 int	vmware_dsname_compare(const void *d1, const void *d2);
+int	vmware_dsname_compare_uuid(const void *d1, const void *d2);
+
 ZBX_PTR_VECTOR_DECL(vmware_dsname, zbx_vmware_dsname_t *)
 
 typedef struct
