Azure İzleyici Aracısı ile bir metinden veya JSON dosyasından günlükleri toplama

Birçok uygulama, Windows Olay günlüğü veya Syslog gibi standart günlük hizmetleri yerine metin veya JSON dosyalarına bilgi kaydeder. Bu makalede, veri toplama kuralı (DCR) oluşturarak Azure İzleyici Aracısı kullanılarak izlenen makinelerdeki metin ve JSON dosyalarından günlük verilerinin nasıl toplandığı açıklanmaktadır.

Not

JSON alımı şu anda Önizleme aşamasındadır.

Önkoşullar

Bu yordamı tamamlamak için şunları yapmanız gerekir:

  • En az katkıda bulunan haklarına sahip olduğunuz Log Analytics çalışma alanı.

  • Sanal makinenizle Log Analytics çalışma alanınızın aynı bölgede olup olmadığına bağlı olarak bir veya iki veri toplama uç noktası.

    Daha fazla bilgi için bkz . Dağıtımınıza göre veri toplama uç noktalarını ayarlama.

  • Çalışma alanında Veri Toplama Kuralı nesneleri oluşturma izinleri.

  • Doğru alım için JSON metni tek bir satırda bulunmalıdır. JSON gövdesi (dosya) biçimi desteklenmez.

  • Bir metin veya JSON dosyasına günlük yazan bir Windows şirket içi istemcisinde Sanal Makine, Sanal Makine Ölçek Kümesi, Şirket içi Arc özellikli sunucu veya Azure monitoring Agent.

    Metin ve JSON dosya gereksinimleri ve en iyi yöntemler:

    • Dosyaları Azure İzleyici Aracısı'nın çalıştığı makinenin yerel sürücüsünde ve izlenen dizinde depolayın.
    • Satırın sonu olan bir kaydın sonunun çizgisini belirleyin.
    • ASCII veya UTF-8 kodlaması kullanın. UTF-16 gibi diğer biçimler desteklenmez.
    • Eski dosyaları kolayca kaldırabilmek için her gün yeni bir günlük dosyası oluşturun.
    • İzlenen dizindeki tüm günlük dosyalarını temizleyin. Birçok günlük dosyasını izlemek aracı CPU ve Bellek kullanımını hızlandırabilir. Tüm günlüklerin işlenmesi için en az 2 gün bekleyin.
    • Var olan bir dosyanın üzerine yeni kayıt yazmayın. Yeni kayıtları yalnızca dosyanın sonuna eklemeniz gerekir. Üzerine yazma veri kaybına neden olur.
    • Bir dosyayı yeni bir adla yeniden adlandırmayın ve ardından aynı ada sahip yeni bir dosya açmayın. Bu, veri kaybına neden olabilir.
    • içindeki dosya tarama düzeniyle eşleşen büyük günlük dosyalarını izlenen dizine yeniden adlandırmayın veya kopyalamayın. Gerekirse dakikada 50 MB'ı geçmeyin.
    • Dosya tarama düzeniyle eşleşen bir dosyayı, aynı zamanda dosya tarama düzeniyle eşleşen yeni bir adla yeniden adlandırmayın. Bu, yinelenen verilerin alınmasına neden olur.

Özel tablo oluşturma

Betikte oluşturulan tablonun iki sütunu vardır:

  • TimeGenerated (datetime) [Gerekli]
  • RawData (dize) [Tablo şeması sağlandıysa isteğe bağlı]
  • 'FilePath' (dize) [İsteğe bağlı]
  • YourOptionalColumn (dize) [İsteğe bağlı]

Metin dosyalarından toplanan günlük verileri için varsayılan tablo şeması 'TimeGenerated' ve 'RawData'dır. 'FilePath' öğesini her iki takıma da eklemek isteğe bağlıdır. Son şemanızın veya kaynağınızın bir JSON günlüğü olduğunu biliyorsanız, tabloyu oluşturmadan önce betikteki son sütunları ekleyebilirsiniz. Daha sonra Log Analytics tablosu kullanıcı arabirimini kullanarak istediğiniz zaman sütun ekleyebilirsiniz.

Tabloya otomatik olarak ayrıştırmak için sütun adlarınız ve JSON öznitelikleriniz tam olarak eşleşmelidir. Hem sütunlar hem de JSON öznitelikleri büyük/küçük harfe duyarlıdır. Örneğin Rawdata , olay verilerini toplamaz. RawDataOlmalı. Alma işlemi, karşılık gelen sütunu olmayan JSON özniteliklerini bırakır.

REST çağrısı yapmanın en kolay yolu Azure Cloud PowerShell komut satırından (CLI) almaktır. Kabuğu açmak için Azure portalına gidin, Cloud Shell düğmesine basın ve PowerShell'i seçin. Azure Cloud PowerShell'i ilk kez kullanıyorsanız tek seferlik yapılandırma sihirbazını gözden geçirmeniz gerekir.

Çalışma alanınızda tablo oluşturmak için bu betiği kopyalayıp PowerShell'e yapıştırın:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "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

200 yanıtı ve yeni oluşturduğunuz tabloyla ilgili ayrıntıları almanız gerekir.

Metin veya JSON dosyası için veri toplama kuralı oluşturma

Veri toplama kuralı aşağıdakileri tanımlar:

  • Azure İzleyici Aracısı'nın yeni olayları taradığı kaynak günlük dosyaları.
  • Azure İzleyici'nin alma sırasında olayları dönüştürme şekli.
  • Azure İzleyici'nin verileri gönderdiği hedef Log Analytics çalışma alanı ve tablosu.

Farklı bir bölgedeki veya kiracıdaki çalışma alanları dahil olmak üzere birden çok makineden birden çok Log Analytics çalışma alanına veri göndermek için bir veri toplama kuralı tanımlayabilirsiniz. Log Analytics çalışma alanınızla aynı bölgede veri toplama kuralı oluşturun.

Not

Kiracılar arasında veri göndermek için önce Azure Lighthouse'ı etkinleştirmeniz gerekir.

JSON günlük dosyanızı otomatik olarak özel bir tabloya ayrıştırmak için Resource Manager şablon adımlarını izleyin. Metin verileri alma zamanı dönüşümü kullanılarak sütunlara dönüştürülebilir.

Azure portalında veri toplama kuralı oluşturmak için:

  1. İzleyici menüsünde Veri Toplama Kuralları'nı seçin.

  2. Yeni bir veri toplama kuralı ve ilişkilendirmeleri oluşturmak için Oluştur'u seçin.

    Veri Toplama Kuralları ekranında oluştur düğmesini gösteren ekran görüntüsü.

  3. Bir Kural adı girin ve Abonelik, Kaynak Grubu, Bölge, Platform Türü ve Veri toplama uç noktası belirtin:

    • Bölge , DCR'nin nerede oluşturulacağını belirtir. Sanal makineler ve bunların ilişkilendirmeleri kiracıdaki herhangi bir abonelikte veya kaynak grubunda olabilir.
    • Platform Türü , bu kuralın uygulanabileceği kaynak türünü belirtir. Özel seçeneği hem Windows hem de Linux türlerine izin verir.
    • Veri Toplama Uç Noktası , Azure İzleyici Aracısı'nın toplanan verileri gönderdiği veri toplama uç noktasını belirtir. Bu veri toplama uç noktası Log Analytics çalışma alanıyla aynı bölgede olmalıdır. Daha fazla bilgi için bkz . Dağıtımınıza göre veri toplama uç noktalarını ayarlama.

    Veri Toplama Kuralı ekranının Temel Bilgiler sekmesini gösteren ekran görüntüsü.

  4. Kaynaklar sekmesinde:

    1. + Kaynak ekle'yi seçin ve kaynakları veri toplama kuralıyla ilişkilendirin. Kaynaklar sanal makineler, Sanal Makine Ölçek Kümeleri ve sunucular için Azure Arc olabilir. Azure portalı, henüz yüklü olmayan kaynaklara Azure İzleyici Aracısı'nı yükler.

      Önemli

      Portal, varsa mevcut kullanıcı tarafından atanan kimliklerle birlikte hedef kaynaklarda sistem tarafından atanan yönetilen kimliği etkinleştirir. İstekte kullanıcı tarafından atanan kimliği belirtmediğiniz sürece, mevcut uygulamalar için makine varsayılan olarak sistem tarafından atanan kimliği kullanır.

    2. Veri Toplama Uç Noktalarını Etkinleştir'i seçin.

    3. İsteğe bağlı olarak, veri toplama kuralıyla ilişkilendirilen sanal makinelerin her biri için bir veri toplama uç noktası seçebilirsiniz. Çoğu zaman yalnızca varsayılanları kullanmanız gerekir.

      Bu veri toplama uç noktası, yapılandırma dosyalarını sanal makineye gönderir ve sanal makineyle aynı bölgede olmalıdır. Daha fazla bilgi için bkz . Dağıtımınıza göre veri toplama uç noktalarını ayarlama.

    Veri Toplama Kuralı ekranının Kaynaklar sekmesini gösteren ekran görüntüsü.

  5. Veri kaynağı eklemek ve hedef ayarlamak için Veri kaynağı ekle ve teslim etme sekmesinde Veri kaynağı ekle'yi seçin.

  6. Veri kaynağı türü açılan listesinde Özel Metin Günlükleri'ni veya JSON Günlükleri'ni seçin.

  7. Aşağıdaki bilgileri belirtin:

    • Dosya Düzeni - Günlük dosyalarının yerel diskte nerede bulunduğunu tanımlar. Virgülle ayrılmış birden çok dosya deseni girebilirsiniz (Linux'ta, AMA sürüm 1.26 veya üzeri, virgülle ayrılmış dosya desenleri listesinden toplamak için gereklidir).

      Geçerli giriş örnekleri:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Not

      Aynı türdeki birden çok günlük dosyası genellikle aynı dizinde bulunur. Örneğin, bir makine günlük dosyasının çok fazla büyümesini önlemek için her gün yeni bir dosya oluşturabilir. Bu senaryoda günlük verilerini toplamak için bir dosya joker karakteri kullanabilirsiniz. Windows ve /var/*.log Linux için biçimini C:\directoryA\directoryB\*MyLog.txt kullanın. Dizin joker karakterleri için destek yoktur.

    • Tablo adı - Log Analytics Çalışma Alanınızda oluşturduğunuz hedef tablonun adı. Daha fazla bilgi için bkz . Özel tablo oluşturma.

    • Kayıt sınırlayıcısı - Gelecekte, şu anda desteklenen satır sonu (/r/n) dışındaki sınırlayıcılara izin vermek için kullanılacaktır.

    • Dönüştürme - Toplanan verileri dönüştürmeniz gerekmiyorsa alma zamanı dönüşümü ekleyin veya kaynak olarak bırakın.

  8. Hedef sekmesinde, veri kaynağı için bir veya daha fazla hedef ekleyin. Aynı veya farklı türlerde birden çok hedef seçebilirsiniz. Örneğin, çoklu giriş olarak da bilinen birden çok Log Analytics çalışma alanı seçebilirsiniz.

    Azure portalında veri toplama kuralı için Veri kaynağı ekle ekranının hedef sekmesini gösteren ekran görüntüsü.

  9. Veri toplama kuralının ayrıntılarını ve sanal makine kümesiyle ilişkilendirmeyi gözden geçirmek için Gözden geçir + oluştur'u seçin.

  10. Veri toplama kuralını oluşturmak için Oluştur'u seçin.

Not

Veri toplama kuralını oluşturduktan sonra verilerin hedeflere gönderilmesi 10 dakika kadar sürebilir.

Örnek günlük sorguları

Burada kullanılan sütun adları yalnızca örnek olarak kullanılır. Günlüğünüzün sütun adları büyük olasılıkla farklı olacaktır.

  • Koda göre olay sayısını sayma.

    MyApp_CL
    | summarize count() by code
    

Örnek uyarı kuralı

  • Herhangi bir hata olayında bir uyarı kuralı oluşturun.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

Sorun giderme

Metin ve JSON dosyalarından günlük toplama sorunlarını gidermek için aşağıdaki adımları kullanın.

Özel tablonuza veri alılıp alınmadığını denetleyin

Log Analytics'te aşağıdaki sorguyu çalıştırarak özel günlük tablonuza kayıt alınıp alınmadığını denetleyerek başlayın:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Kayıtlar döndürülmezse, olası nedenler için diğer bölümleri denetleyin. Bu sorgu son iki gün içindeki girdileri arar, ancak başka bir zaman aralığı için değiştirebilirsiniz. Yeni verilerin tablonuzda görünmesi 5-7 dakika sürebilir. Azure İzleyici Aracısı yalnızca veri toplama kuralını sanal makineyle ilişkilendirdikten sonra metin veya JSON dosyasına yazılan verileri toplar.

Özel tablo oluşturduğunuzu doğrulayın

Log Analytics çalışma alanınıza veri gönderebilmeniz için önce özel bir günlük tablosu oluşturmanız gerekir.

Aracının sinyalleri başarıyla gönderdiğini doğrulayın

Sinyal tablosunda kayıt olup olmadığını denetlemek için Log Analytics'te aşağıdaki sorguyu çalıştırarak Azure İzleyici aracısının düzgün iletişim kurduğunu doğrulayın.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

Veri toplama kuralında doğru günlük konumunu belirttiğinizi doğrulayın

Veri toplama kuralı aşağıdakine benzer bir bölüme sahip olacaktır. öğesi aracı filePatterns bilgisayardan toplayacak günlük dosyasının yolunu belirtir. Bunun doğru olduğunu doğrulamak için aracı bilgisayarı denetleyin.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

Bu dosya düzeni aracı makinesindeki günlüklere karşılık gelir.

Aracı makinesindeki metin günlüğü dosyalarının ekran görüntüsü.

Azure İzleyici Aracısı Sorun Gidericisi'ni kullanma

Yaygın sorunları aramak ve sonuçları Microsoft ile paylaşmak için Azure İzleyici Aracısı Sorun Gidericisi'ni kullanın.

Günlüklerin doldurulduğunu doğrulayın

Aracı yalnızca toplanan günlük dosyasına yazılan yeni içeriği toplar. Bir metin veya JSON dosyasından koleksiyon günlükleriyle denemeler yaparsanız örnek günlükler oluşturmak için aşağıdaki betiği kullanabilirsiniz.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

Sonraki adımlar

Aşağıdakiler hakkında daha fazla bilgi edinin: