VM İçgörüleri'nden eşleme verilerini sorgulama

İşlemleri ve bağımlılıkları etkinleştirdiğinizde, harita özelliğini desteklemek için VM içgörülerinde bilgisayar ve işlem envanteri verileri toplanır. Bu verileri haritayla analiz etmeye ek olarak, doğrudan Log Analytics ile sorgulayabilirsiniz. Bu makalede kullanılabilir veriler açıklanır ve örnek sorgular sağlanır.

VM İçgörüleri performans ve bağlantı ölçümlerini, bilgisayar ve işlem envanteri verilerini ve sistem durumu bilgilerini toplar ve Azure İzleyici'deki Log Analytics çalışma alanına iletir. Bu veriler Azure İzleyici'de sorgu için kullanılabilir. Bu verileri geçiş planlaması, kapasite analizi, bulma ve isteğe bağlı performans sorunlarını giderme gibi senaryolara uygulayabilirsiniz.

Önemli

Bu makalede ele alınan tablolar için VM içgörüleri için etkinleştirilmiş işlemlere ve bağımlılıklara sahip olmanız gerekir.

Kayıtları eşleme

Bir işlem veya bilgisayar başlatıldığında veya VM Insights'a eklendiğinde oluşturulan kayıtlara ek olarak her benzersiz bilgisayar ve işlem için saatte bir kayıt oluşturulur. VMComputer tablosundaki alanlar ve değerler, ServiceMap Azure Resource Manager API'sindeki Makine kaynağının alanlarıyla eşler. VMProcess tablosundaki alanlar ve değerler, ServiceMap Azure Resource Manager API'sindeki İşlem kaynağının alanlarıyla eşler. Alan, _ResourceId karşılık gelen Resource Manager kaynağındaki ad alanıyla eşleşir.

Benzersiz işlemleri ve bilgisayarları tanımlamak için kullanabileceğiniz dahili olarak oluşturulmuş özellikler vardır:

  • Bilgisayar: Log Analytics çalışma alanında bir bilgisayarı benzersiz olarak tanımlamak için _ResourceId kullanın.
  • İşlem: Log Analytics çalışma alanında bir işlemi benzersiz olarak tanımlamak için _ResourceId kullanın.

Belirtilen bir işlem ve bilgisayar için belirtilen zaman aralığında birden çok kayıt bulunabileceğinden, sorgular aynı bilgisayar veya işlem için birden fazla kayıt döndürebilir. Yalnızca en son kaydı eklemek için sorguya ekleyin | summarize arg_max(TimeGenerated, *) by ResourceId .

Bağlantılar ve bağlantı noktaları

VMConnection ve VMBoundPort , bir makinenin bağlantıları (gelen ve giden) ve üzerinde açık/etkin olan sunucu bağlantı noktaları hakkında bilgi sağlar. Bağlantı ölçümleri, zaman aralığı boyunca belirli bir ölçümü elde etmek için araçlar sağlayan API'ler aracılığıyla da sunulur. Dinleme yuvasında kabul edilen TCP bağlantıları gelen bağlantılar olurken, belirli bir IP'ye ve bağlantı noktasına bağlanılarak oluşturulan bağlantılar giden bağlantılardır. Direction özelliği, veya outboundolarak ayarlanabilen inbound bir bağlantının yönünü temsil eder.

Bu tablolardaki kayıtlar Bağımlılık Aracısı tarafından bildirilen verilerden oluşturulur. Her kayıt, 1 dakikalık zaman aralığındaki bir gözlemi temsil eder. TimeGenerated özelliği, zaman aralığının başlangıcını gösterir. Her kayıt, ilgili varlığı, yani bağlantı veya bağlantı noktasını ve bu varlıkla ilişkili ölçümleri tanımlamaya yönelik bilgiler içerir. Şu anda yalnızca IPv4 üzerinden TCP kullanılarak gerçekleşen ağ etkinliği bildirilmektedir.

Maliyet ve karmaşıklığı yönetmek için bağlantı kayıtları tek tek fiziksel ağ bağlantılarını temsil etmemektedir. Birden çok fiziksel ağ bağlantısı mantıksal bir bağlantı halinde gruplandırılır ve bu da ilgili tabloya yansıtılır. Yani, tablodaki VMConnection kayıtlar gözlemlenen tek tek fiziksel bağlantıları değil mantıksal bir gruplandırma temsil eder. Belirli bir dakikalık aralıkta aşağıdaki öznitelikler için aynı değeri paylaşan fiziksel ağ bağlantısı, içindeki VMConnectiontek bir mantıksal kayıtta toplanır.

Ölçümler

VMConnection ve VMBoundPort , belirli bir mantıksal bağlantıda veya ağ bağlantı noktasında (BytesSent, BytesReceived) gönderilen ve alınan verilerin hacmi hakkında bilgi içeren ölçüm verilerini içerir. Ayrıca, çağrıyı yapanın bir bağlantı üzerinden gönderilen isteğin uzak uç nokta (ResponseTimeMax, ResponseTimeMin, ResponseTimeSum) tarafından işlenmesini ve yanıtlanmasını beklediği yanıt süresi de dahildir. Bildirilen yanıt süresi, temel alınan uygulama protokolünün gerçek yanıt süresinin tahminidir. Fiziksel ağ bağlantısının kaynak ve hedef ucu arasındaki veri akışının gözlemlenmesine dayalı buluşsal yöntemler kullanılarak hesaplanır. Kavramsal olarak, bir isteğin son baytının gönderenden ayrılma zamanı ile yanıtın son baytının geri gelmesi arasındaki farktır. Bu iki zaman damgası, belirli bir fiziksel bağlantıdaki istek ve yanıt olaylarını ayırt etmek için kullanılır. Aralarındaki fark, tek bir isteğin yanıt süresini temsil eder.

Bu algoritma, belirli bir ağ bağlantısı için kullanılan gerçek uygulama protokolüne bağlı olarak değişen başarı derecesiyle çalışabilen bir yaklaşık değerdir. Örneğin, geçerli yaklaşım HTTP(S) gibi istek yanıtı tabanlı protokoller için iyi çalışır, ancak tek yönlü veya ileti kuyruğu tabanlı protokollerle çalışmaz.

Dikkate alınması gereken bazı önemli noktalar şunlardır:

  1. Bir işlem aynı IP adresinde ancak birden çok ağ arabirimi üzerinden bağlantıları kabul ederse, her arabirim için ayrı bir kayıt bildirilir.
  2. Joker KARAKTER IP'siyle kayıtlarda etkinlik yoktur. Bunlar, makinedeki bir bağlantı noktasının gelen trafiğe açık olduğu gerçeğini temsil etmek için dahil edilir.
  3. Ayrıntı düzeyini ve veri hacmini azaltmak için, belirli bir IP adresine sahip eşleşen bir kayıt (aynı işlem, bağlantı noktası ve protokol için) olduğunda joker KARAKTER IP'sine sahip kayıtlar atlanır. Joker karakter IP kaydı atlandığında, belirli IP adresine sahip kayıt özelliği, IsWildcardBind bağlantı noktasının raporlama makinesinin her arabiriminde kullanıma sunulduğunun belirtecek şekilde ayarlanır True .
  4. Yalnızca belirli bir arabirime bağlı bağlantı noktaları olarak FalseayarlanmıştırIsWildcardBind.

Adlandırma ve Sınıflandırma

Kolaylık olması için, bir bağlantının uzak ucunun IP adresi özelliğine RemoteIp eklenir. Gelen bağlantılar ile aynıdırSourceIp, RemoteIp giden bağlantılar için ise ile aynıdırDestinationIp. özelliği, RemoteDnsCanonicalNames için makine RemoteIptarafından bildirilen DNS kurallı adlarını temsil eder. özelliği, RemoteDnsQuestions için makine RemoteIptarafından bildirilen DNS sorularını temsil eder. Özellik RemoveClassification , gelecekte kullanılmak üzere ayrılmıştır.

Kötü Amaçlı IP

Tablodaki VMConnection her RemoteIp özellik, bilinen kötü amaçlı etkinliklere sahip bir IP kümesine karşı denetlenmektedir. RemoteIp kötü amaçlı olarak tanımlanırsa aşağıdaki özellikler doldurulur. IP kötü amaçlı olarak kabul edilmezse, özellikler boş olur.

  • MaliciousIp
  • IndicatorThreadType
  • Description
  • TLPLevel
  • Confidence
  • Severity
  • FirstReportedDateTime
  • LastReportedDateTime
  • IsActive
  • ReportReferenceLink
  • AdditionalInformation

Örnek eşleme sorguları

Tüm bilinen makineleri listeleme

VMComputer | summarize arg_max(TimeGenerated, *) by _ResourceId

VM en son ne zaman yeniden başlatıldı?

let Today = now(); VMComputer | extend DaysSinceBoot = Today - BootTime | summarize by Computer, DaysSinceBoot, BootTime | sort by BootTime asc

Görüntü, konum ve SKU'ya göre Azure VM'lerinin özeti

VMComputer | where AzureLocation != "" | summarize by Computer, AzureImageOffering, AzureLocation, AzureImageSku

Tüm yönetilen bilgisayarların fiziksel bellek kapasitesini listeleme

VMComputer | summarize arg_max(TimeGenerated, *) by _ResourceId | project PhysicalMemoryMB, Computer

Bilgisayar adı, DNS, IP ve işletim sistemini listeleme

VMComputer | summarize arg_max(TimeGenerated, *) by _ResourceId | project Computer, OperatingSystemFullName, DnsNames, Ipv4Addresses

Komut satırında "sql" ile tüm işlemleri bulma

VMProcess | where CommandLine contains_cs "sql" | summarize arg_max(TimeGenerated, *) by _ResourceId

Kaynak adına göre bir makine (en son kayıt) bulma

search in (VMComputer) "m-4b9c93f9-bc37-46df-b43c-899ba829e07b" | summarize arg_max(TimeGenerated, *) by _ResourceId

IP adresine göre makine bulma (en son kayıt)

search in (VMComputer) "10.229.243.232" | summarize arg_max(TimeGenerated, *) by _ResourceId

Belirtilen makinede bilinen tüm işlemleri listeleme

VMProcess | where Machine == "m-559dbcd8-3130-454d-8d1d-f624e57961bc" | summarize arg_max(TimeGenerated, *) by _ResourceId

SQL Server çalıştıran tüm bilgisayarları listeleme

VMComputer | where AzureResourceName in ((search in (VMProcess) "*sql*" | distinct Machine)) | distinct Computer

Veri merkezimdeki curl'in tüm benzersiz ürün sürümlerini listele

VMProcess | where ExecutableName == "curl" | distinct ProductVersion

Gönderilen ve alınan bayt eğilimleri

VMConnection | summarize sum(BytesSent), sum(BytesReceived) by bin(TimeGenerated,1hr), Computer | order by Computer desc | render timechart

En çok bayt aktaran Azure VM'leri

VMConnection | join kind=fullouter(VMComputer) on $left.Computer == $right.Computer | summarize count(BytesSent) by Computer, AzureVMSize | sort by count_BytesSent desc

Bağlantı durumu eğilimleri

VMConnection | where TimeGenerated >= ago(24hr) | where Computer == "acme-demo" | summarize dcount(LinksEstablished), dcount(LinksLive), dcount(LinksFailed), dcount(LinksTerminated) by bin(TimeGenerated, 1h) | render timechart

Bağlantı hataları eğilimi

VMConnection | where Computer == "acme-demo" | extend bythehour = datetime_part("hour", TimeGenerated) | project bythehour, LinksFailed | summarize failCount = count() by bythehour | sort by bythehour asc | render timechart

Bağlı Bağlantı Noktaları

VMBoundPort
| where TimeGenerated >= ago(24hr)
| where Computer == 'admdemo-appsvr'
| distinct Port, ProcessName

Makineler arasında açık bağlantı noktası sayısı

VMBoundPort
| where Ip != "127.0.0.1"
| summarize by Computer, Machine, Port, Protocol
| summarize OpenPorts=count() by Computer, Machine
| order by OpenPorts desc

Çalışma alanınızdaki işlemleri açık olan bağlantı noktası sayısına göre puanla

VMBoundPort
| where Ip != "127.0.0.1"
| summarize by ProcessName, Port, Protocol
| summarize OpenPorts=count() by ProcessName
| order by OpenPorts desc

Her bağlantı noktası için toplama davranışı

Bu sorgu daha sonra, bağlantı noktalarını etkinliğe göre puanlar, örneğin, en çok gelen/giden trafiğe sahip bağlantı noktaları veya çoğu bağlantıya sahip bağlantı noktaları için kullanılabilir.

VMBoundPort
| where Ip != "127.0.0.1"
| summarize BytesSent=sum(BytesSent), BytesReceived=sum(BytesReceived), LinksEstablished=sum(LinksEstablished), LinksTerminated=sum(LinksTerminated), arg_max(TimeGenerated, LinksLive) by Machine, Computer, ProcessName, Ip, Port, IsWildcardBind
| project-away TimeGenerated
| order by Machine, Computer, Port, Ip, ProcessName

Bir makine grubundan giden bağlantıları özetleme

// the machines of interest
let machines = datatable(m: string) ["m-82412a7a-6a32-45a9-a8d6-538354224a25"];
// map of ip to monitored machine in the environment
let ips=materialize(VMComputer
| summarize ips=makeset(todynamic(Ipv4Addresses)) by MonitoredMachine=AzureResourceName
| mvexpand ips to typeof(string));
// all connections to/from the machines of interest
let out=materialize(VMConnection
| where Machine in (machines)
| summarize arg_max(TimeGenerated, *) by ConnectionId);
// connections to localhost augmented with RemoteMachine
let local=out
| where RemoteIp startswith "127."
| project ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine=Machine;
// connections not to localhost augmented with RemoteMachine
let remote=materialize(out
| where RemoteIp !startswith "127."
| join kind=leftouter (ips) on $left.RemoteIp == $right.ips
| summarize by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine=MonitoredMachine);
// the remote machines to/from which we have connections
let remoteMachines = remote | summarize by RemoteMachine;
// all augmented connections
(local)
| union (remote)
//Take all outbound records but only inbound records that come from either //unmonitored machines or monitored machines not in the set for which we are computing dependencies.
| where Direction == 'outbound' or (Direction == 'inbound' and RemoteMachine !in (machines))
| summarize by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol, RemoteIp, RemoteMachine
// identify the remote port
| extend RemotePort=iff(Direction == 'outbound', DestinationPort, 0)
// construct the join key we'll use to find a matching port
| extend JoinKey=strcat_delim(':', RemoteMachine, RemoteIp, RemotePort, Protocol)
// find a matching port
| join kind=leftouter (VMBoundPort 
| where Machine in (remoteMachines) 
| summarize arg_max(TimeGenerated, *) by PortId 
| extend JoinKey=strcat_delim(':', Machine, Ip, Port, Protocol)) on JoinKey
// aggregate the remote information
| summarize Remote=makeset(iff(isempty(RemoteMachine), todynamic('{}'), pack('Machine', RemoteMachine, 'Process', Process1, 'ProcessName', ProcessName1))) by ConnectionId, Direction, Machine, Process, ProcessName, SourceIp, DestinationIp, DestinationPort, Protocol

Sonraki adımlar