Günlük alımı API'sini kullanarak Azure İzleyici'ye veri göndermek için örnek kod
Makale
Bu makalede Günlük alımı API'sini kullanarak örnek kod sağlanır. Her örnek, kod çalıştırılmadan önce aşağıdaki bileşenlerin oluşturulmasını gerektirir. Bu örneklerin her birini destekleyecek şekilde yapılandırılmış bu bileşenleri oluşturmanın tam kılavuzu için bkz . Öğretici: Günlük alımı API'sini (Resource Manager şablonları) kullanarak Azure İzleyici'ye veri gönderme.
Log Analytics çalışma alanında özel tablo
Verileri hedef tabloya yönlendirmek için veri toplama kuralı (DCR)
DCR'ye erişimi olan Microsoft Entra uygulaması
Özel bağlantı kullanıyorsanız veri toplama uç noktası (DCE). Aksi takdirde DCR günlükleri uç noktasını kullanın.
Aşağıdaki betik, .NET için Azure İzleyici Alımı istemci kitaplığını kullanır.
Azure İzleyici Alma istemci kitaplığını ve Azure Kimlik kitaplığını yükleyin. Bu örnekte kullanılan kimlik doğrulaması için Azure Kimlik kitaplığı gereklidir.
Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından DefaultAzureCredential Azure Kimlik kitaplığında kullanılır.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. Örnek verileri kendi verilerinizle de değiştirmek isteyebilirsiniz.
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.Monitor.Ingestion;
// Initialize variables
var endpoint = new Uri("https://my-url.monitor.azure.com");
var ruleId = "dcr-00000000000000000000000000000000";
var streamName = "Custom-MyTableRawData";
// Create credential and client
var credential = new DefaultAzureCredential();
LogsIngestionClient client = new(endpoint, credential);
DateTimeOffset currentTime = DateTimeOffset.UtcNow;
// Use BinaryData to serialize instances of an anonymous type into JSON
BinaryData data = BinaryData.FromObjectAsJson(
new[] {
new
{
Time = currentTime,
Computer = "Computer1",
AdditionalContext = new
{
InstanceName = "user1",
TimeZone = "Pacific Time",
Level = 4,
CounterName = "AppMetric1",
CounterValue = 15.3
}
},
new
{
Time = currentTime,
Computer = "Computer2",
AdditionalContext = new
{
InstanceName = "user2",
TimeZone = "Central Time",
Level = 3,
CounterName = "AppMetric1",
CounterValue = 23.5
}
},
});
// Upload logs
try
{
var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
if (response.IsError)
{
throw new Exception(response.ToString());
}
Console.WriteLine("Log upload completed using content upload");
}
catch (Exception ex)
{
Console.WriteLine("Upload failed with Exception: " + ex.Message);
}
// Logs can also be uploaded in a List
var entries = new List<object>();
for (int i = 0; i < 10; i++)
{
entries.Add(
new
{
Time = currentTime,
Computer = "Computer" + i.ToString(),
AdditionalContext = new
{
InstanceName = "user" + i.ToString(),
TimeZone = "Central Time",
Level = 3,
CounterName = "AppMetric1" + i.ToString(),
CounterValue = i
}
}
);
}
// Make the request
try
{
var response = await client.UploadAsync(ruleId, streamName, entries).ConfigureAwait(false);
if (response.IsError)
{
throw new Exception(response.ToString());
}
Console.WriteLine("Log upload completed using list of entries");
}
catch (Exception ex)
{
Console.WriteLine("Upload failed with Exception: " + ex.Message);
}
Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.
Aşağıdaki örnek kod, Go için Azure İzleyici Alım Günlükleri istemci modülünü kullanır.
Go için Azure İzleyici Alma Günlüklerini ve Azure Identity istemci modüllerini yüklemek için kullanın go get . Bu örnekte kullanılan kimlik doğrulaması için Azure Identity modülü gereklidir.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından Azure Kimlik modülünde kullanılır DefaultAzureCredential .
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. Örnek verileri kendi verilerinizle de değiştirmek isteyebilirsiniz.
package main
import (
"context"
"encoding/json"
"strconv"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs"
)
// logs ingestion URI
const endpoint = "https://my-url.monitor.azure.com"
// data collection rule (DCR) immutable ID
const ruleID = "dcr-00000000000000000000000000000000"
// stream name in the DCR that represents the destination table
const streamName = "Custom-MyTableRawData"
type Computer struct {
Time time.Time
Computer string
AdditionalContext string
}
func main() {
// creating the client using DefaultAzureCredential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
//TODO: handle error
}
client, err := azlogs.NewClient(endpoint, cred, nil)
if err != nil {
//TODO: handle error
}
// generating logs
// logs should match the schema defined by the provided stream
var data []Computer
for i := 0; i < 10; i++ {
data = append(data, Computer{
Time: time.Now().UTC(),
Computer: "Computer" + strconv.Itoa(i),
AdditionalContext: "context",
})
}
// marshal data into []byte
logs, err := json.Marshal(data)
if err != nil {
panic(err)
}
// upload logs
_, err = client.Upload(context.TODO(), ruleID, streamName, logs, nil)
if err != nil {
//TODO: handle error
}
}
Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.
Aşağıdaki örnek kod, Java için Azure İzleyici Alımı istemci kitaplığını kullanır.
Günlük alımı paketini ve Azure Kimlik kitaplığındaki azure-identitypaketi ekleyin. Bu örnekte kullanılan kimlik doğrulaması için Azure Kimlik kitaplığı gereklidir.
Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından DefaultAzureCredential Azure Kimlik kitaplığında kullanılır.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. Örnek verileri kendi verilerinizle de değiştirmek isteyebilirsiniz.
Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.
Aşağıdaki örnek kod, JavaScript için Azure İzleyici Alımı istemci kitaplığını kullanır.
JavaScript için Azure İzleyici Alımı ve Azure Identity istemci kitaplıklarını yüklemek için npm kullanın. Bu örnekte kullanılan kimlik doğrulaması için Azure Kimlik kitaplığı gereklidir.
Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından DefaultAzureCredential Azure Kimlik kitaplığında kullanılır.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. Örnek verileri kendi verilerinizle de değiştirmek isteyebilirsiniz.
Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.
Aşağıdaki PowerShell kodu HTTP REST temellerini kullanarak uç noktaya veri gönderir.
Not
Bu örnek PowerShell v7.0 veya üzerini gerektirir.
Betik için gerekli bir derleme ekleyen aşağıdaki örnek PowerShell komutunu çalıştırın.
Add-Type -AssemblyName System.Web
0. Adım bölümündeki parametreleri uygulamanızın ve DCR'nin değerleriyle değiştirin. 2. Adım bölümündeki örnek verileri kendinizle de değiştirmek isteyebilirsiniz.
### Step 0: Set variables required for the rest of the script.
# information needed to authenticate to AAD and obtain a bearer token
$tenantId = "00000000-0000-0000-00000000000000000" #Tenant ID the data collection endpoint resides in
$appId = " 000000000-0000-0000-00000000000000000" #Application ID created and granted permissions
$appSecret = "0000000000000000000000000000000000000000" #Secret created for the application
# information needed to send data to the DCR endpoint
$endpoint_uri = "https://my-url.monitor.azure.com" #Logs ingestion URI for the DCR
$dcrImmutableId = "dcr-00000000000000000000000000000000" #the immutableId property of the DCR object
$streamName = "Custom-MyTableRawData" #name of the stream in the DCR that represents the destination table
### Step 1: Obtain a bearer token used later to authenticate against the DCR.
$scope= [System.Web.HttpUtility]::UrlEncode("https://monitor.azure.com//.default")
$body = "client_id=$appId&scope=$scope&client_secret=$appSecret&grant_type=client_credentials";
$headers = @{"Content-Type"="application/x-www-form-urlencoded"};
$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$bearerToken = (Invoke-RestMethod -Uri $uri -Method "Post" -Body $body -Headers $headers).access_token
### Step 2: Create some sample data.
$currentTime = Get-Date ([datetime]::UtcNow) -Format O
$staticData = @"
[
{
"Time": "$currentTime",
"Computer": "Computer1",
"AdditionalContext": {
"InstanceName": "user1",
"TimeZone": "Pacific Time",
"Level": 4,
"CounterName": "AppMetric1",
"CounterValue": 15.3
}
},
{
"Time": "$currentTime",
"Computer": "Computer2",
"AdditionalContext": {
"InstanceName": "user2",
"TimeZone": "Central Time",
"Level": 3,
"CounterName": "AppMetric1",
"CounterValue": 23.5
}
}
]
"@;
### Step 3: Send the data to the Log Analytics workspace.
$body = $staticData;
$headers = @{"Authorization"="Bearer $bearerToken";"Content-Type"="application/json"};
$uri = "$endpoint_uri/dataCollectionRules/$dcrImmutableId/streams/$($streamName)?api-version=2023-01-01"
$uploadResponse = Invoke-RestMethod -Uri $uri -Method "Post" -Body $body -Headers $headers
Not
Hata Unable to find type [System.Web.HttpUtility]. alırsanız, düzeltme için betiğin 1. bölümündeki son satırı çalıştırın ve çalıştırın. Betiğin bir parçası olarak açıklamasız olarak yürütmek sorunu çözmez. Komutun ayrı olarak yürütülmesi gerekir.
Betiği yürütürseniz bir HTTP - 204 yanıt görmeniz gerekir. Veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşmalıdır.
Aşağıdaki örnek kod, Python için Azure İzleyici Alımı istemci kitaplığını kullanır.
Python için Azure İzleyici Alımı ve Azure Identity istemci kitaplıklarını yüklemek için pip kullanın. Bu örnekte kullanılan kimlik doğrulaması için Azure Kimlik kitaplığı gereklidir.
Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından DefaultAzureCredential Azure Kimlik kitaplığında kullanılır.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. 2. Adım bölümündeki örnek verileri kendinizle de değiştirmek isteyebilirsiniz.
# information needed to send data to the DCR endpoint
endpoint_uri = "https://my-url.monitor.azure.com" # logs ingestion endpoint of the DCR
dcr_immutableid = "dcr-00000000000000000000000000000000" # immutableId property of the Data Collection Rule
stream_name = "Custom-MyTableRawData" #name of the stream in the DCR that represents the destination table
# Import required modules
import os
from azure.identity import DefaultAzureCredential
from azure.monitor.ingestion import LogsIngestionClient
from azure.core.exceptions import HttpResponseError
credential = DefaultAzureCredential()
client = LogsIngestionClient(endpoint=endpoint_uri, credential=credential, logging_enable=True)
body = [
{
"Time": "2023-03-12T15:04:48.423211Z",
"Computer": "Computer1",
"AdditionalContext": {
"InstanceName": "user1",
"TimeZone": "Pacific Time",
"Level": 4,
"CounterName": "AppMetric2",
"CounterValue": 35.3
}
},
{
"Time": "2023-03-12T15:04:48.794972Z",
"Computer": "Computer2",
"AdditionalContext": {
"InstanceName": "user2",
"TimeZone": "Central Time",
"Level": 3,
"CounterName": "AppMetric2",
"CounterValue": 43.5
}
}
]
try:
client.upload(rule_id=dcr_immutableid, stream_name=stream_name, logs=body)
except HttpResponseError as e:
print(f"Upload failed: {e}")
Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.
Sorun giderme
Bu bölümde, alabileceğiniz farklı hata koşulları ve bunların nasıl düzeltebileceği açıklanmaktadır.
Betik 403 hata kodunu döndürür
Uygulamanız için DCR'ye doğru izinlere sahip olduğunuzdan emin olun. İzinlerin yayılması için 30 dakikaya kadar beklemeniz de gerekebilir.
Betik, yanıtta ReadyBody_ClientConnectionAbort iletiyle birlikte 413 hata kodunu veya TimeoutExpired uyarısını döndürür
İleti çok büyük. Maksimum ileti boyutu şu anda çağrı başına 1 MB'tır.
Betik 429 hata kodunu döndürür
API sınırları aşıldı. Sınırlar şu anda hem sıkıştırılmış hem de sıkıştırılmamış veriler ve dakikada 300.000 istek için dakikada 500 MB veriye ayarlanmıştır. Yanıttaki üst bilgide listelenen sürenin Retry-After sonunda yeniden deneyin.
Betik 503 hata kodunu döndürür
Uygulamanız için DCR'ye doğru izinlere sahip olduğunuzdan emin olun. İzinlerin yayılması için 30 dakikaya kadar beklemeniz de gerekebilir.
Hata almazsınız, ancak veriler çalışma alanında görünmez
Verilerin alınması biraz zaman alabilir, özellikle de veriler belirli bir tabloya ilk kez gönderiliyordur. 15 dakikadan uzun sürmemelidir.
Log Analytics'teki IntelliSense yeni tabloyu tanımıyor
IntelliSense'i yönlendiren önbelleğin güncelleştirilmiş olması 24 saate kadar sürebilir.