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 outbound
olarak 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 VMConnection
tek 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:
- 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.
- 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.
- 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ırTrue
. - Yalnızca belirli bir arabirime bağlı bağlantı noktaları olarak
False
ayarlanmış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 RemoteIp
tarafından bildirilen DNS kurallı adlarını temsil eder. özelliği, RemoteDnsQuestions
için makine RemoteIp
tarafı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
- Log Analytics'in nasıl kullanılacağını gözden geçirerek Azure İzleyici'de günlük sorguları yazmaya başlayın.
- Arama sorguları yazma hakkında daha fazla bilgi edinin.