Hvor kommer loggene fra? Veeam Log Diving

Hvor kommer loggene fra? Veeam Log Diving

Vi fortsetter vÄr reise inn i den fascinerende verdenen av feilsÞking gjennom logger. I den forrige artikkelen har vi blitt enige om betydningen av grunnleggende begreper og fÄtt et kort blikk pÄ hovedstrukturen til Veeam som en helhetlig applikasjon. Oppgaven for denne gangen er Ä finne ut hvordan loggfilene dannes, hvilken informasjon de inneholder, og hvorfor de ser ut som de gjÞr.

Hva tenker du egentlig at disse «loggene» er? I fÞlge mange skal logger for enhver applikasjon spille rollen som en allmektig entitet som stort sett tilbringer tiden et sted i bakgrunnen, men i et kritisk Þyeblikk dukker opp fra ingenting i strÄlende rustning og redder alle. Det vil si at de bÞr inneholde alt fra de minste feilene i hver komponent til separate transaksjoner i databasen. Og etter en feil skal det straks skrives hvordan den kan rettes. Alt dette mÄ fÄ plass i et par megabyte, ikke mer. Det er jo bare tekst! Tekstfiler kan ikke ta opp titalls gigabyte, jeg har hÞrt noe om det!

SĂ„, logger

I den virkelige verden er logger kun et arkiv av diagnostisk informasjon. Og hva som skal lagres, hvor informasjonen skal hentes fra for lagring, og hvor detaljert den skal vÊre, mÄ besluttes av utviklerne selv. Noen fÞlger minimalistisk tilnÊrming, og lagrer bare pÄ- og av-poster, mens andre flittig samler alt de kan komme over. Det finnes ogsÄ en mellomlÞsning der du kan velge sÄkalt Logging Level, hvor du selv angir hvor detaljert informasjonen skal vÊre, basert pÄ hvor mye ledig plass du har pÄ diskene =) VBR tilbyr faktisk hele seks nivÄer av logger, bare sÄ det er sagt. Og tro meg, du vil ikke se hva som skjer ved det mest detaljerte loggfÞringen med lite ledig plass pÄ disken din.

Greit. Vi har forstÄtt omtrent hva vi Þnsker Ä lagre, men det reises et legitimt spÞrsmÄl: hvor skal vi hente denne informasjonen fra? En del hendelser for logging genererer vi selvsagt selv gjennom vÄre interne prosesser. Men hva gjÞr vi nÄr det skjer en interaksjon med det eksterne miljÞet? For Ä unngÄ Ä skli ned i et kaos av midlertidige lÞsninger og omveier, har Veeam en tendens til ikke Ä oppfinne allerede oppfunnede lÞsninger. NÄr det finnes et eksisterende API, en innebygd funksjon i systemet, et bibliotek osv., vil vi gi fordel til de ferdige alternativene fÞr vi begynner Ä lage vÄre egne smarte lÞsninger. Selv om det ogsÄ finnes mange av dem. Derfor er det viktig Ä forstÄ at stÞrsteparten av feilene stammer fra meldinger fra tredjeparts API-er, systemkall og andre biblioteker. I dette tilfellet er rollen til VBR Ä videresende disse feilene til loggfiler som de er. Hovedoppgaven til brukeren er Ä lÊre Ä forstÄ hvilken linje som kommer fra hvem, og hva denne "hvem" er ansvarlig for. Derfor, hvis feilkoden fra VBR-loggen fÞrer deg til en MSDN-side, er det normalt og riktig.

Som vi ble enige om tidligere: Veeam er et sÄkalt SQL-basert program. Det betyr at alle innstillinger, all informasjon og alt som er nÞdvendig for normal funksjonalitet lagres i databasen. Derav den enkle sannheten: det som ikke finnes i loggene, er sannsynligvis i databasen. Men dette er ikke en sÞlvkule: det finnes noen ting som ikke er i lokale logger for Veeam-komponenter eller i databasen. Derfor mÄ man lÊre seg Ä studere vertens logger, logger fra den lokale maskinen og logger fra alt som deltar i sikkerhetskopierings- og gjenopprettingsprosessen. Og noen ganger er den nÞdvendige informasjonen ikke tilgjengelig noe sted. Slik er veien. 

Noen eksempler pÄ slike API-er

Denne listen har ikke som mÄl Ä vÊre uttÞmmende, sÄ ikke forvent Ä finne den ultimate sannheten her. MÄlet er bare Ä vise de vanligste tredjeparts API-ene og teknologiene som brukes i vÄre produkter.

La oss begynne med VMware.. 

FÞrst pÄ listen er vSphere API. Det brukes til autentisering, lesing av hierarkiet, oppretting og sletting av Þyeblikksbilder, forespÞrsel om informasjon om maskiner og veldig mye mer. Funksjonaliteten er veldig bred, sÄ jeg kan anbefale VMware vSphere API Reference for versjonen 5.5 og 6.0. For nyere versjoner finner du det enkelt med litt Googling.

VIX API. Den svarte magien til hypervisoren, som har sin egen liste over feil. VMware API for Ä jobbe med filer pÄ verten uten nettverkstilkobling. En siste utvei nÄr man mÄ legge en fil pÄ en maskin som ikke har bedre forbindelser. Det blir smertefullt hvis filen er stor og verten er overbelastet. Men regelen gjelder her at 56,6 Kb/s er bedre enn 0 Kb/s. I Hyper-V kalles dette PowerShell Direct. Men dette var bare tilfelle fÞr

vSphere Web Services API . Fra vSphere 6.0 (omtrent, ettersom dette APIet fÞrst ble introdusert i versjon 5.5) brukes det for Ä jobbe med gjestemaskiner og har allerede nesten helt utskiftet VIX. I bunn og grunn er dette et annet API for Ä administrere vSphere. Til de interesserte vil jeg anbefale Ä studere denne utmerkede manualen. 

VDDK (Virtual Disk Development Kit). Et bibliotek som ble delvis omtalt i denne artikkelen. Det brukes til Ă„ lese virtuelle disker. En gang var det en del av VIX, men ble etter hvert flyttet til et eget produkt. Som arving bruker det de samme feilkodene som VIX. Men av en eller annen grunn finnes det ingen beskrivelse av disse feilkodene i selve SDK-en. Derfor har det blitt kjent gjennom erfaring at VDDK-feil med andre koder bare er oversettelser fra binĂŠre til desimale koder. Den bestĂ„r av to deler – den fĂžrste delen er u-dokumentert informasjon om konteksten, mens den andre delen er tradisjonelle VIX/VDDK-feil. For eksempel, hvis vi ser:

VDDK error: 21036749815809.Unknown error

, kan vi konvertere dette til hex og fÄ 132200000001. Den ikke-informative starten 132200 blir bare kastet, og resten vil vÊre vÄr feilkode (VDDK 1: Unknown error). Om de vanligste VDDK-feilene ble nylig laget en egen article.

NÄ skal vi se pÄ Windows.

. Her kan vi finne alt vi trenger i den standard Event Viewer. Men det er et problem: etter gammelt tradisjon logger Windows ikke en fullstendig feilmelding, men bare dens nummer. For eksempel er feil 5 – “Access denied”, mens 1722 – “The RPC server is unavailable”, og 10060 – “Connection timed out”. SelvfĂžlgelig er det flott hvis du husker de mest kjente, men hvordan hĂ„ndtere ukjente? 

Og for at livet ikke skulle virke for perfekt, lagres feil ogsÄ i heksadesimal form, med prefikset 0x8007. For eksempel, 0x8007000e er faktisk 14, Out of Memory. Hvorfor og for hvem dette ble gjort er en gÄte. Den fullstendige listen over feil kan imidlertid lastes ned gratis og uten SMS fra devsenter.

Forresten, noen ganger finner man ogsÄ andre prefikser, ikke bare 0x8007. I en sÄ trist situasjon, for Ä forstÄ HRESULT ("result handle"), mÄ man gÄ enda dypere inn i dokumentasjonen for utviklere. I det daglige vil jeg ikke anbefale Ä gjÞre dette, men hvis du plutselig blir presset mot veggen eller bare er nysgjerrig, vet du nÄ hva du skal gjÞre.

Men gutta i Microsoft har vÊrt litt snille mot oss og har presentert en verktÞy ERR. Dette er et lite stykke konsolllykke, som kan oversette feilkoder til menneskelig sprÄk uten Ä bruke Google. Det fungerer omtrent slik.

C:UsersrootDesktop>err.exe 0x54f
# for hex 0x54f / decimal 1359
  ERROR_INTERNAL_ERROR                                           winerror.h
# En intern feil oppstod.
# som en HRESULT: Alvorlighetsgrad: SUKSESS (0), FAGNULL (0x0), Kode 0x54f
# for hex 0x54f / decimal 1359
  ERROR_INTERNAL_ERROR                                           winerror.h
# En intern feil oppstod.
# 2 treff funnet for "0x54f"

Det oppstÄr et legitimt spÞrsmÄl: hvorfor skriver vi ikke straks avkodingen inn i loggene, men lar disse mystiske kodene vÊre? Svaret ligger i tredjepartsapplikasjoner. NÄr du selv kaller en WinAPI-funksjon, er det ikke vanskelig Ä dekode svaret, ettersom det til og med finnes et eget spesiallagt WinAPI-anrop for dette. Men som allerede nevnt, fÄr vÄre logger inn alt som kommer tilbake i svarene vÄre. Og her mÄtte dekoding konstant overvÄkes, for Ä plukke ut biter med Windows-feil, dekode dem og sette dem tilbake. La oss vÊre Êrlige, det er ikke den mest spennende oppgaven.

Windows File Management API bruken av dette i filbehandling er allsidig. Oppretting av filer, sletting, Äpning for skriving, arbeid med attributter, og sÄ videre.

Den nevnte PowerShell Direct som et alternativ til VIX API i Hyper-V. Dessverre ikke sÄ fleksibel: mange begrensninger i funksjonaliteten, fungerer ikke med hver versjon av verten og langt fra med alle gjester.

RPC (Remote Procedure Call) Jeg tror ikke det finnes noen med erfaring fra Windows som ikke har sett feil relatert til RPC. Til tross for en vanlig misforstÄelse, er det ikke et enkelt protokoll, men enhver klient-server-protokoll som oppfyller en rekke kriterier. Men hvis vi ser en RPC-feil i loggene vÄre, er det i 90% av tilfellene en feil fra Microsoft RPC, som er en del av DCOM (Distributed Component Object Model). Det finnes et stort antall dokumenter om dette emnet pÄ nettet, men mye av det er ganske utdaterte. Hvis det er et sterkt Þnske om Ä lÊre mer, kan jeg anbefale artikler Hva er RPC?, Hvordan RPC fungerer og en lang liste av RPC-feil.

De viktigste Ärsakene til RPC-feil i loggene vÄre er mislykkede forsÞk pÄ interaksjon mellom VBR-komponenter (server > proxy, for eksempel), og oftest pÄ grunn av kommunikasjonsproblemer.

Toppen av alle topper er feilen The RPC server is unavailable (1722). For Ă„ si det enkelt, klarte ikke klienten Ă„ opprette en forbindelse med serveren. Hvordan og hvorfor — det finnes ikke noe entydig svar, men vanligvis skyldes det autentiseringsproblemer eller nettverksadgang til port 135. Det er karakteristisk for infrastruktur med dynamisk tildeling av porter. Det er til og med en egen KB. Og hos Microsoft — en omfattende guide for Ă„ finne Ă„rsakene til feilen.

Den nest mest populÊre feilen: There are no more endpoints available from the endpoint mapper (1753). RPC-klienten eller serveren klarte ikke Ä tildele seg en port. Dette skjer vanligvis nÄr serveren (i vÄrt tilfelle gjeste-maskinen) var konfigurert for dynamisk tildeling av porter fra et smalt omrÄde som tok slutt. Hvis vi ser fra klientens side (i vÄrt tilfelle VBR-serveren), betyr det at vÄr VeeamVssAgent enten ikke startet eller ikke ble registrert som RPC-grensesnitt. Det finnes ogsÄ en egen KB.

Og for Ä avslutte Topp-3 RPC-feilene, la oss huske RPC function call failed (1726). Dette skjer hvis forbindelsen ble opprettet, men RPC-forespÞrslene blir ikke behandlet. For eksempel, vi ber om informasjon om VSS-status (hvis det tilfeldigvis blir laget skyggkopi akkurat nÄ, og vi prÞver Ä fÄ tilgang), men i svaret fÄr vi stillhet og ignoreres.

Windows Tape Backup API er nÞdvendig for Ä arbeide med bÄndbiblioteker eller stasjoner. Som jeg nevnte i begynnelsen: Ä skrive egne drivere og slite med Ä stÞtte hver enhet gir oss ingen glede. Derfor har Veeam ingen egne drivere. Alt skjer via standard API, som stÞttes av maskinvareleverandÞrene selv. Det er jo mye mer logisk, ikke sant?

SMB/CIFS Alle skriver dem som vanlig sammen, selv om ikke alle husker at CIFS (Common Internet File System) bare er en privat versjon av SMB (Server Message Block). SÄ det er egentlig ikke noe galt med Ä generalisere disse begrepene. Samba er allerede en Linux/Unix-implementering, og der er det spesifikke detaljer, men jeg kom litt ut av temaet. Hva som er viktig her: nÄr Veeam ber om Ä skrive noe via UNC-sti (serverdirectory), bruker serveren hierarkiet av filsystemdrivere, inkludert mup og mrxsmb, for Ä skrive til delingen. FÞlgelig vil ogsÄ feil bli generert av disse driverne.

Kan ikke klare seg uten Winsock API. Hvis noe skal gjÞres over nettverket, fungerer VBR gjennom Windows Socket API, kjent som Winsock. SÄ hvis vi ser i loggen en kobling mellom IP:Port, sÄ er det dette. Den offisielle dokumentasjonen har en ganske god liste over mulige feil.

Den nevnte WMI (Windows Management Instrumentation) er et sÄkalt allmektig API for Ä administrere alt og alle i Windows-verdenen. For eksempel skjer nesten alle forespÞrslene til verten nÄr man arbeider med Hyper-V nettopp via dette. Med andre ord, en helt uunnvÊrlig ting og veldig kraftig i sine muligheter. I forsÞk pÄ Ä hjelpe med Ä finne ut hvor og hva som har blitt Þdelagt, er det innebygde verktÞyet WBEMtest.exe til stor hjelp.

Og den siste pĂ„ listen, men absolutt ikke den minste i betydning — VSS (Volume Shadow Storage). Temaet er like uendelig og mystisk som det er skrevet mye dokumentasjon om. Shadow Copy kan enklest forstĂ„s som en spesiell type snapshot, som det i bunn og grunn er. Takket vĂŠre det er det mulig Ă„ lage applikasjonskonsistente sikkerhetskopier i VMware, og i Hyper-V nesten alt. Jeg har planer om Ă„ lage en egen artikkel med en slags oppsummering om VSS, men inntil videre kan du prĂžve Ă„ lese denne beskrivelsen. VĂŠr forsiktig, da et forsĂžk pĂ„ Ă„ forstĂ„ VSS i en fei kan fĂžre til hodeskader.

PÄ dette punktet kan vi kanskje stoppe. Jeg anser oppgaven med Ä forklare de mest grunnleggende tingene som fullfÞrt, sÄ i neste kapittel vil vi se pÄ loggene. Men hvis du har spÞrsmÄl, ikke nÞl med Ä komme med dem i kommentarfeltet.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster