Skip to content

Commit 01320e2

Browse files
authored
Merge pull request #299545 from PatAltimore/patricka-freshness
Freshness review
2 parents 1c66e35 + 3f781f9 commit 01320e2

File tree

4 files changed

+66
-64
lines changed

4 files changed

+66
-64
lines changed

articles/iot-edge/deploy-confidential-applications.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ description: Use the Open Enclave SDK and API to write confidential applications
44
author: PatAltimore
55
ms.service: azure-iot-edge
66
services: iot-edge
7-
ms.topic: conceptual
8-
ms.date: 04/08/2024
7+
ms.topic: concept-article
8+
ms.date: 05/08/2025
99
ms.author: patricka
1010
---
1111

@@ -15,29 +15,29 @@ ms.author: patricka
1515

1616
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.
1717

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.
1919

2020
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.
2121

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.
2323

2424
## Confidential applications on IoT Edge
2525

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.
2727

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.
2929

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.":::
3131

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.
3333

3434
## Open Enclave
3535

36-
The [Open Enclave SDK](https://openenclave.io/sdk/) is an open source 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.
3737

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).
3939

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:
4141

4242
* [Building Open Enclave SDK samples on Linux](https://github.com/openenclave/openenclave/blob/master/samples/BuildSamplesLinux.md)
4343
* [Building Open Enclave SDK samples on Windows](https://github.com/openenclave/openenclave/blob/master/samples/BuildSamplesWindows.md)

articles/iot-edge/how-to-access-built-in-metrics.md

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
---
22
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.
45
author: PatAltimore
5-
66
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
109
ms.service: azure-iot-edge
1110
services: iot-edge
1211
---
@@ -17,11 +16,11 @@ services: iot-edge
1716

1817
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.
1918

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).
2120

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.
2322

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:
2524

2625
```json
2726
{
@@ -40,36 +39,36 @@ Access metrics from the host by exposing and mapping the metrics port from the m
4039
}
4140
```
4241

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.
4443

4544
> [!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.
4746
>
4847
> 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).
4948
5049
## Available metrics
5150

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:
5352

5453
| Tag | Description |
5554
|-|-|
56-
| iothub | The hub the device is talking to |
55+
| iothub | The hub the device communicates with |
5756
| edge_device | The ID of the current device |
5857
| instance_number | A GUID representing the current runtime. On restart, all metrics are reset. This GUID makes it easier to reconcile restarts. |
5958

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/).
6160

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.
6362

64-
The **edgeHub** module produces the following metrics:
63+
The **edgeHub** module generates the following metrics:
6564

6665
| Name | Dimensions | Description |
6766
|-|-|-|
6867
| `edgehub_gettwin_total` | `source` (operation source)<br> `id` (module ID) | Type: counter<br> Total number of GetTwin calls |
6968
| `edgehub_messages_received_total` | `route_output` (output that sent message)<br> `id` | Type: counter<br> Total number of messages received from clients |
7069
| `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 |
7170
| `edgehub_reported_properties_total` | `target`(update target)<br> `id` | Type: counter<br> Total reported property updates calls |
72-
| `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. |
7372
| `edgehub_gettwin_duration_seconds` | `source` <br> `id` | Type: summary<br> Time taken for get twin operations |
7473
| `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 |
7574
| `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:
8483
| `edgehub_operation_retry_total` | `id`<br> `operation` (operation name) | Type: counter<br> Total number of times edgeHub operations were retried |
8584
| `edgehub_client_connect_failed_total` | `id` <br> `reason` (not authenticated)<br> | Type: counter<br> Total number of times clients failed to connect to edgeHub |
8685

87-
The **edgeAgent** module produces the following metrics:
86+
The **edgeAgent** module generates the following metrics:
8887

8988
| Name | Dimensions | Description |
9089
|-|-|-|
@@ -109,7 +108,7 @@ The **edgeAgent** module produces the following metrics:
109108
| `edgeAgent_total_network_out_bytes` | `module_name` | Type: gauge<br> The number of bytes sent to network |
110109
| `edgeAgent_total_disk_read_bytes` | `module_name` | Type: gauge<br> The number of bytes read from the disk |
111110
| `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. |
113112

114113
## Next steps
115114

0 commit comments

Comments
 (0)