# Metrics v1.3.0

Edera metrics are currently in **Alpha**. New metrics are expected to be added, and existing metrics are subject to change.

Edera exposes a set of metrics to provide an overview of the health and performance of Edera and the infrastructure it runs on.

The following metrics are exposed by Edera:

## Zone metrics

Zone metrics encapsulates metrics obtained from an Edera Zone.

| Metric | Description | Type | Labels |
| --- | --- | --- | --- |
| `zone_cpu_usage_percent` | CPU usage in percent, in the range 0-100. | `gauge` | `cpu`, `zone_id`, `k8s_namespace`, `k8s_pod` |
| `zone_cpu_usage_seconds_total` | CPU time used, in seconds, per cpu. | `counter` | `cpu`, `zone_id`, `k8s_namespace`, `k8s_pod` |
| `zone_create_timestamp_milliseconds` | Time when zone was created as a Unix timestamp with millisecond resolution. | `gauge` | `zone_id`, `k8s_namespace`, `k8s_pod` |
| `zone_memory_total_bytes` | Total number of bytes of memory allocated to the zone. | `gauge` | `zone_id`, `k8s_namespace` |
| `zone_memory_free_bytes` | Number of bytes of memory allocated to the zone and currently unused. | `gauge` | `zone_id`, `k8s_namespace` |
| `zone_memory_used_bytes` | Number of bytes of memory allocated to the zone and currently in use. | `gauge` | `zone_id`, `k8s_namespace` |
| `zone_ready_timestamp_milliseconds` | Time when a zone is ready for use as a Unix timestamp with millisecond resolution. | `gauge` | `zone_id`, `k8s_namespace`, `k8s_pod` |
| `zones` | Current number of zones, per state. | `gauge` | `state` |

### Hypervisor metrics

Hypervisor metrics encapsulates metrics obtained from the hypervisor of an Edera zone.

| Metric | Description | Type | Labels |
| --- | --- | --- | --- |
| `hypervisor_cpu_usage_seconds_total` | CPU time used, in seconds, per zone. | `counter` | `zone_id` |
| `hypervisor_memory_max_bytes` | Maximum memory allowed, in bytes, per zone. | `gauge` | `zone_id` |
| `hypervisor_memory_total_bytes` | Total memory currently allocated, in bytes, per zone. | `gauge` | `zone_id` |
| `hypervisor_memory_outstanding_bytes` | Memory owed but not yet allocated, in bytes, per zone. | `gauge` | `zone_id` |
| `hypervisor_vcpus_online` | Number of virtual CPUs currently online, per zone. | `gauge` | `zone_id` |

## Host metrics

Host metrics encapsulates metrics obtained from the host of Edera, also referred to as `dom0`.

| Metric | Description | Type | Labels |
| --- | --- | --- | --- |
| `host_cpu_usage_percent` | CPU usage in percent, in the range 0-100. | `gauge` | `cpu` |
| `host_cpu_usage_seconds_total` | CPU time used, in seconds, per cpu, per mode. | `counter` | `cpu`, `mode` |
| `host_memory_total_bytes` | Total number of bytes of memory allocated to the host. | `gauge` |  |
| `host_memory_free_bytes` | Number of bytes of memory allocated to the host and currently unused. | `gauge` |  |
| `host_memory_used_bytes` | Number of bytes of memory allocated to the host and currently in use. | `gauge` |  |

## Health check metrics

Health check metrics encapsulates metrics which provide an insight into the health of Edera services.

| Metric | Description | Type | Labels |
| --- | --- | --- | --- |
| `health_check_total` | Total number of health checks performed, labeled by service and result status (success or failure). | `counter` | `service`, `status` |

## Label examples

Exposed metrics may contain labels, which provides additional context, such as the zone a metric is being populated from, and allows for more detailed querying and filtering.

| Label | Description | Example |
| --- | --- | --- |
| `cpu` | Name of the CPU. | `cpu="cpu1"` or `cpu="1"` |
| `k8s_namespace` | Name of the Kubernetes namespace the zone is in. | `k8s_namespace="default"` |
| `k8s_pod` | Kubernetes pod ID the zone is related to. | `k8s_pod="nginx-deployment-7d6c54b4c6-g84cl"` |
| `mode` | Mode of the CPU. | `mode="idle"` or `mode="user"` |
| `service` | Name of the Edera service. | `service="protect-cri"` or `service="protect-daemon"` |
| `state` | State of the Edera zone. | `state="ready"` or `state="failed"` |
| `status` | Status returned from the Edera service during a health check. | `status="success"` or `status="failed"` |
| `zone_id` | ID of the Edera zone. | `zone_id="7568edad-3a34-47e3-b605-36ede54a9aab"` |

## Collect metrics

Edera metrics are exposed by in the Prometheus format, by default on `http://127.0.0.1:3035/metrics`. If an alternative address is preferred, it can be provided to the `metrics-http-listen-addr` flag on the `protect-orchestrator` service. Metrics can be viewed directly via the `/metrics` endpoint, or scraped by third-party tooling.
