# Azure Storage

# Introducción

Pandora FMS Azure Storage Discovery enumera automáticamente las cuentas de almacenamiento de una suscripción de Microsoft Azure. Puede crear un agente por cuenta o consolidar todos los módulos en un único agente de destino.

La aplicación monitoriza capacidad, operaciones, tráfico, latencia y disponibilidad en la cuenta y en los servicios Blob, File, Queue y Table. Los identificadores de las cuentas se obtienen dinámicamente mediante Azure Resource Manager y los recursos `blobServices/default`, `fileServices/default`, `queueServices/default` y `tableServices/default` se construyen sin intervención del usuario.

Todas las métricas se entregan como datos numéricos. Las capacidades se convierten de bytes a GiB y los módulos de actividad contienen el último punto no nulo disponible.

# Prerrequisitos

- Un servidor Pandora FMS con Discovery habilitado.
- Una suscripción de Microsoft Azure con cuentas de almacenamiento.
- Un Service Principal de Microsoft Entra con los roles **Reader** y **Monitoring Reader** sobre la suscripción o el Resource Group que se quiera descubrir.
- Una credencial de tipo Azure en el almacén de credenciales de Pandora FMS con **Client ID**, **Application secret**, **Tenant or domain name** y **Subscription id**.
- Un grupo de agentes válido para la tarea. El grupo `All` no es válido porque su identificador es `0`.
- Para utilizar **Advanced container metrics**, la regla `ContainerLevelCapacityMetrics` debe estar habilitada previamente en Azure.

# Parámetros

<table id="bkmrk-par%C3%A1metro-descripci%C3%B3"><thead><tr><th>Parámetro</th><th>Descripción</th></tr></thead><tbody><tr><td>`--conf`, `-c`</td><td>Ruta obligatoria del fichero de configuración utilizado en la ejecución manual.</td></tr><tr><td>`--pretty`</td><td>Formatea el JSON de salida para facilitar su lectura.</td></tr><tr><td>`--version`</td><td>Muestra la versión del plugin, fijada en `1.0`.</td></tr><tr><td>`--help`, `-h`</td><td>Muestra la ayuda del comando.</td></tr></tbody></table>

# Ejecución manual

Para ejecutar el plugin manualmente se puede utilizar un fichero de configuración mínimo como el siguiente:

```ini
[CONF]
tenant_id=11111111-1111-1111-1111-111111111111
client_id=22222222-2222-2222-2222-222222222222
client_secret=my_client_secret
subscription_id=00000000-0000-0000-0000-000000000000
group_id=2

```

El comando de ejecución es:

```bash
./pandora_azure_storage --conf /etc/pandora/pandora_azure.conf

```

Para mostrar el JSON de salida con formato legible:

```bash
./pandora_azure_storage --conf /etc/pandora/pandora_azure.conf --pretty

```

# Discovery

**Step 1. Task definition**

- Seleccione el grupo donde se crearán los agentes. Debe ser un grupo con identificador mayor que `0`; no se puede utilizar `All`.

**Step 2. Azure base**

- **Azure credentials:** selecciona una credencial de tipo Azure del almacén de credenciales de Pandora FMS.
- **Custom Resource Group:** activado limita el descubrimiento a un Resource Group concreto. Está desactivado por defecto.
- **Resource group:** nombre exacto del Resource Group. Se muestra al activar **Custom Resource Group** y no admite expresiones regulares.

**Step 3. Advanced options**

- **Storage account regexp:** regexp opcional aplicada localmente al nombre de las cuentas de almacenamiento.
- **Create one agent per Storage Account:** activado crea un agente por cuenta; desactivado envía todos los módulos a **Target agent**.
- **Target agent:** agente utilizado cuando la creación por cuenta está desactivada. Su valor predeterminado es `Azure Storage`.
- **Agent name prefix:** prefijo utilizado al crear un agente por cuenta. Su valor predeterminado es `Azure Storage `.
- **Agent autodisable mode:** activado crea los agentes con `agent_mode=2`; desactivado utiliza `agent_mode=1`.
- **Agent interval:** intervalo asignado a los agentes. El valor predeterminado es 5 minutos.
- **Enable entities file re-scan interval:** activado conserva la caché de cuentas hasta que se alcanza el intervalo seleccionado.
- **Entities re-scan interval:** intervalo antes de reconstruir la caché. Solo se muestra al activar el token anterior y su valor predeterminado es 1 día.
- **Request timeout:** timeout de cada petición a Azure. El valor predeterminado es 30 segundos.
- **Azure management endpoint:** endpoint opcional para nubes soberanas o personalizadas. Vacío utiliza `https://management.azure.com`.
- **Microsoft login endpoint:** endpoint opcional para nubes soberanas o personalizadas. Vacío utiliza `https://login.microsoftonline.com`.

**Step 4. Metrics and module filters**

- **Storage account metrics:** activa las métricas generales de la cuenta.
- **Blob service metrics:** activa las métricas del servicio Blob.
- **File service metrics:** activa las métricas del servicio File.
- **File share metrics:** activa las métricas individuales de file shares. Solo se muestra cuando **File service metrics** está activado.
- **Queue service metrics:** activa las métricas del servicio Queue.
- **Table service metrics:** activa las métricas del servicio Table.
- **Advanced container metrics:** activa la comprobación y las métricas avanzadas por contenedor. Está desactivado por defecto.
- **Container regexp:** regexp aplicada únicamente a los contenedores. Solo se muestra cuando **Advanced container metrics** está activado.
- **Modules allow regexp:** una regexp por línea. Solo permite los módulos que coincidan con alguna expresión.
- **Modules deny regexp:** una regexp por línea. Excluye los módulos que coincidan con alguna expresión.

# Agentes y módulos generados

Con **Create one agent per Storage Account** activado, el plugin crea un agente por cuenta con el nombre `<Agent name prefix><storage account name>`. Si el prefijo no termina en espacio, guion, punto o guion bajo, se añade un espacio automáticamente. Con el token desactivado se utiliza un único **Target agent** y el nombre de la cuenta se añade al principio de cada módulo.

Los agentes utilizan `Azure` como sistema operativo, heredan el grupo y el intervalo de la tarea y se crean con modo `2` cuando **Agent autodisable mode** está activado o con modo `1` cuando está desactivado.

El módulo `Azure Storage Connection` se genera siempre como `generic_proc`, con valor `1` para las cuentas descubiertas. Cuando una cuenta almacenada en la caché deja de aparecer, se mantiene su agente y el módulo toma el valor `0`hasta que la entidad se elimina al reconstruir la caché.

**Storage account metrics**

- `Account Used Capacity`: `generic_data`, GiB.
- `Account Capacity Quota`: `generic_data`, GiB; solo para cuentas Standard.
- `Account Used Capacity Percentage`: `generic_data`, porcentaje; solo para cuentas Standard.
- `Account Transactions_Current`: `generic_data`, requests.
- `Account Ingress_Current`: `generic_data`, bytes.
- `Account Egress_Current`: `generic_data`, bytes.
- `Account SuccessServerLatency_Current`: `generic_data`, ms.
- `Account SuccessE2ELatency_Current`: `generic_data`, ms.
- `Account Availability_Current`: `generic_data`, porcentaje.

Cuando la cuenta tiene habilitado el namespace jerárquico también se genera `Data Lake Storage Gen2 Enabled` como `generic_proc`.

**Blob service metrics**

- `Blob Used Capacity`: `generic_data`, GiB.
- `Blob Object Count`: `generic_data`.
- `Blob Container Count`: `generic_data`.
- `Blob Index Capacity`: `generic_data`, GiB.
- `Blob Transactions_Current`: `generic_data`, requests.
- `Blob Ingress_Current`: `generic_data`, bytes.
- `Blob Egress_Current`: `generic_data`, bytes.
- `Blob SuccessServerLatency_Current`: `generic_data`, ms.
- `Blob SuccessE2ELatency_Current`: `generic_data`, ms.
- `Blob Availability_Current`: `generic_data`, porcentaje.

**File service metrics**

- `File Used Capacity`: `generic_data`, GiB.
- `File Object Count`: `generic_data`.
- `File Share Count`: `generic_data`.
- `File Snapshot Count`: `generic_data`.
- `File Snapshot Size`: `generic_data`, GiB.
- `File Capacity Quota`: `generic_data`, GiB.
- `File Transactions_Current`: `generic_data`, requests.
- `File Ingress_Current`: `generic_data`, bytes.
- `File Egress_Current`: `generic_data`, bytes.
- `File SuccessServerLatency_Current`: `generic_data`, ms.
- `File SuccessE2ELatency_Current`: `generic_data`, ms.
- `File Availability_Current`: `generic_data`, porcentaje.

**File share metrics**

- `File Share <name> Used Capacity`: `generic_data`, GiB.
- `File Share <name> Capacity Quota`: `generic_data`, GiB.
- `File Share <name> Used Capacity Percentage`: `generic_data`, porcentaje.

**Queue service metrics**

- `Queue Used Capacity`: `generic_data`, GiB.
- `Queue Count`: `generic_data`.
- `Queue Message Count`: `generic_data`.
- `Queue Transactions_Current`: `generic_data`, requests.
- `Queue Ingress_Current`: `generic_data`, bytes.
- `Queue Egress_Current`: `generic_data`, bytes.
- `Queue SuccessServerLatency_Current`: `generic_data`, ms.
- `Queue SuccessE2ELatency_Current`: `generic_data`, ms.
- `Queue Availability_Current`: `generic_data`, porcentaje.

**Table service metrics**

- `Table Used Capacity`: `generic_data`, GiB.
- `Table Count`: `generic_data`.
- `Table Entity Count`: `generic_data`.
- `Table Transactions_Current`: `generic_data`, requests.
- `Table Ingress_Current`: `generic_data`, bytes.
- `Table Egress_Current`: `generic_data`, bytes.
- `Table SuccessServerLatency_Current`: `generic_data`, ms.
- `Table SuccessE2ELatency_Current`: `generic_data`, ms.
- `Table Availability_Current`: `generic_data`, porcentaje.

**Advanced container metrics**

- `Blob Container Metrics Enabled`: `generic_proc`, con valor `1` cuando Azure tiene habilitada la regla avanzada y `0` cuando está deshabilitada.
- `Container <name> Used Capacity`: `generic_data`, GiB.
- `Container <name> Blob Count`: `generic_data`.
- `Container <name> Blob Capacity Percentage`: `generic_data`, porcentaje; se genera cuando **Blob service metrics** también está activado y Azure devuelve `BlobCapacity`.

Los filtros **Modules allow regexp** y **Modules deny regexp** se aplican al nombre final de todos los módulos. En modo consolidado, el nombre final incluye el prefijo de la cuenta de almacenamiento.