You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/iot-edge/deploy-confidential-applications.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,8 +4,8 @@ description: Use the Open Enclave SDK and API to write confidential applications
4
4
author: PatAltimore
5
5
ms.service: azure-iot-edge
6
6
services: iot-edge
7
-
ms.topic: conceptual
8
-
ms.date: 04/08/2024
7
+
ms.topic: concept-article
8
+
ms.date: 05/08/2025
9
9
ms.author: patricka
10
10
---
11
11
@@ -15,29 +15,29 @@ ms.author: patricka
15
15
16
16
Azure IoT Edge supports confidential applications that run within secure enclaves on the device. Encryption provides security for data while in transit or at rest, but enclaves provide security for data and workloads while in use. IoT Edge supports Open Enclave as a standard for developing confidential applications.
17
17
18
-
Security is an important focus of the Internet of Things (IoT) because often IoT devices are often out in the world rather than secured inside a private facility. This exposure puts devices at risk for tampering and forgery because they are physically accessible to bad actors. IoT Edge devices have even more need for trust and integrity because they allow for sensitive workloads to be run at the edge. Unlike common sensors and actuators, these intelligent edge devices are potentially exposing sensitive workloads that were formerly only run within protected cloud or on-premises environments.
18
+
Security is an important focus of the Internet of Things (IoT) because IoT devices are often out in the world rather than secured inside a private facility. This exposure puts devices at risk for tampering and forgery because they are physically accessible to bad actors. IoT Edge devices need more trust and integrity because they run sensitive workloads at the edge. Unlike common sensors and actuators, these intelligent edge devices might expose sensitive workloads that were previously run only in protected cloud or on-premises environments.
19
19
20
20
The [IoT Edge security manager](iot-edge-security-manager.md) addresses one piece of the confidential computing challenge. The security manager uses a hardware security module (HSM) to protect the identity workloads and ongoing processes of an IoT Edge device.
21
21
22
-
Another aspect of confidential computing is protecting the data in use at the edge. A *Trusted execution environment (TEE)* is a secure, isolated environment on a processor and is sometimes referred to as an *enclave*. A *confidential application* is an application that runs in an enclave. Because of the nature of enclaves, confidential applications are protected from other apps running in the main processor or in the TEE.
22
+
Another aspect of confidential computing is protecting data in use at the edge. A *trusted execution environment (TEE)* is a secure, isolated environment on a processor, sometimes referred to as an *enclave*. A *confidential application* is an application that runs in an enclave. Because of the nature of enclaves, confidential applications are protected from other apps running in the main processor or in the TEE.
23
23
24
24
## Confidential applications on IoT Edge
25
25
26
-
Confidential applications are encrypted in transit and at rest, and only decrypted to run inside a trusted execution environment. This standard holds true for confidential applications deployed as IoT Edge modules.
26
+
Confidential applications are encrypted during transit and at rest, and decrypted only to run inside a trusted execution environment. This standard holds true for confidential applications deployed as IoT Edge modules.
27
27
28
-
The developer creates the confidential application and packages it as an IoT Edge module. The application is encrypted before being pushed to the container registry. The application remains encrypted throughout the IoT Edge deployment process until the module is started on the IoT Edge device. Once the confidential application is within the device's TEE, it is decrypted and can begin executing.
28
+
Developers create confidential applications and package them as IoT Edge modules. The application is encrypted before it is pushed to the container registry. The application remains encrypted throughout the IoT Edge deployment process until the module is started on the IoT Edge device. Once the confidential application is within the device's TEE, it is decrypted and can begin executing.
29
29
30
-
:::image type="content" source="./media/deploy-confidential-applications/confidential-applications-encrypted.png" alt-text="Diagram that shows confidential applications are encrypted within IoT Edge modules until deployed into the secure enclave.":::
30
+
:::image type="content" source="./media/deploy-confidential-applications/confidential-applications-encrypted.png" alt-text="Diagram showing that confidential applications are encrypted within IoT Edge modules until deployed into the secure enclave.":::
31
31
32
-
Confidential applications on IoT Edge are a logical extension of[Azure confidential computing](../confidential-computing/overview.md). Workloads that run within secure enclaves in the cloud can also be deployed to run within secure enclaves at the edge.
32
+
Confidential applications on IoT Edge extend[Azure confidential computing](../confidential-computing/overview.md). Workloads that run within secure enclaves in the cloud can also be deployed to run within secure enclaves at the edge.
33
33
34
34
## Open Enclave
35
35
36
-
The [Open Enclave SDK](https://openenclave.io/sdk/) is an opensource project that helps developers create confidential applications for multiple platforms and environments. The Open Enclave SDK operates within the trusted execution environment of a device, while the Open Enclave API acts as an interface between the TEE and the non-TEE processing environment.
36
+
The [Open Enclave SDK](https://openenclave.io/sdk/) is an open-source project that lets developers create confidential applications for multiple platforms and environments. The Open Enclave SDK operates within the trusted execution environment (TEE) of a device, while the Open Enclave API acts as an interface between the TEE and the non-TEE processing environment.
37
37
38
-
Open Enclave supports multiple hardware platforms. IoT Edge support for enclaves currently requires the Open Portable TEE operating system (OP-TEE OS). To learn more, see [Open Enclave SDK for OP-TEE OS](https://github.com/openenclave/openenclave/blob/master/docs/GettingStartedDocs/OP-TEE/Introduction.md).
38
+
Open Enclave supports multiple hardware platforms. IoT Edge support for enclaves requires the Open Portable TEE operating system (OP-TEE OS). To learn more, see [Open Enclave SDK for OP-TEE OS](https://github.com/openenclave/openenclave/blob/master/docs/GettingStartedDocs/OP-TEE/Introduction.md).
39
39
40
-
The Open Enclave repository also includes samples to help developers get started. For more information, choose one of the introductory articles:
40
+
The Open Enclave repository includes samples to help developers get started. For more information, select one of the introductory articles:
41
41
42
42
*[Building Open Enclave SDK samples on Linux](https://github.com/openenclave/openenclave/blob/master/samples/BuildSamplesLinux.md)
43
43
*[Building Open Enclave SDK samples on Windows](https://github.com/openenclave/openenclave/blob/master/samples/BuildSamplesWindows.md)
Copy file name to clipboardExpand all lines: articles/iot-edge/how-to-access-built-in-metrics.md
+17-18Lines changed: 17 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,11 @@
1
1
---
2
2
title: Access built-in metrics in Azure IoT Edge
3
-
description: Remote access to built-in metrics from the IoT Edge runtime components
3
+
description: Access built-in metrics from IoT Edge runtime components to monitor device health.
4
+
#customer intent: As a system administrator, I want to access built-in metrics in Azure IoT Edge so that I can monitor and understand the health of my IoT Edge devices.
4
5
author: PatAltimore
5
-
6
6
ms.author: patricka
7
-
ms.date: 04/08/2024
8
-
ms.topic: conceptual
9
-
ms.reviewer: veyalla
7
+
ms.date: 05/08/2025
8
+
ms.topic: concept-article
10
9
ms.service: azure-iot-edge
11
10
services: iot-edge
12
11
---
@@ -17,11 +16,11 @@ services: iot-edge
17
16
18
17
The IoT Edge runtime components, IoT Edge hub, and IoT Edge agent, produce built-in metrics in the [Prometheus exposition format](https://prometheus.io/docs/instrumenting/exposition_formats/). Access these metrics remotely to monitor and understand the health of an IoT Edge device.
19
18
20
-
You can use your own solution to access these metrics. Or, you can use the [metrics-collector module](https://mcr.microsoft.com/artifact/mar/azureiotedge-metrics-collector), which handles collecting the built-in metrics and sending them to Azure Monitor or Azure IoT Hub. For more information, see [Collect and transport metrics](how-to-collect-and-transport-metrics.md).
19
+
Use your own solution to access these metrics, or use the [metrics-collector module](https://mcr.microsoft.com/artifact/mar/azureiotedge-metrics-collector), which collects the built-in metrics and sends them to Azure Monitor or Azure IoT Hub. For more information, see [Collect and transport metrics](how-to-collect-and-transport-metrics.md).
21
20
22
-
Metrics are automatically exposed by default on **port 9600** of the **edgeHub** and **edgeAgent** modules (`http://edgeHub:9600/metrics` and `http://edgeAgent:9600/metrics`). They aren't port mapped to the host by default.
21
+
Metrics are exposed by default on **port 9600** of the **edgeHub** and **edgeAgent** modules (`http://edgeHub:9600/metrics` and `http://edgeAgent:9600/metrics`). They aren't mapped to the host by default.
23
22
24
-
Access metrics from the host by exposing and mapping the metrics port from the module's `createOptions`. The example below maps the default metrics port to port 9601 on the host:
23
+
Access metrics from the host by exposing and mapping the metrics port in the module's `createOptions`. The following example maps the default metrics port to port 9601 on the host:
25
24
26
25
```json
27
26
{
@@ -40,36 +39,36 @@ Access metrics from the host by exposing and mapping the metrics port from the m
40
39
}
41
40
```
42
41
43
-
Choose different and unique host port numbers if you are mapping both the edgeHub and edgeAgent's metrics endpoints.
42
+
Choose different and unique host port numbers when mapping both the edgeHub and edgeAgent metrics endpoints.
44
43
45
44
> [!NOTE]
46
-
> The environment variable `httpSettings__enabled`should not be set to `false` for built-in metrics to be available for collection.
45
+
> The environment variable `httpSettings__enabled`must not be set to `false` for built-in metrics to be available for collection.
47
46
>
48
47
> Environment variables that can be used to disable metrics are listed in the [azure/iotedge repo doc](https://github.com/Azure/iotedge/blob/main/doc/EnvironmentVariables.md).
49
48
50
49
## Available metrics
51
50
52
-
Metrics contain tags to help identify the nature of the metric being collected. All metrics contain the following tags:
51
+
Metrics include tags that identify the nature of the metric being collected. All metrics include the following tags:
53
52
54
53
| Tag | Description |
55
54
|-|-|
56
-
| iothub | The hub the device is talking to|
55
+
| iothub | The hub the device communicates with|
57
56
| edge_device | The ID of the current device |
58
57
| instance_number | A GUID representing the current runtime. On restart, all metrics are reset. This GUID makes it easier to reconcile restarts. |
59
58
60
-
In the Prometheus exposition format, there are four core metric types: counter, gauge, histogram, and summary. For more information about the different metric types, see the [Prometheus metric types documentation](https://prometheus.io/docs/concepts/metric_types/).
59
+
The Prometheus exposition format includes four core metric types: counter, gauge, histogram, and summary. For more information about the different metric types, see the [Prometheus metric types documentation](https://prometheus.io/docs/concepts/metric_types/).
61
60
62
-
The quantiles provided for the built-in histogram and summary metrics are 0.1, 0.5, 0.9 and 0.99.
61
+
The quantiles for the built-in histogram and summary metrics are 0.1, 0.5, 0.9, and 0.99.
63
62
64
-
The **edgeHub** module produces the following metrics:
63
+
The **edgeHub** module generates the following metrics:
65
64
66
65
| Name | Dimensions | Description |
67
66
|-|-|-|
68
67
|`edgehub_gettwin_total`|`source` (operation source)<br> `id` (module ID) | Type: counter<br> Total number of GetTwin calls |
69
68
|`edgehub_messages_received_total`|`route_output` (output that sent message)<br> `id`| Type: counter<br> Total number of messages received from clients |
70
69
|`edgehub_messages_sent_total`|`from` (message source)<br> `to` (message destination)<br>`from_route_output`<br> `to_route_input` (message destination input)<br> `priority` (message priority to destination) | Type: counter<br> Total number of messages sent to clients or upstream<br> `to_route_input` is empty when `to` is $upstream |
|`edgehub_message_size_bytes`|`id`<br> | Type: summary<br> Message size from clients<br> Values may be reported as `NaN` if no new measurements are reported for a certain period of time (currently 10 minutes); for`summary` type, corresponding `_count` and `_sum` counters are emitted. |
71
+
|`edgehub_message_size_bytes`|`id`<br> | Type: summary<br> Message size from clients<br> Values might be reported as `NaN` if no new measurements are reported for 10 minutes. For the`summary` type, corresponding `_count` and `_sum` counters are emitted. |
73
72
|`edgehub_gettwin_duration_seconds`|`source` <br> `id`| Type: summary<br> Time taken for get twin operations |
74
73
|`edgehub_message_send_duration_seconds`|`from`<br> `to`<br> `from_route_output`<br> `to_route_input`| Type: summary<br> Time taken to send a message |
75
74
|`edgehub_message_process_duration_seconds`|`from` <br> `to` <br> `priority`| Type: summary<br> Time taken to process a message from the queue |
@@ -84,7 +83,7 @@ The **edgeHub** module produces the following metrics:
84
83
|`edgehub_operation_retry_total`|`id`<br> `operation` (operation name) | Type: counter<br> Total number of times edgeHub operations were retried |
85
84
|`edgehub_client_connect_failed_total`|`id` <br> `reason` (not authenticated)<br> | Type: counter<br> Total number of times clients failed to connect to edgeHub |
86
85
87
-
The **edgeAgent** module produces the following metrics:
86
+
The **edgeAgent** module generates the following metrics:
88
87
89
88
| Name | Dimensions | Description |
90
89
|-|-|-|
@@ -109,7 +108,7 @@ The **edgeAgent** module produces the following metrics:
109
108
|`edgeAgent_total_network_out_bytes`|`module_name`| Type: gauge<br> The number of bytes sent to network |
110
109
|`edgeAgent_total_disk_read_bytes`|`module_name`| Type: gauge<br> The number of bytes read from the disk |
111
110
|`edgeAgent_total_disk_write_bytes`|`module_name`| Type: gauge<br> The number of bytes written to disk |
112
-
|`edgeAgent_metadata`|`edge_agent_version`, `experimental_features`, `host_information`| Type: gauge<br> General metadata about the device. The value is always 0, information is encoded in the tags. Note `experimental_features` and `host_information` are json objects. `host_information` looks like ```{"OperatingSystemType": "linux", "Architecture": "x86_64", "Version": "1.2.7", "Provisioning": {"Type": "dps.tpm", "DynamicReprovisioning": false, "AlwaysReprovisionOnStartup": false}, "ServerVersion": "20.10.11+azure-3", "KernelVersion": "5.11.0-1027-azure", "OperatingSystem": "Ubuntu 20.04.4 LTS", "NumCpus": 2, "Virtualized": "yes"}```. Note `ServerVersion` is the Docker version and `Version` is the IoT Edge security daemon version. |
111
+
|`edgeAgent_metadata`|`edge_agent_version`, `experimental_features`, `host_information`| Type: gauge<br> General metadata about the device. The value is always 0, and information is encoded in the tags. Note that `experimental_features` and `host_information` are JSON objects. `host_information` looks like ```{"OperatingSystemType": "linux", "Architecture": "x86_64", "Version": "1.2.7", "Provisioning": {"Type": "dps.tpm", "DynamicReprovisioning": false, "AlwaysReprovisionOnStartup": false}, "ServerVersion": "20.10.11+azure-3", "KernelVersion": "5.11.0-1027-azure", "OperatingSystem": "Ubuntu 20.04.4 LTS", "NumCpus": 2, "Virtualized": "yes"}```. Note `ServerVersion` is the Docker version and `Version` is the IoT Edge security daemon version. |
0 commit comments