Sdílet prostřednictvím


Shromažďování protokolů ze souboru JSON pomocí agenta služby Azure Monitor

Vlastní protokoly JSON jsou jedním ze zdrojů dat používaných v pravidle shromažďování dat (DCR). Podrobnosti o vytvoření DCR najdete v části Shromažďování dat pomocí agenta služby Azure Monitor. Tento článek obsahuje další podrobnosti o typu textu a protokolů JSON.

Mnoho aplikací a služeb bude protokolovat informace do souborů JSON místo standardních služeb protokolování, jako je protokol událostí systému Windows nebo Syslog. Tato data je možné shromažďovat pomocí agenta služby Azure Monitor a ukládat do pracovního prostoru služby Log Analytics s daty shromážděnými z jiných zdrojů.

Požadavky

Základní operace

Následující diagram znázorňuje základní operaci shromažďování dat protokolu ze souboru JSON.

  1. Agent sleduje všechny soubory protokolu, které odpovídají zadanému vzoru názvů na místním disku.
  2. Každá položka v protokolu se shromažďuje a odesílá do služby Azure Monitor. Příchozí datový proud definovaný uživatelem se používá k analýze dat protokolu do sloupců.
  3. Pokud schéma příchozího datového proudu odpovídá schématu cílové tabulky, použije se výchozí transformace.

Snímek obrazovky zobrazující dotaz protokolu vracející výsledky kolekce souborů s oddělovači

Požadavky na soubory JSON a osvědčené postupy

Soubor, který agent azure Monitor monitoruje, musí splňovat následující požadavky:

  • Soubor musí být uložený na místním disku počítače s agentem služby Azure Monitor v adresáři, který se monitoruje.
  • Každý záznam musí být označen koncem řádku.
  • Soubor musí používat kódování ASCII nebo UTF-8. Jiné formáty, jako je UTF-16, se nepodporují.
  • Nové záznamy by se měly připojit na konec souboru a nepřepsat staré záznamy. Přepsání způsobí ztrátu dat.
  • Text JSON musí být obsažený v jednom řádku. Formát textu JSON není podporován. Podívejte se na ukázku níže.

Při dodržování následujících doporučení se ujistěte, že se vám nezobrazují problémy se ztrátou nebo výkonem dat:

  • Každý den vytvořte nový soubor protokolu, abyste mohli snadno vyčistit staré soubory.
  • Nepřetržitě vyčistí soubory protokolu v monitorovaném adresáři. Sledování mnoha souborů protokolu může zvýšit využití procesoru a paměti agenta. Počkejte aspoň 2 dny, aby bylo možné zpracovat dostatek času pro všechny protokoly.
  • Nepřejmenovávejte soubor, který odpovídá vzoru kontroly souboru, na jiný název, který odpovídá vzoru kontroly souboru. To způsobí, že se ingestují duplicitní data.
  • Nepřejmenovávejte ani nekopírujte velké soubory protokolu, které odpovídají vzoru kontroly souborů do monitorovaného adresáře. Pokud potřebujete, nepřesahujte 50 MB za minutu.

Vlastní tabulka

Než budete moct shromažďovat data protokolu ze souboru JSON, musíte v pracovním prostoru služby Log Analytics vytvořit vlastní tabulku, která bude přijímat data. Schéma tabulky musí odpovídat sloupcům v příchozím datovém proudu nebo musíte přidat transformaci, aby bylo zajištěno, že výstupní schéma odpovídá tabulce.

Upozorňující

Neměli byste používat existující vlastní tabulku používanou agentem Log Analytics. Starší agenti nebudou moct zapisovat do tabulky, jakmile do ní zapíše první agent služby Azure Monitor. Vytvořte novou tabulku pro agenta Azure Monitoru, která se má použít, aby se zabránilo ztrátě dat agenta Log Analytics.

Pomocí následujícího skriptu PowerShellu můžete například vytvořit vlastní tabulku s více sloupci.

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
                    {
                        "name": "TimeGenerated",
                        "type": "DateTime"
                    }, 
                    {
                        "name": "MyStringColumn",
                        "type": "string"
                    },
                    {
                        "name": "MyIntegerColumn",
                        "type": "int"
                    },
                    {
                        "name": "MyRealColumn",
                        "type": "real"
                    },
                    {
                        "name": "MyBooleanColumn",
                        "type": "bool"
                    },
                    {
                        "name": "FilePath",
                        "type": "string"
                    },
                    {
                        "name": "Computer",
                        "type": "string"
                    }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Vytvoření pravidla shromažďování dat pro soubor JSON

Poznámka:

Vlastní příjem souborů JSON založený na agentech je aktuálně ve verzi Preview a na portálu zatím nemá kompletní uživatelské rozhraní. I když můžete vytvořit dcR pomocí portálu, musíte ho upravit tak, aby definoval sloupce v příchozím datovém proudu. Tato část obsahuje podrobnosti o vytvoření DCR pomocí šablony ARM.

Schéma příchozího datového proudu

Poznámka:

Podpora víceřádkového rozhraní, která používá časové razítko k odděleným událostem, je nyní k dispozici.

Soubory JSON obsahují název vlastnosti s každou hodnotou a příchozí datový proud v DCR musí obsahovat sloupec odpovídající názvu každé vlastnosti. Oddíl šablony ARM je potřeba upravit columns pomocí sloupců z protokolu.

Následující tabulka popisuje volitelné sloupce, které můžete zahrnout kromě sloupců definujících data v souboru protokolu.

Column Type Popis
TimeGenerated datetime Čas vygenerování záznamu. Tato hodnota se automaticky naplní časem, kdy se záznam přidá do pracovního prostoru služby Log Analytics, pokud není zahrnutý do příchozího datového proudu.
FilePath string Pokud tento sloupec přidáte do příchozího datového proudu v DCR, naplní se cestou k souboru protokolu. Tento sloupec se nevytvořil automaticky a nejde ho přidat pomocí portálu. Musíte ručně upravit řadič domény vytvořený portálem nebo vytvořit řadič domény pomocí jiné metody, kde můžete explicitně definovat příchozí datový proud.
Computer string Pokud tento sloupec přidáte do příchozího datového proudu v řadiči domény, naplní se názvem počítače se souborem protokolu. Tento sloupec se nevytvořil automaticky a nejde ho přidat pomocí portálu. Musíte ručně upravit řadič domény vytvořený portálem nebo vytvořit řadič domény pomocí jiné metody, kde můžete explicitně definovat příchozí datový proud.

Transformace

Transformace potenciálně upraví příchozí datový proud tak, aby filtrovaly záznamy nebo upravily schéma tak, aby odpovídaly cílové tabulce. Pokud je schéma příchozího datového proudu stejné jako cílová tabulka, můžete použít výchozí transformaci source. Pokud ne, upravte transformKql část šablony ARM tee pomocí dotazu KQL, který vrací požadované schéma.

Šablona ARM

Pomocí následující šablony ARM vytvořte DCR pro shromažďování souborů protokolu JSON a proveďte změny popsané v předchozích částech. Následující tabulka popisuje parametry, které při nasazování šablony vyžadují hodnoty.

Nastavení Popis
Název pravidla shromažďování dat Jedinečný název dcR.
ID prostředku koncového bodu shromažďování dat ID prostředku koncového bodu shromažďování dat (DCE).
Umístění Oblast dcR. Musí být stejné umístění jako pracovní prostor služby Log Analytics.
Vzory souborů Určuje umístění a název souborů protokolu na místním disku. Pro názvy souborů, které se liší, například když se každý den vytvoří nový soubor s novým názvem, použijte zástupný znak. Můžete zadat více vzorů souborů oddělených čárkami (AMA verze 1.26 nebo vyšší vyžadované pro více vzorů souborů v Linuxu).

Příklady:
- C:\Logs\MyLog.json
- C:\Logs\MyLog*.json
- C:\App01\AppLog.json, C:\App02\AppLog.json
- /var/mylog.json
- /var/mylog*.json
Název tabulky Název cílové tabulky v pracovním prostoru služby Log Analytics
ID prostředku pracovního prostoru ID prostředku pracovního prostoru služby Log Analytics s cílovou tabulkou
timeFormat Podporované jsou následující formáty. Použijte řetězce uvozovek v šabloně ARM. Nezahrnujte ukázkový čas, který je v závorkách.
- "yyyy-MM-ddTHH:mm:ssk" (2024-10-29T18:28:34)
- "YYYY-MM-DD HH:MM:SS" (2024-10-29 18:28:34)
- "M/D/YYYY HH:MM:SS AM/PM" (10.29.2024 06:28:34 PM)
- "Mon DD, YYYY HH:MM:SS" (Oct[ober] 29, 2024 18:28:34)
- "yyMMDd HH:mm:ss" (241029 18:28:34)
- "ddMMyy HH:mm:ss" (291024 18:28:34)
- "MMM d HH:mm:ss" (29. října 18:28:34)
- "dd/MMM/yyyy:HH:mm:ss zzz" (14.října/2024:18:28:34 -00)

Důležité

Při vytváření DCR pomocí šablony ARM musíte řadič domény přidružit k agentům, kteří ho budou používat. Řadič domény můžete upravit na webu Azure Portal a vybrat agenty, jak je popsáno v části Přidání prostředků.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "dataCollectionRuleName": {
            "type": "string",
            "metadata": {
                "description": "Unique name for the DCR. "
            }
        },
        "dataCollectionEndpointResourceId": {
            "type": "string",
            "metadata": {
              "description": "Resource ID of the data collection endpoint (DCE)."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "Region for the DCR. Must be the same location as the Log Analytics workspace. "
            }
        },
        "filePatterns": {
            "type": "string",
            "metadata": {
                "description": "Path on the local disk for the log file to collect. May include wildcards.Enter multiple file patterns separated by commas (AMA version 1.26 or higher required for multiple file patterns on Linux)."
            }
        },
        "tableName": {
            "type": "string",
            "metadata": {
                "description": "Name of destination table in your Log Analytics workspace. "
            }
        },
        "workspaceResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource ID of the Log Analytics workspace with the target table."
            }
        },
        "timeFormat": {
            "type": "string"
            "metadata": {
                "discription": "The time format that you would like to use to split multi line imput"
            }
      }
    },
    "variables": {
        "tableOutputStream": "[concat('Custom-', parameters('tableName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Insights/dataCollectionRules",
            "apiVersion": "2022-06-01",
            "name": "[parameters('dataCollectionRuleName')]",
            "location": "[parameters('location')]",
            "properties": {
                "dataCollectionEndpointId": "[parameters('dataCollectionEndpointResourceId')]",
                "streamDeclarations": {
                    "Custom-Json-stream": {
                        "columns": [
                            {
                                "name": "TimeGenerated",
                                "type": "datetime"
                            },
                            {
                                "name": "FilePath",
                                "type": "string"
                            },
                            {
                                "name": "MyStringColumn",
                                "type": "string"
                            },
                            {
                                "name": "MyIntegerColumn",
                                "type": "int"
                            },
                            {
                                "name": "MyRealColumn",
                                "type": "real"
                            },
                            {
                                "name": "MyBooleanColumn",
                                "type": "boolean"
                            }
                        ]
                    }
                },
                "dataSources": {
                    "logFiles": [
                        {
                            "streams": [
                                "Custom-Json-stream"
                            ],
                            "filePatterns": [
                                "[parameters('filePatterns')]"
                            ],
                            "format": "json",
                            "name": "Custom-Json-stream",
                            "settings": {
                               "text": {
                                   "recordStartTimestampFormat": "[parameters('timeFormat')]"
                               }
                            }
                        }
                    ]
                },
                "destinations": {
                    "logAnalytics": [
                        {
                            "workspaceResourceId": "[parameters('workspaceResourceId')]",
                            "name": "workspace"
                        }
                    ]
                },
                "dataFlows": [
                    {
                        "streams": [
                            "Custom-Json-stream"
                        ],
                        "destinations": [
                            "workspace"
                        ],
                        "transformKql": "source",
                        "outputStream": "[variables('tableOutputStream')]"
                    }
                ]
            }
        }
    ]
}

Řešení problému

Pokud neshromažďujete data z očekávaného protokolu JSON, projděte si následující kroky.

  • Ověřte, že se data zapisují do shromažďovaného souboru protokolu.
  • Ověřte, že název a umístění souboru protokolu odpovídají zadanému vzoru souboru.
  • Ověřte, že schéma příchozího datového proudu v DCR odpovídá schématu v souboru protokolu.
  • Ověřte, že schéma cílové tabulky odpovídá příchozímu datovému proudu nebo že máte transformaci, která převede příchozí datový proud na správné schéma.
  • Informace o tom, jestli je agent funkční a přijímá data, najdete v části Ověření operace .

Další kroky

Přečtěte si další informace: