Logging i Azure Functions er fundamentalt for å forstå applikasjonens oppførsel, feilsøke problemer og sikre stabilitet i produksjonsmiljøer. Ulike programmeringsspråk benytter seg av ulike logging-metoder, men formålet er det samme: å gi innsikt i funksjonenes tilstand og ytelse. I C# benyttes ILogger-grensesnittet som gir en strukturert måte å logge meldinger med nivåer som LogInformation, LogWarning og LogError. Dette muliggjør en detaljert og kategorisert logging, hvor utviklere kan filtrere informasjon etter alvorlighetsgrad. For eksempel kan man i en QueueTrigger-funksjon enkelt logge informasjon om hvilken melding som prosesseres, noe som gir direkte innsikt i funksjonens aktivitet.
JavaScript og TypeScript bruker derimot en enklere kontekstbasert logging via context.log-metoden, som er lett å integrere og gir en rask måte å logge hendelser på under funksjonsutkjøring. Dette er effektivt i mindre komplekse scenarier eller når man ønsker rask feedback uten å konfigurere ekstra logger. Python benytter det velkjente logging-modulen for logging, noe som gir fleksibilitet og mulighet til å integrere med standard logging-praksis i Python. Her kan logging-info enkelt kanaliseres til Azure Monitor eller andre overvåkingssystemer. Java bruker java.util.logging.Logger, en standard logging-mekanisme i Java-verdenen, hvor loggnivåer og loggerobjekter kan administreres på en strukturert måte som ligner C# sin ILogger.
Selv om det er variasjoner i hvordan logging implementeres, er det essensielt at all logging tilpasses slik at man kan spore og analysere funksjonens kjøring, feil og ytelse på en effektiv måte. Logging er et grunnlag for all videre overvåking og feilsøking.
Videre, etter at funksjonene er bygget og distribuert, blir overvåking og debugging kritisk for å sikre applikasjonens helse og pålitelighet. Azure tilbyr flere kraftige verktøy for dette formålet. Application Insights og Azure Monitor er sentrale komponenter som samler inn telemetridata, gir mulighet for å sette opp varsler og tilbyr dashboard for visualisering av funksjonenes status og ytelse. Gjennom Application Insights kan man spore forespørsler, avhengigheter, unntak og egne tilpassede metrikker. Azure Monitor tilbyr omfattende logganalyse og dyp innsikt som er avgjørende for proaktiv feilretting.
Logging på runtime-nivå i Azure Functions er konfigurerbar via host.json-filen, hvor man definerer loggnivåer som Trace, Debug, Information, Warning, Error og Critical. Disse nivåene gjør det mulig å regulere hvor detaljert loggingen skal være, fra svært detaljert informasjon til bare alvorlige feil. En balansert loggnivå-konfigurasjon er viktig for å unngå for mye støy i loggene, samtidig som man ikke mister essensiell informasjon.
Loggtilgang kan skje på flere måter: via Azure CLI som muliggjør sanntidsstrømming av logger i terminalen, Azure PowerShell som tilbyr avansert administrasjon av logging, og via Azure-portalen hvor man kan følge loggstrømmer og se detaljerte filer. En spesiell plass i overvåkingsverktøyene har Kudu, også kjent som Advanced Tools. Kudu gir en webbasert debug-konsoll, prosessutforsker og mulighet til å inspisere miljøvariabler og konfigurasjoner. Dette verktøyet gir en dypere innsikt i applikasjonens interne tilstand og er uvurderlig for avansert feilsøking og ytelsesoptimalisering.
Prosessutforskeren i Kudu gjør det mulig å se hvilke prosesser som kjører, deres CPU- og minnebruk, og hjelper med å identifisere flaskehalser eller uventet ressursbruk. Videre kan man gjennom Kudu installere tillegg og utvidelser for å forbedre funksjonens miljø og evne til diagnostikk.
For å oppnå maksimal utnyttelse av Azure Functions, er det ikke tilstrekkelig bare å ha grunnleggende logging og overvåking. Man må forstå hvordan loggdata kan kombineres med telemetry, hvordan man kan optimalisere loggnivåer, og hvordan man utnytter integrerte verktøy for kontinuerlig overvåking og rask feilretting. Overvåking må være integrert i utviklings- og driftsprosesser slik at man kan agere raskt ved uforutsette hendelser, minimere nedetid og sikre god brukeropplevelse.
Det er også viktig å forstå hvordan volumet av loggdata kan påvirke kostnader og ytelse. Sampling i Application Insights kan brukes for å redusere mengden innsamlet telemetri, noe som gjør overvåking mer skalerbar og kostnadseffektiv uten å miste kritisk innsikt. Forståelse av hvilke loggnivåer som skal brukes i ulike situasjoner, og hvordan man filtrerer logger, er avgjørende for å opprettholde både kvalitet og økonomisk fornuft i overvåkingsløsningen.
Å mestre logging og overvåking i Azure Functions krever derfor både teknisk kunnskap om de forskjellige verktøyene og forståelse for hvordan disse kan tilpasses organisasjonens behov. Det innebærer også en kontinuerlig prosess med evaluering og forbedring for å sikre at systemet gir mest mulig verdi til utviklingsteamet og sluttbrukerne.
Hvordan beskytte din Azure-infrastruktur mot DDoS-angrep og andre trusler
Azure er en plattform som gir utviklere og bedrifter muligheten til å bygge og administrere skybaserte løsninger. En av de viktigste aspektene ved å administrere en skyinfrastruktur er å beskytte den mot potensielle trusler, som for eksempel distribuerte tjenestenektangrep (DDoS). For å kunne håndtere slike trusler effektivt, er det viktig å implementere flere lag med beskyttelse på ulike nivåer i infrastrukturen din.
Azure DDoS Protection er en nøkkelfunksjon som hjelper til med å beskytte virtuelle nettverk (VNets) mot DDoS-angrep. For å aktivere DDoS-beskyttelse, må du først opprette en beskyttelsesplan og knytte den til et virtuelt nettverk. Dette kan gjøres enkelt ved å bruke Azure CLI:
I tillegg til DDoS-beskyttelse, er det flere andre beste praksiser du kan implementere for å redusere risikoen for DDoS-angrep i Azure. En av de mest effektive metodene er å bruke tjenester som Azure Front Door eller Azure Application Gateway. Disse tjenestene gir ekstra beskyttelse ved å distribuere trafikken på flere steder og benytte webapplikasjonsbrannmurer (WAF) for å blokkere ondsinnede forespørsler. Vi vil gå mer i dybden på Azure Front Door og Azure Application Gateway i kapittel 12.
En annen viktig beskyttelsesmekanisme er automatisk skalering, som Azure tilbyr for å justere antall ressurser etter behov for å håndtere uventede trafikktopper. Dette hjelper til med å absorbere trafikkspikene som kan oppstå under et DDoS-angrep. Videre kan bruk av nettverksgrupper (NSGs) bidra til å begrense trafikken til kun det som er nødvendig, og dermed redusere overflatearealet som er utsatt for angrep. Vi vil se nærmere på NSGs i neste seksjon.
En annen teknikk som kan implementeres er rate limiting og throttling i applikasjonene dine. Dette kontrollerer antall forespørsler som kan komme fra en enkelt kilde, og kan være et effektivt tiltak for å hindre overbelastning av systemet under et angrep. Bruk også verktøy som Azure Monitor for å sette opp varsler og overvåke ressursene dine. Dette gir deg muligheten til å reagere raskt dersom et angrep blir oppdaget.
NSGs fungerer som virtuelle brannmurer som gir deg muligheten til å definere regler for hvilke typer trafikk som er tillatt eller nektet for dine ressurser, basert på faktorer som kilde- og destinasjons-IP-adresser, porter og protokoller. Ved å sette opp regler for innkommende og utgående trafikk kan du beskytte Azure-ressursene dine mot uautorisert tilgang og potensielle trusler. NSGs kan anvendes på både subnettnivå og nettverksgrensesnittnivå, og gir fleksibilitet i hvordan du sikrer infrastrukturen din.
For eksempel kan du opprette en NSG som kun tillater HTTP (port 80) og HTTPS (port 443) trafikk til en webapplikasjon som kjører på en virtuell maskin (VM), samtidig som du blokkerer all annen trafikk. Dette kan gjøres ved hjelp av Azure CLI:
For å ytterligere sikre systemene dine, kan du bruke Azure Bastion som fungerer som en sikker gateway for å administrere virtuelle maskiner. Gjennom Azure Bastion kan du få tilgang til VMs via RDP eller SSH direkte i nettleseren, uten å måtte åpne utsatte porter som 3389 eller 22 på VM-ene dine. Dette forhindrer eksterne angrep som portskanning, som ofte er det første steget i et ondsinnet angrep.
For å konfigurere Azure Bastion, må du først opprette et subnett i VNet og navngi det AzureBastionSubnet, deretter opprette en offentlig IP-adresse for Bastion-host, og til slutt opprette Bastion-verten. Her er eksemplet på kommandoene for å sette opp Bastion:
Trusselbeskyttelse i Azure handler ikke bare om å beskytte infrastrukturen mot angrep, men også om å identifisere, vurdere og håndtere sårbarheter. Microsoft Defender for Cloud er et verktøy som gir sanntidsinnsikt og anbefalinger for å oppdage trusler som mistenkelige påloggingsforsøk, malware og uautoriserte endringer på ressurser. Defender for Cloud hjelper deg med å vurdere miljøet ditt for sårbarheter, som svake konfigurasjoner eller manglende oppdateringer, og veileder deg gjennom nødvendige tiltak for å rette opp disse problemene.
For eksempel, dersom en organisasjon bruker Azure Virtual Machines og Azure SQL Database, og Defender for Cloud oppdager et uvanlig antall mislykkede påloggingsforsøk, kan tjenesten generere et varsel og gi anbefalinger om hvordan man kan blokkere IP-adressen, aktivere multifaktorautentisering, eller gjennomgå tilgangslogger for å hindre et potensielt angrep. Det er viktig å aktivere Microsoft Defender for Cloud for abonnementet ditt ved å bruke Azure CLI:
Til slutt er det viktig å sørge for at infrastrukturen din er i samsvar med relevante standarder og regelverk. Azure Policy gjør det mulig å definere og håndheve regler som sikrer at ressursene dine følger organisasjonens krav og beste praksis. Dette kan inkludere alt fra å begrense hvilke ressurser som kan distribueres, til å pålegge spesifikke sikkerhetskonfigurasjoner som kryptering på lagringskontoer.
Ved å implementere disse beskyttelsestiltakene og overvåkingsverktøyene kan du styrke sikkerheten til dine Azure-ressurser og minimere risikoen for angrep og sikkerhetsbrudd.
Hvordan forberede seg til Microsoft Certified: Azure Developer Associate (AZ-204) eksamen?
For å begynne med Microsoft Azure trenger man en aktiv konto, som kan opprettes gratis via https://portal.azure.com. Det kreves å oppgi betalingskort, men man blir ikke belastet med mindre man velger å oppgradere eller overskrider gratisgrensene. Microsoft varsler tydelig før eventuelle kostnader påløper, noe som sikrer at man holder seg innenfor budsjettet uten uventede utgifter. En aktiv Azure-konto gir tilgang til å utforske Azure-portalen, distribuere ressurser som webapplikasjoner, databaser, lagringskontoer og virtuelle maskiner, samt bruke overvåkingsverktøy for ressursbruk og ytelse.
To sentrale verktøy for administrasjon av Azure er Azure CLI og Azure PowerShell. Azure CLI gir mulighet til å skrive skript som automatiserer oppgaver i Azure via kommandolinjen. Dette verktøyet gjør det mulig å håndtere ressurser, hente informasjon og feilsøke problemer. Det kan installeres på Windows, macOS, Linux og kjøres i Docker-konteinere. Azure PowerShell tilbyr tilsvarende funksjonalitet via PowerShell-cmdlets og er et godt alternativ for de som er kjent med PowerShell. PowerShell er en tverrplattformskommandolinjeskall og skriptspråk som automatiserer oppgaver og konfigurasjonsstyring ved å sende objekter mellom kommandoer, noe som effektiviserer datahåndtering og integrasjon med Microsoft-produkter. Bruk av både Azure CLI og PowerShell er essensielt for implementering og drift av CI/CD-pipelines i Azure DevOps.
For å være kvalifisert til AZ-204 eksamen kreves minimum ett til to års erfaring med utvikling av skyapplikasjoner på Azure, samt ferdigheter i minst ett av Azure-støttede programmeringsspråk som Python, C#, JavaScript eller Java. Kandidaten må beherske Azure SDK-er, ulike lagringsalternativer, datatilkoblinger, API-er, sikkerhetsfunksjoner som autentisering og autorisasjon, container-tjenester og feilsøking. Kunnskap om Azure CLI, PowerShell og CI/CD er avgjørende, spesielt for å kunne bygge og administrere Azure DevOps-pipelines.
Eksamen er en nettbasert, overvåket test som varer rundt 100 minutter og består av ulike spørsmålstyper. Kandidaten må forvente totalt to timer til gjennomføring, inkludert instruksjoner og pauser. Påmelding skjer via Microsoft Certification Dashboard, og gebyret varierer, men ligger vanligvis rundt 165 USD. Eksamen tillater interaktive elementer, og man kan ta pauser underveis, men klokken fortsetter å gå. Ved stryk må man vente minst 24 timer før ny forsøk.
Forberedelsen bør baseres på en strukturert studieplan hvor man deler inn læringen i temaer som utvikling av Azure compute-løsninger, lagring, sikkerhet, overvåking, optimalisering og API-administrasjon. Det anbefales å kombinere teoretisk lesing med praktiske øvelser i Azure-miljøet, der man selv bygger prosjekter som demonstrerer ferdigheter. Slike prosjekter styrker ikke bare læringen, men fungerer også som en portefølje over reelle erfaringer som kan presenteres for fremtidige arbeidsgivere.
Det kan være svært verdifullt å delta i Azure-brukergrupper og fellesskap. Disse miljøene tilbyr støtte, deling av erfaringer og tips fra andre som allerede jobber aktivt med Azure. Jevnlige prøver og simuleringer av eksamen hjelper til med å evaluere kunnskapsnivået, justere studieplanen og fokusere ekstra på svake områder.
Viktigheten av å forstå både teori og praksis i Azure-miljøet kan ikke overdrives. Det er ikke tilstrekkelig bare å lese seg opp; evnen til å anvende teknologiene i virkelige situasjoner er avgjørende for å lykkes på eksamen og i videre karriere som Azure-utvikler. Man bør derfor sette av tid til praktisk arbeid med distribusjon, sikkerhet, lagring og automatisering, samtidig som man kontinuerlig vurderer og justerer sin kompetanse basert på tilbakemeldinger fra øvelser og prøver.
Hvordan konfigureres diagnostiske innstillinger og utføres logganalyse med KQL i Azure?
I Azure er det avgjørende å forstå hvordan man konfigurerer diagnostiske innstillinger for ressurser og benytter kraftige verktøy som KQL (Kusto Query Language) for å analysere loggdata effektivt. Når man aktiverer diagnostikk for en ressurs, for eksempel en virtuell maskin, må man spesifisere hvilke loggkategorier som skal sendes til en Log Analytics-arbeidsområde. En vanlig kategori som ofte aktiveres er AuditEvent, som gir innsikt i revisjonshendelser og sikkerhetsrelatert aktivitet.
Ved hjelp av Azure Management Libraries for .NET kan man programmere dette i C#, og definere parametere som WorkspaceId, kategorier av logger og hvor lenge loggene skal beholdes. Eksempelet viser en automatisk autentisering med klient-ID og hemmelighet, deretter opprettes en MonitorManagementClient som håndterer opprettelsen eller oppdateringen av diagnostiske innstillinger for ressursen. I praksis spesifiseres at AuditEvent-logger skal lagres i 30 dager, med eksplisitt aktivering av retention policy.
Valg av hvor lenge loggene beholdes, er ikke en triviell beslutning. For kort lagringstid kan gjøre det umulig å undersøke hendelser i etterkant, mens for lang lagringstid fører til økte kostnader og unødvendig ressursbruk. Derfor må man vurdere både regulatoriske krav, sikkerhetsbehov og budsjett før man definerer en passende retention policy. For enkelte virksomheter, som opererer innenfor finans eller helse, kan revisjonslogger måtte lagres i mange måneder eller år. For andre er kostnadsoptimalisering viktigere, og da reduseres lagringstiden betraktelig.
Etter at dataene er sendt til Log Analytics, oppstår behovet for effektiv spørring og analyse. Dette gjøres med KQL, som er et kraftfullt og uttrykksfullt språk utviklet nettopp for denne typen scenario. KQL er leseorientert, og opererer med et datastrømmodell-basert paradigme. Det er optimalisert for å søke, analysere og aggregere telemetri, systemlogger og andre strukturerte data med høy ytelse.
Grunnleggende operasjoner i KQL inkluderer telling av rader ved bruk av count, utvalg av prøver med take, filtrering med where, aggregering med summarize og visuell fremstilling av resultater via render. Hver av disse bygger på et deklarativt uttrykk for transformasjon av datastrømmen, som kan kombineres og struktureres hierarkisk for avansert analyse.
Et konkret eksempel er å filtrere loggene for de siste 30 dagene og aggregere antall hendelser per dag, sortert etter type og medium. Ved å bruke startofday(ago(30d)) sikrer man presis avgrensning av tidsrommet, og summarize brukes for å telle antall hendelser etter spesifikke kriterier. I kombinasjon med format_datetime og project, forfines resultatene til et strukturert, lettfattelig utvalg av data, som deretter kan visualiseres som tidsseriegrafer direkte i Azure-portalen ved hjelp av render timechart.
Visualisering er for øvrig ikke støttet direkte fra CLI eller kode, men skjer i portalen etter at spørringen er definert. Det betyr at utvikling og testing av queries ofte skjer iterativt – man skriver, kjører, analyserer og justerer til man har ønsket innsikt. Dette er spesielt nyttig for å oppdage mønstre, identifisere avvik og forstå brukeradferd over tid.
For å utnytte KQL til sitt fulle potensiale, er det også avgjørende å forstå språklige hjelpefunksjoner for strengbehandling, tidsanalyse og numeriske transformasjoner. Funksjoner som bin, extend, parse_json og extract gir presis kontroll over strukturen i data og gjør det mulig å tilpasse queries til svært spesifikke behov.
Dette økosystemet, som kombinerer diagnostisk datainnsamling, loggretensjon og avansert analyse, gir utviklere og systemadministratorer verktøyene de trenger for å overvåke, forstå og optimalisere driften av deres Azure-ressurser. Det er ikke nok å samle inn data – verdien oppstår først når de blir strukturert, analysert og tolket i konteksten av faktiske operasjonelle eller forretningsmessige spørsmål.
For å arbeide effektivt med slike verktøy, må man også forstå begrensningene og ytelsesimplikasjonene. Store queries som inkluderer flere millioner poster, særlig med ukorrekt bruk av tidsavgrensning eller aggregering, kan forårsake lang kjøretid og høye behandlingskostnader. Effektive queries er alltid smale i tid, eksplisitte i filtre, og bruker nødvendige aggregeringer med omhu. Kombinasjonen av teknisk dyktighet og forretningsforståelse gir best mulig utnyttelse av denne teknologien.
Hvordan oppdatere innstillinger for funksjonsapp i Azure og integrere Cosmos DB for effektiv produktoppdatering
Når du jobber med Azure Functions og Cosmos DB, er det viktig å sikre at konfigurasjonen av appen din er optimalisert for ytelse og tilgjengelighet. Dette krever ikke bare at du setter de riktige innstillingene i Azure, men også at du integrerer disse med funksjonene som skal utføre spesifikke oppgaver, som å oppdatere produktdata i en e-handelsplattform.
For å begynne med, er det flere måter å oppdatere innstillingene for din funksjonsapp i Azure. Den enkleste metoden er ved å bruke Azure CLI. For eksempel, hvis du ønsker å hente tilkoblingsstrengen til Cosmos DB og bruke den i din funksjonsapp, kan du gjøre det slik:
Med dette kommandosettet hentes tilkoblingsstrengen for Cosmos DB og legges inn som en appinnstilling i funksjonsappen. Dette gjør at funksjonskoden, for eksempel en funksjon som oppdaterer produktinformasjon, kan koble til og operere med Cosmos DB.
For dem som foretrekker å bruke Infrastruktur som kode (IaC), kan Bicep være et nyttig verktøy for å definere og administrere konfigurasjonen. Her er et eksempel på hvordan du kan gjøre det med Bicep:
Dette gir deg en effektiv og versjonskontrollert måte å oppdatere innstillingene til funksjonsappen din på. Når tilkoblingsstrengen er lagt til som en innstilling, kan funksjonen som håndterer produktoppdateringene, som beskrevet i koden under, bruke denne forbindelsen.
Eksempel på funksjon som oppdaterer produkter i Cosmos DB
En typisk funksjon for å håndtere produktoppdateringer kan se slik ut:
Denne funksjonen håndterer HTTP PUT-forespørsler for å oppdatere produktdata i Cosmos DB. Ved å bruke UpsertItemAsync metoden blir produktet enten oppdatert eller lagt til dersom det ikke allerede eksisterer i databasen.
Ytelsesoptimalisering med indeksering og partisjonering
En viktig del av arbeidet med Cosmos DB er å konfigurere indekserings- og partisjoneringsstrategier som passer for applikasjonens behov. Et eksempel på indekseringspolitikk for en bestillingsbeholder kan se slik ut:
Denne indekseringspolitikken sørger for at nødvendige felter som customerId og orderDate er indeksert, noe som gir bedre spørringsytelse. Å ekskludere bestemte felter som for eksempel shippingAddress kan også bidra til å redusere overhead i indekseringsprosessen.
Kontinuerlig integrasjon og distribusjon (CI/CD)
Automatisering er avgjørende for å holde utviklingsprosessen smidig og effektiv, spesielt når man jobber med store applikasjoner som Zuta. Med CI/CD-pipelines kan vi sikre at endringer i koden automatisk blir testet, bygget og distribuert til Azure-miljøet.
Et eksempel på en grunnleggende pipeline i Azure DevOps for produktkatalog-APIen kan se slik ut:
Denne pipeline starter en byggeprosess hver gang det gjøres endringer i main eller develop grener, og kan utvides for å inkludere tester og distribusjon til ulike miljøer.
For produksjonsmiljøet kan man implementere en mer sofistikert distribusjonsstrategi ved hjelp av GitHub Actions, som lar oss implementere mer presise utrullingsprosesser, for eksempel kun å oppdatere betalingstjenesten når det er endringer i den spesifikke koden.
Overvåking og feilsøking
Et kritisk aspekt ved drift av komplekse distribuerte applikasjoner er god overvåking. For Zuta, hvor vi har flere tjenester som påvirker både frontend og backend, er det viktig å sette opp effektiv overvåking for applikasjonen. Et enkelt eksempel på hvordan du kan sette opp Application Insights for webappen din:
Med dette kan du begynne å samle inn data om appens ytelse, som kan brukes til å identifisere flaskehalser eller feil før de blir et problem for sluttbrukerne.
Ved å integrere alle disse elementene – riktig konfigurasjon av funksjonsappene, optimalisering av databasen, automatisering av distribusjon, og effektiv overvåking – kan Zuta sikre en høy ytelse og pålitelighet for sin e-handelsplattform. Dette er fundamentalt for å kunne skalere effektivt og sikre at applikasjonen alltid leverer et pålitelig produkt til kundene.
Hvordan Azure Resource Manager (ARM) Støtter Kostnadsoptimalisering i Skyen
Hvordan kan selvadjungerte og symmetriske operatorer spektralt dekomponeres gjennom POVM og COVM?
Hvordan kan konvolusjonelle autoenkodere forbedre gjenkjenning av fingeravtrykk?
Hva er rotavirus og hvordan påvirker det immunforsvaret?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский