> 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/fr/configuration-azure/log-configuration.md).

# Gestion des journaux

### Activer la journalisation vers Azure Monitor

Depuis la version 3.0, SCEPman, ainsi que Certificate Master, utiliseront l'API Log Ingestion de Microsoft pour écrire des journaux dans Azure Monitor. Cela utilise le concept d'un Log Analytics Workspace pour stocker les données et permettre l'analyse, ainsi qu'une Data Collection Rule qui sert d'interface entre l'App Service et le stockage des journaux. Cela permet une approche plus moderne, incluant des autorisations basées sur RBAC pour permettre à SCEPman d'accéder au LAW.

La création du Log Analytics Workspace ainsi que la configuration de la Data Collection Rule sont automatiquement effectuées en exécutant `Complete-SCEPmanInstallation` du module PowerShell SCEPman.

{% hint style="info" %}
Le **rétention par défaut** la période de conservation des données stockées dans une Log Analytics Table est **30 jours**. Si une période de conservation différente est requise, ajustez la configuration de la table "SCEPman\_CL" en conséquence.
{% endhint %}

#### Réactiver l'API Data Collector

Si, pour quelque raison que ce soit, vous souhaitez rétablir l'utilisation de l'ancienne API, vous pouvez le faire en supprimant les variables d'App Service liées à Log Ingestion, puis en ajoutant de nouveau celles utilisées par l'API Data Collector.

Variables devant être **supprimées**:

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

Variables à ajouter :

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

SCEPman prendra automatiquement en compte les paramètres après un redémarrage et utilisera de nouveau l'API Data Collector.

## Exemples de requêtes KQL

### Voir les problèmes de votre instance SCEPman

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

### Nombre de certificats émis par point de terminaison au cours de la période sélectionnée

{% hint style="success" %}
Cette requête est garantie de fonctionner avec SCEPman 3.0 et les versions plus récentes lors de l'utilisation de l'API Log Ingestion pour la journalisation. Les modifications apportées à SCEPman qui rendraient cette requête inutilisable seront considérées comme des modifications incompatibles.
{% endhint %}

{% tabs %}
{% tab title="API Log Ingestion (par défaut)" %}

```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 Data Collector (ancienne)" %}

```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 %}

Depuis SCEPman 2.8, il existe toujours exactement une entrée de journal de niveau Info dont le message de journal commence par "Issued a certificate with serial number " pour chaque certificat émis, suivie de son numéro de série. Cependant, en raison du problème insoluble [Problème des deux armées](https://en.wikipedia.org/wiki/Two_Generals'_Problem), il peut arriver que le certificat créé n'atteigne jamais le demandeur ou qu'un autre type d'erreur empêche l'inscription effective. De même, en cas d'erreurs graves, il peut arriver qu'une entrée de journal existe sans entrée correspondante dans la base de données, ou inversement.

### Certificats distincts avec vérification OCSP

{% tabs %}
{% tab title="API Log Ingestion (par défaut)" %}

```kusto
let map_certtype = datatable(serial_start:string, readable:string)
[
  "40", "Appareil Intune",
  "41", "Appareil Intune",
  "42", "Appareil Intune non conforme",
  "50", "Statique",
  "51", "Statique",
  "60", "Utilisateur Intune",
  "61", "Utilisateur Intune",
  "64", "Utilisateur Jamf",
  "65", "Utilisateur Jamf",
  "6C", "Utilisateur Jamf sur appareil",
  "6D", "Utilisateur Jamf sur appareil",
  "70", "Domain Controller",
  "7C", "Utilisateur Jamf sur ordinateur",
  "7D", "Utilisateur Jamf sur ordinateur",
  "54", "Ordinateur Jamf",
  "55", "Ordinateur Jamf",
  "44", "Appareil Jamf",
  "45", "Appareil 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 Data Collector (ancienne)" %}

```kql
let map_certtype = datatable(serial_start:string, readable:string)
[
  "40", "Appareil Intune",
  "41", "Appareil Intune",
  "42", "Appareil Intune non conforme",
  "50", "Statique",
  "51", "Statique",
  "60", "Utilisateur Intune",
  "61", "Utilisateur Intune",
  "64", "Utilisateur Jamf",
  "65", "Utilisateur Jamf",
  "6C", "Utilisateur Jamf sur appareil",
  "6D", "Utilisateur Jamf sur appareil",
  "70", "Domain Controller",
  "7C", "Utilisateur Jamf sur ordinateur",
  "7D", "Utilisateur Jamf sur ordinateur",
  "54", "Ordinateur Jamf",
  "55", "Ordinateur Jamf",
  "44", "Appareil Jamf",
  "45", "Appareil 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/fr/configuration-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.
