Django Silk: Hodvábne hladké profilovanie pre Django
Hodváb
Silk je živý nástroj na profilovanie a kontrolu pre rámec Django. Silk zachytáva a ukladá požiadavky HTTP a databázové dotazy predtým, ako ich zobrazí v používateľskom rozhraní na ďalšiu kontrolu:
Obsah
Požiadavky
Hodváb bol testovaný s:
- Django: 2,2, 3,2, 4,0
- Python: 3.7, 3.8, 3.9, 3.10
Inštalácia
Cez pip do |_+_|:
|_+_|
V |_+_| pridajte nasledovné:
|_+_|
Poznámka: Umiestnenie midlvéru je citlivé. Ak middleware pred |_+_| návraty z |_+_| potom |_+_| nikdy nedostane príležitosť na vykonanie. Preto sa musíte uistiť, že žiadny middleware umiestnený predtým nikdy nevráti nič z |_+_|. Viac informácií nájdete v dokumentoch django.
Poznámka: Ak používate |_+_|, umiestnite to predtým |_+_|, inak sa zobrazí chyba kódovania.
Ak chcete použiť vlastný middleware, vyvinuli ste napríklad podtriedu |_+_|, takže môžete použiť túto kombináciu nastavení:
|_+_|Ak chcete povoliť prístup k používateľskému rozhraniu, pridajte do svojho |_+_|:
|_+_|pred spustením migrácie:
|_+_|Silk automaticky začne zachytávať žiadosti a v prípade potreby môžete pokračovať v pridávaní profilovania. Používateľské rozhranie je dostupné na adrese |_+_|
Alternatívna inštalácia
Prostredníctvom značiek github:
|_+_|Môžete nainštalovať z master pomocou nasledujúceho, ale uvedomte si, že verzia v master nemusí fungovať pre všetky verzie uvedené v požiadavky
|_+_|Vlastnosti
Hodváb pozostáva predovšetkým z:
- Middleware na zachytávanie požiadaviek/odpovedí
- Obal okolo vykonávania SQL na profilovanie databázových dotazov
- Kontextový manažér/dekorátor na profilovanie blokov kódu a funkcií manuálne alebo dynamicky.
- Používateľské rozhranie na kontrolu a vizualizáciu vyššie uvedeného.
Požiadať o kontrolu
Middleware Silk zachytáva a ukladá požiadavky a odpovede v nakonfigurovanej databáze. Tieto požiadavky je potom možné filtrovať a kontrolovať pomocou používateľského rozhrania Silk prostredníctvom prehľadu požiadaviek:
Zaznamenáva veci ako:
- Čas potrebný
- Num. otázky
- Čas strávený otázkami
- Hlavičky požiadavky/odpovede
- Orgány žiadosti/odpovede
a tak ďalej.
Ďalšie podrobnosti o každej žiadosti sú dostupné aj po kliknutí na príslušnú žiadosť:
SQL inšpekcia
Silk tiež zachytáva SQL dotazy, ktoré sú generované každou požiadavkou. Môžeme získať súhrn vecí, ako sú zahrnuté tabuľky, počet spojení a čas vykonania (tabuľku je možné zoradiť kliknutím na hlavičku stĺpca):
ako kúpiť pilier
Pred ponorením sa do sledovania zásobníka, aby ste zistili, odkiaľ táto požiadavka pochádza:
Profilovanie
Zapnite nastavenie SILKY_PYTHON_PROFILER, aby ste mohli používať vstavaný profiler cProfile Pythonu. Každá požiadavka bude samostatne profilovaná a výstup profilera bude dostupný na stránke Profilovanie požiadavky v používateľskom rozhraní Silk.
|_+_|Ak by ste chceli vygenerovať aj binárne |_+_| súbor nastaviť nasledovne:
|_+_|Keď je táto možnosť povolená, na stránke s podrobnosťami profilu sa zobrazí grafová vizualizácia vygenerovaná pomocou gprof2dot a viz.js:
Pre uložený vygenerovaný binárny súbor |_+_| možno použiť vlastnú triedu úložiska súbory:
|_+_|Predvolená trieda úložiska je |_+_| a pri jej použití môžete zadať cestu podľa vlastného výberu. Musíte sa uistiť, že zadaný adresár existuje.
|_+_|Sprístupní sa tlačidlo sťahovania s binárnym |_+_| súbor pre každú žiadosť. Tento súbor je možné použiť na ďalšiu analýzu pomocou snakeviz alebo iných nástrojov cProfile
Hodváb možno použiť aj na profilovanie špecifických blokov kódu/funkcií. Na tento účel poskytuje dekoratér a kontextový manažér.
Napríklad:
|_+_|Vždy, keď si pozriete blogový príspevok, dostaneme záznam v používateľskom rozhraní Silk:
Hodvábne profilovanie poskytuje nielen čas vykonania, ale tiež zhromažďuje dotazy SQL vykonané v rámci bloku rovnakým spôsobom ako pri požiadavkách:
Dekoratér
Hodvábny dekoratér je možné aplikovať na funkcie aj metódy
|_+_|Kontextový manažér
Použitie kontextového manažéra znamená, že môžeme k názvu pridať ďalší kontext, ktorý môže byť užitočný na zúženie pomalosti na konkrétne záznamy databázy.
|_+_|Dynamické profilovanie
Jednou z najzaujímavejších funkcií Silku je dynamické profilovanie. Ak by sme napríklad chceli profilovať funkciu v závislosti, ku ktorej máme prístup len na čítanie (napr. systémové knižnice pythonu vlastnené rootom), môžeme pridať do |_+_| ak chcete použiť dekoratér za behu:
|_+_|čo je zhruba ekvivalentné:
|_+_|Nižšie sú zhrnuté možnosti:
|_+_|Všimnite si, že dynamické profilovanie sa správa podobným spôsobom ako modelový rámec python v tom, že upravujeme funkciu na mieste, napr.
|_+_|,vyprofilovali by sme |_+_| dynamickým zdobením |_+_| na rozdiel od |_+_|:
kde kúpiť dgb|_+_|
Ak by sme použili dynamický profil na zdrojový modul funkcií |_+_| po už bol importovaný, nespustí sa žiadne profilovanie.
Vlastná logika pre profilovanie
Niekedy možno budete chcieť dynamicky ovládať, kedy sa profilovač spustí. Môžete si napísať vlastnú logiku, kedy povoliť profilovač. Ak to chcete urobiť, pridajte do svojho |_+_|:
Toto nastavenie sa vzájomne vylučuje so SILKY_PYTHON_PROFILER a použije sa nad ním, ak existuje. Bude fungovať so SILKY_DYNAMIC_PROFILING.
|_+_|Môžete tiež použiť |_+_|.
|_+_|Generovanie kódu
Silk v súčasnosti generuje dva bity kódu na požiadavku:
Obe sú určené na použitie pri opakovanom prehrávaní požiadavky. Príkaz curl je možné použiť na prehrávanie cez príkazový riadok a kód pythonu možno použiť v rámci testu jednotky Django alebo jednoducho ako samostatný skript.
Konfigurácia
Autentifikácia/Autorizácia
V predvolenom nastavení má ktokoľvek prístup k používateľskému rozhraniu Silk tak, že prejde na |_+_|. Ak chcete povoliť váš backend auth Django, vložte do |_+_| toto:
|_+_|Ak |_+_| je |_+_|, v predvolenom nastavení bude Silk autorizovať používateľov iba s |_+_| atribút nastavený na |_+_|.
Môžete to prispôsobiť pomocou nasledujúceho v |_+_|:
|_+_|Môžete tiež použiť |_+_|.
|_+_|Orgány žiadosti/odpovede
V predvolenom nastavení Silk uloží telo požiadavky a odpovede pre každú požiadavku na budúce prezeranie bez ohľadu na to, aké veľké sú. Ak sa hodváb používa vo výrobe vo veľkých objemoch s veľkými telami, môže to mať obrovský vplyv na výkon v priestore a čase. Toto správanie je možné nakonfigurovať pomocou nasledujúcich možností:
|_+_|Meta-profilovanie
Niekedy je užitočné vidieť, aký vplyv má Silk na čas požiadavky/reakcie. Ak to chcete urobiť, pridajte do svojho |_+_|:
|_+_|Silk potom na konci každej požiadavky zaznamená, ako dlho trvá uloženie všetkého do databázy:
Všimnite si, že na obrázku vyššie to znamená, že požiadavka trvala 29 ms (22 ms od Djanga a 7 ms od Silk)
Zaznamenávanie časti žiadostí
Na stránkach s vysokým zaťažením môže byť užitočné zaznamenať iba zlomok uskutočnených požiadaviek. Ak to chcete urobiť, pridajte do svojho |_+_|:
Poznámka: Toto nastavenie sa vzájomne vylučuje s SILKY_INTERCEPT_FUNC.
|_+_|Vlastná logika pre požiadavky na nahrávanie
Na stránkach s vysokým zaťažením môže byť tiež užitočné napísať si vlastnú logiku, kedy zachytiť požiadavky. Ak to chcete urobiť, pridajte do svojho |_+_|:
Poznámka: Toto nastavenie sa vzájomne vylučuje s SILKY_INTERCEPT_PERCENT.
|_+_|Môžete tiež použiť |_+_|.
|_+_|Obmedzenie údajov požiadaviek/odpovedí
Aby ste sa uistili, že hodvábne odpadky zhromažďujú staré údaje požiadaviek/odpovedí, možno nastaviť varnú konfiguráciu na obmedzenie počtu riadkov požiadaviek/odpovedí, ktoré ukladá.
|_+_|Zhromažďovanie odpadu sa spúšťa iba pri percentách požiadaviek na zníženie réžie. Dá sa upraviť pomocou tejto konfigurácie:
|_+_|Povoliť analýzu dopytov
Ak chcete povoliť analýzu dotazov, keď je podporovaná dbms, môžete nastaviť varnú konfiguráciu na vykonávanie dotazov pomocou funkcií analýzy.
|_+_|Maskovanie citlivých údajov na tele žiadosti
V predvolenom nastavení Silk filtruje hodnoty, ktoré obsahujú nasledujúce kľúče (nerozlišujú sa malé a veľké písmená)
|_+_|Niekedy však možno budete chcieť mať svoje vlastné citlivé kľúčové slová, potom je možné konfiguráciu vyššie upraviť
|_+_|Vymazanie zaznamenaných údajov
Príkaz správy vymaže všetky zaznamenané údaje:
|_+_|Prispievanie
Toto je projekt Jazzbandu. Prispievaním súhlasíte s dodržiavaním Kódexu správania prispievateľa a dodržiavaním pokynov.
Vývojové prostredie
Silk predstavuje projekt s názvom |_+_| ktoré možno použiť na |_+_| rozvoj. Má |_+_| kód symbolicky prepojený, takže môžete pracovať na vzorke |_+_| a na |_+_| balík v rovnakom čase.
Aby ste mohli nastaviť lokálny vývoj, mali by ste najprv nainštalovať všetky závislosti pre test |_+_|. Od koreňa |_+_| adresár:
|_+_|Budete tiež musieť nainštalovať závislosti |_+_|. Z koreňového adresára git:
|_+_|V tomto bode by malo mať vaše virtuálne prostredie všetko, čo potrebuje na spustenie ukážky |_+_| a |_+_| úspešne.
Pred spustením musíte nastaviť |_+_| a |_+_| premenné prostredia:
|_+_|Pre ostatné kombinácie zaškrtnite |_+_| .
Teraz od koreňa vzorky |_+_| použiť migrácie
|_+_|Teraz od koreňa vzorky |_+_| adresár spustí server django
|_+_|Spustenie testov
|_+_|Šťastné profilovanie!
Autor: jazzband
Zdrojový kód: https://github.com/jazzband/django-silk
Licencia: Licencia MIT
#django