> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/server/da/knowledge-base/how-to-articles/send-devolutions-server-logs-to-azure-log-analytics.md).

# Send logge fra Devolutions Server til Azure Log Analytics

Send aktivitets- og administrationslogge fra Devolutions Server til Azure Log Analytics med en appregistrering, et DCE, en brugerdefineret tabel og en DCR-transformation.

Devolutions Server kan sende sine aktivitets- og administrationslogge til et Azure Log Analytics-arbejdsområde via indtagelses-API'en for Azure Monitor Logs. Denne artikel beskriver, hvordan De opretter Azure-komponenterne, hvordan De konfigurerer Devolutions Server, og hvordan De kontrollerer resultatet, som er en brugerdefineret tabel, hvor hver logpost er en række med brugeren, posten, boksen og maskinen i hver sin kolonne.

## Før De begynder

* Et Azure-abonnement med et Log Analytics-arbejdsområde.
* I Azure skal De have tilladelser til at:
  * Registrere et program i Microsoft Entra ID.
  * Oprette tabeller i Log Analytics-arbejdsområdet (mindst bidragyderrettigheder på arbejdsområdet).
  * Oprette slutpunkter for dataindsamling og regler for dataindsamling (f.eks. rollen ***Monitoring Contributor***).
  * Tildele roller på reglen for dataindsamling.
* En administratorkonto til Devolutions Server eller en bruger med den administrative tilladelse til at redigere serverindstillingerne for ***Logføring***.

## Logge, der sendes til Azure

Devolutions Server sender kun posterne fra forbindelsesloggene:

* ***Aktivitet***-poster, som er knyttet til en post, f.eks. åbning af en session eller visning af en adgangskode.
* ***Administration***-poster, som ikke er knyttet til en post.

Poster fra brugerbokse sendes kun, når ***Logfør aktiviteter i brugerboksen*** er aktiveret under ***Administration*** – ***Systemindstillinger*** – ***Generelt***. Andre logge fra Devolutions Server sendes ikke. Hvis De har revisionskrav, skal De bekræfte, at dette udsnit dækker dem, før De bruger det som Deres eneste revisionsspor.

## Sådan hænger komponenterne sammen

Devolutions Server godkender med en Azure-appregistrering og sender derefter loggene til et slutpunkt for dataindsamling (DCE). Reglen for dataindsamling (DCR) modtager dem i sin stream, transformerer dem med en KQL-forespørgsel og skriver resultatet i den brugerdefinerede tabel i Log Analytics-arbejdsområdet.

Hvert felt i sektionen ***Azure Log Analytics*** i Devolutions Server får en værdi fra Azure:

| Felt i Devolutions Server                       | Værdi, der skal angives                                     | Hvor den findes i Azure                                                                        |
| ----------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| ***Azure-slutpunkt***                           | URI'en ***Logindtagelse*** for DCE'en                       | ***Overvåg*** – ***Slutpunkter for dataindsamling*** – DCE'en – ***Oversigt***                 |
| ***Uforanderligt id***                          | `immutableId` for DCR'en, som begynder med `dcr-`           | ***Overvåg*** – ***Regler for dataindsamling*** – DCR'en – ***Oversigt*** – ***JSON-visning*** |
| ***Streamnavn til Azure Log Analytics***        | Navnet på DCR-streamen, f.eks. `Custom-Devolutions_Logs_CL` | ***JSON-visning*** af DCR'en under `streamDeclarations`                                        |
| ***Lejer-id til Azure Log Analytics***          | ***Mappe-id (lejer)***                                      | ***Microsoft Entra ID*** – ***Appregistreringer*** – programmet – ***Oversigt***               |
| ***Klient-id til Azure Log Analytics***         | ***Program-id (klient)***                                   | ***Microsoft Entra ID*** – ***Appregistreringer*** – programmet – ***Oversigt***               |
| ***Klienthemmelighed til Azure Log Analytics*** | ***Værdi*** for klienthemmeligheden                         | ***Certifikater og hemmeligheder*** for programmet, som kun vises, når hemmeligheden oprettes  |

## Logformat, som Devolutions Server sender

Devolutions Server sender hver logpost med kun tre felter på øverste niveau:

* `TimeGenerated` (datetime): Tidspunktet, hvor posten blev sendt.
* `Event` (dynamic): Selve logposten med hændelsestidspunktet (`@t`), `ReportType` (`Activity` eller `Administration`), `MachineName` (maskinen med Devolutions Server) og et `Properties`-objekt, der indeholder oplysningerne om posten. Tomme værdier udelades fra `Properties`.
* `Message` (string): Den gengivne logmeddelelse.

Streamen for DCR'en skal erklære disse tre felter, og transformationen skal læse værdierne i `Event`. Ellers oprettes der rækker i tabellen, men alle deres felter er tomme.

## Konfigurer Azure Log Analytics

### Registrer et program

1. Gå i Azure-portalen til ***Microsoft Entra ID*** – ***Appregistreringer***.
2. Klik på ***Ny registrering***.
3. Angiv et navn til programmet.
4. Behold ***Kun konti i dette organisationskatalog*** under ***Understøttede kontotyper***.
5. Klik på ***Registrer***. En omdirigerings-URI er ikke påkrævet.
6. Kopiér ***Program-id (klient)*** og ***Mappe-id (lejer)*** på programmets side ***Oversigt***.

### Opret en klienthemmelighed

1. Gå til ***Certifikater og hemmeligheder*** i programmet.
2. Klik på ***Ny klienthemmelighed***.
3. Angiv en beskrivelse, og vælg en varighed for ***Udløber***.
4. Klik på ***Tilføj***.
5. Kopiér hemmelighedens ***Værdi***, ikke dens ***Hemmelige id***. Værdien kan ikke vises igen, når De forlader siden.

### Opret et slutpunkt for dataindsamling

1. Gå i Azure-portalen til ***Overvåg*** – ***Slutpunkter for dataindsamling***.
2. Klik på ***Opret***.
3. Angiv et navn, og vælg abonnementet, ressourcegruppen og området for Log Analytics-arbejdsområdet.
4. Klik på ***Opret***.
5. Åbn DCE'en.
6. Kopiér URI'en ***Logindtagelse*** på siden ***Oversigt***.

### Opret tabellen og reglen for dataindsamling

Guiden ***Ny brugerdefineret log (DCR-baseret)*** opretter tabellen og DCR'en sammen. Den opbygger DCR'ens stream ud fra en eksempelfil, så eksemplet skal have det format, som Devolutions Server sender.

1. Gem følgende indhold i en fil med navnet `sample.json`:

   ```json
   [{"TimeGenerated":"2026-10-21T12:00:00Z","Event":{"@t":"2026-10-21T12:00:00Z","ReportType":"Activity","MachineName":"SERVER01","Properties":{"User":"user@domain.com","ConnectionName":"Sample","ConnectionId":"","VaultName":"Default","VaultId":"","Message":"Sample","LogDate":"","ConnectionType":"","ConnectionUsername":"","Machine":"","Ticket#":"","ActiveTime":"","OnOpenComment":"","OnCloseComment":""}},"Message":"Sample"}]
   ```
2. Gå i Azure-portalen til ***Log Analytics-arbejdsområder***, og åbn arbejdsområdet.
3. Gå til ***Tabeller***.
4. Klik på ***Opret*** – ***Ny brugerdefineret log (DCR-baseret)***.
5. Angiv et tabelnavn, f.eks. `Devolutions_Logs`. Portalen tilføjer suffikset `_CL`.
6. Klik på ***Opret en ny regel for dataindsamling***.
7. Vælg ***Abonnement*** og ***Ressourcegruppe***, og angiv et ***Navn*** til DCR'en.
8. Vælg DCE'en på listen over slutpunkter for dataindsamling.
9. Klik på ***Næste***.
10. Klik på ***Gennemse filer***, og vælg `sample.json`.
11. Bekræft, at eksemplet indeholder præcis kolonnerne `TimeGenerated`, `Event` og `Message`.
12. Klik på ***Transformationseditor***.
13. Erstat forespørgslen med følgende transformation:

    ```kql
    source
    | extend e = parse_json(tostring(Event))
    | extend p = parse_json(tostring(e.Properties))
    | project TimeGenerated = todatetime(e['@t']),
        ReportType = tostring(e.ReportType),
        MachineName = tostring(e.MachineName),
        User = tostring(p.User),
        ConnectionName = tostring(p.ConnectionName),
        ConnectionId = tostring(p.ConnectionId),
        VaultName = tostring(p.VaultName),
        VaultId = tostring(p.VaultId),
        Message = tostring(p.Message),
        LogDate = tostring(p.LogDate),
        ConnectionType = tostring(p.ConnectionType),
        ConnectionUsername = tostring(p.ConnectionUsername),
        Machine = tostring(p.Machine),
        Ticket = tostring(p['Ticket#']),
        ActiveTime = tostring(p.ActiveTime),
        OnOpenComment = tostring(p.OnOpenComment),
        OnCloseComment = tostring(p.OnCloseComment)
    ```
14. Klik på ***Kør***, og bekræft, at kolonnerne `ReportType` og `User` indeholder værdier.
15. Klik på ***Anvend***.
16. Klik på ***Næste***.
17. Klik på ***Opret***.

Transformationen begynder med `source`, som repræsenterer den indgående stream, og bruger logpostens hændelsestidspunkt som `TimeGenerated`. Tabellen oprettes med følgende kolonner:

| Kolonne            | Type     | Indhold                                               |
| ------------------ | -------- | ----------------------------------------------------- |
| TimeGenerated      | datetime | Tidspunkt for hændelsen                               |
| ReportType         | string   | `Activity` eller `Administration`                     |
| MachineName        | string   | Maskine med Devolutions Server, der sendte posten     |
| User               | string   | Bruger, der udførte handlingen                        |
| ConnectionName     | string   | Navn på posten                                        |
| ConnectionId       | string   | Id for posten                                         |
| VaultName          | string   | Navn på boksen                                        |
| VaultId            | string   | Id for boksen                                         |
| Message            | string   | Logmeddelelse                                         |
| LogDate            | string   | Oprettelsesdato for logposten                         |
| ConnectionType     | string   | Postens type                                          |
| ConnectionUsername | string   | Postens brugernavn                                    |
| Machine            | string   | Brugerens maskine                                     |
| Ticket             | string   | Sagsnummer                                            |
| ActiveTime         | string   | Sessionens aktive tid                                 |
| OnOpenComment      | string   | Kommentar, der blev angivet, da sessionen blev åbnet  |
| OnCloseComment     | string   | Kommentar, der blev angivet, da sessionen blev lukket |

### Kopiér det uforanderlige id og streamnavnet

Det uforanderlige id og streamnavnet er egenskaber for DCR'en, ikke for tabellen.

1. Gå i Azure-portalen til ***Overvåg*** – ***Regler for dataindsamling***.
2. Åbn den DCR, der blev oprettet sammen med tabellen.
3. Klik på ***JSON-visning*** på siden ***Oversigt***.
4. Kopiér værdien af `immutableId`.
5. Kopiér navnet på den stream, der er erklæret under `streamDeclarations`, f.eks. `Custom-Devolutions_Logs_CL`.

{% hint style="warning" %}
Det streamnavn, der angives i Devolutions Server, skal stemme nøjagtigt overens med DCR'ens stream, herunder præfikset `Custom-`. Tabelnavnet har ikke dette præfiks. Når streamnavnet ikke stemmer overens, afviser Azure loggene, tabellen forbliver tom, og Devolutions Server viser ikke en fejl.
{% endhint %}

### Tildel rollen på reglen for dataindsamling

1. Gå til ***Adgangskontrol (IAM)*** i DCR'en.
2. Klik på ***Tilføj rolletildeling***.
3. Vælg ***Monitoring Metrics Publisher***.
4. Klik på ***Næste***.
5. Vælg ***Bruger, gruppe eller tjenesteprincipal*** for ***Tildel adgang til***.
6. Klik på ***Vælg medlemmer***.
7. Vælg det registrerede program.
8. Klik på ***Vælg***.
9. Klik på ***Gennemse + tildel***.

Microsoft angiver, at en rolletildeling kan tage op til 30 minutter at anvende. Se [selvstudiet fra Microsoft om API'en til logindtagelse](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/tutorial-logs-ingestion-portal) for at få flere oplysninger.

## Konfigurer Devolutions Server

1. Gå i webgrænsefladen for Devolutions Server til ***Administration*** – ***Serverindstillinger*** – ***Logføring***.
2. Markér ***Aktivér Azure-logføring*** i sektionen ***Azure Log Analytics***.
3. Angiv URI'en ***Logindtagelse*** for DCE'en i ***Azure-slutpunkt***.
4. Angiv DCR'ens `immutableId` i ***Uforanderligt id***.
5. Angiv DCR'ens streamnavn med præfikset `Custom-` i ***Streamnavn til Azure Log Analytics***.
6. Angiv programmets ***Mappe-id (lejer)*** i ***Lejer-id til Azure Log Analytics***.
7. Angiv programmets ***Program-id (klient)*** i ***Klient-id til Azure Log Analytics***.
8. Angiv klienthemmelighedens ***Værdi*** i ***Klienthemmelighed til Azure Log Analytics***.
9. Klik på ***Test forbindelse***.
10. Klik på ***Gem*** øverst til højre på siden.

Indstillingerne anvendes, når de gemmes, uden at Devolutions Server genstartes. Hvis De fjerner markeringen af ***Aktivér Azure-logføring*** og gemmer, ryddes alle værdierne i sektionen ***Azure Log Analytics***.

{% hint style="warning" %}
***Test forbindelse*** validerer kun lejer-id'et, klient-id'et og klienthemmeligheden ved at anmode om et token fra Microsoft. Den bruger ikke slutpunktet, det uforanderlige id eller streamnavnet, og den sender ikke en logpost. En vellykket test bekræfter ikke, at DCE'en, DCR'en, streamnavnet, rolletildelingen eller transformationen er konfigureret korrekt.
{% endhint %}

## Kontrollér, at loggene modtages

1. Generer en aktivitetspost, f.eks. ved at åbne en post fra datakilden til Devolutions Server i Remote Desktop Manager eller ved at vise adgangskoden til en post i webgrænsefladen for Devolutions Server.
2. Gå i Azure-portalen til ***Log Analytics-arbejdsområder***, og åbn arbejdsområdet.
3. Gå til ***Logge***.
4. Kør følgende forespørgsel med tabellens navn:

   ```kql
   Devolutions_Logs_CL | take 5
   ```
5. Bekræft, at kolonnerne `ReportType` og `User` indeholder værdier.

Nye rækker kan være et par minutter om at blive vist, og de første rækker i en ny tabel kan tage længere tid.

## Fejlfinding

| Symptom                                                                                  | Årsag                                                                                                                                                                                                          | Løsning                                                                                                                                                                                                                                        |
| ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Tabellen forbliver tom, selvom ***Test forbindelse*** lykkes.                            | Streamnavnet, det uforanderlige id eller det slutpunkt, der er angivet i Devolutions Server, stemmer ikke overens med DCR'en og DCE'en. ***Test forbindelse*** kontrollerer ikke disse værdier.                | Kopiér `immutableId` og streamnavnet igen fra DCR'ens ***JSON-visning*** og URI'en ***Logindtagelse*** fra DCE'en. Streamnavnet indeholder præfikset `Custom-`. Klik på ***Gem***.                                                             |
| Tabellen forbliver tom, og de værdier, der er angivet i Devolutions Server, er korrekte. | Det registrerede program har ikke rollen ***Monitoring Metrics Publisher*** på DCR'en, eller rolletildelingen er endnu ikke anvendt.                                                                           | Kontrollér rolletildelingen under ***Adgangskontrol (IAM)*** i DCR'en. Vent op til 30 minutter efter tildelingen af rollen.                                                                                                                    |
| Tabellen forbliver tom, og ingen handling genererede en logpost.                         | Kun poster fra forbindelsesloggen sendes. Poster fra brugerbokse sendes kun, når ***Logfør aktiviteter i brugerboksen*** er aktiveret.                                                                         | Åbn en post fra Remote Desktop Manager, eller vis en adgangskode i webgrænsefladen. For poster i brugerbokse skal De aktivere ***Logfør aktiviteter i brugerboksen*** under ***Administration*** – ***Systemindstillinger*** – ***Generelt***. |
| Der oprettes rækker, men alle deres felter er tomme.                                     | DCR-streamen erklærer ikke `TimeGenerated`, `Event` og `Message`, eller transformationen læser flade kolonner i stedet for værdierne i `Event`. Det sker, når tabellen blev oprettet ud fra et andet eksempel. | Erstat streamkolonnerne og DCR'ens `transformKql` via dens ***Eksportér skabelon***, eller opret tabellen og DCR'en igen ud fra `sample.json`.                                                                                                 |
| Nogle kolonner er kun tomme på nogle rækker.                                             | Devolutions Server udelader tomme værdier fra `Properties`. Poster af typen ***Administration*** er ikke knyttet til en post, så postkolonnerne er tomme.                                                      | Der kræves ingen løsning.                                                                                                                                                                                                                      |
| ***Test forbindelse*** mislykkes.                                                        | Lejer-id'et, klient-id'et eller klienthemmeligheden er forkert, eller klienthemmeligheden er udløbet. Feltet for klienthemmeligheden forventer hemmelighedens ***Værdi***, ikke dens ***Hemmelige id***.       | Kontrollér id'erne på programmets side ***Oversigt***. Opret en ny klienthemmelighed, hvis det er nødvendigt, angiv dens ***Værdi***, og klik på ***Gem***.                                                                                    |
| Loggene holdt op med at ankomme, efter at det havde virket i et stykke tid.              | Klienthemmeligheden er udløbet, så Devolutions Server kan ikke længere godkende.                                                                                                                               | Opret en ny klienthemmelighed i programmet, angiv dens ***Værdi*** i ***Klienthemmelighed til Azure Log Analytics***, og klik på ***Gem***.                                                                                                    |

Hvis De vil kontrollere, om DCR'en modtager data, kan De se DCR-metrikkerne, f.eks. `Logs Rows Received per Min` og `Logs Transformation Errors per Min`. Se [dokumentationen fra Microsoft om overvågning af DCR](https://learn.microsoft.com/en-us/azure/azure-monitor/data-collection/data-collection-monitor) for at få flere oplysninger.

## Ret en eksisterende konfiguration

En tabel og en DCR, der er oprettet med et andet eksempel eller en anden transformation, kan rettes uden at blive oprettet igen. DCR'ens ***JSON-visning*** er skrivebeskyttet, så DCR'en ændres via dens skabelon:

1. Åbn DCR'en i Azure-portalen.
2. Klik på ***Eksportér skabelon***.
3. Klik på ***Udrul***.
4. Klik på ***Rediger skabelon***.
5. Angiv streamens kolonner til `TimeGenerated` (datetime), `Event` (dynamic) og `Message` (string) i `streamDeclarations`:

   ```json
   "columns": [
     { "name": "TimeGenerated", "type": "datetime" },
     { "name": "Event", "type": "dynamic" },
     { "name": "Message", "type": "string" }
   ]
   ```
6. Erstat værdien af `transformKql` med transformationen på én linje i `dataFlows`:

   ```json
   "transformKql": "source | extend e = parse_json(tostring(Event)) | extend p = parse_json(tostring(e.Properties)) | project TimeGenerated = todatetime(e['@t']), ReportType = tostring(e.ReportType), MachineName = tostring(e.MachineName), User = tostring(p.User), ConnectionName = tostring(p.ConnectionName), ConnectionId = tostring(p.ConnectionId), VaultName = tostring(p.VaultName), VaultId = tostring(p.VaultId), Message = tostring(p.Message), LogDate = tostring(p.LogDate), ConnectionType = tostring(p.ConnectionType), ConnectionUsername = tostring(p.ConnectionUsername), Machine = tostring(p.Machine), Ticket = tostring(p['Ticket#']), ActiveTime = tostring(p.ActiveTime), OnOpenComment = tostring(p.OnOpenComment), OnCloseComment = tostring(p.OnCloseComment)"
   ```
7. Klik på ***Gem***. Rediger ikke parameterværdierne.
8. Klik på ***Gennemse + opret***.
9. Klik på ***Opret***.

Tabellen skal indeholde hver kolonne, som transformationen producerer: `TimeGenerated` (datetime) og de øvrige 16 kolonner (string). Føj en manglende kolonne til tabelskemaet. DCR'en kan også udrulles fra en JSON-fil med Azure CLI (`az monitor data-collection rule create`) eller PowerShell (`New-AzDataCollectionRule`). Se [dokumentationen fra Microsoft om redigering af en DCR](https://learn.microsoft.com/en-us/azure/azure-monitor/data-collection/data-collection-rule-create-edit) for at få flere oplysninger. Ændringer af en DCR kan være flere minutter om at blive anvendt.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/server/da/knowledge-base/how-to-articles/send-devolutions-server-logs-to-azure-log-analytics.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
