Bagikan melalui


Mengkueri data peta dari VM Insights

Saat Anda mengaktifkan proses dan dependensi, dalam wawasan VM, data inventori komputer dan proses dikumpulkan untuk mendukung fitur peta. Selain menganalisis data ini dengan peta, Anda dapat mengkuerinya langsung dengan Analitik Log. Artikel ini menjelaskan data yang tersedia dan menyediakan kueri sampel.

Wawasan VM mengumpulkan metrik performa dan koneksi, data inventori komputer dan proses, dan informasi status kesehatan dan meneruskannya ke ruang kerja Analitik Log di Azure Monitor. Data ini tersedia untuk kueri di Azure Monitor. Anda dapat menerapkan data ini ke skenario yang mencakup perencanaan migrasi, analisis kapasitas, penemuan, dan pemecahan masalah performa sesuai permintaan.

Penting

Anda harus mengaktifkan proses dan dependensi untuk wawasan VM untuk tabel yang dibahas dalam artikel ini untuk dibuat.

Memetakan rekaman

Satu rekaman dihasilkan per jam untuk setiap komputer dan proses unik selain rekaman yang dihasilkan saat proses atau komputer dimulai atau ditambahkan ke Wawasan VM. Bidang dan nilai dalam peta tabel VMComputer ke bidang sumber daya Komputer di Api ServiceMap Azure Resource Manager. Bidang dan nilai dalam peta tabel VMProcess ke bidang sumber daya Proses di Api ServiceMap Azure Resource Manager. Bidang _ResourceId cocok dengan bidang nama di sumber daya Resource Manager yang sesuai.

Ada properti yang dihasilkan secara internal yang dapat Anda gunakan untuk mengidentifikasi proses unik dan komputer:

  • Komputer: Gunakan _ResourceId untuk mengidentifikasi komputer secara unik di ruang kerja Analitik Log.
  • Proses: Gunakan _ResourceId untuk mengidentifikasi proses secara unik di ruang kerja Analitik Log.

Karena beberapa rekaman bisa ada untuk proses dan komputer tertentu dalam rentang waktu tertentu, kueri bisa mengembalikan lebih dari satu rekaman untuk komputer atau proses yang sama. Untuk menyertakan hanya rekaman terbaru, tambahkan | summarize arg_max(TimeGenerated, *) by ResourceId ke kueri.

Koneksi dan port

VMConnection dan VMBoundPort menyediakan informasi tentang koneksi untuk komputer (masuk dan keluar) dan port server yang terbuka/aktif di dalamnya. Metrik koneksi juga diekspos melalui API yang menyediakan sarana untuk mendapatkan metrik tertentu selama jendela waktu. Koneksi TCP yang dihasilkan dari penerimaan pada soket mendengarkan masuk, sementara koneksi yang dibuat dengan menyambungkan ke IP dan port tertentu keluar. Properti Direction mewakili arah koneksi, yang dapat diatur ke atau inbound outbound.

Rekaman dalam tabel ini dihasilkan dari data yang dilaporkan oleh agen Dependensi. Setiap rekaman mewakili pengamatan selama interval waktu 1 menit. Properti TimeGenerated menunjukkan awal interval waktu. Setiap rekaman berisi informasi untuk mengidentifikasi entitas masing-masing, yaitu, koneksi atau port, dan metrik yang terkait dengan entitas tersebut. Saat ini, hanya aktivitas jaringan yang terjadi menggunakan TCP melalui IPv4 yang dilaporkan.

Untuk mengelola biaya dan kompleksitas, rekaman koneksi tidak mewakili koneksi jaringan fisik individual. Beberapa koneksi jaringan fisik dikelompokkan ke dalam koneksi logis, yang kemudian tercermin dalam tabel masing-masing. Artinya, rekaman dalam VMConnection tabel mewakili pengelompokan logis dan bukan koneksi fisik individual yang sedang diamati. Koneksi jaringan fisik yang berbagi nilai yang sama untuk atribut berikut selama interval satu menit tertentu, dikumpulkan ke dalam satu rekaman logis di VMConnection.

Metrik

VMConnection dan VMBoundPort menyertakan data metrik dengan informasi tentang volume data yang dikirim dan diterima pada koneksi logis atau port jaringan tertentu (BytesSent, BytesReceived). Juga disertakan adalah waktu respons, yaitu berapa lama pemanggil menunggu permintaan yang dikirim melalui koneksi untuk diproses dan ditanggapi oleh titik akhir jarak jauh (ResponseTimeMax, ResponseTimeMin, ResponseTimeSum). Waktu respons yang dilaporkan adalah perkiraan waktu respons sebenarnya dari protokol aplikasi yang mendasarinya. Ini dihitung menggunakan heuristik berdasarkan pengamatan aliran data antara sumber dan tujuan akhir koneksi jaringan fisik. Secara konseptual, ini adalah perbedaan antara waktu byte terakhir permintaan meninggalkan pengirim, dan waktu ketika byte terakhir respons tiba kembali ke sana. Kedua tanda waktu ini digunakan untuk menggambarkan peristiwa permintaan dan respons pada koneksi fisik tertentu. Perbedaan di antara mereka mewakili waktu respons dari satu permintaan.

Algoritma ini adalah perkiraan yang dapat bekerja dengan berbagai tingkat keberhasilan tergantung pada protokol aplikasi aktual yang digunakan untuk koneksi jaringan tertentu. Misalnya, pendekatan saat ini berfungsi dengan baik untuk protokol berbasis respons permintaan seperti HTTP, tetapi tidak berfungsi dengan protokol berbasis antrean satu arah atau pesan.

Beberapa poin penting yang perlu dipertimbangkan meliputi:

  1. Jika proses menerima koneksi pada alamat IP yang sama tetapi melalui beberapa antarmuka jaringan, rekaman terpisah untuk setiap antarmuka akan dilaporkan.
  2. Rekaman dengan IP kartubebas tidak berisi aktivitas. Mereka disertakan untuk mewakili fakta bahwa port pada komputer terbuka untuk lalu lintas masuk.
  3. Untuk mengurangi verbositas dan volume data, rekaman dengan IP wildcard dihilangkan ketika ada rekaman yang cocok (untuk proses, port, dan protokol yang sama) dengan alamat IP tertentu. Ketika catatan IP kartubebas dihilangkan, IsWildcardBind properti rekaman dengan alamat IP tertentu diatur ke True untuk menunjukkan bahwa port diekspos di setiap antarmuka mesin pelaporan.
  4. Port yang hanya terikat pada antarmuka tertentu telah IsWildcardBind diatur ke False.

Penamaan dan Klasifikasi

Untuk kenyamanan, alamat IP dari ujung jarak jauh koneksi disertakan RemoteIp dalam properti . Untuk koneksi masuk, RemoteIp sama dengan SourceIp, sementara untuk koneksi keluar, koneksinya sama dengan DestinationIp. Properti RemoteDnsCanonicalNames mewakili nama kanonis DNS yang dilaporkan oleh komputer untuk RemoteIp. Properti RemoteDnsQuestions mewakili pertanyaan DNS yang dilaporkan oleh komputer untuk RemoteIp. Properti RemoveClassification dicadangkan untuk digunakan di masa mendatang.

IP Berbahaya

Setiap RemoteIp properti dalam VMConnection tabel diperiksa terhadap sekumpulan IP dengan aktivitas berbahaya yang diketahui. Jika diidentifikasi RemoteIp sebagai berbahaya, properti berikut diisi. Jika IP tidak dianggap berbahaya, properti kosong.

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

Sampel kueri peta

Mencantumkan semua mesin yang diketahui

VMComputer | summarize arg_max(TimeGenerated, *) by _ResourceId

Kapan VM terakhir di-boot ulang

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

Ringkasan Azure VM menurut gambar, lokasi, dan SKU

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

Mencantumkan kapasitas memori fisik semua komputer terkelola

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

Mencantumkan nama komputer, DNS, IP, dan OS

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

Temukan semua proses dengan "sql" di baris perintah

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

Menemukan komputer (rekaman terbaru) menurut nama sumber daya

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

Menemukan komputer (rekaman terbaru) menurut alamat IP

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

Mencantumkan semua proses yang diketahui pada komputer tertentu

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

Mencantumkan semua komputer yang menjalankan SQL Server

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

Mencantumkan semua versi produk unik curl di pusat data saya

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

Byte dikirim dan diterima tren

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

VM Azure mana yang mengirimkan byte terbanyak

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

Tren status tautan

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

Tren kegagalan koneksi

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

Port Terikat

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

Jumlah port terbuka di seluruh komputer

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

Menilai proses di ruang kerja Anda berdasarkan jumlah port yang telah dibuka

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

Perilaku agregat untuk setiap port

Kueri ini kemudian dapat digunakan untuk menilai port berdasarkan aktivitas, misalnya, port dengan sebagian besar lalu lintas masuk/keluar atau port dengan sebagian besar koneksi.

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

Meringkas koneksi keluar dari sekelompok komputer

// 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

Langkah berikutnya