Azure Management Series: Monitoring Practice Part 1

Heri Fauzan
ecomindo-dev
Published in
9 min readNov 9, 2020

Semua hal yang diperlukan dalam hal mengatur keseluruhan resource di Azure dibahas dalam Azure Governance, namun sebenarnya Governance masih merupakan bagian dari Azure Management. Ada enam topik yang dibahas dalam Azure Management yaitu Monitor, Configure, Govern, Secure, Protect, dan Migrate. Artikel ini membahas topik yang pertama yaitu Monitor Azure.

Ada beberapa service yang paling umum digunakan untuk monitoring di Azure, masing-masing memiliki spesialisasinya sendiri-sendiri. Beberapa service tersebut adalah Application Insight, Log Analytics Workspace, Application Insights, Azure Monitor, Network Watcher, Custom Dashboard, dan Alerts.

Konsep Dasar Monitoring di Azure

Monitoring Services in Azure

Gambar di atas merepresentasikan proses monitoring di Azure secara keseluruhan.

Data yang digunakan oleh Azure Monitor terdapat dua jenis yaitu metrics dan logs. Metrics merupakan data numerik yang menunjukkan performance dari system, missal CPU usage, memory capacity, dan lain-lain. Sementara logs merupakan sekumpulan tipe data yang menunjukkan informasi yang terjadi pada system seperti log pada aplikasi. Logs di Azure dapat di-query menggunakan Kusto query.

Terdapat dua jenis log pada Azure, pertama adalah activity logs dan yang kedua adalah diagnostic logs. Activity logs menunjukkan kapan resource dibuat, dimodifikasi, dan siapa yang melakukan operasi tersebut.

Bagan sebelah kiri merupakan sumber dari data yaitu application, infrastructure, platform service, dan custom resource.

Monitoring data di Azure terdiri dari beberapa tier:

1. Application Monitoring Data, berada pada level aplikasi. Application Insights menjadi solusi pada level application.

2. Guest OS Monitoring Data, berada pada level OS. Diagnostic log pada level OS bisa dikirim ke Log Analytics Workpace untuk dikumpulkan dan dianalisis yang kemudian bisa ditampilkan secara keseluruhan pada Azure Monitor. Sistemnya bisa merupakan on-premise, Azure, atau cloud lain.

3. Azure Resource Monitoring Data, data operasi pada Azure Resource (level platform). Seperti activity logs dan juga log dari platform service.

4. Azure Subscription Monitoring Data, data merupakan semua operasi yang dilakukan pada subscription. Seperti data health dan Azure itu sendiri.

5. Azure Tenant Monitoring Data, data pada level tenant, seperti service Azure Active Directory.

Beberapa aturan sederhana dalam menentukan solusi monitoring di Azure:

a. Deteksi dan diagnosis isu antar aplikasi dan dependensi (application level) menggunakan Application Insights.

b. Memonitor isu di Infrastruktur bisa dilihat pada

  • Untuk VM gunakan Virtual Machines Insights,
  • Untuk Container gunakan Container Insights,
  • Untuk Network gunakan Network Insights,
  • Dan seterusnya ada di fitur Insights (ada di Azure Monitor)
  • *Troubleshooting jaringan di Network Watcher

c. Menggali lebih dalam monitoring data untuk troubleshooting dan deep diagnostic dengan Log Analytics Workspace.

d. Ketika dibutuhkan aksi otomatis dari hasil monitoring bisa menggunakan

  • Alert jika berupa aksi berupa peringatan,
  • Autoscale jika aksi berupa scale out/in,
  • atau Automation untuk menjalankan script atau service lain di Azure.

e. Untuk menampilkan tampilan visualisasi monitoring yang lebih kaya dan komprehensif gunakan Dashboard dan Workbook.

*Note: pada versi Azure Monitor sebelumnya Network Watcher menjadi salah satu bagian dari Azure Monitor.

Log Analytics Workspace

Log Analytics Workspace berfungsi untuk mengumpulkan logs dari semua service pada satu lokasi (workspace). Log yang dikumpulkan ini digunakan untuk log retention serta kepentingan analytics dengan query. Sumber dari log tersebut juga bisa sangat beragam, bahkan bisa dilakukan kustomisasi sehingga semua resource termasuk on-premise bisa terhubung dengan Log Analytics Workspace dengan log analytics agent.

Cost driver untuk Log Analytics ada 2 yaitu:

  • Data Ingestion, seberapa banyak data yang diproses/diolah (inbound data dari aplikasi/sumber dan proses query).
  • Data Retention, seberapa lama durasi waktu penyimpanan data pada service.

Pricing Tier dari Log Analytics terdapat dua tipe yaitu Pay-as-You-Go atau Capacity Reservation. Untuk capacity reservation pilihan minimal yang ada adalah 100GB per hari, ini hanya disarankan jika memang monitoring data yang digunakan secara rutin sangat besar. Untuk konsumsi level menengah kebawah dengan workload data yang tidak tinggi lebih baik menggunakan tier Pay-as-You-Go.

Pertama-tama kita pelajari terlebih dahulu beberapa fitur-fitur penting yang ada di Log Analytics Workspace:

1. General > Workbooks, untuk membuat tampilan grafik pada Overview di workspace dan Azure Monitor. Workbooks menggantikan fungsi View Designer yang sudah obsolete. Workbook merupakan cara membuat visualisasi custom, dengan menggunakan resource data dari semua service yang terhubung dengan Log Analytics.

Hampir semua service monitoring seperti Log Analytics, Application Insights, Azure Monitor memiliki workbook. Bedanya hanyalah sumber datanya, untuk Azure Monitor sumber datanya bisa lebih luas dari berbagai subscription. Log Analytics hanya dapat membuat workbook terbatas pada service yang sudah terhubung sementara Application Insights membuat workbook dari sumber data level aplikasi.

Tampilan fitur di Log Analytics

2. General > Logs, bagian ini digunakan untuk melihat logs dari resouces yang sudah terhubung. Digunakan dengan kueri yang akan dibahas nanti.

3. General > Service Map, service map pada Log Analytics Workspace mirip seperti service map pada Application Insights hanya saja mapping antar dependency di sini ditampilkan dalam konteks hubungan antara Operating System/Machine (IaaS level).

Tampilan Fitur Log Analytics

4. General > Solutions, untuk menghubungkan data source dengan Log Analytics Workspace harus dibuat terlebih dahulu monitoring solution-nya dengan fitur ini.

5. Workspace Data Sources > Virtual Machines, untuk menampilkan VM apa saja yang sudah terhubung dengan Log Analytics Workspace. Ini perlu dilakukan jika kita ingin mengumpulkan diagnostic logs dari VM.

Sumber data dari VM

Hal yang paling penting dari Log Analytics adalah bagaimana mengolah data yang telah disimpan, cara yang dapat digunakan adalah dengan melakukan kueri pada log tersebut yang merupakan fitur yang paling sering digunakan di Log Analytics Workspace dan juga dapat dilakukan dari Azure Monitor sebagai service utama monitoring di Azure. Kueri log tersebut dapat ditemukan pada fitur Logs (General > Logs), nomor 2 di atas. Untuk melakukan kueri pada Log Analytics diperlukan pengetahuan tentang bahasa Kusto Query seperti yang telah dijelaskan di subbab sebelumnya.

Sekilas tentang Kusto Query di Log Analytics:

1. Cara kerja menggunakan pipelining ( tanda “|”) sebagai proses antar kueri.

2. Variabel sementara disimpan dengan keywork “let”

3. Kita bisa menggunakan saved query untuk melakukan kueri pada log ( tab Queries sebelah Tables di gambar)

4. Kita bisa menyimpan kueri yang telah kita buat dengan fitur save

5. Kita bisa membuat kueri untuk menghasilkan visualisasi (chart, diagram, dll.)

Tampilan Logs Queries

Berikut contoh cara melakukan kueri untuk mendapatkan logs dari seluruh service di Kubernetes pada Logs Analytics Workspace:

//Line ini untuk berapa lama data terakhir yang ingin diambil, ubah start time untuk jangka waktu yang diinginkanlet startTime = ago(24h);let endTime = now();//Line ini untuk dapet Image dan ImageTag pada rentang waktu dari ContainerIDlet ContainerInv = ContainerInventory | where TimeGenerated >= startTime and TimeGenerated < endTime | summarize arg_max(TimeGenerated, *) by ContainerID, Image, ImageTag | project-away TimeGenerated | project ContainerID1=ContainerID, Image1=Image ,ImageTag1=ImageTag;//Line ini untuk dapet Name pada rentang waktu dari ContainerIDlet KubePodInv = KubePodInventory | where ContainerID != “” | where TimeGenerated >= startTime | where TimeGenerated < endTime | summarize arg_max(TimeGenerated, *) by ContainerID2 = ContainerID, Name1=ContainerName | project ContainerID2 , Name1;//Line ini buat join dua variabel di ataslet ContainerData = ContainerInv | join kind=leftouter (KubePodInv) on $left.ContainerID1 == $right.ContainerID2;//Line terakhir ini untuk menampilkan log setiap container di KubernetesContainerLog| where TimeGenerated >= startTime and TimeGenerated < endTime| join kind= leftouter (ContainerData) on $left.ContainerID == $right.ContainerID2 | project-away ContainerID1, ContainerID2, Name, Image, ImageTag | project-rename Name = Name1, Image=Image1, ImageTag=ImageTag1

Contoh tampilan:

contoh kueri Kusto

Hasilnya:

Hasil dari kueri

Untuk mendapatkan hasil dari service spesifik misalkan dari “inbound service” maka perlu ditambahkan pipeline baru dengan Image “inbound” sebagai berikut:

| where Image contains “inbound”

Contoh tampilan:

Contoh Kueri

Hasilnya:

Hasil Kueri

Application Insights

Dashboard hasil Application Insights

Gambar di atas adalah dashboard insight yang merupakan salah satu fitur dari Application Insights.

Application Insights merupakan service untuk monitoring pada level aplikasi. Satu Application Insights bisa dihubungkan dengan banyak application service seperti API, web, dll.

Posisi Application Insights dalam Arsitektur di Azure

Cost driver untuk Application Insight sama dengan Log Analytics:

  • Data Ingestion, seberapa banyak data yang diproses/diolah (inbound data dari aplikasi/sumber dan proses kueri).
  • Data Retention, seberapa banyak data dikalikan waktu simpan pada service.

Apa saja yang bisa dilakukan Application Insights:

a. Melakukan mapping aplikasi dengan berbagai dependensinya (Application Mapping)

b. Mendeteksi perilaku abnormal dari aplikasi dan melakukan trigger (smart detection and manual alerts)

c. Memonitoring performance aplikasi secara live (Live Metrics)

d. Mencari dan memfilter kejadian seperti request, exception, dependency call, log trace, dan page view (search)

e. Dashboard berisi seluruh metrics performance aplikasi (Application Dashboard, gambar di awal subbab)

f. Dan lain-lain.

Cara untuk menggunakan Application Insights:

1. Buat Application Insights

Pada Azure Portal pada dashboard home pilih “create a resource” (logo “+”).

Tampilan “create a resource” fitur

Setelah itu pada bagian search ketik “Application Insights” maka akan muncul Application Insights lalu klik “Create”.

Pilih region, subscription, resource group, dan nama yang sesuai untuk Application Insights yang ingin dibuat. Saat ini ada dua mode untuk sumber data:

  • Klasik, data didapatkan dari aplikasi akan disimpan oleh Application Insights
  • Workspace, data didapatkan dari aplikasi kemudian disimpan pada Log Analytics Workspace, baru diproses oleh Application Insights.

Cara kedua lebih preferable untuk menyatukan data monitoring pada satu tempat saja (Log Analytics Workspace) dan menghemat driver cost yang kedua yaitu data retention karena tidak ada data yang disimpan di Application Insights.

Detail konfigurasi Application Insights

Lalu pilih “Create” dan Application Insights akan terdeploy.

2. Tambahkan dependensi dan konfigurasi koneksi pada aplikasi yang menjadi target

Bahasa pemrograman yang didukung oleh Application Insights adalah .NET, Node.js, Java, dan Python.

Contoh untuk aplikasi NodeJS, pertama harus melakukan install library:

npm install applicationinsights –save

Kemudian tambahkan konfigurasi pada file utama (app.js) berupa snippet berikut:

let appInsights = require(‘applicationinsights’);

Lebih lanjut terkait proses ini dilakukan oleh developer dan bisa dilihat pada dokumentasi Microsoft berikut ini.

Azure Monitor

Azure Monitor adalah “a whole monitoring solution” di Azure. Azure Monitor berfungsi untuk menampilan monitoring seluruh resource di Azure, termasuk yang berbeda subscription sekalipun (dalam satu tenant). Azure Monitor dapat dibuka dengan melakukan search pada Azure Portal yang bernama “Monitor”. Dokumentasi lebih detail dapat didapatkan dari https://docs.microsoft.com/en-us/azure/azure-monitor.

Search monitor di Azure Portal

Berikut beberapa bagian penting dari Azure Monitor yang bisa digunakan:

Fitur Insights di Azure Monitor

1. Applications, merukan fitur untuk terhubung ke Application Insights (hanya dapat digunakan jika sudah membuat Application Insights). Application Insights berfokus untuk melakukan monitoring pada level aplikasi, terutama untuk PaaS seperti (Azure Functions, Logic Apps, App Service, dll.), pada solusi dengan Kubernetes kita bisa menggunakan ini untuk level pod, namun akan ada duplikasi logs dengan logs dari pod di Kubernetes.

2. Virtual Machines, merupakan fitur yang terhubung dengan Insights pada VMs. Pada solusi dengan Kubernetes tidak ada Virtual Machine yang terhubung dengan monitoring agent karena tidak dibutuhkan, logs dari aplikasi disimpan di level abstraksi Kubernetes (Application Layer) sehingga sudah terwakilkan oleh Container Insight yang akan dibahas di nomor 4.

Menampilkan semua VM yang ada, klik “Enable” untuk mengaktifkan monitoring agent

3. Storage Accounts, menampilkan monitoring usage dari Storage Account. Tampilan usage lebih detail dapat dilakukan dengan meng-klik spesifik storage account yang ditampilkan. Berikut tampilannya:

Tampilan daftar Azure Storage yang termonitor
Tampilan grafik transaksi yang terjadi di Storage

4. Containers, menampilkan Insight dari container termasuk didalamnya Azure Kubernetes Cluster, Azure Container Instance, dll. Berikut tampilannya:

Tampilan daftar Cluster Kubernetes yang termonitor
Tampilan utilitas CPU dan Memori pada Node Kubernetes

5. Networks, menampilkan insight dari resource-resource yang terkait dengan networking seperti Load Balancer, Network Security Group, Virtual Network, VPN, dll. Berikut tampilannya:

Tampilan daftar network health dari berbagai resource

Apabila di-klik secara spesifik adakan ada grafik lebih detail seperti berikut ini.

Grafik Koneksi pada resource

Kelanjutan part ini dibahas pada artikel Azure Management Series: Monitoring Part 2

--

--

Heri Fauzan
ecomindo-dev

Cloud Solutions Architect, AWS Azure GCP and Kubernetes Certified