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:
- Jika proses menerima koneksi pada alamat IP yang sama tetapi melalui beberapa antarmuka jaringan, rekaman terpisah untuk setiap antarmuka akan dilaporkan.
- Rekaman dengan IP kartubebas tidak berisi aktivitas. Mereka disertakan untuk mewakili fakta bahwa port pada komputer terbuka untuk lalu lintas masuk.
- 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 keTrue
untuk menunjukkan bahwa port diekspos di setiap antarmuka mesin pelaporan. - Port yang hanya terikat pada antarmuka tertentu telah
IsWildcardBind
diatur keFalse
.
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
- Mulai menulis kueri log di Azure Monitor dengan meninjau cara menggunakan Analitik Log.
- Pelajari selengkapnya tentang menulis kueri pencarian.