> For the complete documentation index, see [llms.txt](https://docs.scepman.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scepman.com/es/configuracion-de-azure/log-configuration.md).

# Gestión de registros

### Habilitar el registro en Azure Monitor

Desde la versión 3.0, SCEPman, así como Certificate Master, utilizarán la API de ingesta de registros de Microsoft para escribir registros en Azure Monitor. Esto utiliza el concepto de un Log Analytics Workspace para almacenar los datos y permitir su análisis, así como una regla de recopilación de datos que actúa entre la App Service y el almacenamiento de registros. Esto permite un enfoque más moderno, incluyendo permisos basados en RBAC para que SCEPman acceda al LAW.

La creación del Log Analytics Workspace, así como la configuración de la regla de recopilación de datos, se realiza automáticamente al ejecutar `Complete-SCEPmanInstallation` el módulo de PowerShell de SCEPman.

{% hint style="info" %}
El **retención predeterminada** período de los datos almacenados en una tabla de Log Analytics es **30 días**. En caso de que se requiera un período de retención diferente, ajuste la configuración de la tabla "SCEPman\_CL" en consecuencia.
{% endhint %}

#### Volver a habilitar la API de recopilación de datos

Si, por cualquier motivo, desea restablecer la API anterior para su uso, puede hacerlo eliminando las variables de App Service relacionadas con la ingesta de registros y volviendo a agregar las que utiliza la API de recopilación de datos.

Variables que se deben **eliminar**:

* [AppConfig:LoggingConfig:DataCollectionEndpointUri](/es/configuracion-de-scepman/application-settings/dependencies-azure-services/logging.md#appconfig-loggingconfig-datacollectionendpointuri)
* [AppConfig:LoggingConfig:RuleId](/es/configuracion-de-scepman/application-settings/dependencies-azure-services/logging.md#appconfig-loggingconfig-ruleid)

Variables que se deben agregar:

* [AppConfig:LoggingConfig:WorkspaceId](/es/configuracion-de-scepman/application-settings/dependencies-azure-services/logging.md#appconfig-loggingconfig-workspaceid)
* [AppConfig:LoggingConfig:SharedKey](/es/configuracion-de-scepman/application-settings/dependencies-azure-services/logging.md#appconfig-loggingconfig-sharedkey)

SCEPman recogerá automáticamente la configuración tras un reinicio y volverá a utilizar la API de recopilación de datos.

## Ejemplos de consultas KQL

### Ver problemas con tu instancia de SCEPman

```kusto
SCEPman_CL
| where Level == "Warn" or Level == "Error" or Level == "Fatal"
```

### Número de certificados emitidos por punto de conexión en el intervalo de tiempo seleccionado

{% hint style="success" %}
Se garantiza que esta consulta funcione con SCEPman 3.0 y versiones posteriores al usar la API de ingesta de registros para el registro. Los cambios en SCEPman que hagan que esta consulta no se pueda usar se considerarán cambios incompatibles.
{% endhint %}

{% tabs %}
{% tab title="API de ingesta de registros (predeterminada)" %}

```kql
SCEPman_CL
| where Level == "Info" and Message startswith_cs "Issued a certificate with serial number"
| project Message, RequestBase = trim_end('/', replace_string(replace_string(replace_regex(RequestUrl, "(/pkiclient\\.exe)?(\\?operation=PKIOperation(&message=.+)?)?", ""),"certsrv/mscep/mscep.dll","intune"),"step/enrollment","activedirectory"))
| summarize IssuanceCount = count() by Endpoint = extract("/([a-zA-Z]+)$", 1, RequestBase)
```

{% endtab %}

{% tab title="API de recopilación de datos (antigua)" %}

```kusto
SCEPman_CL
| where Level == "Info" and Message startswith_cs "Issued a certificate with serial number"
| project Message, RequestBase = trim_end('/', replace_string(replace_string(replace_regex(RequestUrl_s, "(/pkiclient\\.exe)?(\\?operation=PKIOperation(&message=.+)?)?", ""),"certsrv/mscep/mscep.dll","intune"),"step/enrollment","activedirectory"))
| summarize IssuanceCount = count() by Endpoint = extract("/([a-zA-Z]+)$", 1, RequestBase)
```

{% endtab %}
{% endtabs %}

A partir de SCEPman 2.8, siempre hay exactamente una entrada de registro de nivel Info cuyo mensaje de registro comienza con "Issued a certificate with serial number " por cada certificado emitido, seguida de su número de serie. Sin embargo, debido al problema irresoluble [Problema de los dos ejércitos](https://en.wikipedia.org/wiki/Two_Generals'_Problem), puede ocurrir que el certificado creado nunca llegue al solicitante o que algún otro tipo de error impida la inscripción real. Asimismo, en caso de errores graves, puede ocurrir que exista una entrada de registro sin la correspondiente entrada en la base de datos o viceversa.

### Certificados distintos con verificación OCSP

{% tabs %}
{% tab title="API de ingesta de registros (predeterminada)" %}

```kusto
let map_certtype = datatable(serial_start:string, readable:string)
[
  "40", "Dispositivo de Intune",
  "41", "Dispositivo de Intune",
  "42", "Dispositivo no compatible de Intune",
  "50", "Estático",
  "51", "Estático",
  "60", "Usuario de Intune",
  "61", "Usuario de Intune",
  "64", "Usuario de Jamf",
  "65", "Usuario de Jamf",
  "6C", "Usuario de Jamf en dispositivo",
  "6D", "Usuario de Jamf en dispositivo",
  "70", "Domain Controller",
  "7C", "Usuario de Jamf en equipo",
  "7D", "Usuario de Jamf en equipo",
  "54", "Equipo de Jamf",
  "55", "Equipo de Jamf",
  "44", "Dispositivo de Jamf",
  "45", "Dispositivo de Jamf"
];
SCEPman_CL
| where LogCategory == "Scepman.Server.Controllers.OcspController" and Level == "Info"
| where Message startswith_cs "OCSP Response"
| project serial = extract("Serial Number ([A-F0-9]+)", 1, Message)
| distinct serial
| extend serial_start = substring(serial,0,2)
| join kind=leftouter map_certtype on serial_start
| summarize count() by (readable)
```

{% endtab %}

{% tab title="API de recopilación de datos (antigua)" %}

```kql
let map_certtype = datatable(serial_start:string, readable:string)
[
  "40", "Dispositivo de Intune",
  "41", "Dispositivo de Intune",
  "42", "Dispositivo no compatible de Intune",
  "50", "Estático",
  "51", "Estático",
  "60", "Usuario de Intune",
  "61", "Usuario de Intune",
  "64", "Usuario de Jamf",
  "65", "Usuario de Jamf",
  "6C", "Usuario de Jamf en dispositivo",
  "6D", "Usuario de Jamf en dispositivo",
  "70", "Domain Controller",
  "7C", "Usuario de Jamf en equipo",
  "7D", "Usuario de Jamf en equipo",
  "54", "Equipo de Jamf",
  "55", "Equipo de Jamf",
  "44", "Dispositivo de Jamf",
  "45", "Dispositivo de Jamf"
];
SCEPman_CL
| where LogCategory_s == "Scepman.Server.Controllers.OcspController" and Level == "Info"
| where Message startswith_cs "OCSP Response"
| project serial = extract("Serial Number ([A-F0-9]+)", 1, Message)
| distinct serial
| extend serial_start = substring(serial,0,2)
| join kind=leftouter map_certtype on serial_start
| summarize count() by (readable)
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.scepman.com/es/configuracion-de-azure/log-configuration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
