From e30266a3be39fae3768c273e664ec9a6d2e2df23 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Tue, 24 Dec 2024 00:05:20 +0100 Subject: [PATCH 01/20] Distributed tracing in networking --- .../core/diagnostics/media/aspire-starter.png | Bin 0 -> 39016 bytes .../media/aspire-connection_setup-thumb.png | Bin 0 -> 40116 bytes .../media/aspire-connection_setup.png | Bin 0 -> 44599 bytes .../media/aspire-httpclient-get-thumb.png | Bin 0 -> 38190 bytes .../telemetry/media/aspire-httpclient-get.png | Bin 0 -> 97392 bytes .../telemetry/media/aspire-metrics-thumb.png | Bin 0 -> 39268 bytes .../telemetry/media/aspire-metrics.png | Bin 0 -> 103107 bytes .../telemetry/media/aspire-starter.png | Bin 0 -> 39016 bytes .../networking/telemetry/metrics.md | 135 ++++++++------- .../networking/telemetry/overview.md | 5 +- ...nnectionTracingDemo.ServiceDefaults.csproj | 22 +++ .../Extensions.cs | 125 ++++++++++++++ .../networking/telemetry/tracing.md | 158 ++++++++++++++++++ docs/fundamentals/toc.yml | 3 + 14 files changed, 382 insertions(+), 66 deletions(-) create mode 100644 docs/core/diagnostics/media/aspire-starter.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-connection_setup-thumb.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-connection_setup.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-httpclient-get-thumb.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-httpclient-get.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-metrics-thumb.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-metrics.png create mode 100644 docs/fundamentals/networking/telemetry/media/aspire-starter.png create mode 100644 docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/ConnectionTracingDemo.ServiceDefaults.csproj create mode 100644 docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs create mode 100644 docs/fundamentals/networking/telemetry/tracing.md diff --git a/docs/core/diagnostics/media/aspire-starter.png b/docs/core/diagnostics/media/aspire-starter.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2ed3247447892f882db87f9bf8cfc5df6c341a GIT binary patch literal 39016 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 literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/media/aspire-connection_setup-thumb.png b/docs/fundamentals/networking/telemetry/media/aspire-connection_setup-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfb650cb0e0e2b2fb447d17e0bc29e14ad8b0ea GIT binary patch literal 40116 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

bo8*{fU4;_K4?y zPi)ich(qTAI{N`f$Z61y&IcAL4RC53j`BE-^l@?fXz0E7mEH9tYz05laU}HfW5@9k z)a^M*Q}5T#?t2YAE$HJ*$f(={jhbF1-uTpr%_tKlZ$3liF4Z@x=t7+QDrG90Y$6!` zCh+s-^fhk{crt9e3lbSRyY#0X@3z0)e1mt)LH^;?&iU0>?lqB%rRV7q&(Lr39N;pT zx3@frkBY@Ie)F@~qVD~!RmW!Bcly1jLN;_frPy*4E1A{dv;v>icLqB$@5Bavn2n41 zzJ;Gd20jAv4@p+IxuPCiE~%xgwL7D=U zj9`~`E7ohd4io}e6br5N!4tTzRVm|wW@+Sz>7c_R9oB+lUfe&D8KGX;lS2h@0M-I_ z38F}kK9fUFo?MX#vBE1>>=X!@16C*mEW;Qnmivxe4=X%+)v5)mAzgd!46A)PSY3e2 zadY*I`zdEALy&VMsX*W~w9SEhSsW1jx1&Sc-vLDJ-fCS6RLiDbH+rg5w60W(nejyt))qv_H0MGOe7qSei7Ay3MM^mMJY5UU4bFv5f^3D!i;{E8H9Y&xouo z$X`na@V@bE(`%C$85#Y;)7N9d%^Fm+C&2|6s%Ngad7#VfGU zj3EH8%gg+{+Xo-t{#lLVpA%hRgK`DPi`KXQN7GshW2|hE_iTjIpGh_r3 z+AwdJdlDok_iw-v>fM3S@<~*2#S9pPV z+paP%KF7|L7D#jZYui`}cCXiXzvW!o@bzg?+ONC$E>j~fL``Eh#zZk^3KD%P%Y+s4 z%N`x@iDZ6mR(<5#@>g!Sq^UK17v$ z19V`vz?? z%DMZdyQ9}k{QSx{^FM0evSs~8`erB3~N?~T(WByYQVji`l4E3MNkg%w6m?CGq{{oEv zF92_*-B-!y-tdiBKzc(gU|P1Fl36%v;GHCx=L|9w4>lw#%IAh?d*6fvM$~75fzKlQ zXjM&F`Li_0Cx@GXCXv20X$M|dOrVAReA@*ksxeEkU4d?g057sSHM($+5-|zpyDRap z&?zGt**UD~#`Br$ZH!UZ8Yem4IYd%sZ8SW&B9s}tw0m`UALvG>lM_bc1`BNT^chc? z@GQ9LZoDy{by4rIPUUZgBj=UFMBn;|SbosZ%@x)x*+UoZV$Hy+S3+z0p$mn1Kg5xuu?oX8;53#a3qe^Fe{UmzTYc2h3Ct8d-M5kZF zza(@hWG~mn6LYX+fLDKC!m!+Cb6c7?NZC2sZ&rb&c~pgb=FTg539#cQdP;%zlP~`B z>4uf{f*vg`vN+hyPS-fsCLd_c7MDx*_dSOjC&=YTWqR&l{@-?I>^zuK3K_z#MRG_b zznIk?PgBo|hK&S$6;Nn@&wMY)X?kd@(eL4P9a2=2ia=b8(S|&12iE#6rVTdN^$0RW zt+u!*+5(xVm|bVz2>N?n7TiM`9yn`sfs6apNlnxfxqO?_N;c~@Z5J!{LvOguhB<^- zjK_jkeT|N{L#I;#Lnm^1e72(t*Hq(QcwGI4JEipc;+9!jJeD0-8s^7bP-t{~j%uxg zKUh!uumK0)O~Zvh%_ww_xqOb-6}0zxs0_9(cN5|Au5(3RQ~svQX>XnJiE8zE9NeTR z#pTkL&@!VzOQDaJB_E{_PF?d&LUY&ov$sJMKboDJ2z?VD7& zybe@{i;<$OqIeY}qX;1-lLic$H3SW2m_K0{C!%E4ycHF{E7q&iCnkj{+r2DmO=u*k zpldq2J?3@GRq}ZqZoqy``f73kb@<4QQ@i@Tdpk>Sz6d)iCJMvxUCcJmBLeG94WdhE zX0zM;h&e4~1iA=!Dj%-k zM+}yr50zM99&hoqTeK6R^GL`gYy%%3?AL1;AvLaexXhQ5 z5`Xqv$zc%gS*7=zA|s%LJ^zTJ#aD^zNxK*V^gkad-kf^9}=*EMt)yqhubIUWm(&A#++sGSy3De0}}s&5%IVtU_fQ%FbWEsMbs&)4f3d?&ox@va?3jaW0rGCA;^BQ`+6ny)#gPnp}zZwEdK-? z+vmgz6aStKyx?jmEToX5o8Yh_nORox8(;LS+t5No#%*o{KLZ`Eu2B(?u8M=Ip{%!A zP6(9*u9p*7TdQoAhxf<=YbDJpHy#qo^WSdA{Qsgz%~DTB0~`ZRE6e5dP-%SKJc724 zYU;pwY_^-J^7XNaHo{LnJ(*I`J6~`WP^^@ohf%sI2uDdYv6afP!cd^txpDk^cMCu# zXv&0w95m3OurQ)QA?^AOC5l!gLAX#(aVZ1hKl>zb+~`;_+8&{aK;7z<>MyVGPjnU2 zq=DUy`Dp``VUZI#F+2YXz}DkGSsyB=-EeW;Lflbmye==5-|jEpap7E8IiVLDxBo&5 z!t}EiEJigJV2ISNgGp68Tp@3C-3f~wM^d$nuxPmK1XZJC3%t=<2(2Q73aU0{zO_le zY}1QA&i?u$V2OaR=w%>zV$3ORx}D2lHzz#5E%h;F}$1S`_yznK1+F6ezh zCM;;|2`!uVd+F%o@=;)lXa zW7feY+mW81k;K0lDF)ne`*oW3gqvKOAceM*_vyv-Dg8kJ&=RZSRNx=On}xW+59{U2ak3wSIBWfR3x_cDFW{{8c{Te8sn=p`@Lf ziu#KkGwT<-ir*b}&sFzvag*O@#&&5GW$v^{*IN%%44tht#GTxnPVy$Zkh4N5DF^%; znQWKSG}AO%b)+nYj_i#<Dr5`# z-n28OpUBYVH(A~MyS}z})0TX+ zrrRE#N)jeXI4E5u6dIbgBT;WJ0%dHfdY|hffjWL&pvJr6w}+^ophu=Dr?oG8%qHdoQhe=to-AeI)6TkL>*5Hdu8(*M5lv$!61s%y(I9 zds}^%s>Vhua2mYoTuE`DilaDjTI7S~PjNbbei}^NLBr%!w@BzzuZ)mmdpL ziVQL6B-O`*m|{`)44P@`8V_Cm$zKf)A@Rb2ssS=-L^*`gXVEPqodZP zdO$uEkgk@hS4DvUwRuVGVvRvZZ+B5q<#1kNo_3G#V%orIS@b~9Fp-pn`LUk7mi>ys zcio-z4B{dv(jxQVV&Hu)U=sx~?pA)J+w=w>@dL}|vuk)%k&82~*q-w#=6?}(PSKTh zQJaoYv29h1ie0g7r()Z-ZR5nYZQHhOr}Onici;S@FZLK~pN(_1)}HH~&wOX=Wl_5E zQIp42)bpeGXj;cfcu<_DiIJD=<84;3@5K96=X*NYJVZLovl7SAlx`|of7PZkYy#s% zUFv*;)BKhC@`lqe?Q*o#ZAj`>C9VOE}2E;wZd70^wTPv z+B9#j@B* zKm}B!LW{e!(_feU#n#$X`wdKdB@~N198s%Y|}a^u{?hcW9Xy9V(eX9{sE9b zK*Yp-34+riA#RSq+Rtpc+F2*?`OJ^z+Mm%`ZzH|#Rj=PFZk5ZhX}etk#Qt zrbh8TSGsvmS=oC5w+x6BrO|u&*IgeUpKN@ouEUFVj9t#uUXT9NikpXxaFc~@uj9$u ze>l0u&Q-o}^(=jzb2oJ|p`^oYabV#iMuDv{qG5na+o~67PRK9SlLYhMP|dbPZ`&3&tLD?xW6}5mn)mkIRo}YHteQBM;#5+ zBSs~=ZI_2<)SrhEd^-1s$h?^{jn&tRbe~_(=WV*FIX0H-wSmUlvy1XMy#1EBUxv1? z)UfxcOGmdK9~tK*>3NWc)BK*fB{972t>%3lE?(?@a$4tI?&D}MHO(0-ZVj-qy(}DjeEiUU2Pp5mm?_GT2s18PH zdQNM*(5I%ZX*3kioz&~~`h(>=sp=>m)(YmS*ZT?E{WaHbf_NGqK9G`%hHqM*i9UP< zdO5+GgPnX65*51$&Mt~4Sq$cYL5~biw%p7(&d0mdI7L(4cD>eSOSxPb5ha(+U_K2e zgF*S{Kl!yW8?QuF@)j>>!~1-2F1w9+Ci@AyK4T6KOb#?; zw$fpIzF^e6;j!&S0z&&Pp&=rZ&0%)80Pa8`Q5b(w>QJS|u3AQGW4hSix1foOJ``#8 zoZUZP)$){`k@7Oy`t^kVoqDl;)oSw<8rwMxV<+5m@fvYFoxPOaT|6$t_1LLoJ4EZU z&9~-~TT|Q4d(Hnc!tuQ6qblJ0D;21Udmr=Vw!V2jg~$F{x<0ePMElU{tZv}cMT*nC0MyWk zwOwiwTg%324G%X` zuv!`$Vn%9O1QI9`>b$P<`(Y8ItD0S>)@mx1G!j4^bD2!nM*W8lbD^Zwb{X{f!)?Ng z;B()vTp4WqJ&^C|>z0JeTkG-JBwFbaxnjSkh~TGw{mj<(Qf=AqaeL#r?+)WRMVHSd z5;Z|sFEzv2j=gwU|BKg;&g(jap1Z4cmcr+-oy5TN$?9_tU;~3-rR|Yh;k+MiWBvvy z)-b-mQF|3o-BrHb?Dklj9{jV$Y@QX7OJ(Ek_j^BY5p-9YZPqzUyBXZC5iFZcJT$yM zFRGx@-IafSgk)JOFdFwAB$f~cD``EhgcJ_DXg+s#-P*!k5%@Z(nX>tDWX|aR0A$pZ zYQiYtu^3&J<`q1(%!41*)h;X;$D4NtIFE;-OV(@c4$r}r?^OFkG**`8I`4-+6?pHn z0pOGTSbG>C(U0dIZ62aDFY|XP_)!lDoD-cyx22NkvT9$0Wmz8U#?si;dXQ6^oqs_< zT(?#h>4UIBMcZ)^8C`RdQ+YY4ndOYwEMl&^%_fq|qGpqF2_ z>VJ8e!l?8N71Ww%g{TBk@(l`*#noch^qT~OvY*8KtH;*0xn5T@7sMFkOQC=9X_TutJZy5-_7@3{e148-t~P`?O~zORP|Zg(dO8{t|q+#-d18J%0ds+k-$8@ z428m&R3TE)Vn9LBfHFK$qNM5wAIHF~q>`*pG)e|4t>uN&;&tlq+!<4wW~~ibOivvG z>n(@G2}-PPhJjfc`H2?~4N(u*lx0n;^085c*z%`HbRi|~PoFHM;%kU-ITj!QoC8?3 z7Z3|kED{_%W>`mvc4g1bV-=67+T?QB>En60^eoHm`6)FzZTX%97R$fxq`^eY%MDdr zAU=Bf2>};yW#sE1%MryR`gFl*9s<|EY-HTth%cz?N{q<(K!?G z=Y}5Gr&oD~h8FX_eY;nmpyxtwg2`kyuaUiiK#Lqy0%aj`dzGqz^QyEH%PTD1?S0Gx z9CQY&#nr>;{yuS^ZMZEbF77!U^$JEh@A*)ngWv((3=(FcnEXu6JX&y*Kk}^}Uiw|r z*29YAc$JRWTH|5kB+^TIJT|VDG*B_I{99Jt0%C^;R}2bdPvk>Gg`j`$Ugu zoKibBWcO12Twa%sD2`4>bhWX%{m3B5^w?}9QVFWcAg`knGR1p8^zHfH6MwS2F7p z5tOa?&$o8#$=1Iy1K!5{y2(uuRM`|VxM$_9L%YtRN;>=@K#JVT!&|;pc-hDGI64~` zuxM`1wbWNLu(7V=by?L)?$?L8?#}g&< z`Kze2@M9F~_QLn>?<}L@kybt7R;!(^S*UISCzJJ2W~(B3Oa$DMDul?k{q?8cQ;~ra zk2q0y_>zoiNjV_s0pa#pb(PslB}KCObpA}cgsR4gMt0<|%U;z%6Jcce(pZ4lZ{_9G z;Ycc*nTU5o^a{gioadR0-TW!p(O>y)28iFh*d-^W2Z(zCmKXrXLz~f*naX6BnBx;@ zqqkF#R&OGcm5Pc2J+C8al`we9YPz0L(UoV;(R&Xc0<#H*gnkQjQ^lR+N5=Z3wCyvP z#Q{?-elt8SF*X5jNbHTCO-4`%3v27t@CawyP+r)|%fzezFR4L6W7)D4|Ia~aC~8?Z z36W5+{m8%insS^`N=@R)>v?l6uDi5!*>}F_X-Y?~?=5)krY3f7?{k!+zPi&s8bLf@ z)z?`K{{m8hbf;{N{_M!(D#k_ilG+>;U!d_UcHnS4B}Otrew3`DI!A(%K%sdYSewBo z8Si&VSs8+?6togGKTUxY)~=|PT6bP6V0$+||HnZrUXgiG^cjz~qQW9fMg{?1VHt0G z_Eg2Vh#Y^r9#E=ikQWwb;E?8LZ6@T8V8voE_JH{?5x|e)*M8|#`56Z&E*=b8L_=Q_ z7uFSgji$w!>|*r0x_U-n^znFsAiz33vEq=o*~lwx&0*W3G@JQ) zC8(y)VB9-tdw$Us$g*Szp2?`D1W(5qHV~H{4{+HTyB$tee3> zUi&bEM2wl7Gu%|6OD~ySF@iA z=k;iC6Z+5b&1JFy;TTL7cgH7FpEN8&i@FBGD>;(rLM#RF#wl52n&$k>=OeDniFXp<;h#$ZJnQi!A}> zPK{-)rhC)1MW*|qbm?!1$iUB=UN1@xhhif#1+Z;-hlAH=m#J)y!g9y;bAs;~x|lpnlxj&wDSUTtFP$w*1+UBEl?&{V@BE>A2%y^XAbyToM}?T?_R z9@b-qLQz0Im~yq6sVcv@Vx`;W=w0GN$R^i*sF&x=PjMfCoq@K#x`dRGTBTC{@1MZ4 z&AOb9wt=3PgM$Mz8Q0Tcit4gcQ9&Uq?sn~?Z5$R%DkJT(>aJHRrt7~2=d_C|j{4%4 zEKiM>3t#XAo%K4W^}O`6xw+u%QpqYTB!Z)ToP!gp?Z$5*BPTCcg`$a~(Q=ye>r-~S z{C`h%M&i4F6}DR4-gif4Y(plolhRMAjW{*d1mg7z$^4FJt(4KoQ^prsZJwV#8=u_f zDc&ecbI3tWo6Os!5`EmYw3J$=qoXpY%gZN}9{SP@ybKkzrM=DCX-$;OCu=vAqwqL! zva-_vM-LFh%sh0Mlm3xL?`;J4RM?C1>L~T|?Pd36?vUwYzuGO&sH;=aNXecrR#w+G zEldgl_QQ5>&fLtD)Ci$f)V%cziMTp9+0zw^aW_lj~1`XwO5^?y0)M90-Fg!WQ# z&}B$k?>G0~c=iq)u0ZtMK`9`PY^GlXBsm=oat=vrz|gaoAqXHgoN<#CPq0{~4(9Nqw69h0EvD?RK2w*+=sXd*tls^oH&AjL9>@fg+o00O5 z$jzplaCRn;{=Bd6DE<=s3}pirm|I7fsUE^C=xslJ2m>ktu<6?Q6cp)S=2(9!p=o)3 z6CT+C!I&8bnCxK+v3QVSq>+&A9TRlk^hg_NX4fqkl zoQ)9y{E>uQzjrS?dr(MWev^p-cWmzh4}dK&$tv)Z2m1W87W6#=3RT8f{nDFrvZmDrRKQ@TFSE9E&Q#vc~Oi)QR&rC`hMtI!mxXJQ8+ns)0CG$_?iF<~KBD z6g3~o#Z(j8+z%`tx{G)>4jWTWFz=0p+0!iWTCQE zJP`v%P0B@kMq%-L9_79gz^8vZtGK2EWvUQ;hI;Q2Ji5- zEM{Z7aA#OlTrGuzrS_=uZC*J&oB{>G>eCgv8QmEz3oeAZX@aur3o2&sE5(}D-W7K( zyVLoA=-iLsIpgZb+{NYLLbP%_!(cp#)VbY62bWTw0pg|@$-M>GG|9krsOukX~0MRe8 z0ki+ti!^i|IAVDGs~+dat@P>VLZ~88xyNpX+kbe<-ZR|)L0IasTzV~V+W1H~?TCXx zz2>!EMnVt~?M8uzp|3+`iC~%fW(8dZ^io^6O@R295}1TW_w>3=f%1Alupp2EWy42N zumg`HUVj4!v6aAp{g26t5-1qm_>o*Ev#-BiAN?|KTfZdI9CBYf=~YN0#~u^@0`Nci zAKgvwU~L|>on-k-{-s$GzFm4?8M*$m zWFHG5p$6^_>gVJJRuY1WNVjDK@@!haQ~;*S=z19NOTvjZi5lIr^5XM;98H(zT7%Ql zF!xUsir>>(lHT^JbDwWANZK?jE#;MfhKeR`39#ti&@~ywPa{1*HhRMWrC}NoyWAIy zb2Yf_isAeAe!c<~vXv4rESX2a-l4VbdCC=20_?dAjATQKKBClOH%~Z4x4?XnWTUvur)*{e3&XeaVKZ zQjh{m{(xWf5vQ4FjzzE6cEb9PdWB5C@06+C9wuo2hM}FWRBvC#17~b$|6nN7XA=Lh zk^>R+s_e&S8du68_xBwYCIJhiOQI%8w$GD|)|Y5|nT9QLk!osy^mf;0`giK!j*qMi z3>+5Y>nKIG=fyNaF}U5Xot*?FASBMX@#z_1hUTa)qoEC$Eg%`BVtuxH@c{u-_IX2J z&N+!7ru~fEVU}0;V?~YNd5Waa;fR(&`QqE|ytgkvlge=+^&#+w8y{FhVUZSwWV@zr zd}y}XZZN;U%|2Chh_n*U@$M|@s=AP~TMv~dQC46E4|~A_Ha>B1zxvfGS*`wfd3Ao( zPC_)%-EPd2#w@M+@Tt4KZgpAuV!SC+ziRvMI$2irYATz1P|e}xa$0qnZDG_ae-984 zm{b@F1CE$H>;TDyhn$d^gq-D5Vz`BtFpl6QOG=xXmNm1ip)iBS@P`d}>8T*F0I#X4 zspyXU{6XD;1avX8zvk_Ik~;-s5tU#E4QU%AGjWNj7CRCY=p`+MEo8K+GD~Ke zEEb9hS$M_LuEvuH?#)M-;x;^)?;ZZM#CYn&D!(IHRrJm8nay7o{rw2s8*A4q-LLC= z@PeYsqi6J6=ZQl`gRhmZ51U?tPKSfECaVs|YA*arL!ZxD&xgm<@0F36ed^H&(vz+3 zr}?Mz!<8ByBc?^_?QRDXgFaqQ;$2SQ=q$HE$2rQ(mDQJX7av!W-7gnz4#qAv?{y7% z5iJ|Clpi@D(YthP7Wx66c9{TMb+O#Vk=h0lCZ`L6@4M&0-8ZK4x9RCF2CgA(-Pskb z#%ZLq`w+-)W@{zb@m#<^VJ%!lc23YV1NCU7iH@@vmh$bFV`>{qKDB6E+FtAc$Srx@ z)*l;4twGL6-=ixzr>M`K~Q1Nz}`=V0r2e&51RM^<9HQitPx&}#WM`uTE zcUgve10ncd^Ct~r@9*A+DB6IbZ~he#i#OvkJo*YkM5mcxxU3gvUPnQzLZ~oz5j{1 z)b&}J*{(Gg9Blw!{(7xlpZ@3BtMAa77I=ZBN)G4QtzWE}Ppo#_Tghk1qhegs`e``B zI*d}5O2{W6QVMV&@%JyZR~P%2IC*tq$~Fph>^o{V&i9pov>#)=7TOX?n1pCwH4JrU z;_8t@^g9rQ3mFTGHt%;M6$1;07_o97xbQqK<9%@V)Z?|=)2PX>43AkR#eu?)XzC#-hUamECt|-#)1#rd_GSx*m+T@PC1{Yv zCEW+MHRGZh6i$*#6Vd72J&m zpbb?m?S-#hO)ZUur?&($6#6VIhipYa`_GQe;?gC_(OiPb3y?*Q9~twv{4m_=?USa) z#y>?3i8WmTXp`J@GArE>JMs4woh>ybjrHYKO>;=;r`55L5F*SzndAn{tZsXbFis*Mjg3EJ|Df$bbM>hE{GHhIO@<{#x{U@G8b=hgP+A zc~J=RExY5%M?P-bA0)QH>Q7q9PU^vpUfLWVhk(H?PCefINDq4pwF=Hl7}nx|cybia>yrh@zNd zWNoGC=M_Nd;sEDJT6tXjXH9?#@VGMf@5vaCzFhHW*$mx&58*Np1j*l@&%`VAfIkk3 z%=Fpxzy0AYq{&ZH<ly>su{%aD6!?gVx#k<9aqBZ;FX_agX;>S(;Wj&_tlG^?|17 zf%oJE038H!47?8<>9NYcb#wWq{gC5&Bt6&nBGB$;^{bwqo`gGY6JsdjeZO>P&~Hcy zftVnb5r6p~gxI?|i4O#UidA-Z6TpTDc6;1k#wM3^@$iowPy|&HV}O zocmkKzzD_k7;bNy>hVt~?du!pGXD8FBq)d|4>nCv9}x}(LD**fd?kC!d@1y@S z0~URbH{~QF&*jlyNSR1!z7Mk)z1G#J{2VnUKG<3UYKGf~mw2X+;#>?Z5+b?w;RGrbcw%SaBVrNTH7suY>kTgLImC zSnis^+=cN)t93o9g+Bybx8xq59}9z0W`D}4>9Bfguura4OBd~L;T9#4^~}|i@n%j1 z1O)$TY^}gV>Y8udq66G!THe1LCQ5V*M05S=+G|_2Q_|zOA6AJ#3^K~b9UC}Zq~6@T zBTP>cFt*Nf!2a%VT9q%Jq7dMK1a;Jc_~K8CAsWx;@j-D9?TZl$VBW!!XQ}ktz~se6 zFtY~P0B3zvjmU!5`Pp6TwJ2w8e!>^K)*mVa1Poun-IO}AM`$%n;85%#gS=D{k=ixp zxVQES+@CPCNBC|pw7}?A{oSVMo4t)V31HV#cgx;qyjdc`W6EHL)AjV(`>82Q2GAea zVv46}Q1foveT-38Nkzv1?ZZF8nG=HLPOA&x=ds2d1~BO*t(A?p+`JSJ`q(~+?`rNM z(tFPRVuWLI?=phWAEC(`nfp+dP9LyHIhbPxjSJATVoeb!1)JNTgB(|^7&mvR4K;*K zQ9y297mo!)%zbzqG%en|A}$Q?;n%$Y@njmES1;}#(q}5%TlNt|QUjlOS>2l%ZffIH zR?-U9u;X=}A3d*s@+q+vK)l;aEw1 zaSdC)d0elSLrKx$v9`>uZYb}Zl-QTAwKI>OhsU(bUd*5&ievQSwbv^tYR6OXaQ{^i z{XljvI#1!^4V8_v($Q$U)%V&ZQCE6oo5N#l*pXk^+S;Mc<+KKdMpnDthJag!%jc%y z7)^5YRisE{5(x3eD!oI&kMFSA-fj-7o{SyppoBn*JDgiaiJ9nMhPIOePL;~Pe zfA#e>z?yNe1%$aT1)#?8H|r=JHzF5oeQY#C+Z;69PL7}6hK#hmc6Y8l_Jy9 zP5<3S-(|^mHb(cqcHrS~K{!&tUsRZ0l~J#BU+Q7WN^nWs-T$J}FqiClF>mZWYtobk z{p3s->~L9JzV?2QmUgHvs&#yQ#%Xu=c&d1N5_5yJx$u0{rN^(dq}%FtyUZ3~n_R)A z+xOktbzII~@hK=Mt*e!Y#5ieu_|pwR*I*Yi4AeVQZS)TsEMpV zFfT4D<6)CDK!YtWt1PoLJv26>9$+*&K2d)5gLt8FA3rS=1+2X!G`8}Mh`Sc)aVq?lYagJ)mclc6S2WtBTq>r+>FRL4gV9 z9fDk1TUC@-m9nvGWm6t#A%=(P9{@h*nb*`14%*fHg=lE7bi8x-u6 zBCE@lr>D-wA!}`I9*rGTGnLzRB~#nO!+c`eT1rQ@EsLXO_vrLpXKy%jpfp(!&m$Kb z6`71A@c{KHp7SEE6k1$|gPGnRc*}9nKZtGHS^8_Y-xwl7EW73)Jcv!VxuLi&`XK_7 zgV^DtKs?TGBUt+V1JrAgmniG-)k~##f?(r5Xj#ikI<*lXTh3*lf0w>)qgi7+%c3fM zJk_EZp=BJ=R9BbZk>62O3yNO90}k2~g!cy5_2<_;=5!kz=-ScJR7r`Pt#7Xhn;0Oj!t4>LZdN zT0AVqHQu;Q=K4tUPD?5*>w`nUb~4*(zA;H)4B?^%AHDt(=@StVAuoC7*Q64WMQ;_| zE%8cQsC#FTbJH{&4a8X|fF^_BL&RcgDmre6Q3ZIFkc32YVKz`WTYo5}|8%pVV{yG? zj~4GE$=~1K^Z!)teu~DQMyZ=PSlRp7SLr^%O0b8K!6gAn@cJEm0~Zq!9WIOWJ;F0? zhi_cV?V(9%|Rhe;%}R2vLZMbXdXXi?=0>( zKNex!uBA+=EUpq>%3V*+7a|>nT~c=-v0HKyB4)qZMaP6Lou57OtGW%-Z6XsPBO@gT zB?l`ftogG@4mkTXJBydsSZo91X`E?$z>cP-hN6O~P;iLQYx!C`q{3Xh0ASz$^Mp5w zgNB!bm7JK9Txi**pHf)DUBlI}C0?&BW9@;}!Y3y-&g)%b?EIYim*iSn;D}su(Wbwqbi3AwWRa&m z)1J#E&&<|rnv1Kh>zJAkw3;0o@vlvLM?YzJIm!&|^b6<1P}?6*C@CbV?ky4Ig7MRb zjSEK(OH`~>r0{DlmAS3C8lQRmg`QGxO2>pl+aRE{#K59i+~Io$hg{!S@J(M~G<)1q zDe-Zs=m`D}0i)a8Twfil>cuN&jtyYm`0Q-&5Otddq2hOW{c5wjBO5bka7ktgte7$7FX zp@_F!y`z7W^e13$w6gFR7T{!-Av>|5WRu2?g#+F8LI{&a`jLqhMG7Ea-hzT6vE#DK zo^BW0Za8?^dMd)NBx0qdpc3oV zHFzsEj20tBbkYh&JuN5RaSzMm&f>s z#cC9up2~p>2fs>YXto{v%DE}|JvX~;WykdxymRo-GQ&@ZPs1w3-qovr%ZP+0{piJM zF_g;ahuoE)&&$lz)?5psD5^K~g#QN%?J9;dW*-jpEy=iiy1J8$WY51ZSiiX}3D5cs zYSK5{)j(K_2?)3lc>uNXU-_anc>Q@)SIx^HJtGTFBv#Pj&f3@D_BCIty2%7MyKtNy zac@8{&`X9M>1>!^9|%E*Ix3&54T@WH-+sIv10jEW!OaMS(y3b|v=MMf((r6p0FC<{ zSaBdmZmb&#)NeTBvG>$)IhMdYvxf($d_N>s%#I-_a|qYI0DdF+#*rC7u|%$&A!kqs zyX?5HDc7Ms8jytW!X5X)PdpU{%Hm&w_f+tU1~OMw;JTxjL_lODgp=;TmjUsYeBYXY ztNp{o8dSW?IyN@8HVta8fr5g7Cu%I@8R}G}aMG{9TnRrVM?^Y9Fgrw7t6nDkAh)JM+#RpPIcG`FYql|mJ<6B-**>TEh0)@4Z_S~)$3&N*X z+N|K_`_c*DtiXnUsJhNXW_$MnX~BL7>__kOsH{`K(dP1%QXNiGhGB$BApvDO%r}TK z{tiQp>_UA1<9j-0eqmDJ{UuS#VE2X1|F?a!YWT)#v(r69kr_V)+Z123B$=%>)j0ic zv$T-bKOl_Jlpd3k11?&br+=5WUrhV(K$Eu{aiE#g@ASmpg0Oa97-?p`;G*S_*N^m& z%qI1#AD&)5>ixuY==_Y#8kN;CF|PbiWH8A_jh~;p7`MI`x|SQl9|(O08(yBCLj87T zAQ!?uKHVCX=uz)vFbr3OBtHkO%>sC^tB=%w4c_RG>5c}dv0Z*zy@j^G68+DETO1r0 zvpdb z(QXT<$gf847lzN5j}P4%R|N4_%8h1M9u-mOKzkNc6~PZ!fc*3g2*94?#4V z_8{Y@XY+Jv<5`AJbD$soH60l{6Au;WYrGmACsf;0@DVxW7;dp<`}7!6hVhCL8fIUX z2Z+_jvCDSFB&DWs`DX(0AX6gUD;WLI}9Lu z#Shm9i6K9mx5nMwTaduMw7yFI7z2NoRD+8k!$F!KL+xIlyDhkcfE}EtT=!MKbfUg| zK>kbDo&ZF)ee=ZQ3hc)gjxpN^E4W`Q?B-LqrN=Hj9#N(}%GkA3iaam&{m>bk#hsj! z3Dfjm#o?E2w%w!IV_qE6fg7x0>VlKr$O@ieqvsPOW6Vrii@H3b5!+~)*a zU(c?HL-6z2F>oUs+f|P!*Latf_P0nk{@RoGr_Mk%XbtKxTOm1ZWHh^zibxI~8n0LQ zk?Rg41A$lTLIxBaAFzBMhTyEbDqyxmiE6e*x31-7==0!t0P=`CX25`)Zaq$*5&hXXXkZkk0K}$arSA6dD=2;mksJP&M8`XdRf7fIh__y;?c18 z3Gpqn3_!QPf{-W5`r%pFrO0u}lzl0Ku?EeV)h?{PGy_Nod1;AvNE_LE*I>DvFZ2#2 z3``Ugmay^Amb5)Q2dBd00CS0?x;nN!L@`6KaEEZ%A!hu?1APG>J$-9Zw4&jSX{C&M zH+qKth&;-DxB=u0xW~B39UXJ2iH4;NIe+2BAoV>64RO|d{joPh5%BI{WS0xNG)^>H)32?p7J*SWqNi-oy+I14f-yC<9FCt@>x7UMp-Ix zqt$5H8ZfA$>YiH>AszL|(PiObR?fpgPUy4Vd=9Uq4&}yRq*MDZt4O!~x@UK10I8ty zvNEN+hN%hA&c?A2){8vfw3rcDplhj+*_5Yu9TvWHR)?R#O`iDnQpnamxs>kDlcXUo zW9;ei+H12!z+m1EkGDd=W$kRfVry=vBI+lx8#vB5vpQ^8AhJ#i>gB}=0Z{sdHRRxKl{2LmSEht| zY<;~zT0pAqsDUxwx9{Yp} zl*(o>F7b}8cz;Kal6EvTPg}Z_Dw{jlv0x?%}&inhaK=QB^m8T;JjO$MvOTme>n{oG!~=B7i6 zj?4K)rh#U&Ov_o-x=r_f)!-`E6WScJsL-&s+vlXqW>>|}zOg%WK^(>Yh(-&SzPW1C zmD}ndl@XwbaIs}k*RsKMSW&pV;q}eacE+8RXS2K&k8|Deovdk-&Bc+yVTGbah))Vc zO_^N$Pl4Ej6G9E1fX#z$Q+u_jQR27%exW)C$vylx}BIY@PO~Nzm;vG0?n}()^OCAsLrjVR5W>DF6~7 zO?x921QAnJ*)w0(q#jEn233j6D!4!7-imI^lIh1=B_qJPbgbI)jEpiDxKdU_^F5P% zGH-tnzW8yVc3%bkx`d{}`m(Z`>SShZ(>WsJh*E-mK;>k=I>2I1cj+$_tMb-mZoe@HlY}SE`eil$gmM2ESlVt?m$$O<8~5`^J9 z?_H#pK`>_yR$_r)$x#aSf#b9XA+57UwJYj3_M6sy&sXaylw=(~dV$rMd$zWbjP;Xa zVxFL$XxuUoZ;(3yyzgngWv;;q)V)c;`QH1(MgkbQ#-?O6)(7!!itp$5zsfm#IPPF^ zkdNCn&iWKY$jFMLM_{W;Of66A4k9trvN`6KHvo3*v{pu<7R(ODQctSB3BtZ!XwFK0 zh=-vK4+jg8h+*qMS*XE8(FxY=P13Sam@GdPsZAES<#`nf=m|_rB#bPS@Wt8?0O0)+ z?@u6hvk@x9xyU#(vs22J{*A4fVDO#ZW6X(g+h`^L3vH zC^iSotp(Zxv(Jv343RQIRL*&H6C=$Tjvm`VrPL!o^lkLmsdhU zqAklBzXEHz6;~#$x|(lUcX`A5;+iAbC6y-vW;|dy8YOU@Nlue3HXU`6ky&v53+Ytc z?eb*fxr3T(~BSIM~Fh_+OJd3#9bh~hzD>rgOQP#l}}zda!kMyJ>Ne& zXwcH77g`m?qlo$=i~g|oEv6zZ%fUcOK!>5Qts4-6Sw~Xjf5;StDGH`BGgLhFs;ABl z*n{&zwt2n=`QgHx_t*xoE^yaK1F>{2j|uQIFfqt4=eWd>v;Jb?;^E+-B_*S7vFIs) z2S#SGbFg!FOpfdpkWMWB_&xdM5h1IgDIjC=?3+vuN==5`OK7JqgCpH``$jkmqWvvX zSg|}~Y~Ank6mOp6aqnx{@$IoiYj?T!TRW<{32Y#=-Qy5g*HKkiWb#_AD`4=+80--b z*zfmxAeU70tkaMY8K!7T#HXVvtt;O{pT>`ArZEC&6*J*D=vMjIv#_^xtGE2 zJ{KCw)9$joz*^S7M*?za96`-U7I%OJ7{$&>%R<6%cD{p z%Sw@ymS%oYVPkb|FV^QEN(T8_Zc$F%?%_B~QkVacq>_%Akg=#CPYe^SJkyqJT^T@> z4=}*;QZ1I@%bkZ1EgTXB2c~78QkPna4J{}^>}ad2YTr&x=HR3wS}Qaww>fvVHB?gL z_s|R(90LyyhWPzk>$IGlLjnyqmoSoCQ|k>XNKkQpp{lvQ)j;&IS*6(#?j=ZQa9DUx zMpCkwh=v(#BCvRvFJk^_W8Lxz4HUv|`jgEs>R6EMfFPelIldRC4D$ue(!)Yi&ow{Y z5E~n3BKWHaUsT0iOIke6MvAHE{KSQwYaLQSVgHRwGs+lc;*+SCNG4z@nwl7dbPH{cEpmf$8fP!3*@AOR%JTWf3cHU#9yD#5yuBa!vsEmZD2B-TJ?KcSUx)nszp_ZZPk=w+7o& z>7NIFUW|d!{n-Q?%xfT-E4%vR)SXf$OCP#b-xW(xkHU*aQpF^sMFpf?03|^D5xSm1 z?9D>w>+pHrh;+OulQ78G@oUDq+%9)p?{K<(OP7_{cEhNCCG(*gQ)sV(aE}f0H|pd) zMMGQTq?IODTZ2sTkCyPksa2DeP)~UfOZo7{<3{OAnx(D0ZAG(V`>TrZC(2ROy-y+V z)==4=1lXj(E)g0M(D1mDY4y`5=$JUv1*B}fIQX%fp4R;#XV~1 z1*DDebO_LM6F9XYvb#+3LvVb6MsZKqLJ89I3qZuA@sCqId`dS=+#MlzUpt!t4G21X zP{2*jQ(M@WU#cz5*sGc;M+~};nWV?&0*fsXN)SmY^evll@6MBhjyRyBq22QN!WeH% z15Mk(o^ud_WOX3C4FxD8@#-Esw{9>~r_w%vb0y~y3CKxQwYReCE%dpe%ritEu}2qS zITqm!vuDXbcu8S+U7+t_tzFvx88I=zh4lWYsB`ljo+-A&$}^XpoWUMvvW4ph4fPd6 zC!0TZ2gX(J@AYFc#Nxq_Ll=oFDlBLk7R#6VJ^ItjaXz~13-~0If(wWYZpq2K@;CTb zP6uW(tI~iXR8PB=7bj>eFJ{EttPL(+uZHJ^T+A$d5MlASbwyQ0NmbQWqmg99kdy+d z)uQ!U!?;93@>dlKh0Hw{9ge;8o%XDCU;yQv2oRp zrIj_uifdw%GgxEGcVDgR>~7h;bC)bUP3G=g_0Tt{Ca+|h!PeEODbc{lRtT32bx6^L1 z+A*k$BCKYU1D%U4<9V2p7`xrdVx*KJX}6nkJFRw?L@Fgnn0QN~zspmnwWCqocz7m2Dl`^br|y z3D#6`cu$3PeD;W{6Ni!}&5BoX#kHMjBQm0*qJ0QguLa9YiG^ub=>1tR{ICuY7YHzd zPV{Nl8%@50^S2Ghl`MO8WSGS3n`1RaM~p-;X=rV?Qqf`lQkjBunTl&VqoTqIkUH)- zl3$yU5>LS#&oj;C`776Mj~OvKNF{?gAJ%gop8+&oaPh(7pTo5g@mmAj(97k3>{9{m zwLB=4?P)Stjg9S1hikfxI#XYd33F+-9;}@{cfq6)F&nn+w)2F`M$cKa^bhym)1SAw z&lNCh&a`Q>=Z{TG&{Q0a89n8eIl0F+uZ^6r?4En?y)rvsTfIGWrr1<0>sEw9q_(V;#-4%IH*o zmDJSRrgi&{PYZ(yjAm$tVPS!x)#=;}1`Cb4+Pb*ZGzu3tXD$H@^DsOBlk5#)Xtis$ z*@8kMf&&9sw?nS<2@Vc44ro(HjaEsph(MpfkZ@mx*LJ{)Rv8>UF*_aVghgL{b*05k z*!sKbJ9|0KR#{q7SWwh&X2j*%<%)}B+(Er4nQwZUe`Q%MCr`h9w7jCOgpbUiFioG) z*4fgawMpkp91Z?qRQlLpU!_77m=vZom|5^I2!aF)BncilDm|6t*lrz@k{nJFR8(3j ztE|rn9xB*RpW_6e+=m#iWD>s-;SQA0<0r z(p!mu*vKGKrc8*5MV`zlz&Vz+SS{-C_z(qM+0>UaZtU1`W7(eSinv$;q~bX=TTijMAs^=3;` zy`90G25q}euj{F6HsYhQGJWJj=b(wW+;FjsJNOYenVguiYs1@;xQw*4m=$mBiA#(N zR0jJ5_>Y}3W7dpG>4~6}SX+JhfX!hw^i_1z5y29)Q7+gl9-V22lM*V#muqb5WjUs+ zzR@QtillIsW+5Hj8-$#&-02b)nnH)>ctDT@1ch4zKsCB^z_B#Mg2N<{DL5Y8Isj7*Ls5p~=^3JQB~qz+#@u;fK}s}IQF(Ol6P#{uz3242t!Up@Wtp6Vj(mpP;EL>NB$v;dor6Y=c!&6x!k=gj=zp zv02G}?!(7R?Jh>#j=x-S@r*l|!@$^tkbtbjh_LX`h}bN3M0jvOM9RF8L0^6R@fY9x z(AICKWXhO8a>x2rUw*wZYtgc3Ul}1)`>UlqM)(B>Qv}bEvbk4X+kAN4mtTH$pwYE- z?pP^B1^BDMvJs>tA}D|-BufKoDiP{Crs(%)8H*Mh5jLn9+bro|QK9nUK$4IPm?GG&xM z(VdrfqN=eIr_|%d&4~AL94@Fz8k=j=_Vjf3*qn?^9jI~*G`9ADp=L2^#HcYnwM7L5 z1sc05J5^P1;&^^(?Z`1>)JnM$W-}g>$<s zV5U9x7aSalRH=ymK24uir%){d$YpU+^(D-G{bpFb3GIlu-0&M8kiEXS?FMu}Hoqk$@rtt@ zkPYsq_q=9~1D6&<2S8#jmkZ3dOe%p`4FpzjS3t(;d0YJ3`e`%3( z;};a7kWpG~ztL!f;S&}WAE4yhJ9Di#+_;0k#>3v#8AK!hTntn=-1HY zNkGC-%IDpByOmBFA~ zh|3V7aTg&%gow)!zp-)0p+@0dql@&gj|dSWM2I*WeoNyH2HnN7W|td&ARyXz5h6s0 z_;2C2H0~5Z?C!&MA7kH4P1H?M2HX}Ld3sS7xuXLy z7j~QH!qzTA#BTuf%^(pXehGg2J$JB`p8vlF!a;i8umBt<7~1W0(cbIxz%QK(IP@v5 z-|GF2U)Z*QUs~j}{O2r=X!)s{e>zpfB?Ya`F1~{#;uql(+Bv~V%Gq7DVrvnHqfZ{9 z7=o}Hd%pYdo!xo$9Cp56uX8yaZu)#bheVQ8!{IH5>Uv1w7_%XO;Uk2DQiZQfqVQnr zD2#3zpNu&Po}(S;yh@bC8+A6EYIV^UAJ2bs;W^gfaC$EU2*uA*o_BLv_#sH5=lU5G=!Iof5k zx`lLfr~sg^rI1XVyKL4dlE8#0&}w9JJ<2V7b5{rmCE&jVV~(y{UfXGYN5`c|$XQj-ds0xS&NRD-12sNui~-lgAjFyG0dZv~6E_F4w3OjiTIzx*$vQdfKzn}9gwYU+r0ZYN630>j%`0sERhn$ zNB6aBtbL6o-!1>pM89+qSImRJGk#~-ti;lHFbIWx2;>V ze)YZrr^B>s{SV)K{q^#-J4`Oj+~2xk^~P-**L?KJ7fpRuZBO0qtvj}E-dNvfHfx$! zeZTyxufMNr*Rix|+nV*ewr~FIqmPbOc94|Bu4`ZM?N`gcUwN#wN%&^^N$?yN6cIl< zJx*_CGDc;G_)3}^n_LX~jB0;ZMO6q@~4fj;2QFuZUI5~cEq3JC&# z9|un!rVYUm13y@XM&Dv3@XnT^@BoO&BI4oTc56 zjb+iN?ZJijY+-Q#p*ZA$3ZWGtj6M(#9z7I;RAGz@#0*V2!neYaWC$Eeu;^p=-WEk% zdN@Ti1c`UG7FV^JL8^iZ5*X`b9J+QR5+P`#S=-*FxA!%d=GC^rg4pBDfb)SAMDUHk z&k<@8aXI56$rx6YGCy@^d8yT9tF0>d_DGGzWNWEwqV2k^yNf5!S(KZgUcF_nn~-Qb zT1JeUcH^>z1zT6>82>3#CybvmJu5M)>EJ4}B7EV5%)ITZoT1q_-hAUoAN~46t45RPuhgpb0(y$UcJR=bsgJxFf3!jbyrT^ zyLp?{VcxNBUG$iF*Djguqd4t+Yy@OXNm3$30|UY&MZvIvUMSRoE`58a#_Z$kFA=OE zj3rHL-Qm2#(vnJ@%SDlt+ceP7(Zjf{1$p_Er3J;cT~4cM*Oo0+HI)Ys9@80YeO+B` zZOsO=167UVj6+{lS9$!%f#z-_Z5ybrswvDr(%hwY=$bd}I8;?xe(+d<3&VRFYw}7< zN=nLX3~o2|=AS66tSIX@x=6-aRa;Sb^gvCUo^=?jtLsV&j@C5y!3d@(s;i;maB-c> zZYnIuFE1`Gu18A>kEuX?Q0}a%6 zHg|NJVL=P2FxRVtSMe^mUDGP1O};^_}UdaRf_8XJn@&L?DLJOK+T6Hu^w^2va(B1UmY9~3mX;YDphO2x!9QG7#Q-XEs(> z@e;MauM(X9>iQ<0q*_Z)RP{KfOvvhKEH|?Lsp&B_d4(1mEaZi0iKHz3ZA}A`36m#} z8yT5jT+Q;LL-#uXXlqzZy4=~fZ`V%n&}m11Q>Q&RJ^{QBkHID-5}dKuS2iW4#IqJ% zQFT2=;f+*v2;tgh=ppuhP5AOJah#r|WGGhJbhhkIW zeWj}4gv9wvuDa&hWpgLyC~!`v>2xq0?X))bI)eO2bm%p*fIK0Q@jxwsE2XqXYk?)E zsZS#f2t*s_!Y78&?u5_~D{M$e6jD`S^z8YIuD<5lD;G>rC`gX+WI|O+WHQ`tv^ZQC z=j!O{;7(ok4nnZJ-mqsiOF%<`VewZixx%HX=+V1iz00yRM=E?|6l4HnkA@7Gd;+&S zTsZHxI_U{Bruj$+A0K}ShD#(ensp1OTB0Q~)C(<8GL=#ag((T)swg?C=l#=Dl6W4S zHRu=U3z;an)NONv*+@h+zfzvl(9~Oe!$Lfpd*~yaeV(?t2#9|Jqlzk1zV5flth9N zRKkc6+Q!Nrvz@$%V_(F71s6}iV57ql;gLl$s}jH>j;gaTegB7rfn@v4UH{r9gUR*C1usMwQ~QsAYTb|N~ZQtic}si zDXyxlx4LQJ)Ony3k55nKoK_c2V>l%xD6r(nM@OG#Abb@5eXZ37i^H=44$ErK6asye zD`gI&wyCj&!_e*CA=|1942<-{3Q9_Y+2u|cL=wwMO;Dv!5MWrv&EwA9taNcOUs>>77>8X)Pr@TRo|sCG?gBA z_$TCMM!Q`u$ZgRZtR{0`Z@1Oyq^uA^0a94FLqExi>E2Bl^?!~$6*jr1Q=P139+ zlxi)W#ACVEUZ>Q|(i}Yfb~^xfSu9}$r>NrLaKLrjcS%vUh^b{IXN;!fXq@EC^{H*- zc}XcLvW)8nxYAJ+S z4@>D_I5LRa@!dQGRfjZsY`MMv) z)Zf^;zbO}nY5jh`usS{M_x1q~wD?yvhEdt_y0`r5?fZ|99zSgx6V5u6j}OBnxW0M! zc29Uq$h^4Rd#HlAzxnq4_0A6v_jg+lUf#QNc7tr;W{PDDmsrT-c zX6ik-aHOnu!G>5CefaRYaqEE5?k)9YGKT zSq4zt5o8s>pF@ySptvK*Dxj8rAf| zj-x&DSDY#ZTBFT4W)0000 z{(*BooVl*Oc6PFs{mt&qj)W=5NuZ$+pdcV1ph-!JDj^`ewL?I775x773q@L(SLP*q z<)|bfj8HK~bnsGmYbFE~LO`gFL47cI_fkgwDXHOzfbj9pzx1l#uE_X>_}NKJ-AUQb z)XCMr!306Uz{1vvSx!vl3l}pRGn-+((ubEi4JPVRrczS$2=8AC?+^%Hy+e5Qf=Rz5 z!vDcvW`jWc>dk-X|K`K?>NUcrmt6BDS%kd(58d(w{|EXn>0kT*&Ho>RBD_IBh($tp z`%;6IorCpN_J4c**Wz9Fe|t)J!T-VQmwsOVr=}9%>kIZjt=L#u|NTnnG@UT>J{T1N zp=?)5R7k~5_xKUriEt-_3Asz882|zE1$8f0IN& z5W9P>^8NSk5D>CIhZg<^L6G({|M#I^NZ9|MAkE8gI=87(8Gid@dNKS3_xf8o80dkf z)m)-fx(KyV~XRO}8|86!90}Q$+feN3?rD+-LAB1fDyK zi_+RV1pTobTY3mxjB`exc|+?%j@d7K|rs zEr5XV`)ZR#;Q7Ik+a1WeR-b!|U&9?&fL_(!0kj^B##jg~nE{u}ChI48HA@W4`y) zthi#O^Gx&8&bisGS&E9fx)P5P?lbLf!*(x_>Rj&ERS33y&Jlm-`AUJ+u5>89t>4Z; z?wHAw-p4uC)RcWi`ka{+COIBuh@GtVFk;hOKKn=aQ_v2Tp}~6g(O(vyvkg1)G6mg= ziL#1v-|XrGxq9nYf;6+*Cm0FnhlMrByreRy1;!}7y7s=fp@?K9~g;M zq&h}B$=RwbPw|?df~MO1rmVlYbuho)^r$y?27lWcM8i|2K0=*yY?u}372-L1br*~` zwBYzze@>@ZS&i%&1w6!X*sx=p5J!&dum-W&KifStB0XCwnOBcVzIamaAraCbOB-S& zIt`Qg;6yBFr$sf0qb>j1TO3#*uC;2syoV+pdlqya-lPe&WI957Q&AV{+4`eklHiEx zTFooR{Mt6Z)VdRDH*>JH1^RRKVjM)6~HKH(j5_v?PV!|6G_eaZyxK`+bhC>)w@@ zzi!88ag&Q#iAAS{tVLZctw4w^zVU^!GyeYlj;6fn3lsJDZ~2THfZbJxt}vY&uMlJZ zwEB2q-0B4d_lK82H@^7VK9nrig^mWY-@{QQdp6Qkf|chN`q#bBQJ|GL5*)$N5@_#m zq3NzrkLu9ZU8mnm9~r^Bbh0{sd_W%%EtEbJIdhgQ5VmDMvO(&kZLi_)htMWfaD7dm zQED!+-=>JwfU#3oX_?kFZ_u~}6SdVVw2$ZlWh)epz{`49o|z!-v+$3{yursL2ngC3 zIo>+ZZJ^}Z$`5lcxt>{DmfW~?Gbog%Hv`ILLqS6fju&AcR4IgF_`*FVy|1)k@-fLj zeHqo4iA5q>q}5k3`fy#`Z%XeD8)nzeUwOP(DsM8)8> z7v)nAa`4P5U@!mf;Fnw7D8WghKk{ff3GWBN-m`H5XWxta7zR1KWgHaPu}2h+8twc3PM*>_iZ^7Pf2Qu*4*BduXvZN-`mmj{zpv{z+E z$)Lw?LVBpm7EmG}z$rVW$JQKH#0GEn&#Hn`jqzeF(|GV7@Ds8Ijkh$lXP%PP zk~Q(EnWk0_FX4KzQ&vzLQkn66Jh*ap-g>z9EH&mcfMBov;jjKN+BrC0)twrJp)55z zs7>z3G=AS~ZvObE2kOIDJT#)JeTKn)POesd3?~>J-c>nhS#rCZid&Tc#O{_ZpJoO9 zq{l|U-<+G}bb0SdzN)4Y`Dr@GM`fzcxL2kGI3|?VCpFSAeu2Xt9U98;#+X!TfT&ZO9=h{95f2 zft-BC$oRs&@J*N;{*(yiZGn<8Zwj&oUMSElgICn`X9KF^ajZ(Oh63O}FF=wpL zKwWdaE9+MVBc}WU$-BEb@{jkNSyvuygOqE)8c<2$50D8xD-#*bDce&O1X9=Eb40r_ zvy;0eH%#nA?S0yZ4c5q3`o}~KJzV5=E4AJxPx3)DJ>?JBEn2nxUxRsjb&}gV;0r2b z3T)2xgIK@==%?p}>iPCmQd2^A7_t2Ww#Sidp%9soA6!(XTo1ga#q47HyKH{{s62XW zvwFuc4mqo|-?{~8C-8~3jpj@9b=nULE0-xhLrgV$C;I(WvvQ3Bp3cwooQZVOGiIez z+)m8_)*?n55y?TtfeY?2SDpl;#9VXUw(EiWbZ?z5ggXpE5(9lbY8}f$bz?;LacX^V zG$1^w=0FJ%pJbcbr|S^y9CqsUX+>B(^{frGV@!m#ufxTGGWJbWB|Uw0#9bz*#a!xb zSJwh#8ZD`-dI@JAvmP|>`*$J z9q8(s27pZ;G1o{=z@%zH?-UWzqbAEJT(OULoaE7ZgI_I`^){W!BPuDqRPL?^eRA{%1Ea_pD`1lR^5Xrb&TaN{p^X~9bPj`PA zSL2yRrGcJg8`zi%OMqvP{Y(S&y&@~7BG7osvf&~`$79Aqy0yLVpr9_c?dM(w`id2v z635-&D9^Gra^cO>93Mq4xvn?sV!9Sm*ja;?nYKK*YXM)OM|#6tpPdTwf1i!mp$ZC6 zK`}-$y_g;^t$O7>qTdP(e5SsYlbputg#Gz&i=4%xSSCY$;2fNQ6;FxOsJ49mVQhW+ zCtS{sEKK3D=?dz3vRFHXVV7LI@g0L06&1^#e~L5q!X0SLGhbHQBrp`;7Kc{14x!RY zu>(*$W%t$b9(6@@nAj|+PS_8#5bWDbr0ET~?^A0haiImF-QizBn@Z{Km%3TF`C}i= z!tZPf)AwZe-`$<1_p|bOh$@MHBIW}D^gi~c$pKCa_>m|MkJv3?wR^Jo>=Ds$?tQ}J zyjuYPv4agy#o_^7)$gW%46*E?rhGk2$yWu~8))8X!W60GT$KamF|56fKSuTDmU&9s zm|(!&A}EFYmc9KD^HXs@W#E>CB_0h~SksordFO$#nPSD$)twZmY`XoPb6+dQWIYTS z;%;M=3Kh{vxDcgh+Ce6@tp3`6?j8L07M^snLO}<5vX`H$Bx(ecIGXVvaw6y&tw2$5 zW2wjni#aZ)P4m_=oTzpf>k?72K7-aEIuab zGQjg$NcT8gq3ADGZr#fzlfaVJ(xpNJm4?DIq&hVVz3oD~DKlZ064vw<mSs_UXLZ~|IbP=YihZjXcsQXYZcD99#{(627CC%)7csa)l@@BTNf$+d2-G4@!r6>ElGDrK0i3fM*L1OtclSIl`b`N z5rbLj_gd_^Tk1B`u}>bgnmFU(suwF$d=|#d- zgb&?$<94a_we{VfeQ5A@(S*ZO>GXI&(eg_Ant7G%kURP4mmQ2ax|v{t4I*<+X8A?` zOZ#dWa_P7llIyKj4~{+A8%Gv?1l+m!4suY6ikVx7?{*^YMYa=_LsVSGLw#@oezfW& z1nM*hKN$G^{P`2raUl|FaUa>95||&O6F>8?c+?r$EV%&1AKCj$vzT-UXsjZi-(Mri z6&oehAmhe>gGBG{VxX^m^OdX{229Bp!PZ*A6Q=gBF~z)rA#umw5=K z_Pq}YF#32_e7wARFy_vHM*MT4u)-mr_W(`q?W5iOpx&wW#6_Ky$CQ{(#yv=@K7VnL zMd~Rt?vhKTv3+Rw!uLdjq!Ww8Et<3(ICsHsd7Zp({IUec*4;O(`y#r`{*xpW%qpj80}5qcRJG zM0gkBu;fcZn@o6r2>e2DTG=~f?W2cFXa~o)i972te@AA{Q*x$zMeeVBF!{)f^{+n6 z``+IQJ`L>MBwt=l2+2?dsh&xEqns1@NG&Ms%1IB{r%O;>PbQ*q7tx9CXAsIM3}AWG zo-$IfNl41Z{S}fmmH)7SU=HXFQ3MxR{+M6Q1>k>mE zg^l68OLQnVakAC_wQH9Ub6ZbKNc+FsLq@r>Df)gbXBHms zsvpUhIWUMw?HlZ-yfoDRj=5~?->yH2X%(=_DBOPlvpkr{ka0+_;@v6RxPspL*&r^4 z!}+7{3;3J!D*8P+;1a;J$rqmOnPqS%it0Nr*~h(3a7^)XT)L%x-+B6Ln^JG-m7|L=ur&o3RkmXnlYG?Bt0~`l9u>|&b8Kys5 zdN32$mwiGfkX@2?0$MJ49Y!qh|owXxrc6BtFsH^cpuW25){A>`o8glN48dEHS1SaEX_ZX>*v79jf+#{vy_og~)=Hbep=fXi*DJ-#f zj!5m5wWUsB>~W?@-hK%(@ITetSJb7tG%c)#P!jtN3EfuT1=EDJQ(N|{#~NTAerB=~ zityB+RfZjjB?o={-qq{Wmaem-$0_n))G?8udAvQ0yk?i{cFPS6)yuBe%Rzl0x)%l? zUgpnRjT-LV5o8ZqJLWsE&>GXd@Zy$u1suO@(BmCNoE+LNUDAan^DRaZUg1>b9*>>W zp21~I-S4w&HJEN+M%giu06P4*`Aw$RaY(nbEAmGkJTticT^!mUz)J~lI~|NKhGaYg zEV%R!DTo6D-1mWIYvfcre^}6=>~#Aus_7Nj&6P40XSCeTTAypqC`$p)^OfPZO`qde z_M{ro94S`eBU56ltspceT6fi~XC|}FO+(xP>|w%XJsZ46sgEa(%{{4a4^-*?lHRdF z7bpb;bKk7Kxm8MH*R>kj{qtv)P*jUbnOlID7EPsl&22cd0yy(rG6047Zd3WqZFs7*V0Z5w z>zAiy6Y%o#kAgzp?%TQgw02`95}=6O3!Q+R&Qs9 ztbw`b>@;(8o_*%CM&{l3F!oGI4oUY=7ORmlw&%Ywl>I_qO08Xoqx(Nmhe8)ZtOBRMZ0l!1L7RkwE+pNLXpOb z5Et(FGnck}Ih7={ja0)G4$i{);&ciDz3P`7IkmPC>Kvl1r_6KzbG^uu^ zQ53ia%Cy$u=X0|7ybiy!8pCXFx9KmoJA9L~BWaWl=+FzS*OoIe(IW=AXTpvQ zg|R^F5D+cX{gSf<55U9`oIge5au<17sx;PKCP=!tD?L2T1Y#WgoxT75QG?*!Lvj#L zO))n6E%4U17cf|F+P~}-pQY!FYM|<)T;aVLT5#C)(3pd4Pe|^5QmZ2dPoCmQjc4)* z&2E>r6Zjj^qovZDOEzvB-ypW66xJk_*=c8w?D^I)_m_G2bXh5`&YS)MlZvcczB471 zY2xJ{D}#m2DdRL9B08sGQ@&f8ia0hsM;KxpHM=4CVr^3FtFEHSE$eVH@Q~>8^*%j! z>e#8bR0EC6u56~K!v_6w<|n~*P0lfslcMaNwOe!B^8HKla?X39l}N(uIo*0V{Z zTDKeSYyKC@LPqT|_&H#>#drb_XgkB{Erg zOgQWeZxuEk6&&!9*P6M>ru=pGZm12(gfGrC_8i;LZ+Ffb&)Px~C6>)wOJAJyugc-HSHLc`rO5VQOBRas-oKdei33xVj z$S+-3p%Gus7VpG^!}T1?>sZYC5a4EJ1R38Am*N~|ukYV0p4nsx*O4PGZ`a2X$f6Az zaSv48Y!%zruE=ZM)LQ(QqC^D{j@u_)#CG-(=FF8k#7`7=wDLnMGr%2y9bbRI%_0s< zM-G)yVgM65ii#@bz@;CP7A3vzH^`UV4190Y#>kX2SlA;|2_HHQ=-KvHnQip04r9j zz%2EGc}XqT@f(QB=O3n0uZ#~n@M*I0R2iqKnDy*$H56t_w3qPty*7BP!}l6OGl^5B z&l4JleQy$g1=EtSL<^O}bKH-;7EjE}@WSKW8oNg(@R0be9#v`D`{zucN$yjn*tH~G z7tDu&SqAw8M=+2l=+gG=0J1o(Qh#T+pkkj-v9awXKtg44EI=dc`51&>XFQs&caK{{ z2zOuiuC7i1ttLd%-r)pgZQ@Z=nuY9wZ&6@R;+Tl`cn-5FFDGrOO7hL{_=B|U!Cp2G zBlrR}Fb*2A3CqvuWS5j``P1xE0*d*GjQe>h6G*od;|5O!YDVpPE@owWocZVTKU4)h z+NMfoR_l&b4Leeb2N!>@-qV8EST2Zamjvq}u^wZ5W$zh+POaLR8)b>sHULvx?t3lG!1(gE*2fh4E#RAL z_{GgIumFuwT(g5&Lli!DaI-@ouq97PcGy=^V=O_A$6Q_fp(ns&oVXVxe6POdX0-M( zVf`WL>q)q`rbEG0q6-;lD}+8G2(?mS(8HyM5GUxiZ@xlB+@)avJL2Uv7;#cXbCUz{ z6tQ&O7M9}8rDf>oDhzKpwbIZ$qhZn|Z-$Jv6>c6TG+`>=0k9|9jBT-hk})Jd5Q8_R zO3Nx~Z|^#~AnZ=BqP%+qg;dw|STQ}mf}@ouqtuvy~ug9xq-%Y(m66U z+wj@JsCDnp*#?BEZ)ecVVF1s<(iOlDyC>#Cfj$I&Eu3W>jpt#ujFGM`@)&=@W-0~P zI_o&U^Y(Nw9&dPxxU$BNa45R4WjMZ7qdQeR-&$&e==% zL40zY`_Smhd=P^cTh(KOZvwyM#y2c)o0Zc3fd(l#dSGmvzLQPxo8eD+Sq~ z>hCQY_2aUiZN_uVmeQ`K&MLzLv)phW&(Oa%)e3n(=eWv$Wk*jXM*bS%F3hP-$06%3 zS;%*SJSO}~*=WlJY_v``?z}`IRMF_(k7xsC-+@6ypcRNG-eW7{lPt9sFbsQVC@8H( zn+eo5E=7WeQKwe@Z37!bZ#ZUST3b9f(_e9pJHUlzGe&kN`?2e0`H#2OmIyEttFcCL zub7n4HfD(8XVvq}=3SKVCA*K){^ntl99hlg*OR2A*?5so`U=(6?a3TvYbE3KAA-)N zVKo&v@5GhUl~@QCSOmI7M_>ldn>C(uy~{Hd6ErPy?*u=Mjl;dd&h+w)@*vZxZ~#%z zqYcxOVzxaN*bfin=w1@xCXm2x~iFKAGAPI#vWn0+uw#4$+RpjeP>B8 z(Om_tB}v~!3y>{k@?TUBrQgMyJc7GcVJOJY&pkYx(BWE58o>Z83vs&f<~62G*;}Rf z6ISmDD!tz`tE)@aOZp0W87CMh3!@3RGx(aDEBRJyN2zY>TPv!iQk`Nk%Rs@Dpt!SI zfV=1lhp2|08q_15{r!zt-mAe6!7Gz9I172d50t~g>6lqv!nM32+&)mRmdvgcPxl5Y z`{hYAdC2fb^lwtL1UL8A4Oz+S4Dt4CZ;MsrZW4TMs+usDo(guytQ`*3^BGEmYaH zVfUsQz)tHUB|e`<3SG7=aK#&(j#Bao4QeD%_NgiJOW>1izben%8uViuLSTh{uTa z_EzgZV+AU{)n{_=2&vW%ddd=cY!kzeq*Jbm-KpFi1_@-Fd4)zFNzSe$OVxHQe&A(d zb6sP>?WJL>qE;031U2vAl{qj?BuumAnOi^HAR37r_+2bP>BNh85#9x+=Mk zE4Payxq`JvIWOf|R(*yjmJ}WX?4`2>Mr#S(jE&q({_RQCuQ+zxzG1WPCeu<>;+fve zkF3DLfAV!OJ2iThFAo^(QXcVAw9kPfkMf(cMsv<+r$*mzIbqqPBH4XT_@FTadam% zOb|p>TMMBQoXudUfM!V-PVm4B1jsZm>xvRcH_JK9O!>1ilq!gW% z;VAFr%L7Zb@LEm&MP*evc`mTV(V8G`9}cri8T=htOTm7VUWAuWR{g_at)S(#rzr1N z)fpSv9=8a3`lbldh(9=*kc5P(Qp+p45YB7@NVUpvk|EMq%H0h)k2@s>n^gZ1p-s9?7P z!RB?&>b~Fo#G6p<;)22xS23|>x z{r1X*>a>alNLZEwNaCb%+9f!+<+N^R?PTXZt6G=ojbg|toj-g|_5xp*loUPZ zG^ydZ9!eVi>i8|xUp$+XYea{sU~N#1Sqo66CEJFI9c+fM@AvA z{Jx>E-~PQ}RD+tXW4rBf?8D1b8&W{Cr}H)b`#d_ko!89rnbDv)VTZ50dq8nbrX&@F zkH=S}O%0YYcA8q`Iv+!YKGxyS35*G!j$1e#ONxw1pi&w~3fLhP(*TW=ZxD@_ME6pT z*9`KkIYcY-e1q1l2=#kTc#R(pF6J`qN8w#vRD5>~P#+7fRJI+~DbJM=UbD6t^A;O< zB$?DzDpivXAjMp$E9>~$a~S5+$AA83d6C!JU5Y_KQD<&@fTTm$ve4*ERmBzbi(cTe zSLN?&1WsdRLfxl)J&z!44B#Y*;voB^UvnPq&crrqYi#`*CUePgGsdD<2r31wYF4sq_|4t zjI0`qDz1G&>OE{((%?beGcU>LFlSQEPDSeRU8P}>(nN9xQj+l2YVB$5dtr}awR@uz z(#mdYn#VM00Xs3OyC;*YIiZK#?$Fj~WY-GyqPdSzy3ZtxA1G1M?s@TjO`ZOs`wbeu z@FyJ94#Q?o*Bs|Btfj_Wb1oK%)_FQQQ9fQu?^p&@A18db%MW z)tFiqklNQ19YiGP5^5=o-KUy+uYU+dI#Cs`$*jx${xo;WAJx%&wLG)#59v?^k&yUS zxH38(manx!Avu=0u_`!H_8Y>FC^XA+ssE4ekO-gL#+1He#BevHIep2pEW;&Lw< zrDD1mVLB*Ih0H_X0dZ z$`x0xcHmH^?%I-REj2j_{tV(x$t5=kr9mMIpYu2`Y12IOTg88FQ!fVLvM4}ryG&?8 zpR(g-xefskc=SsCR9IyN$jpu7#J`x`nWw6aPHX4Zmj;pb9fO-&2D+qbCi?JT&tg0O zP?PoM8>G9%Am3NVSSj`)8^fgR+XwUA@ezNh3iK%cKu?eBxY8@tVtIF>7H61CCugCa zEcsT%&z=k|Zq-OO0+dXENr8aaw{`MPbnB@=fpb9#v+^{%-ZW7v+vQp7(fBMLO+hnO4b&_%unLpkF?eKMZgA=CO(4{kF#I;eQ zVxf|#*%IWsU!O?e-L9$`US{Dt#~v>+fFoQibLq5|;mBR4WN{0evLZ|mJJHCtI!YAC zVLx4P9DE9roUG>!^F_M@pihs?+Aa}nRG95>AtNqJ3Z ze!r6P&po?M&;x9q4-zp1a7JD4ig&Wj-Pc0cs4F?C7&v5xJ@1+`LHd&4Il&FFW+9oW*{5exLDLzwVmM~ z9S3&3=)Iz z;|L*YP0L`G3fn%v-fNKVCM9_;J6x7*$mt^zyp?JIw#r&z;HeFQ8zJ*FcrJ&*@*kvN z(-jnph;=Cf@y9yC*b}{0KYIM3Br>A}<%LSUS=^N9(n>P~N2s9Rp+w_dkVp$8F-s^s z6p`M&KkL)H-kDJJWw8PurZ6&k3Z|ImgGhlKU?8CmOQjlj)uHz=hn2(6i(UF(xIA=|LM?;o^J0 z>Y9g-mF>LUe|jz%q(o0KrHAJyNerQ_=Ka|PNV=<~E>DqYf7;=p!%SR5o`*l)rPh6* zS$wM1z2j)#yapQ6re{zcxV{c29=S1%H(Ico+wO3eAu&Nw!)mUEC9mR>gr%K;Ffhhu z>%eldH~LE!CDsBDrt5c?b}iD08`Am3(45^5^3TIAp_JHMT9(Roh+*isx0goe44rGq z2awJAq$g#5r~T1(4&S<6#xOBzFWWn;3Bg7^O(U90XMy#Umb{mze`j4jjuiF$7C-oi zFJ?MbYx=yYyWLJYEi^uAAp^5hv3oMwH?Ht;QNoUie)rbHXuS3efzrplFiW_F6wPIC z_*+uNi)vhoF2>MN{*Z|dclUzTcHMnrnd?Nb(Z@9@LL%aear;#5&ohpY_Q?44#S?ta zJ=(P>xp(bn@ma>p`4UpoPcmAC-&?AbU0eR%UrLZl4vAb%v6WW5_gKm&ktK(n8Si?< zuyb9=P?UG(0*~2al9-`4Jx93|`IUtt5(x@AVn{ZX>IHfBGr1^KJhxB_`**X(`p4n3 zYB+d6d(FIjA+~CtaY-yd#=VlzcLW#Nko&PR z9_^sXUBIF@mF<9o&e7kS(vvAwcTAAv9|>0AV!dE z?{E++x(zSRFtHb~TYpgb-GLSB>^2=|wH&-Y=9@e9=(}(x>LEoXe|wtK@%rc}DGf+r%_fYmE1sfvuP0Q9}i-f_tn#T=$mW*HSWpF?w^lfD_= zphvsrck=I`I0!$iV?kY027j?}bga5e>`zd7%TS5m$96S* zQIuTHRZSs+`=o~rGoNQ7M8n=Mj_-(HFhlkpk;m8i0IR|dSRV5-q%AZ{Bu_t6(JaRM z6RZxdJ<*pLkGN2R%o*?oa3VPSLY9d|p8kepc7!->lG^`ZRG5KYAW3ALzzJu<&}f#+ z?W|or0%%%*2gt$%|24p##VjRQKwTfc+12xou%&|XKM4714t*cvNz8HagtIoM>Dr8? z)Fv}=ImgINaBLgona1rKCweuE(&FzQr@d&%?fqVCXa~OQjzz8cH#&OcO+2;NOIu42~6)#vn00k3-n7hIfwNSDJ#IKP58x3K8@DeuhyO-K)ZCx^xOA}!y z94)O)#7{eBVhSDMmk{Smpv&(d^pr?`vg=%h`mwN%84T;accRJ&2p=@>{u^bH@Y?yM zh@gNy1AK+RS_J+VuksST^6teu`5*jJ`jYm)q`Q|I|KNX`ykG_2{|)g13Ml_N{RjU) z>Ho!*Xj;pqgMCbto;@_FG?jAutD7iocjeQk`>k~Eugt5z-{L_agx~cCZVaPuiOed$ zgbA`2zA?DQ{QE5tkhW z=y=sh`3+h($jU?HlIyl@x@9rH9DBE$30o z*idDXqIVphT{^BEuO861aGB3=gWOr9&UoxzGdPem^?ACpU?JmiWSQW3j2x<7;Cv7uzpN7ln_8prE*p3$4~tFyeEatm*^PZ_3mCS*OQ2Q}hX z8*k25LFt}il_8sUvBh-{fmtD0-Z!Pzq)0^!UQzTLZcj`A6UMIBfIF{K)uy> zEA_)~Q(H9R0F4M2io52AyQ)!9@LIv?MiU~MX=}-`;`=$Z1&4XR3)>@8qd%x(R8&K| zdM{#CYZOn_{4KDb+)U?s)FY~65E@mLifORtE$$dI%!6UVQJB{?f4u9AHipbiA-1oV z{>n!f9)L8veZj){dDJCYFkzrybiC!{rPEi6xYr`dk2rd?nDV8NJhIN|8r!HVw+9(z zuU(R_BP@(BR_5<=Zz`QtqnxvNQq)Blk3G9IYa3=6bcJ3VQ(Gs`{aJkELxY0s&Zwan zVleBf^<6oy7JVvj`a_?gOtN|TXyVnsJ(-S^$XSl9_M>ux6%hL4Um+i7%we_7<9%l0 z0spaByxD2%6kBb`lxYIP`MP!W6_uTms~1A4mLWrPPrOzeCt8CQ@!qVGBY`TL{zS9Gk{0c(w&;g% zUTn=`|AOb2P%)9UH|1Q77P8Aai*f<%;OSCcT(>Umy!x>=E@>gx6Lva@!U}6%pZ0+y ztzWmaj+_O}ovrtD*JkC)AT7y9U-_}>&p6i2N8k6+k_FQ%N%RZ5S!NE8%H@2=5+3D` z^@_6}vk=+6te0Fvai~*CtpEB(A24RY7P(k^Uv99bmTNOv4DtXL_Z#G$IqE;Jzn#5% zW`EI>-jWJ%19j_CSMh76G3K{c{d(+~EzQPxU9a&-H4-k1Q|8wcW!Wr^CmNoKz|1L^ zzp_qNr{W1r6t=jJ7yxo9`=n0+K%6hT-Zd1%OjSi!*yM+64bvIbDqqhdjLa4(Id<(w zHTv#&wJ_<_;ZFv>KMfydT>|(v-5;RV8+xguQcB9ailg_ubtJ={f(>pHbXGpMQe*m~hbOPHD) zwIY2tW2U>jRlx|?&D&le=I)Qt`MOnYbWVDjvb>?+JS=_j_p`>xbc43r=&jG0$F=rS z0cy7=np}fV;rPHfZbaNF!AMd8ts#Hv3<@b~G>trB^hMhlHyE>sA&5BUp_}3s=tbeh zN;Q3;(j5t)(lZgbq+SGKKEtWE9*(AzYD1n=Mg7MRH{c*HSM?c69eU%`4+*;%4V)N6 zC)`5|gjmYS3o1%4D?cmq!(vfaM5&yEvsWq(ZqY9|Ln$pxANsf0@bTfxuev&h-G7IH9%`Obj9uA*r3SnZKP*NpVwbv2stPKJ4h7e2|ymYrW;Z;9cZh#EP<(0`?_P z;tH6`yU@*~F?x4|-iSuQU1Orr>wIFUd^k0Re~y{Bx?}<0S6wwoTs@>ay=*-yWiIX? z)dwsPF+D)#j`1`9QV<2f&xX@S8HTH~Kc8QMn5rsLT-DP-`MMrGH?|yaNUPzdU`A)2 z+bE6xvDY402`**fZL?NkcJ$4!mh#a$m0>ZhI%H?j=NX(ztxfr3+wu*>x*i{H1zNbm z`U<+s73w@f_G#n5#omr>m8A`RX;XAgL-Wg+ur(2Z#kl6KZ?)em7L9qg;dOZN=E-_X zvp|zkbcL`spwozjfgt%hFLP%61|I8@h3DJGR9`TOC5DG;4N28)L1_8A@b;mYP!PaS{}PL}`BphWub$_u@#)fJfV#=0pU2O|j$}Y> zU)jy})o#SpQK2CW?$aqY5L1(;2eZxF35xYH@>~~?SZAJ|A8TQRhlZ4f-?c>6`AUke z&g}d=KC<%F$Hxn!!B@09T0&fY-{>NdWt27Q02!H{{yATvouQQ5Uv4$0p-sxfd6G-Y zwvJi1djH+-Q0)6T$d${yI>n>sl|$xxc%|-kl1^9tH9-U=RxHrP+2m9LbpF| z{k+y~a`NM_)plL%?31I~y2&QzK7!vk=kM6*ZI_{J*y6_ z_N^Bq$@2{`=dafdJU?`=kFBP7@|{KQqAvW9K6P)$t|*)EL#$!T38yA(N9HbpXyYon zPMo50-GvaD*)DzeU15&c=*xyRhPfzL>yxhgf>ucffjFtHv&yBHCw8KX_8a1qOAolAQ=Mma7+7P$&bWK9q>0KxGo7A#of*%)w%XljYKiY1 zeybUHi2c+xjd1qs3_{YiWov~h;T#6qlf$t%Qpvl<$+=c;(iaN&$<%|4mk6CH&+h$zs{6X*hN{hAX$`=pshH?|wcboQGl8Z*dT;n< z2loQnHe5G-1z8?B2HkRAZH}Hfp0>3P6!Vg$r+c5c`ZE0|WNlD)>2(b#Et+HKxiscj z^JI!vr;nMlJ*QrFu2pufOOR<<`ntNZUC4XUm)ez4OY~(^Mor}vQ#^J~ym+Hzf+e|8 zG)?h|F3<%`DpvJNRu4b>^bLsVAZ@LF&-)X@)BZWh&LO(fyU4qCur6orfnx7x$mwM0 z5k~EO61Tj5lbuz$g^1&_PmEc}x4X0g9xbHxgYR}=2J%YhXm?Cf{PoI@GQ8EIx)yAm z*Yh?MejDvhrD<9jnQ`3CGd2elcp%~0F5|n8z*<~pjJh(@6?aGq}m#CP@!na>rzsjEXD1oQE4^vQ88qf zmg4PF65dyv`lKIZI-jk!ldBMb8qtB<=9Q^~mvMWDT&sCrSQ+iz05HYmK-`Sv%WB&Y zM_IbK`*$94*s-T_r?%={-M4;N(YQ}C+cHBLZ+9*7S=h3++3h@<_dWuQ!Q6_gn7yjE zu5EL^nm%GJZ;nbUW7o)P{~zk!GN`TaeH)|#6ff>jytum-cbDSD-Q5B$?(SB+xCgi5 z?oNWcyOT|S|5xVSd3R<%?Ck7*%bdwca!&F*x$o<~q+Lg*fHOUqO+WZBUCi96R+@Fu z`OkXJOu)dR+HBlP)6_oE-fV))vmJ-7*q>E^gn!IN^I!|;&)4QPYwG-hJFt`D_4+u6 zGWCEhiXdj=^T2E9YUZIrjnBnmjE?pcnCxTgx5dd{S!JhF<)E8E(Apjm3M$vyn16yV z@cF0Tx9QjTt^#6vO-az6KOJBx=J$0s)hL;;;Fp}roxaG{)eN|aQJedEJBkv`=QpEF z$2~=O+xrz7YocwMN9f80RTFd8{fLdWyJtrIIJ_w+uteN74~ND*(DZyn-O=i@2ah2- zA#`Td1(}K+>esLVSYPZgkIOPyp67M_k~d?qV*$&uPmP?*Q38*Yp}?1$^XP26F9?dK^`g$QU4Mla z8WSMj&0%+Oet>CtGZ2HdZg~mjw%k#nxS*w45znLDx<+Do(ycaf+fxT6WPRO4{-#Qr z?>?b-avrGN*QD(hxZK_EdoFYJ8KKq$9xgxYkS1Y%c#(!689|i!_PJR>Q?AIeqwGBM zR_}z-aPJl|g$u|zrD;9(ethISuDabfy(34z*5!kOM?buC9JkQyz}cLR%YnB1Emrv?Y z$#O+>q?iqyVfKW(Y{w{EI>bn}D4-G$M8$6ejU#1m+xRk3B3kY^clIaAS8)OPR@EYY zk5D^0HqDPf(z{Bgfz6PoO)+L+h9s=MwTYjWW~-Ql;_&kJ-WLG;eW<=toe}T^uY%;B zUNe4DpH*rTOZggqT&bk)w03~5lt=aIw7(NQ*+gX%I?>LtM5qOJKvrr6HsSD!?IgQwb2=AaxsA(oZ&_O8E^XGoRez z{myK4t!Af_cX_U!RM)r~4sqnijt?C>DcaSGHX3`2Llqn1-_n!Q!-5Sss!M^j_S|xr zXdUT%-p(1wTr90~u5-_Y zGB)Ph9;5$A<{4_%<76o8^6kl8RY+X@S%b{59!i?RH=>*VfW++<+*o+1YmHVU1CG7 zoFG_MF|T%ACUq(<$&{zc5qMIsBuoWiZl&urm1iDJGs^EN(W<*Wo&hl4%3kTmcf;q; zX!hDAEI8Ly&pdU^omt~Q=9(lcE=QPziKYziB~FPbC0+u>uYvj1vi)c)1gRs^#Upcd zjDW9mt2*)=9L?cqihcI%edl8DR*C;^dyCfkwt(?JJwqps55ngT8YzZwg2VZV8|jIZ zQML85;N}qA;c$|6$9RU{rR=k0Fob2Z+zF5hu%$GkcHE(6BI$}p@sjc-ijV{_AFnyxJI$kr{$6N_%7H;LiRoNHv7Tf z*tEz)#Y6PHF79&;?GydBmk1dzwvmj>(c_TD@ywm9Meln*_r>L%57Od@54^=DWL>L| zg^h0YGS!QCR*C6T@Ck&O-c;-Mls_Gqdout-QR9uKnC@WEMIrs;O=^_v1Y@^=vNK0f zC+F@+CTa`GjCEOt&hr}Si%N@e??Mi0XME+xJ$izU+412UtesuqpVJM(?c$ekLaIo; zx1_9_`~emG%gVGZVrrfqYZ(YpEVvs4sc#Q!i@$;M!$L!mY2PWVo55N1c z{h@%SUo-};@)4FSPZiGtrSs9aJtS0>>5-qyOQj70`7QaZmi^Nv-FpHMsgOSvK{Tz|;Zr(DO{_x(<77cdIg{)q(-$fU=> z90x(zL|S#Y>)GCId_|p~P+nHv7V8y~QnybO>afVK(pJuwF0Cmk3*Q}<1Ls2cboIKJ zUkGN>91l0LYvNqril|G%8yXttQfx2bQqm($K0;e$4AO;jJxAZZWd;r;N-azqu;z_M zi=)xYN1eDa7%GBqz6GK>t_7A2g2_anbbq~A88uUUDb}sP?=kL~_K19E*uv!JS7y$0 zn(4D=oI9~@iE0kSH)l3;dK=u%>ES|qX%Nb1TZs_DjH|8$!`~0?=oy}}qir1h>wtPn z>X&g2FuvrIh3+8tfm%Ae5)VNaw)<=-PpLdVTm<3O4kCsjD0mMZ2T-|FJlJoT3=6Hv zbyaAUBG&M`UUmj@xZyq0o1JKgRpd#}S<;iv_tP9XD`(QUn(p3?0+qU2@)y=j3T_ok zXCx!h;|ZU^c(&DB@0q81SZ?l%Vw~gE|JC2w&}~sw9QC}e^R{HgZyWO)MgQrSpbIXI35I@^ zjvf6e)a6o=GOG!Dq+43%Q=d=7N zZ(!9Rh(ijTJI~B?>Ycyme?9lfYP04H@B6w%S5&RSYD&5NY~2=uw6dD;A!sU|&%|Hh zd8p`(s&#lciLf;^@LP3#hr87fXx>o^mp(EtH+zhQQl3(Dk2YnjCKaQjH>CH_26qbY z%iZFr8ZiA0f6GqWOilsRg$M_|quixp)yo8Db^1tX*l`A+qFs2;7uW~0H<4tGc#qR% zw!kDBrGe_tNIR{SsF2WYsG!!3hm6#CV)wtdKG-7U0^0~n+KdOstOyjT4E?}qsMkup zh^%Z#9;FdQWyBHOcY2X~(d(pjI#I=P?1rlKxJe9AZg_r~4u2n-rg$0Ip^#tu$X0757#BO@!v5-yq|bFpG|ora|1ZY2Mh z#oW=Ol%P(|I|Hg{`)0Sc!Yx2@(=dP(FoCP_M>(O$d@z<{P1}dQyxg#uqU3(r<9*BM z!`Ji~%QM2u1`X$FTz%hpB8ayC6DGQGXQB{a_v-ppbtfH7`kS)!N(fz%f*SP;G1s0S z`}MC;%Y0&Anr_u>B2&5Oy$;uauS|U1h~iborCJ_jkMHPiCZ1_Se|5oNONzB0M8c7p zDG%xUC}QPY6`p$LL>X@W6MUS${9(*G$8NGjY4MLin~YnNaLaBs!6vmy-l105j)n6F zDRCQZd@rT{`B-K?c9^Wbpi_z8`)Av**)x>+_FP*0H~!NO% z6B(<;GpONd5`9I$JUT@m&x2!G`yNdZ(4~y6z0#=1LY9@erB=LDg4q=r``97Q3LiK@ zoB1p)j&)+StH!u_bLZ|Vn}I(t!3+O=13fx|#IBD~c_zXtJt~$L+fDcjZX3;Ry^8<6 zk`(Wwn69?m$Now_XBAY^O)0Ehg;1gn(SqeHP0sXG$4$S=7#Do|E<_VX&>5*5sWb)> zuc4{i&NLJmakOoNM0B(hn02-y4WV7M`?U2dAtMu8QsMqyS;KRHtyG_uV>O&jYe#Ie znGAogmSfAGL$RGYX`!NtK@mrvx;Es*Esgl~`jv?2zDr`h3UdN=MXmNztx{p8@;7dy zO+$0K7djT`=u~w%pSJg2S_G?Ro_h(+M*!-dH(zYwz!K&FIT}O-+O%vKB%b-~8Ptuj zHeJiODB$KI7(%I(cIuAbe3Cnjnr8jR*rzP2S`=&^CGHT{CB_BYEL(mbPQV?%Yue{5 zxfSX-Y)KyHJn{Qkb&KB$CP{n~D!=9g^d5-FSA|`K;ThKse4+T6)$hHueO5oqa5Yml zu&a0Cm}mvRjM3!c(F;l$s!YgxKkBfRMTtH7b&#1@F5Ef?%zP zgfZgW=MK3ME{Lne#L)F-s}4LzxF#Q2WWCyyl$}Y(STl|TDlIXU44Er%uS_K zkN+tL&uBR$=^KN%Gn30@q1wT`2vZIwuZz#hU61?WkHUKKPy1&Z1-#KYjih@Vr~GP2 zf#&`18+Wach^rsFrbWL>1V+F3PA`tF(7lliLVPoB@=ZQ;n5!K- zDbB7?5>YQdF-Zmf0;Gr+-n{WlwN>ujjepqO-J&S9ddUmHF$XcOS)8JHWW-omBYmo$ zw-a_)Wc+led29{5MI|a&HDA{>!5rzv;amX}Zs*%y(N_|=2wFbgT3>*EPa%|?fr zw@zzrT4PbZ-xu9H(=SDxt(a;47)k8h_F@Nky@2O`Pg73F9Cx7ckYBBk+J2^TZ}CSJ z(+|udY?@!Qpt1Q)V{u!LbSvR2>|_;Z|K5MkXAQmrW!x1LnAF9BUgZM)Uxq4l4ez)yVFWK4oyn_Hg9RJa< zw#mL}3DtKyUP#`4IJ1RDZOT~&zuTZJlj{1eIWkuJT60}UCdMcZ2)&uHa$*XwY~>t!hi?19;n zKXbZ6%(p$M<2;%l-uvj>xcTP3AD#%hG;(o4!~6baxy*eMA(Z!0f-QLO&3-b|Piy!` z{zzHhb@7-D&UHQFZ`*@fkb^RfyU|a*|B%m=gtFHddtbx%6*#Yy%7^^By+$PWGk032 z`a;=L%H>mVUwiX^KFlnPfhue`n6#u9Z3&6!Tj5<=7S#SgRW`@LwAwDcQAd;!?maZf z{gQ8Mqz0N*wXP8BwR4V=yO*|}rB^nLTUx__?M2* zVlDm?DeCz>Kd{Gr%J$JC1D0vO+L5jrT@$7=bA7`I1F~P|kSPwygwH-^%;`X1sa*Bl ze;8xi)i^Kef%vWcB8nS3_w|^b-#L_T8Fax5_iB(h|0$phw$NdX9nI>(ac7|cy0FAN8d^-(ioMR01K5wt z*#<}&{U?(cT(X4SYWo31=bcN{w1>;g;I*`wUBBKW0&4*By8h6vOX}k_)zl@M~i#%Y-?5nLp2$e$y;ow~}6yr)n$q54W=VCYxhHbgi&?(K5AF5!DK*3@v|>N&N(ur2WSudidL_K-v@7qcFx9$`W&YMI>dx z_i4Vv%t?ActormqTW%wH~2DRM$53elg{WR8p9*EGgApRHWOoUdM`~Pe7GskRx|2Kim_W?HV zTFjl6-|Ok_U7JPz55nI6Gxo(*f{;s6NY8)xfK^2Q5Aw|-jPpykE9t&+}e7%^+NSb}0=A0ER4s4!=LUK#dK%`0R#>KYDb zA3)7qLHXc?)#wzhU+850F~NS!-=pq%#b#gRV47EaajuAg+@QQ^2cVDI)fddFV(3r| z*SA8%l#jr7e4z$7pP6G7$?w;FbQ4PMpE8O&l?o+0)k_$7dx}vPy_$VqhrO$$u=2s5bhH8aes28*ib@x2;*ME*ncpCtI=t!lZXR6; z?Kz^)x{vO58Nm1-Q|F|RDTmp_RF!*^j(32c$i;yjw>Y>h`pkB&QCC`m+RuLq&Tyc% zeSUw5YBzDH{A|K^!wH0{=*uzkX&YM;Ue;GL1moYsG?z)l5cx6=IMwZy*bQVJAh!TP z!1UsppIV?H_IG;GZ>m+xb7unRt_wBzW3cxDxi1tp0Pu8k(j*P2(8dQ`Oo2IQNI*WV zMV)aQO&}ql<`y_`^_@`|JF9sJLXS<{xcZVMulXjA*X^d5SI${xR`F51ccMZd|sttg?Z59e!!Zswu-mL9H1ew7=^Ay?^AFs)j8)H)9J ztT?FS^+s2oA2^#Z>r79UF(Yu<5Io>9=;0Q%7gYkK;`JD~__b@-O~q*6Ae^HD0FCTK zC_K8~Z7lpE)xJ}+Sv#}_=4zBW99>JQMMM@0+>KM)QFX!a3BZV`ycZ&U9W>SJ@7lpX zd<(gLb@&h!kwYg?O2;)PnYaBwt#wVTg!>zfd|P{O;Tb)(q9y|0U^-g1zGV zNEc3|H~-r(apFAiHGp{)M~v>Ba@Id`*_+At#wdRo#`gHGKM*`Q1F}@+>sh*f?uXP; zQRdgI1)W2k)#!#Y`mU*-+!;X1Rzzt6vjG#1kYqlgibEx;11;mL>FDYc33(=|3nURl zZ_3Zcx2#e>yD3Qcctsv8N@jAJ*0o3|A0An}UIPaGAnl->10{Yb+Y~Bss0k0!=u~>} z%ZYioOSj2U0Gh`<*$wbBDEfbWN`+c`2O|@cK#kt>5QMf>y~<_RO#fVIb`Bl=g|#wr zf1pYrYWd~Am00k7YQC=6ZO*2vt>;cB4s*|M2dLT9s%?ySd)8W>H@eGDni!uHOQ}2^ zcYZ>(DG2kmD>L=$fp98BLExm%b!P_l={&g9SIdxr;OZ{JU;bLBHQQXLfC~Ng%xjH! zH%iGvgVD5phAbIoh#o3TJ8j^RZpgP>Q|&cu6ab0Y5nN4P#w>i(VaJH{)LC6K4KZKD zY~;R>D{OY0k*l^J54jyq-nmMDE_t@>PjVUr-b9p=LvNt#@1Evtac&hwMP`G?T#BCB zaExb#!xckI>Pz*xThBYL=(SX=0sTPe@*P;edw%WNU>Kkl8L=2`6wE`D((I-pmbB}ffMnY@1-Ke8oh_4&KWS*Ew8}NMb zw%Ql3`2}-84)X=sD-F&rA#%KU0^}2!8rMQ$vd0IJ76z6E!O?xsi8cn&Ro>`nz7Yhm zFzloD!Mk;LROyv#$F+adf`n}r*LyB=c_NHBSr{y80?)kpE8)Ud52)zq?J*$Mz?TiW zR(=_9vaYi$osv$j<%Ttm?t+(E7EUheKhfbJv;qkU*^ozvGhpeOxbXWbRkkA9JRuLT zaugWlI$sv&@#Lb5hqUllbBim{dSkLQu6 zz0urPkg{`DYE`CXZqApR+-Bif|A~(ed}Z5}mwN+AR?PknLg9dKkasX&!4|o73^7S( zK-0@K-#lf2E!zxw=*Kb#&;VqVMmY-@lfv$VzTc6NL9BQl#Nh%5Q!molc|LBqVx4-u zOnT+)Rj}Q+VX}^8U{=5pThr6|%YoFoOKn2I%XZ#eD?jhtb?7opaA?^2`I!*6)@%6- zbcxcj{xxu1tFKlW?*GM{c3wx50qk#YBdh>_YFcCCA-U-~y^n<#ZI$g7d4;-;ycoyl3?u(~8g1H6j*1pq|Cv!C%$O z;~E6x_b1>iC3M(;^hBG?=a7NNsQJDJQm8N(J0fS}!N2-&q(4dM8Z=3{9u^5Fu+r*tl^kwL*5S!3 zv3(tQ>Km=pciymY4CTDSP4t^%D8$c|-=$kv3Sj%r9A#jc_bZ^BcqjB_U#skQAwY8chhNU)rZTOEjo-|M zanf6*Xnqw;+$l7Cq`ixu)mzU5Kfu74$FKVYy_v9l+8yy?{GPv4|J8P5@4Cuw+ZRK#|7v3SYb7T?KssWe23t%{IVjU^ZKKIUQe(|6utS9wK67kWcjN)lZ4$LwrfY$t5bw5d<2p-xr|p5N zhhvT)B+$FKSy{RI+5dO%O&`4Px9PE=IsZY@IF(#9iidY1GFW`X3hpM=q=dNU%AJ_L zXEv`oCdI|`{RyQ}dmX*+EGQIUn4@yCWCoC6A~4+`S)@VvWwlHuBy@rh7C*8vG~t4( z9Usq0ghC9*SGl$Ya@?RJ>S)=o%`X`DW=~2y45i5kfNm{TS{%?=SCa9E$sn+o;oRqo zb{5TQJ@#IXmW4H@}4bc7!7zZDt^ndToi?ewKRSpg(75hoOILCNb zdMB6F_0T4{<~C%w`-q0WVee4bB8#}0U>kOK%$=a?phS3jTt)}buXfxd4`#iYmc1uS z4tOL#dC6Now8)N>1`BSTzkb85w2QYZGcgfmC@m|QypBe>xq%D1tD2qehI(0laZ?1u z#yiY$Z`%G*FTK&Mb_6l7a9pAJU%xe*ZBPI}xv<2LaYY-CRNt-`QUtxvH=T;>n(Fwn zojPiI7d-tG@B_v#IK$>73e(~x4yjW?D&k!!{-4d4ys9OALJgogVT8&`M!9e$v(;~J z$N3J+@&wr0Ee6#pAoIF*jF-e3Xk-IP!~jz#-hnN%jHG%p-Kk&9m-N*O`OE{a&Y}m8 z+*hGW*@DGunZy*-PXoh*KvSkK@BwuXuQH*_h3F&){+YwxQKo%Z(a(llgD%AJ5TD%0 zu}suv#ZS9ihCv3kY4#LyHU}j`Qj#*o()Qka%7?6~n{l$;FRX`+4%Ex8-lfwtM->G|*c}YgLsL^qsWZ0z%OmUYe!@-g#lvPNe9jS_lpL|7 zwlpega~97e!qgx;&KH>Nj60|cC7+O#(5DM*!6)6>{3O-a$6q#WDr%)gxaY(=8rbV1 z9$vb<`Lr==!fT6?6ms!|*3XiyHeCv_8m>obX3=(z8{xX6(|{0V2VxTc=UEB4KSt80`Fphr8>7ncHX}7W&(h4qhMR3)VMDtD z#SOjk;Dn2pm{Dpu__+BtCr2AtJiH^drzJSnysi$1wZ6i4#=dTHyn^;Gri4UxTDKIe2k}re)FN2F+Z*F(w zx!3!X%=!^^H~}_rE#||Jf7pN+6dTaZY5i|XyGOYHfpGk9K#%|Bke&}B=@c3i4*7BS zKjnG<8^zxL>xcUPOT_40<$GNis}TNTAN>=G-z3dHUhk(e>5mw|bZf-w)$c%>ZQoUq zT|d@Ifc`tE^S@l*KcGj1_J4DTrI-{(Z@Ij%-?r61_Y@>c;0%tBq50% zaM0&{g%?)~MkE5`Zn*+eiT4y5?b@u9ZSPLPVGURoEi3;p{yJ9O*Z|u3NK!ACYg-6% z|9txT?=*hsX{|3-QQJu)5+}PSZLWK`;2$?gcSqLZ*S*$*0ny%fB`MA!Gm2W6~5>7@xOwG+oxVo&-<4j}7Y z#4{yJO@XAY%wVjtRaDA{p9dU1G*)gbj zXhN&gVm#evVb%FDb+M61>$#zdK{E}y%Hf%Pxr*rg%o1zC35h{?oi1F+2#&><5%7N3 zw56~V^)h#ad%9r@3m%-dN5{O2&;Xe1s**RRqEDy50%`69Pg-|_PF>}-_X+WA?(mq! zUuk;Wx|432AfpD%$MriiWn1oBjZu#?{TGRdDkQ(mE23-v`2j^F24N zL7`AD?DRRP(cMsk9ccW8U!37$?4GeY=z#J#3Ein_&3^4n;Ci?5)aS8L;~y8E+y<#A z$g#^w=%PDMX;F7rGhGXWN7BeGu!V8=6C$Zw`Afde!BwCk%0Co|*zyZKng+-69q*Gn zCzQaR;)bH=L@8rx$j*EOY8hw-VYg3#UOxjv_6(-UI&>IkK%HqwhT@UXgdpgp z)9Lw4W+L9=D?FQ?(g>JuKC)W)+};)-(Tn9#`SrXuvH{Sgl1uM1|Bi;))PtX7GWR(n zGyG#aK@M!EDBN8H4bw2RCl$qwB6S3VZ9WQDuz$&GMPi{@8cR3wQ!2eed;j9XG>@|m z*b%FP(G<()bIZm;p9wTr_n_5^ zROmPz0Dv;hSzlkM9aK%1m>V_6;i5XSK6S5vjMO zW-JtAP7ZxNG@iJj)+_w{v6RM@^Nhndfvy@QOB{BBX?neL(iVelO&+JE4;sedb7;;f zuY}Ch3wkQ+jU_sBeu^(e37l%KfzU7(T-W|`MF$s3uAtAI^nOZm;0;?!-2~uYGT?{E zWi-l1?_Ur&fKqb8Ie~EVIJ!AJWp9X6Ib(y2h2#x=;l9{iu0!!eu5c{;B8;BcMLTVP z4QdXz8>0$DEczEx$EJxJqY=ciux`3lW}Mi+mqz_fe4?Gb2Y&(I(%0pTDm1s;PA)_> zsI|v-!?^SQ0g+150+jrz=u`SxEseDLCU1^|ct?26CcYGT5_$ZJ+^dj%c##s8EPBK^ z*C+OgQ`dNr$8}crWRR^)V zoyr8M2CX$0RO<0AYI9(F-jkQ;Weox3;?}(O(W^QmZ|m{}Yd^YDA`_I?aJL?{P|$*^ zsYCgI*#=bY9slgY0EdpaB}A(^`y}XKdu;_AML-%v730Un17{>$;%^63r|>FhVRcD7 ze1L_3^GE(&ZxlBV3aKokd8UkJ8c}?LuhwAP40(Icz5KRTzlYT}x0+}9M)Mvhmx{|4 zlGBRle1LfDB>_}+r9AY=Jz8JjW$Oq3+j5)v%%X}P;9DXtKtWXmql+MlZQnQcm&maD z+c@Lwo!beNK)Z~bdy9F47F5DR)TszLmAjadpw%}V;{OrU(Rc)FIMg`brOEw-_~lP6smg8 z`E$N7H#9|y;m{`*EioTEry)Z-R| zKImQjVK9oPz_?0xGan8KZ$;2YaUHOZA-tXT)!aduY~FgNMjUx@gP-V>O=aK;6a(u$ls+FaA-Fly75;)7yYR2j@60bSm>#y~C&vvdaquS)FA_42c zx?g;GFxli?bW>6}RhjQZ|My=_)|>(Ttzl)LP$wQt#@PIfM>_V*((p=*!)fw2Y>ZNdJdUUipVf5jwtR?K5A`2(+L@Jj#CR3=yt+Rr z8ak(uDQpstC!3)At2N|b+okyE_8=U{S5!sYq;%L@Uxlz`$*8TLXzhGOKFCPTd(WXp zno5Mf!^z1ztWT6MH%|2=t}wmMuUpWkXKofqU&b#JCASKXF$@g5X@7jPPnjTVa=)_7-gh`>Fx_kaKBdVAOip2=xdY_k6EjF*9*dp@< z8&zgpw}T;yUs<{M@+xhTT;kud6IlC73UYAQX5M7Lxk9IMG3i3Y&S$PcytfPIa(rK~ zMJ((!TyTjh;VCcGcWTC+ezG?Rq%Gvq!52j^y&jefFUiyb2Sm6U3)I-!eNM7mHW<0| zVa!gciE#;Qy1uN4)^!PfSd_KXkmRTtUZRVV;^ zaJQ~+=}B@Qh3;EtTa>TAqSli`r()vs7;h+57r5~8GRO2Rz9t{;ZwqIxy!v?;O783aUoc&QEqOkPn$10Ao^?(h`HpY% z+B)c%)aCASwB?ut*5HagUbvj zTEo^i2-S{;;E~BuIc>pi)5b)6d{vTNF*|JXuHz@G?87}0k-C({q+&1YFa_D9Nw+{3#_iIkV^uT`!s)wV|E9=e88#dl zTS=~;g=1zj#Z6|d7Bptx^lfc#cpjh55^0E{DFL4S;8u_^{{@+r9if123Wtu)h5j)! zd=mh)*!GW7krR(U_6oTCP!LfgVh3>ZttrsF^@+`{unT=1DqLxwe73*ZR18+NJ@Z(r zew@{fSvUo9zpV$mrqo>NQ{Pfm7X((ld=IK>w-AKv#6SY;+@& zI9S;H=!nu4g`C&9I5$$u#6}rl$gpMeumffhN1y|DBO|cn{ymJ|@RvHIn+V|5?wZ$%%rneBQxm2|AA_K(^~(n?uI_ z)5raLpZ|Y(%REF*3PZ9K4EQ^}W(JGJ0Zjwl(0RQ$v`p-BJygAW4^!p6lR*U;G(&Pk zNuNw*Jo?WxADScme>3Zt^%Z7=PwONNP*o}?#r*p0$>HtwG-->|eQUh=i`i=TDw-RT zIshF#Yip549l|?~_oM+>*avkr=roR``#WvZzI zY*hcx9kHW6ISm(Y$FPi|qMP&I`W9$|Oee19LVL7aJ8&iY9c1g`%1O5@4{c21vUY`I z{4c7fA*R*us%&=DX=nuA)4>Gbi*j&=k`Ka#nADBG1`1nq*_{E`hRrAQ|C>b$)Pp7g zTIkyy3-ApajF0V1Pe6O-k@_mVk(P1%Y2syfmM`sT1cz(TGLWi04Yy*STA38~8j*K% z*lN-M3KhtFRv6C{mZTsmQD-t@-v5uo2T`_pb(N^^ouGs_D!|zk&2M{y$0u9d<%Raz zYKV-jYwO+Dbekg#>!KedM+T1WHPnu>;f2y_2PDMFxswWlwY7xB=`#YE_ z*lX5*xvZ-2a$(IG>U8tlBzFmj{N);D<5i!0@c(tnl@z3f4Y!(;k9a;(lPPWgEw4qQ zdztQKV`KW3f?*+oVMlS<-yqSz-;rY3w0W~f^W`mSuPs}p!|@a)(w0DpQ3K3YMxQd= zTB`t}fr71Lq#q=-4?87J$`IN+(X#x`$Ydjx?0IZk0OHEjZ;0_L32^OAkZ}1|Vu^64 zU@aU{L=Vh{4jX9!Er^&J!?^t#z;;c_dsYlJihN4Yz70E%cF9_?RKBPdg(rww&4#MG zSD`KeRg$+!qjgn1=`$-Y+!G;X3utq(x2G;kKtjk9Mbjy`t-@eaH^mOL@8~+0&`4`- zi^|sFaLo3Ga)f!meZSJdq4S72c)t>seOjqK|AR2*59x2DRUjb_V5d%VecoGOH|O4= zpv{_ZlCJ44uCh$SpTxCs&5jTgyw&AY9wXo1H4WS&eBu9}W(1_^RxN6KhgQutsamZ^ zL^gX0JcKtWchjS;;?aJ7rvuDuj2=xS9b@2ZTF?Nr7MQcL+G$A0F^;{=)y9t?~|LMN-!w-GjsjnJbIbHo7(z5`WdZ>+ks`?{*>gUu|N~2 z!GqGe>g&D1BAmw$&*~QUz|xla!%GjsmOte#hGCthQ?@MWQB6!c&B3El)NCE!DEh3# zFZSV?8i}spX{f0M_KJwOi4W}EKkha{^Q`hnITM2qR|ZfynZsL~PF?*6ge0) zp62bZsp~ZSa=t|-M56M5d|?Ltw>=K-2D_$zcm8aTXeME8bFjMp81f8U$l&5=I=%OF z{{yxE_3rOct>VN)*9sM6sk9=!oki#5n#;%~xQP`S$W|!tqSNRfS+(M!vQtv6y^MeA zPZSd#T?i3xa^~dr+Of=82+)?{(^Uh78)r5w5Ep%u$ga;k)p|=O^1K*~TF`s5s9C-jDKhokv*)z%QF;7O4&xeCFl^HhyhJ zDkyk_lSh0t+n)5m!@7(eh#|%cgO&z2coK#~!zc^HlyEmhykz!D7AGqdI@XUN1Q_`W zdPAH+>n*87fGXg4K8{@}6fgKfw(H}&Hn^h)&8FJD6RMZ>99K(U<&M~7JyczlR_vh``@BDSs9m;-F_eWTE?d;WPW&*zymgn%#&_)nj;!Syprys1(*Jb$1 z?M(<%-W>=_5Oz@N)a+cJU9T!uo6>{Ty3#6IY62q812`JKx2oiyA#$j@WNopF%;oTL zQA41K5~hoFRZkIWughq-C_akS7&yC43Jm}PGv2@9dxAbkJavxkVz9i%`F6);`(17M zt%;BU&w}5-(9mJ@v|AaU?;{CSQjN3V)aWC%WypX2E=7^SP3-3uy~=F-Bc=L~T#tzh z(>*pmsq)n{#ErxE0>Nn_ZLt@B5p1N_mV*SXTmq9f!sGF@>jdS zB@^g?lDWNZ1%Ls*}+A7hE$9ybuUj0 zI_j^|`u#ic`}Ga?1x>yfDhdhT|AeJQxHp&mSxp>UV}`c;WKP=c8k-N(d6DJ1cMhAA z@Ul(8K{(J<4%uk$tvq$s>_#T%CJ(9w`7IQJfnyFU$46pC%J5Y(AaiLtlROXK%r z2m4>Yki%HSh zn0#gK${v7>W#C`k2pfEyUh!)hmaHjXbpOiX>iUk7Us_^nBgRNG^cD9FaYrHSD*9eM z*H28?i8XyH;+;_?yK++5#MSD5p;8 z8xFM{%WM$QJkbJtgSXO}b1yvk1i4qPqtQC!yrx&7n{9GbRJSdBgxp9||CCe@Pb-VF z&MEC~!=<-3q#ZxAv8wO!P?}wJ`4N@!hdLj}AlP2Rda|mtAX_3-wQpR5+Qa*E*O#3pw`EyxgQU%EjpyvH3~CG0lJ z3n~+Dmbl+a+O{TYLxUM9H#RX=M&Jt&2L^dWP_pBO^7#)4k~0j4ifmC~aw=pe-rA=0 z9pPwtQYM|qJG;f!^l5&@CP4ahi1(Ur8lkV!0c(f!?uYyMtYri=AQy^OVRqsfqDX9g z#Sr+~d9Ba6e;MNfP2Bo6;W^2NqwE{}g8OWLBuQ;HWQ*#f3=o+Ydx;~=i)|G0ra^fovkI)g8kYjT(@>n(A zMXEGR`=cf%<`WE6FrnU(rdLR>fh-6Gg<7Uw`nGi0?2&TKps*_TC`^1!{YTf=mMKX; z#`0-l#2-1+_M4bs+g@0WIS32M>IDi)pBy5r(OlWAZAx0RbY#kj<4AvcL7@b;X(KNI z%LkaGW#8yxp7B;|{L1iuh{K#sFq8uU7Z~MEdX;_S?49^iLUz>EJBI&RQAFTHj5>kK zQ+-SdzLkZbv)2IE65o#W;QFcmwct9VOe>zGXRe3~uY>@yZM8xMT8T*hCKFZp`EeoSk;nHJ!F4mb zJeB#h-`?U89sy>&Q!nC@+whSm3(49Gw~;mNDtC3(FwLmpbhT;l*YAZyu^*R1|@w%SrWbblLgla+OinFW>phz2+7>7JH$d)b?MC zoz~a?%r}(gTS~07O7bqxWhZQc{)2S19P?40RoJCC{S<2RL@F3O?eMbsiO2z{xgIh- z%gbE~z!dgL?U<;l84BV&lFKJ9*51W4oJnWXdp7+czm^s>h&xgYt3G4y)1X0?X^J5j z|MBJh@`#?qL$NFEPjZNM-lJi^vDr}udjTVyT%6NugN&&+as{Zaq>9|fL=+|s*HYA* zRnWC;NH26^lqdoFmrzsO2C05n9T7~L*)?~@R)Zua?qw7lG!Y=&7|=^VvG37FaalX< z6#=K)mI5VhENG_tK(#*Ayp@@^|CA(Fr}4E%lB)zzsYkcV*y);z%QKgUy20@Q2M*@z zg*}VA;Od{S*75Qi1*L>WFSw^M&L(aYy{QJsOtEfv3f+)#^fyUkn#kLlL6C(<_I@*L zD-bLRi`$@eNa)TF`a9wcxNDK(PH`#jP+Wq$yA-zq!HYYT7MJ2q z32wz*0^CF2clX|T_s;C>?EZ0gcK^!^hmbrcoSfh1`AQrg&lPN~Tr$hr-p znCVG%xs0yN5$3^hbZDUI$;mwtyW7a-cKR-3BRmp2$8hOW5oS!^H?OvN0?Te}t}hEr z0>|3K6@&di0y8omgt|@=^4%%7h0425E^T|bbt!p}y~aICsDueI!>7&VEv^DgR9|{V zCy;*5ovo3~@_&eA@{ie;b=-Q+!QsB}57Ws%xWrF`S-``fn0Da?-Rgsb5KET8%Liy8yslTYc80rZXyASJ{^Nf8pdC|Kt$3pScK z&Q9u@nA(^9YTJDJ>yZPEOLXU|RmYD>#u7<5@Y&yHd3eIpfP7@U;MSX7JZDVry6&U% zoE6pB1Y)$Xt<5b3nJZzMx9}KwsV3U%&fC)vD(t>dwtv+a;vrsSglg@zFnSs1>%T(jrcC~$J>N+rF=2fT zbq3gZ-DecIM>ue}?OmE2cQi}38;Tr0(q`R~Xfv!opkeaxQ_2wZ_S#mOO6Me+p2+v+ zNj{kU44TgKE>~g4<7s>4iS~rbnpen_;!gv`YU;6nqJz1E`U2R-|DDeBdgz7C@qMT9 zfOiQ@!NlTgJmX262g0B=CP_+-!Y%3vXz;Cl3B~;|w7wNWnu^q50F1qn!nriL`-8LI zk#|(kM@)if-pL9v7__+7}j=Rqv z1OieHKh^HVpnu>4fbZ{VLwT%nM*87ejcLUrP&W91+)OtjXLWh(W|7^9xmwfFX9oGWVT?{_ zhq*hKR<>ZNa?TU$L`rdBKX7PazkF}v`=tk5rz;%`9Q{NE1bUKN#Erwv!9*Nyy$|GN zRGT~0ugh^j@iJVrIEjdKQL2-tTZ>|US!a+d?*jBLq1)X?7#7_h)FPdv&jaW`O&p`_FYu@j^gt;TMzbINS?{#u_}7^vSS1sRVXz`-qno zD>h+rB&O(rJS-dHtt*Hd@S^H5fCiiLlJ7EP*OhzYggahTG_WLe_JsV(n~l#8(583~ z0#zFed{Fj<$nJc4{z@%gD&KwKr>@e2W~6o&SD(>v+3>u;Y0W>OZgGd3#PA@b^B1)A zZ0?e!?D4AN`P0q(Rh81}U@pjn;TqibEN=E_nJ#x#t~yg@ii;6tz+vHUey96+AkYyq z=>)0d@PoHln7Z<;xK&9GV_N2nO{t5o&eM6Ua&V@EdFPoWUnQdY>%-VS4EXxM?r0BE z0mQ?lC1XVaxP-;Y38PT7MY_#v6-_Nr5{553?v!!Q;Nz9acJboDa+Q4zM|mRnYW0q) zYAB4gTAHfz7`L?VTBH(Hkv&ehj(f;C%8Iz4m z5N)c}4Y6nQ>q%wEK+{uGsqiB>7g4dMpn~93{jmPL4dPGqLLKy=%019lqs}So=cuCe zQ~|7#yZ5xMY~Yd;Cch93x4alLTbCz>%kVqb)th|ux8}lc2zpRz#l%iqW2|6DN8w5utM>f#MV ziOA?zV(yyM+UcUpm4>v5wPf2&S^(OUh-Hk{K$K zi*BC>viUM@gimDyP5k?eTAWCG7_?2;Vz<#>lgg3%2?~BLT8|OrVrE`uW?XOB7ILX3 zrv{Svt}t(5DfBYa9L_K|$%$6$!W-6enw|6$jq=Uu3gx}zZttlUdE+@WMu(APUzQTmz_aUXE_(yZ zih@-F`G6DI-lxp_R+_gTy>h+SXgsYhiHx+}$Jx#4V*OK&*M7VfMHlSU!@Gxg@z;nt z*u(sP4eKIkW>rQFxa$JE0z4Fxf*?QUAGKM(jX&Rula>43HzA_Z+jdB2WQis3@Q=Pf zV#%ZVtUK%xXLb?rjz*%UKhC?9Tw%kUL!%Dhx?wp8gz&E>gvW39=Z2LAvNsMW*n51d ziF*g~u}?`Joj@;uPB|=uB(IYddfF0i%0vt5FOlVWaUgWQA1wdf(WNxB*%Yd&+6zUu zUuKZ{Z)sew&=23uTUD#{&!Dapbl2e_yXZTz!L!A4+N}^*82)5;qcfF{A1nSkjencB zh05L7(d6IhlSxk1xwjpm0~M8KfGday*My=r1|9PLGox)Hm*FGl7j*DfkLc)|FApRk zcVW>~^?8LGt;3DUs1&NO{mJbz&s4NYyD@tjgVD(w{VA@1MRIP%o0onqaPH17=+fbk zh*GS?PrG8j(sVHtwy~E^a~hugq@^*o)?**_IzFQ4)ted?+%TiNN(7Aj@csfBe%i3f zOM}i3HB6;tU#v&m{%S28P;i8{%dQZcD~KlDYap!K*rn|`uNY;CNxUZehR0BP>?~@< zT;qw!s>A~Kq_3WMu|M47<|VZnnLRq$Nn$9fd^v=sgHR{t8Rb);Oi@DxO{a_Dg7sej z9*Yp=`1pkt8DGUVmV{E0K@F_V!rVA}o;E9qbd-}oDZ3SlN1zvMg5o(bgj1u39aNp% zhPuFRC^Xn^&mD5A>w~H4NA`N$}eT+8cRwKdj~TERudNl*k>xDOiL7WtUJo&*eN#oL8~6V@1U|URSPpGWj}ANdIA14QLudz(J64s0ojbh#K+#f;Anf#1g zS3*_I%F0YDZ*Q^*a5Gc4q##{ygC?i}ZySitlzHoxIca5jfSJ;a78oEzIACT%ZyEX) zB((g$0dr@6WLjNfPJsv}yOi2kT=dbYtIY^rh)ll=e00%xCeMF08$Xcy*%y`IJKGLxu zKxvKD+*)F+M5-$FMGKVKFo!1VKt82i!ljv-j0}wWHF3heL@jKw9Hu^Khfj4?KkgqU zR!_e{c@<=L`Z88tcXlq#uE}@I`U~;w&rLTLTY~3{nyPxl21Bm_YV)`9&VW!A_{bIm z5}AN*WE^X|7+r{n5ky2%g~&;63SZ?=xzvin9R%w7QaFlJKcSGn1YF9Q+g^utDuP`V zJT{vxeyzUQH1KutOFznVqR+m3am9E(T|=a_lQn`(Qz8-Y!BX!k?y&fi<5h3|DMSLn z*Oi+#J1|Cn$)Yi;mQ(<6uKE_(;np#UfUz>GP}MYa2S00P^B_5t60b%~9K#&_D4#Nz zIF9zsBG4<_CYvGgN++pMAajityh?>~$&kW;=$Gf7nL6ePUUACt$V*1kVhaWoMk6rs z^!Aj8wzOJCwanlObZp?(VB~R0Y0U12AmF=Zma9vL_PdaUz^LXX=HP4ccp4hLl4ilU!vc_s zv$9OW5?j-eXCS~c5;%JJ=DbO0!0bjSYnpMNM63&;Th)Y{xY8zdzY2R;UwfAJt^d|y{TO(=O+^L$wt|4tmqGN8M z6(^FX?oza+-yB96QaGuHlLpb+k45WYV6XTS;@n22Gdl~0DXerJ zf%;NQ32nf?fogu@x2-yLGk@dl7!Krw9JBfn6W1b=^v1!5^DCB8KZ;XWVv}GeFujcPEIm#_pSr-(*xfmtaN3c@q@XNP;rsmz4Ey+uY)6vyt9str5 zm?;0cE^!P?WvFHObz->vWnEG4LKlIl@+*)A;tew%}gjxvcYLJBs+67|vu&K>EMo@u<)`_ZSiD+P|`D-8Xj zk8sfitI)bLNc6m}_RSR?yN%}JN{5ib6D>Je-{x{B=Fn@X9DuV|^-&(_7r@vJ3mw=_ z9ydf8!NjJ^!8ENkkxu%?)HNz}>;A^EIii@LZ0djEHm{%l*XK55(M7TTeOmZ%A}O;o z3cl%Da&9mu9GROrNL1_$^A8<(bsia`K-KHp=sT=OA9r4&0F_Wil15Xml0pN@6vI(Q zTAAk3JX;Mo>t-H$iaO$)8Xhk4`=&u6jxn;Ev-oXPNLrDuJjti8#;%s?W(tBrA;Rp@QARD|m-pN`LdQ^|7;mf(3Y2~C+)@_VP2)S*YAOMd_}K6wt+wc%uV(ab|% z_6*{&UgDVf?HCBLImCt1XcKBIO7;r6^bZ880)PL^Dzj_xgf)CT z{2@LQ^JMyCt<`DR4{Q>UqY?Z%b=Y1{H6kRIS)$8{;2u?DtS<&tkOrdD)FP@l064EeV4_s`rXY32B?CheB5~X`gDNZQGa%*6S z+LeW*{aG?*DS^C=`i)8q0^55~r|w~S4G@3*6_gck;4%WPoZBu|C;}i*=wEw9f9eU6 zkS?HzxOarW^RV3RwTmnUSvkhmdNbEhcxdvR2_KH) z+=GO+3n`Z|4<jxLVdd8&jLV)Cr|lNeU>X!5~Wk9{og6ip>A*!g8(#54Ltq}TYOgjYuQ8o zvsS79?os*o^UAkvs7%(bW%vo`lp@<4&eCggr1?Lj3Sv#PYtRAt{CS&OWY4u&tW=~K zU9HwA1C&2l)+8F)C7v;G95lTW_@q=MBgZ35`LK%L&oKW}cmn*WTr#9!Lt$;^`)8TD zM(;!Mp@N~`NxZYW8jg$BzpboXNe6X>|2jZ2#HnUW8d==vp?^x*--whAQc>m4`6?7uy4a z@B?^zp%*jskJKt1RACkg6!S=yG~XWA&{$TQBHx@E<*^T))&E66q_-4>n4d*M@j~K^ z>^v27ux@L{k%pFIf41HGgC($v!eG>2u!!fjzb-=pl={YM_|L-S&&acpeCRBIciF@% z1MYO)yfxYov|o^Y=KSW2LV4|fqD0~DXiq*QG8Osw=h;rr^*OiIe5Chn?7Z`Vj%vjr z!{5RQ9*e#?9CnUpDU0<^g!fO+LT`?sd%Ca75TQ4$8LxQfwW^CdIEWPmh4AaFIq4C- z#$|0KXANB0WOvq%YOr-#5KGyCG`&$;5 zTAte9B4=fA>F47|ciB6ZQp+$LYI$zz-_{}Eo&pTx6&1fP1Dn_Pr}C0#o2xA>SO)F- zyBbR>0N|I(=H?h8Ype=*AgFXxRsZR(F|R=Z`OumEyWYeo;{PqZNh*4{V?8i{y`eEc zdD5n(A{?YNc5Jc8G#-k5#RYxt8XPd&c{XRjWf!jpeKvz zbF88u(H&&z;&T;rih(Mgx!&QO=InXr)5b$Q3Qm64_K1_4Um;IjW31~mXpMJ~?UW6* z!u^_=cv6)D6Dd!VBL(653Y~(ld7VGK>re3-GsN*ErQ%d~i6IzqSPN+2JFHY-{u zvXBVjup^y*>9whAf7v+45w2O2zw@-(Hz48Q$c`l5;bDrKzZs-mW|ud%fzxYl)32bC zGh&Q_U_QqZar_5-KPG#4HEK&uPO9^K#qYbW`F}j4FOhTvU*#&_&I4uRSl%wj5`~B5 zHmGj0YQuAtMwZ+X^@vj`uUB*WyDHu+CIo`l`?Tk^jvtLA%}d!QD)&xlmv!1a!>Jcm zT$E?YS{l8F_Y7}E@MpCUZ=En0qS|LaG7@G84(z|I3E&!~q%u|(>s7nRDt;&KI{cyS zM@+W~08{G78A?!Xf*-_uYtQ;P?ZtV*!@EFBukpENye*vgp^7avxy)_vB>DUcSf5Mi zfwIvyHmPw~e)7B)xD4Pj9sIK#VR^t*t}`6ChaTl)=pHncyTgy@#TI5zDF0%S zzL3&2BrGu)U*SFRAS}T>6O4!s$oVZy1~&gVvy;@xMK~Af$l4v&L>|8vYWp*H=X!Es zP2HzVyEzaUoM2<9gY06bMBJt_u{WD*96#w)(ind5G=LUX6ieEa7OGPM+s6rxR3_0| zQ>_SVZ-lu^A8Un_HY-;$A2}V#X2=vBO99tca^lO$5x{*RzM_}28Vy&t(=2#U5B6eE zMuV;r8BX)ai{Q^e(*;G*R98x*l>A9KH0L`>9-%dzm)pwPU3+w0=9hcP>__rUVQ!lws!^BMI=*9!vzWDbf7GEjCI!@f zT^9g9`7EBOn+Z(dci}}zP8v;E^kdG{|Ybsqr=++E_~D$?6ruCQo~1Ge=R2kzhji{12QEv#K_n*Z~Bu1)R6NA#3A`E z?^iY-0tR%GOgfVL!rH3XjKwe8*Tn+GlkX2{(wcJ3WNHh`4FH{fif~|GUpUyE^hj#? zGCBs@f)Z)55ioL8lw~M;-0M}zd7RRZJv5p(QI(4O9Dk88H2Mz@b|j|qfE^>oSs_Nb z1SduM7I(K}*c`EmIBMCWPm92QZtxQofQ?mkBgd0NFWrkoJzWLZI(7+CwSSWpj}7M; zRL0fSez*|;QI}l3mbFWDnq<+$W?v?XgiXH?xhO(=O1LNRU~)O7d>o#Tw0%nKa-QMi zdKoMOwmyV?iNh2MxPGPfs}+KA;hR457P<;G@zvA>eSB5z|( zsw(PI^s+>L-sfSegwz&t;bb=q$YCpE>)sEj_;*a#-~`|I?zrOTeVt|ek^b84t{1%L z@DZUl`l8(9(nhD$RONjJvO0O6t1Zm&L2qIiA7JVc{dpUux21(wtYi-KN#GUwJ7%}j ztDJDLnxj={7+%&Vi~4Uo%rD;Kf)aXK0L_e!6VTt#c#aWBOH`6n<<@NhIh}G4UzCc9 z{ACwb%MNZi0+L|6Uq)v*V6=1Y;+J;Ixx{V`YX7Mmk` zsT5l(X(7~APfK4;P8hvWGA6u|>n;jZj)n<{DJ;+meHoaxFYMt%2)*~vkYC2tkgStac~sYn4(~@HGSB6ajbp{F~6|$Y08AGeAJ@DSLHY{{nPo z)osZ9cj>gs{IG;&bi_yC=IG0y=i^KO-bba**Ei-JYl;_Ee%T6k@vrwI`GFS1qPBQUc@73=ZVW;IDwt5?bl32az((4 z<^mFQU(d+ljC8LSM||r7if}w!DPO=Ymzlrj-LLa+@By6pJAJ-*r>Sm=on0?pM%P*QQgRWEXArC0wy!4P!3LN7tEdHe+a#g+fU^lVRmJC6||$T zBmW3wV(?a685PZPI^G-bfU*BT13Y4*IaD(Cg|md9@19?E*U^KuXdLGR{Kwb+(0wsSt+^t1)H zDHvm^H=iAgRx$}v7Mq!rNB5iMz!zsd_a5W0=*kwyb+N1TA54TCE(+Pja+!`W?n05ld0k zS_}>m*ep*LQLrhcs4oWm*LtkB7JK`itR=&Ww2VRx+8?{S1LEA9r@e0wzGoE{CvyAZDZ=`{Jb2g<7b(6LGX5u9h`7~#N}13I#N{O`G$WLBQ;y{F3pug zw!##j?c|&uwOLl#5j1b0Cq9YBX(;eP*&o$*Uwp1Nl|<+!UkA5-kPfR8|# zs-;N*!7o$<#dg`%A(0)_p{O1zDZ}JHT%aY9v~-s>tsW~d zTEap(CsU#A+8$aoY88x5c_WwY{tTZ<`>y)UaB~?OGGg;9&E>P8f})*Vk^$k=)bgo& z420xrdO^4ASHP(E-8SaIv0@+r%;+HI5B7^VLQWg99cF}^&k2}v2Oj{$lG#^4UgASA z24p-4p_v0#qIW?LebFyP9xA0nNFS0tJOAUe{11nBix!U4-~orhWZ?fxPm(7cr$?Rb W+vQAQbOyXWkffNLXu0qwzkdUTU(3b- literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/media/aspire-httpclient-get-thumb.png b/docs/fundamentals/networking/telemetry/media/aspire-httpclient-get-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..61d44bda516a98ad7210ee9db225ef2e6e7aeb14 GIT binary patch literal 38190 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 D$K`LB literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/media/aspire-httpclient-get.png b/docs/fundamentals/networking/telemetry/media/aspire-httpclient-get.png new file mode 100644 index 0000000000000000000000000000000000000000..7f41b8bd3f1edd968b64cc93cd445dd94825ba9d GIT binary patch literal 97392 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 literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/media/aspire-metrics.png b/docs/fundamentals/networking/telemetry/media/aspire-metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..173b4acf55b0c510d5f1c2314daec3f760083d82 GIT binary patch literal 103107 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 literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index 4cf7e0ec49b2e..64d2d59085435 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -19,14 +19,17 @@ They are also [multi-dimensional](../../../core/diagnostics/metrics-instrumentat ## Collect System.Net metrics -There are two parts to using metrics in a .NET app: +In order to take advangage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, e.g., to monitoring systems. -* **Instrumentation:** Code in .NET libraries takes measurements and associates these measurements with a metric name. .NET and ASP.NET Core include many built-in metrics. -* **Collection:** A .NET app configures named metrics to be transmitted from the app for external storage and analysis. Some tools might perform configuration outside the app using configuration files or a UI tool. +There are several ways of collecting networking metrics in .NET. +- For a quick overview using a simple, self-contained example, see [collecting metrics with dotnet-counters](#collecting-metrics-with-dotnet-counters). +- For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. +- For **development-time** metrics collection and troubleshooting we recommend to use [.NET Aspire](#collecting-metrics-with-net-aspire), which provides a simple, but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. +- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration API-s into your ASP.NET project. -This section demonstrates various methods to collect and view System.Net metrics. +### Collecting metrics with dotnet-counters -### Example app +[`dotnet-counters`](../../../core/diagnostics/dotnet-counters.md) is a cross-platform performance monitoring tool for ad-hoc health monitoring and first-level performance investigation. For the sake of this tutorial, create a simple app that sends HTTP requests to various endpoints in parallel. @@ -39,9 +42,7 @@ Replace the contents of `Program.cs` with the following sample code: :::code language="csharp" source="snippets/metrics/Program.cs" id="snippet_ExampleApp"::: -### View metrics with dotnet-counters - -[`dotnet-counters`](../../../core/diagnostics/dotnet-counters.md) is a cross-platform performance monitoring tool for ad-hoc health monitoring and first-level performance investigation. +Make sure `dotnet-counters` is installed: ```dotnetcli dotnet tool install --global dotnet-counters @@ -52,96 +53,102 @@ When running against a .NET 8+ process, `dotnet-counters` enables the instrument ```console dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n HelloBuiltinMetrics ``` +### Collecting metrics with .NET Aspire -### View metrics in Grafana with OpenTelemetry and Prometheus +The simplest solution for collecting metrics for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. -#### Overview +The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. -[OpenTelemetry](https://opentelemetry.io/): +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. For exporting telemetry .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. -- Is a vendor-neutral, open-source project supported by the [Cloud Native Computing Foundation](https://www.cncf.io/). -- Standardizes generating and collecting telemetry for cloud-native software. -- Works with .NET using the .NET metric APIs. -- Is endorsed by [Azure Monitor](/azure/azure-monitor/app/opentelemetry-overview) and many APM vendors. +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be just as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. -This tutorial shows one of the integrations available for OpenTelemetry metrics using the OSS [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) projects. The metrics data flow consists of the following steps: +#### Quick walkthrough -1. The .NET metric APIs record measurements from the example app. -1. The OpenTelemetry library running in the app aggregates the measurements. -1. The Prometheus exporter library makes the aggregated data available via an HTTP metrics endpoint. 'Exporter' is what OpenTelemetry calls the libraries that transmit telemetry to vendor-specific backends. -1. A Prometheus server: +1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: - - Polls the metrics endpoint. - - Reads the data. - - Stores the data in a database for long-term persistence. Prometheus refers to reading and storing data as *scraping* an endpoint. - - Can run on a different machine. +```dotnetcli +dotnet new aspire-starter-9 --output AspireDemo +``` -1. The Grafana server: +Or in Visual Studio: - - Queries the data stored in Prometheus and displays it on a web-based monitoring dashboard. - - Can run on a different machine. +![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) -#### Configure the example app to use OpenTelemetry's Prometheus exporter +2. Open `Extensions.cs` in the `ServiceDefaults` project, and scroll to the `ConfigureOpenTelemetry` method. Notice the `AddHttpClientInstrumentation()` call subscribing to the networking meters. -Add a reference to the OpenTelemetry Prometheus exporter to the example app: +:::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="3"::: -```dotnetcli -dotnet add package OpenTelemetry.Exporter.Prometheus.HttpListener --prerelease +Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscription: + +```csharp +.WithMetrics(metrics => +{ + metrics.AddAspNetCoreInstrumentation() + .AddMeter("System.Net.Http") + .AddMeter("System.Net.NameResolution") + .AddRuntimeInstrumentation(); +}) ``` -> [!NOTE] -> This tutorial uses a pre-release build of OpenTelemetry's Prometheus support available at the time of writing. +3. Run the `AppHost` project. This should launch the Aspire Dashboard. -Update `Program.cs` with OpenTelemetry configuration: +4. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. Refresh the page several times to send multiple requests. -:::code language="csharp" source="snippets/metrics/Program.cs" id="snippet_PrometheusExporter" highlight="5-8"::: +5. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Srolling down, you should be able to browse the built-in `System.Net` metrics. -In the preceding code: +[![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) -- `AddMeter("System.Net.Http", "System.Net.NameResolution")` configures OpenTelemetry to transmit all the metrics collected by the built-in `System.Net.Http` and `System.Net.NameResolution` meters. -- `AddPrometheusHttpListener` configures OpenTelemetry to expose Prometheus' metrics HTTP endpoint on port `9184`. +For more details on .NET Aspire see: -> [!NOTE] -> This configuration differs for ASP.NET Core apps, where metrics are exported with `OpenTelemetry.Exporter.Prometheus.AspNetCore` instead of `HttpListener`. See the [related ASP.NET Core example](/aspnet/core/log-mon/metrics/metrics#create-the-starter-app). +- [Aspire Overview](/dotnet/aspire/get-started/aspire-overview) +- [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) +- [Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/explore) -Run the app and leave it running so measurements can be collected: +### Reusing Service Defaults project without .NET Aspire Orchestration -```dotnetcli -dotnet run -``` +Probably the easiest way to configure OTel for ASP.NET projects is to use the Aspire Service Defaults project, even if not using the rest of .NET Aspire such as the AppHost for orchestration. The Service Defaults project is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. -#### Set up and configure Prometheus +The steps to use *ServiceDefaults* outside .NET Aspire are: -Follow the [Prometheus first steps](https://prometheus.io/docs/introduction/first_steps/) to set up a Prometheus server and confirm it is working. +- Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new aspire-servicedefaults --output ServiceDefaults` +- Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use "Add -> Project Reference" and select the *ServiceDefaults* project" +- Call its OpenTelemetry setup function as part of your application builder initialization. -Modify the *prometheus.yml* configuration file so that Prometheus scrapes the metrics endpoint that the example app is exposing. Add the following highlighted text in the `scrape_configs` section: +``` csharp +var builder = WebApplication.CreateBuilder(args); +builder.ConfigureOpenTelemetry(); -:::code language="yaml" source="snippets/metrics/prometheus.yml" highlight="31-99"::: +var app = builder.Build(); -#### Start prometheus +app.MapGet("/", () => "Hello World!"); -1. Reload the configuration or restart the Prometheus server. -1. Confirm that OpenTelemetryTest is in the UP state in the **Status** > **Targets** page of the Prometheus web portal. -![Prometheus status](~/docs/core/diagnostics/media/prometheus-status.png) +app.Run(); +``` -1. On the Graph page of the Prometheus web portal, enter `http` in the expression text box and select `http_client_active_requests`. -![http_client_active_requests](~/docs/fundamentals/networking/telemetry/media/prometheus-search.png) - In the graph tab, Prometheus shows the value of the `http.client.active_requests` counter that's emitted by the example app. - ![Prometheus active requests graph](~/docs/fundamentals/networking/telemetry/media/prometheus-active-requests.png) +For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). -#### Show metrics on a Grafana dashboard +### View metrics in Grafana with OpenTelemetry and Prometheus -1. Follow the [standard instructions](https://prometheus.io/docs/visualization/grafana/#installing) to install Grafana and connect it to a Prometheus data source. +Please follow our tutorial on [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md). -1. Create a Grafana dashboard by selecting the **+** icon on the top toolbar then selecting **Dashboard**. In the dashboard editor that appears, enter **Open HTTP/1.1 Connections** in the **Title** box and the following query in the PromQL expression field: +Note that the tutorial does not particularly discuss `HttpClient` metrics. In order to enable them, it is necessary to extend the [metrics configuration code](../../../core/diagnostics/observability-prgrja-example.md#5-configure-opentelemetry-with-the-correct-providers) with the addition of the `System.Net.*` meters: +```csharp +otel.WithMetrics(metrics => metrics + // Metrics provider from OpenTelemetry + .AddAspNetCoreInstrumentation() + .AddMeter(greeterMeter.Name) + // Metrics provided by ASP.NET Core in .NET 8 + .AddMeter("Microsoft.AspNetCore.Hosting") + .AddMeter("Microsoft.AspNetCore.Server.Kestrel") + // Metrics provided by System.Net libraries + .AddMeter("System.Net.Http") + .AddMeter("System.Net.NameResolution") + .AddPrometheusExporter()); ``` -sum by(http_connection_state) (http_client_open_connections{network_protocol_version="1.1"}) -``` - -![Grafana HTTP/1.1 Connections](~/docs/fundamentals/networking/telemetry/media/grafana-connections.png) -1. Select **Apply** to save and view the new dashboard. It displays the number of active vs idle HTTP/1.1 connections in the pool. +Moreover, `HttpClient(Factory)` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. ## Enrichment diff --git a/docs/fundamentals/networking/telemetry/overview.md b/docs/fundamentals/networking/telemetry/overview.md index fb88a019e58cc..9050e5061a0ff 100644 --- a/docs/fundamentals/networking/telemetry/overview.md +++ b/docs/fundamentals/networking/telemetry/overview.md @@ -8,9 +8,10 @@ ms.date: 10/18/2022 # Networking telemetry in .NET -The .NET networking stack is instrumented at various layers. .NET gives you the option to collect accurate timings throughout the lifetime of an HTTP request using metrics, event counters, and events. +The .NET networking stack is instrumented at various layers. .NET gives you the option to collect accurate timings throughout the lifetime of an HTTP request using metrics, distributed tracing, event counters, and events. -- **[Networking metrics](metrics.md)**: Starting with .NET 8, the HTTP and the name resolution (DNS) components are instrumented using the modern [System.Diagnostics.Metrics API](../../../core/diagnostics/metrics.md). These metrics were designed in cooperation with [OpenTelemetry](https://opentelemetry.io/). +- **[Networking metrics](metrics.md)**: Starting with .NET 8, the HTTP and the name resolution (DNS) components are instrumented using the modern [System.Diagnostics.Metrics API](../../../core/diagnostics/metrics.md). These metrics were designed in cooperation with [OpenTelemetry](https://opentelemetry.io/) and can be exported to various monitoring tools. +- **[Distributed tracing](tracing.md)**: `HttpClient` is instrumented to emit [distributed tracing](../../../core/diagnostics/distributed-tracing.md) activities (a.k.a., spans). - **[Networking events](events.md)**: Events provide debug and trace information with accurate timestamps. - **[Networking event counters](event-counters.md)**: All networking components are instrumented to publish real-time performance metrics using the EventCounters API. diff --git a/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/ConnectionTracingDemo.ServiceDefaults.csproj b/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/ConnectionTracingDemo.ServiceDefaults.csproj new file mode 100644 index 0000000000000..5d08206bbd6f2 --- /dev/null +++ b/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/ConnectionTracingDemo.ServiceDefaults.csproj @@ -0,0 +1,22 @@ + + + + net9.0 + enable + enable + true + + + + + + + + + + + + + + + diff --git a/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs b/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs new file mode 100644 index 0000000000000..eb6a5822eb0d8 --- /dev/null +++ b/docs/fundamentals/networking/telemetry/snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs @@ -0,0 +1,125 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.ServiceDiscovery; +using OpenTelemetry; +using OpenTelemetry.Metrics; +using OpenTelemetry.Trace; + +namespace Microsoft.Extensions.Hosting; + +// Adds common .NET Aspire services: service discovery, resilience, health checks, and OpenTelemetry. +// This project should be referenced by each service project in your solution. +// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults +public static class Extensions +{ + public static TBuilder AddServiceDefaults(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.ConfigureOpenTelemetry(); + + builder.AddDefaultHealthChecks(); + + builder.Services.AddServiceDiscovery(); + + builder.Services.ConfigureHttpClientDefaults(http => + { + // Turn on resilience by default + http.AddStandardResilienceHandler(); + + // Turn on service discovery by default + http.AddServiceDiscovery(); + }); + + // Uncomment the following to restrict the allowed schemes for service discovery. + // builder.Services.Configure(options => + // { + // options.AllowedSchemes = ["https"]; + // }); + + return builder; + } + + public static TBuilder ConfigureOpenTelemetry(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Logging.AddOpenTelemetry(logging => + { + logging.IncludeFormattedMessage = true; + logging.IncludeScopes = true; + }); + + builder.Services.AddOpenTelemetry() + // + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation(); + }) + // + // + .WithTracing(tracing => + { + tracing.AddAspNetCoreInstrumentation() + // Instead of using .AddHttpClientInstrumentation() + // .NET 9 allows to add the ActivitySources directly. + .AddSource("System.Net.Http") + // Add the experimental connection tracking ActivitySources using a wildcard. + .AddSource("Experimental.System.Net.*"); + }); + // + + builder.AddOpenTelemetryExporters(); + + return builder; + } + + + private static TBuilder AddOpenTelemetryExporters(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); + + if (useOtlpExporter) + { + builder.Services.AddOpenTelemetry().UseOtlpExporter(); + } + + // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) + //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) + //{ + // builder.Services.AddOpenTelemetry() + // .UseAzureMonitor(); + //} + + return builder; + } + + public static TBuilder AddDefaultHealthChecks(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Services.AddHealthChecks() + // Add a default liveness check to ensure app is responsive + .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); + + return builder; + } + + public static WebApplication MapDefaultEndpoints(this WebApplication app) + { + // Adding health checks endpoints to applications in non-development environments has security implications. + // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. + if (app.Environment.IsDevelopment()) + { + // All health checks must pass for app to be considered ready to accept traffic after starting + app.MapHealthChecks("/health"); + + // Only health checks tagged with the "live" tag must pass for app to be considered alive + app.MapHealthChecks("/alive", new HealthCheckOptions + { + Predicate = r => r.Tags.Contains("live") + }); + } + + return app; + } +} diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md new file mode 100644 index 0000000000000..9acb8b3274197 --- /dev/null +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -0,0 +1,158 @@ +--- +title: Networking tracing +description: Learn how to consume .NET networking Tracing. +author: samsp-msft +ms.author: samsp +ms.date: 10/4/2024 +--- + +# Networking distributed traces in .NET + +[Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that may be distributed across multiple machines or processes. This technique tracks requests through an application correlating together work done by different application components and separating it from other work the application may be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer, then forwarded to a web server process, which then makes several queries to a database. Using distributed tracing allows engineers to distinguish if any of those steps failed, how long each step took, and potentially logging messages produced by each step as it ran. + +The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard for defining a naming shame for spans (activties) together with their attributes (tags), these are known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. + +> [!NOTE] +> The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span is not to be confused with . + +## Instrumentation + +In order to emit traces, the `System.Net` libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in -s which create objects to track work performed. Activities are only created if there are listeners subscribed to the . + +The built-in instrumentation has evolved with .NET versions. +- On .NET 8 or earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (e.g., tags) needed to emit useful traces. +- .NET 9 has extended the instrumentation with the emission the name, status, exception info and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. +- .NET 9 has also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activites across the `System.Net` libraries to support diagnosing connection issues. + +> [!TIP] +> For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). + +## Collecting System.Net traces + +At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. + +However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export and monitor traces. +- To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-opentelemetry). +- For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. +- For **development-time** trace collection and monitoring, we recommend to use [.NET Aspire](#collecting-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. +- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration API-s into your ASP.NET project. + +### Collecting traces with .NET Aspire + +The simplest solution for collecting traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. + +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. + +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be just as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. + +[![Aspire Dashboard](../../../core/diagnostics/media/aspire-dashboard-thumb.png)](../../../core/diagnostics/media/aspire-dashboard.png#lightbox) + +For more details on .NET Aspire see: + +- [Aspire Overview](/dotnet/aspire/get-started/aspire-overview) +- [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) +- [Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/explore) + +### Reusing Service Defaults project without .NET Aspire Orchestration + +The Aspire Service Defaults project provides and easy way to to configure OTel for ASP.NET projects, *even if not using the rest of .NET Aspire* such as the AppHost for orchestration. It is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/c94c422e31b2a5181a97b2dcf4bdc984f37ac1ff/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. + +The steps to use *ServiceDefaults* outside .NET Aspire are: + +1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new`: + +```dotnetcli +dotnet new aspire-servicedefaults --output ServiceDefaults +``` + +2. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use *Add -> Project Reference* and select the *ServiceDefaults* project. +3. Call its OpenTelemetry setup function, `ConfigureOpenTelemetry` as part of your application builder initialization. + +``` csharp +var builder = WebApplication.CreateBuilder(args); +builder.ConfigureOpenTelemetry(); + +var app = builder.Build(); + +app.MapGet("/", () => "Hello World!"); + +app.Run(); +``` + +For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). + +## Experimental connection tracing + +When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment which typically breaks down to DNS lookup, TCP connection and TLS handshake. + +.NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TPC and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. + +> [!NOTE] +> In , connections and requests have independent lifecycles. A pooled connection can live long and serve dozens of requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. + +The following spans have been introduced in .NET 9 to enable collecting detailed connection information: +- [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental): A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. +- [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental): Represents the establishment of the HTTP connection. +- [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental): DNS lookup performed via the class. +- [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental): Establishment of a connetion. +- [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental): TLS client or server handshake performed by . + +The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. + +These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. + +When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, the `HTTP connection_setup` span is linked from the `HTTP client request` span*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. + +### Walkthrough: Using the experimental connection tracing in .NET 9 + +This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces). The key step is to enable the ActivitySources. + +1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: + +```dotnetcli +dotnet new aspire-starter-9 --output ConnectionTracingDemo +``` + +Or in Visual Studio: + +![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) + +2. Open `Extensions.cs` in the `ServiceDefaults` project, and edit the `ConfigureOpenTelemetry` method adding the ActivitySources for connection in the tracing configuration callback: + +:::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_ConnectionTracing"::: + +3. Start the solution. This should open the [.NET Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/overview). + +4. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. + +5. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. + +When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: + +[![HttpClient Spans in Aspire Dashboard](media/aspire-httpclient-get-thumb.png)](media/aspire-httpclient-get.png#lightbox) + +- If a connection needs to be established, or waiting for a connection from the connection pool, then an additional `HTTP wait_for_connection` span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: + - The selected span is the HttpClient request. + - The one below it is the delay waiting for a connection to be established. + - The lasts span in yellow is from the destination processing the request. +- The HttpClient span will have a link to the `HTTP connection_setup` span which represents the activity to create the http connection used by the request. + +[![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) + +The `HTTP connection_setup` span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. Many client requests can be made over the same http connection, and if its already established and available (http 1.1 supports sequential requests over the same connection, http 2 & 3 enable parallel requests) then the request can reuse that connection. This span will typically have child spans `DNS lookup`, (TCP) `socket connect` and `TLS client handshake`. + +## Enrichment + +In some cases it is necessary to augment the existing `System.Net` tracing functionality. Typically this means injecting additional tags/attributes to the built-in activities. This is called *enrichment*. + +### Enrichment API in the OpenTelemetry instrumentation library + +To add additional tags/attributes to the HTTP client request activity, the simplest approach is to use the [`HttpClient` enrichment APIs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/main/src/OpenTelemetry.Instrumentation.Http/README.md#enrich-httpclient-api) of the OpenTelemetry HttpClient and HttpWebRequest instrumentation library. This requires taking a dependency on the [`OpenTelemetry.Instrumentation.Http`](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.Http) package. + +### Manual enrichment + +It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in code that is included in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) which delegates event notifications to the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs). + +## Need more tracing? + +If you have suggestions for other useful information that could be exposed via tracing, create a [dotnet/runtime issue](https://github.com/dotnet/runtime/issues/new). diff --git a/docs/fundamentals/toc.yml b/docs/fundamentals/toc.yml index f3c21c755d52a..fa95fe12107df 100644 --- a/docs/fundamentals/toc.yml +++ b/docs/fundamentals/toc.yml @@ -1162,6 +1162,9 @@ items: - name: Metrics href: networking/telemetry/metrics.md displayName: networking metrics + - name: Distributed tracing + href: networking/telemetry/tracing.md + displayName: networking distributed tracing - name: Events href: networking/telemetry/events.md displayName: networking events From de2b17019cf9590aaa48216ec12cca96c57e0e96 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 25 Dec 2024 23:34:46 +0100 Subject: [PATCH 02/20] lint --- .../networking/telemetry/metrics.md | 42 +++++++------- .../networking/telemetry/tracing.md | 57 ++++++++++--------- 2 files changed, 52 insertions(+), 47 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index 64d2d59085435..b8eee87a357b5 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -19,9 +19,10 @@ They are also [multi-dimensional](../../../core/diagnostics/metrics-instrumentat ## Collect System.Net metrics -In order to take advangage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, e.g., to monitoring systems. +In order to take advangage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, e.g., to monitoring systems. There are several ways of collecting networking metrics in .NET. + - For a quick overview using a simple, self-contained example, see [collecting metrics with dotnet-counters](#collecting-metrics-with-dotnet-counters). - For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. - For **development-time** metrics collection and troubleshooting we recommend to use [.NET Aspire](#collecting-metrics-with-net-aspire), which provides a simple, but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. @@ -53,6 +54,7 @@ When running against a .NET 8+ process, `dotnet-counters` enables the instrument ```console dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n HelloBuiltinMetrics ``` + ### Collecting metrics with .NET Aspire The simplest solution for collecting metrics for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. @@ -67,29 +69,29 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb 1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: -```dotnetcli -dotnet new aspire-starter-9 --output AspireDemo -``` + ```dotnetcli + dotnet new aspire-starter-9 --output AspireDemo + ``` -Or in Visual Studio: + Or in Visual Studio: -![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) + ![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) -2. Open `Extensions.cs` in the `ServiceDefaults` project, and scroll to the `ConfigureOpenTelemetry` method. Notice the `AddHttpClientInstrumentation()` call subscribing to the networking meters. +1. Open `Extensions.cs` in the `ServiceDefaults` project, and scroll to the `ConfigureOpenTelemetry` method. Notice the `AddHttpClientInstrumentation()` call subscribing to the networking meters. -:::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="3"::: + :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="3"::: -Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscription: + Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscription: -```csharp -.WithMetrics(metrics => -{ - metrics.AddAspNetCoreInstrumentation() - .AddMeter("System.Net.Http") - .AddMeter("System.Net.NameResolution") - .AddRuntimeInstrumentation(); -}) -``` + ```csharp + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddMeter("System.Net.Http") + .AddMeter("System.Net.NameResolution") + .AddRuntimeInstrumentation(); + }) + ``` 3. Run the `AppHost` project. This should launch the Aspire Dashboard. @@ -97,7 +99,7 @@ Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual 5. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Srolling down, you should be able to browse the built-in `System.Net` metrics. -[![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) + [![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) For more details on .NET Aspire see: @@ -128,7 +130,7 @@ app.Run(); For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). -### View metrics in Grafana with OpenTelemetry and Prometheus +### View metrics in Grafana with OpenTelemetry and Prometheus Please follow our tutorial on [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md). diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 9acb8b3274197..2ec7baeb10665 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -20,18 +20,20 @@ The tracing system in .NET is designed to work with OpenTelemetry (OTel), and us In order to emit traces, the `System.Net` libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in -s which create objects to track work performed. Activities are only created if there are listeners subscribed to the . The built-in instrumentation has evolved with .NET versions. + - On .NET 8 or earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (e.g., tags) needed to emit useful traces. - .NET 9 has extended the instrumentation with the emission the name, status, exception info and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. -- .NET 9 has also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activites across the `System.Net` libraries to support diagnosing connection issues. +- .NET 9 has also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activites across the `System.Net` libraries to support diagnosing connection issues. > [!TIP] > For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). ## Collecting System.Net traces -At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. +At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export and monitor traces. + - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. - For **development-time** trace collection and monitoring, we recommend to use [.NET Aspire](#collecting-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. @@ -61,23 +63,23 @@ The steps to use *ServiceDefaults* outside .NET Aspire are: 1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new`: -```dotnetcli -dotnet new aspire-servicedefaults --output ServiceDefaults -``` + ```dotnetcli + dotnet new aspire-servicedefaults --output ServiceDefaults + ``` -2. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use *Add -> Project Reference* and select the *ServiceDefaults* project. -3. Call its OpenTelemetry setup function, `ConfigureOpenTelemetry` as part of your application builder initialization. +1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use *Add -> Project Reference* and select the *ServiceDefaults* project. +1. Call its OpenTelemetry setup function, `ConfigureOpenTelemetry` as part of your application builder initialization. -``` csharp -var builder = WebApplication.CreateBuilder(args); -builder.ConfigureOpenTelemetry(); + ``` csharp + var builder = WebApplication.CreateBuilder(args); + builder.ConfigureOpenTelemetry(); -var app = builder.Build(); + var app = builder.Build(); -app.MapGet("/", () => "Hello World!"); + app.MapGet("/", () => "Hello World!"); -app.Run(); -``` + app.Run(); + ``` For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). @@ -91,15 +93,16 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to > In , connections and requests have independent lifecycles. A pooled connection can live long and serve dozens of requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. The following spans have been introduced in .NET 9 to enable collecting detailed connection information: + - [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental): A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. - [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental): Represents the establishment of the HTTP connection. - [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental): DNS lookup performed via the class. - [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental): Establishment of a connetion. - [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental): TLS client or server handshake performed by . -The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. +The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. -These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. +These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, the `HTTP connection_setup` span is linked from the `HTTP client request` span*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. @@ -109,23 +112,23 @@ This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/b 1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: -```dotnetcli -dotnet new aspire-starter-9 --output ConnectionTracingDemo -``` + ```dotnetcli + dotnet new aspire-starter-9 --output ConnectionTracingDemo + ``` -Or in Visual Studio: + Or in Visual Studio: -![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) + ![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) -2. Open `Extensions.cs` in the `ServiceDefaults` project, and edit the `ConfigureOpenTelemetry` method adding the ActivitySources for connection in the tracing configuration callback: +1. Open `Extensions.cs` in the `ServiceDefaults` project, and edit the `ConfigureOpenTelemetry` method adding the ActivitySources for connection in the tracing configuration callback: -:::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_ConnectionTracing"::: + :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_ConnectionTracing"::: -3. Start the solution. This should open the [.NET Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/overview). +1. Start the solution. This should open the [.NET Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/overview). -4. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. +1. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. -5. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. +1. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: @@ -135,7 +138,7 @@ When http requests are made with the connection instrumentation enabled, you sho - The selected span is the HttpClient request. - The one below it is the delay waiting for a connection to be established. - The lasts span in yellow is from the destination processing the request. -- The HttpClient span will have a link to the `HTTP connection_setup` span which represents the activity to create the http connection used by the request. +- The HttpClient span will have a link to the `HTTP connection_setup` span which represents the activity to create the http connection used by the request. [![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) From a44b69e25760ac8438a03d576bdf9db9af1cdf33 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 25 Dec 2024 23:37:28 +0100 Subject: [PATCH 03/20] lint --- docs/fundamentals/networking/telemetry/metrics.md | 6 +++--- docs/fundamentals/networking/telemetry/tracing.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index b8eee87a357b5..c28474d0ef96f 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -93,11 +93,11 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb }) ``` -3. Run the `AppHost` project. This should launch the Aspire Dashboard. +1. Run the `AppHost` project. This should launch the Aspire Dashboard. -4. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. Refresh the page several times to send multiple requests. +1. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. Refresh the page several times to send multiple requests. -5. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Srolling down, you should be able to browse the built-in `System.Net` metrics. +1. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Srolling down, you should be able to browse the built-in `System.Net` metrics. [![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 2ec7baeb10665..9695142afc8bd 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -108,7 +108,7 @@ When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, t ### Walkthrough: Using the experimental connection tracing in .NET 9 -This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces). The key step is to enable the ActivitySources. +This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces). The key step is to enable the ActivitySources. 1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: @@ -128,7 +128,7 @@ This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/b 1. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. -1. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. +1. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: From 50622385cac8746c8d0cdbf7256e9ff35c63b355 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 25 Dec 2024 23:41:59 +0100 Subject: [PATCH 04/20] fix links --- docs/fundamentals/networking/telemetry/tracing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 9695142afc8bd..3bb7d9203b973 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -30,11 +30,11 @@ The built-in instrumentation has evolved with .NET versions. ## Collecting System.Net traces -At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. +At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export and monitor traces. -- To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs#collect-traces-using-opentelemetry). +- To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. - For **development-time** trace collection and monitoring, we recommend to use [.NET Aspire](#collecting-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. - It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration API-s into your ASP.NET project. From 3a61bc1269fe67e5c0f346ef3d1bdded9c507467 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 25 Dec 2024 23:51:36 +0100 Subject: [PATCH 05/20] xref fix --- docs/fundamentals/networking/telemetry/tracing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 3bb7d9203b973..92809a805bf73 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -10,7 +10,7 @@ ms.date: 10/4/2024 [Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that may be distributed across multiple machines or processes. This technique tracks requests through an application correlating together work done by different application components and separating it from other work the application may be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer, then forwarded to a web server process, which then makes several queries to a database. Using distributed tracing allows engineers to distinguish if any of those steps failed, how long each step took, and potentially logging messages produced by each step as it ran. -The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard for defining a naming shame for spans (activties) together with their attributes (tags), these are known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. +The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard for defining a naming shame for spans (activties) together with their attributes (tags), these are known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. > [!NOTE] > The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span is not to be confused with . @@ -154,7 +154,7 @@ To add additional tags/attributes to the HTTP client request activity, the simpl ### Manual enrichment -It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in code that is included in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) which delegates event notifications to the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs). +It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in code that is included in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) which delegates event notifications to the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs). ## Need more tracing? From a46b2a2f72dfd6b1c88299ab4af62be1d1a8629a Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Thu, 26 Dec 2024 00:19:14 +0100 Subject: [PATCH 06/20] turn the activity list into a table --- .../networking/telemetry/tracing.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 92809a805bf73..6d136ac0b379d 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -94,11 +94,14 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to The following spans have been introduced in .NET 9 to enable collecting detailed connection information: -- [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental): A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. -- [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental): Represents the establishment of the HTTP connection. -- [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental): DNS lookup performed via the class. -- [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental): Establishment of a connetion. -- [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental): TLS client or server handshake performed by . + +| Name | | Description | +|---|---|---| +| [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. | +| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections ` | Represents the establishment of the HTTP connection. | +| [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental) | `Experimental.System.Net.NameResolution` | DNS lookup performed by the class. | +| [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connetion. | +| [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. @@ -134,15 +137,15 @@ When http requests are made with the connection instrumentation enabled, you sho [![HttpClient Spans in Aspire Dashboard](media/aspire-httpclient-get-thumb.png)](media/aspire-httpclient-get.png#lightbox) -- If a connection needs to be established, or waiting for a connection from the connection pool, then an additional `HTTP wait_for_connection` span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: +- If a connection needs to be established, or waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: - The selected span is the HttpClient request. - The one below it is the delay waiting for a connection to be established. - The lasts span in yellow is from the destination processing the request. -- The HttpClient span will have a link to the `HTTP connection_setup` span which represents the activity to create the http connection used by the request. +- The HttpClient span will have a link to the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span which represents the activity to create the http connection used by the request. [![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) -The `HTTP connection_setup` span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. Many client requests can be made over the same http connection, and if its already established and available (http 1.1 supports sequential requests over the same connection, http 2 & 3 enable parallel requests) then the request can reuse that connection. This span will typically have child spans `DNS lookup`, (TCP) `socket connect` and `TLS client handshake`. +The [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. Many client requests can be made over the same http connection, and if its already established and available (http 1.1 supports sequential requests over the same connection, http 2 & 3 enable parallel requests) then the request can reuse that connection. This span will typically have child spans [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental), (TCP) [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) and [`TLS client handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental). ## Enrichment From f8331bf83dd0564e117eb415cdeb1e6784916a3e Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Thu, 26 Dec 2024 00:32:41 +0100 Subject: [PATCH 07/20] improvements --- docs/fundamentals/networking/telemetry/tracing.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 6d136ac0b379d..a3dfa87cb8131 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -94,11 +94,10 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to The following spans have been introduced in .NET 9 to enable collecting detailed connection information: - | Name | | Description | |---|---|---| | [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. | -| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections ` | Represents the establishment of the HTTP connection. | +| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. | | [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental) | `Experimental.System.Net.NameResolution` | DNS lookup performed by the class. | | [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connetion. | | [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | @@ -111,7 +110,7 @@ When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, t ### Walkthrough: Using the experimental connection tracing in .NET 9 -This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces). The key step is to enable the ActivitySources. +This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces) as well. The key step is to enable the ActivitySources. 1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: @@ -133,10 +132,10 @@ This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/b 1. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. -When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: - [![HttpClient Spans in Aspire Dashboard](media/aspire-httpclient-get-thumb.png)](media/aspire-httpclient-get.png#lightbox) +When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: + - If a connection needs to be established, or waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: - The selected span is the HttpClient request. - The one below it is the delay waiting for a connection to be established. From 06a6f3c2d2f31b2f69d8946d7519050890f46673 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 8 Jan 2025 17:04:29 +0100 Subject: [PATCH 08/20] further improvements --- .../distributed-tracing-builtin-activities.md | 3 ++ .../networking/telemetry/metrics.md | 31 +++++++++---------- .../networking/telemetry/tracing.md | 24 +++++++------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/core/diagnostics/distributed-tracing-builtin-activities.md b/docs/core/diagnostics/distributed-tracing-builtin-activities.md index be61a20ca3c3b..80e87f16ffb17 100644 --- a/docs/core/diagnostics/distributed-tracing-builtin-activities.md +++ b/docs/core/diagnostics/distributed-tracing-builtin-activities.md @@ -11,6 +11,9 @@ This is a reference for distributed tracing [activities](xref:System.Diagnostics ## System.Net activities +> [!TIP] +> For a comprehensive guide about collecting and reporting `System.Net` traces, see [Networking distributed traces in .NET](../../fundamentals/networking/telemetry/metrics.md). + ### HTTP client request and report the HTTP client request activity following the recommendations defined in OpenTelemetry [HTTP Client Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client). It describes the HTTP request sent by 's send overloads during the time interval the underlying handler completes the request. Completing the request includes the time up to reading response headers from the network stream. It doesn't include the time spent reading the response body. may retry requests, for example, on connection failures or HTTP version downgrades. Retries are not reported as separate *HTTP client request* activities. diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index c28474d0ef96f..143cf23dda234 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -17,7 +17,7 @@ They are also [multi-dimensional](../../../core/diagnostics/metrics-instrumentat > [!TIP] > For a comprehensive list of all built-in instruments together with their attributes, see [System.Net metrics](../../../core/diagnostics/built-in-metrics-system-net.md). -## Collect System.Net metrics +## Collecting System.Net metrics In order to take advangage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, e.g., to monitoring systems. @@ -79,9 +79,9 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb 1. Open `Extensions.cs` in the `ServiceDefaults` project, and scroll to the `ConfigureOpenTelemetry` method. Notice the `AddHttpClientInstrumentation()` call subscribing to the networking meters. - :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="3"::: + :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="4"::: - Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscription: + Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscriptions: ```csharp .WithMetrics(metrics => @@ -113,20 +113,17 @@ Probably the easiest way to configure OTel for ASP.NET projects is to use the As The steps to use *ServiceDefaults* outside .NET Aspire are: -- Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new aspire-servicedefaults --output ServiceDefaults` -- Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use "Add -> Project Reference" and select the *ServiceDefaults* project" -- Call its OpenTelemetry setup function as part of your application builder initialization. +1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new aspire-servicedefaults --output ServiceDefaults` +1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use "Add -> Project Reference" and select the *ServiceDefaults* project" +1. Call the OpenTelemetry setup function `ConfigureOpenTelemetry()` as part of your application builder initialization. -``` csharp -var builder = WebApplication.CreateBuilder(args); -builder.ConfigureOpenTelemetry(); - -var app = builder.Build(); - -app.MapGet("/", () => "Hello World!"); - -app.Run(); -``` + ``` csharp + var builder = WebApplication.CreateBuilder(args) + builder.ConfigureOpenTelemetry(); // Extension method from ServiceDefaults. + var app = builder.Build(); + app.MapGet("/", () => "Hello World!"); + app.Run(); + ``` For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). @@ -150,7 +147,7 @@ otel.WithMetrics(metrics => metrics .AddPrometheusExporter()); ``` -Moreover, `HttpClient(Factory)` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. +Moreover, `HttpClient` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. ## Enrichment diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index a3dfa87cb8131..6100db3cbd399 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -10,24 +10,24 @@ ms.date: 10/4/2024 [Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that may be distributed across multiple machines or processes. This technique tracks requests through an application correlating together work done by different application components and separating it from other work the application may be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer, then forwarded to a web server process, which then makes several queries to a database. Using distributed tracing allows engineers to distinguish if any of those steps failed, how long each step took, and potentially logging messages produced by each step as it ran. -The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard for defining a naming shame for spans (activties) together with their attributes (tags), these are known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. +The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard naming scheme for spans (activties) together with their attributes (tags), known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. > [!NOTE] > The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span is not to be confused with . +> [!TIP] +> For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). + ## Instrumentation -In order to emit traces, the `System.Net` libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in -s which create objects to track work performed. Activities are only created if there are listeners subscribed to the . +In order to emit traces, the `System.Net` libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in -s which create objects to track the work performed. Activities are only created if there are listeners subscribed to the . The built-in instrumentation has evolved with .NET versions. -- On .NET 8 or earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (e.g., tags) needed to emit useful traces. +- On .NET 8 and earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (e.g., tags) needed to emit useful traces. - .NET 9 has extended the instrumentation with the emission the name, status, exception info and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. - .NET 9 has also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activites across the `System.Net` libraries to support diagnosing connection issues. -> [!TIP] -> For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). - ## Collecting System.Net traces At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. @@ -90,23 +90,23 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to .NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TPC and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. > [!NOTE] -> In , connections and requests have independent lifecycles. A pooled connection can live long and serve dozens of requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. +> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines#pooled-connections) can live long and serve many requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. The following spans have been introduced in .NET 9 to enable collecting detailed connection information: | Name | | Description | |---|---|---| | [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. | -| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. | +| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. A separate trace root span with it's own `TraceId`. `HTTP client request` spans may contain links to `HTTP connection_setup`. | | [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental) | `Experimental.System.Net.NameResolution` | DNS lookup performed by the class. | | [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connetion. | | [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. -These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. +These spans are too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. -When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, the `HTTP connection_setup` span is linked from the `HTTP client request` span*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. +When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. ### Walkthrough: Using the experimental connection tracing in .NET 9 @@ -144,7 +144,7 @@ When http requests are made with the connection instrumentation enabled, you sho [![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) -The [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. Many client requests can be made over the same http connection, and if its already established and available (http 1.1 supports sequential requests over the same connection, http 2 & 3 enable parallel requests) then the request can reuse that connection. This span will typically have child spans [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental), (TCP) [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) and [`TLS client handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental). +As mentioned [in the note above](#experimental-connection-tracing), the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. This span will typically have child spans [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental), (TCP) [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) and [`TLS client handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental). ## Enrichment @@ -156,7 +156,7 @@ To add additional tags/attributes to the HTTP client request activity, the simpl ### Manual enrichment -It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in code that is included in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) which delegates event notifications to the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs). +It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in the code that is running in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) and the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs) where the notifications are delegated to. ## Need more tracing? From 00c4f30b25562332523f2c05b241f7d7b960c84f Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 8 Jan 2025 17:30:30 +0100 Subject: [PATCH 09/20] +improvements --- .../networking/telemetry/metrics.md | 38 ++++++++++--------- .../networking/telemetry/tracing.md | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index 143cf23dda234..de0909f2503d5 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -129,25 +129,27 @@ For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standa ### View metrics in Grafana with OpenTelemetry and Prometheus -Please follow our tutorial on [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md). - -Note that the tutorial does not particularly discuss `HttpClient` metrics. In order to enable them, it is necessary to extend the [metrics configuration code](../../../core/diagnostics/observability-prgrja-example.md#5-configure-opentelemetry-with-the-correct-providers) with the addition of the `System.Net.*` meters: - -```csharp -otel.WithMetrics(metrics => metrics - // Metrics provider from OpenTelemetry - .AddAspNetCoreInstrumentation() - .AddMeter(greeterMeter.Name) - // Metrics provided by ASP.NET Core in .NET 8 - .AddMeter("Microsoft.AspNetCore.Hosting") - .AddMeter("Microsoft.AspNetCore.Server.Kestrel") - // Metrics provided by System.Net libraries - .AddMeter("System.Net.Http") - .AddMeter("System.Net.NameResolution") - .AddPrometheusExporter()); -``` +Please follow our tutorial on [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md), but note that the tutorial does not particularly discuss `HttpClient` metrics. + +There are two additions you need to make: + +1. In order to enable the client metrics, it is necessary to extend the [metrics configuration code](../../../core/diagnostics/observability-prgrja-example.md#5-configure-opentelemetry-with-the-correct-providers) with the addition of the `System.Net.*` meters: + + ```csharp + otel.WithMetrics(metrics => metrics + // Metrics provider from OpenTelemetry + .AddAspNetCoreInstrumentation() + .AddMeter(greeterMeter.Name) + // Metrics provided by ASP.NET Core in .NET 8 + .AddMeter("Microsoft.AspNetCore.Hosting") + .AddMeter("Microsoft.AspNetCore.Server.Kestrel") + // Metrics provided by System.Net libraries + .AddMeter("System.Net.Http") + .AddMeter("System.Net.NameResolution") + .AddPrometheusExporter()); + ``` -Moreover, `HttpClient` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. +1. Moreover, `HttpClient` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. ## Enrichment diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 6100db3cbd399..3054213566aec 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -90,7 +90,7 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to .NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TPC and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. > [!NOTE] -> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines#pooled-connections) can live long and serve many requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. +> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live long and serve many requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. The following spans have been introduced in .NET 9 to enable collecting detailed connection information: From 4eb073ddf3c3198ecf884ac70f94988a614a801d Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Mon, 13 Jan 2025 23:19:58 +0100 Subject: [PATCH 10/20] connection link illustration --- .../telemetry/media/connection-link.png | Bin 0 -> 12349 bytes .../networking/telemetry/tracing.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 docs/fundamentals/networking/telemetry/media/connection-link.png diff --git a/docs/fundamentals/networking/telemetry/media/connection-link.png b/docs/fundamentals/networking/telemetry/media/connection-link.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebdb6297a9e46427ba1e68292bbdcadc06538bd GIT binary patch literal 12349 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 a1)ovD-5shSxb&arNJ?_*uPSBC-v19HPOPW^ literal 0 HcmV?d00001 diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 3054213566aec..b87918fca3f13 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -108,6 +108,10 @@ These spans are too verbose for use 24x7 in production scenarios with high workl When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. +The following diagram illustrates the behavior of the spans and their relationship: + +[![Connection spans over time.](media/connection-link.png)](media/connection-link.png#lightbox) + ### Walkthrough: Using the experimental connection tracing in .NET 9 This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces) as well. The key step is to enable the ActivitySources. From 478e49050261929e67cf8e72acaa4730166d495d Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 22 Jan 2025 19:53:34 +0100 Subject: [PATCH 11/20] Apply suggestions from code review Co-authored-by: Sam Spencer <54915162+samsp-msft@users.noreply.github.com> --- docs/fundamentals/networking/telemetry/tracing.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index b87918fca3f13..aab2dd63e59b2 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -37,7 +37,7 @@ However, as an application developer, you would likely prefer to rely on the ric - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. - For **development-time** trace collection and monitoring, we recommend to use [.NET Aspire](#collecting-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. -- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration API-s into your ASP.NET project. +- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. ### Collecting traces with .NET Aspire @@ -87,10 +87,10 @@ For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standa When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment which typically breaks down to DNS lookup, TCP connection and TLS handshake. -.NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TPC and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. +.NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TCP and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. > [!NOTE] -> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live long and serve many requests. If there is no connection immediately available in the connection pool, an incoming request will be added to a request queue to wait for an available connection. There is no relationship between requests and connections while the request is waiting. As a result, the `HTTP connection setup` span cannot be modeled as a child of the `HTTP client request` span. +> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live for a long time and serve many requests. When making a request, if there is no connection immediately available in the connection pool, the request will be added to a request queue to wait for an available connection. There is no direct relationship between waiting requests and connections. The connection process may have started when another connection becomes available for use, in which case the freed connection will be used. As a result, the `HTTP connection setup` span is not modeled as a child of the `HTTP client request` span, instead span links are used. The following spans have been introduced in .NET 9 to enable collecting detailed connection information: @@ -104,9 +104,11 @@ The following spans have been introduced in .NET 9 to enable collecting detailed The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. -These spans are too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of data is not normally needed. However if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. +> [!NOTE] +> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of instrumentation is not normally needed. However, if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. -When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. +> [!NOTE] +> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. The following diagram illustrates the behavior of the spans and their relationship: From 47afb08188c48b7fa2eed777ab7f6189f8b08cad Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 22 Jan 2025 19:54:16 +0100 Subject: [PATCH 12/20] Update docs/fundamentals/networking/telemetry/metrics.md Co-authored-by: Sam Spencer <54915162+samsp-msft@users.noreply.github.com> --- docs/fundamentals/networking/telemetry/metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index de0909f2503d5..1a36838170a2e 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -30,7 +30,7 @@ There are several ways of collecting networking metrics in .NET. ### Collecting metrics with dotnet-counters -[`dotnet-counters`](../../../core/diagnostics/dotnet-counters.md) is a cross-platform performance monitoring tool for ad-hoc health monitoring and first-level performance investigation. +[`dotnet-counters`](../../../core/diagnostics/dotnet-counters.md) is a cross-platform command line tool for ad-hoc examination of .NET metrics and first-level performance investigation. For the sake of this tutorial, create a simple app that sends HTTP requests to various endpoints in parallel. From 451b794602f87ab375f06d0e3f60b8a23f1c403f Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 22 Jan 2025 20:17:14 +0100 Subject: [PATCH 13/20] screenshot for dontent-counters --- .../telemetry/media/dotnet-counters.png | Bin 0 -> 15978 bytes .../networking/telemetry/metrics.md | 10 +++++++++- .../telemetry/snippets/metrics/Program.cs | 8 ++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 docs/fundamentals/networking/telemetry/media/dotnet-counters.png diff --git a/docs/fundamentals/networking/telemetry/media/dotnet-counters.png b/docs/fundamentals/networking/telemetry/media/dotnet-counters.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc0521cc2b32802371f2a0a5f594be32bcd7ecd GIT binary patch literal 15978 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 { string uri = uris[Random.Shared.Next(uris.Length)]; - byte[] bytes = await client.GetByteArrayAsync(uri, ct); - await Console.Out.WriteLineAsync($"{uri} - received {bytes.Length} bytes."); + try + { + byte[] bytes = await client.GetByteArrayAsync(uri, ct); + await Console.Out.WriteLineAsync($"{uri} - received {bytes.Length} bytes."); + } + catch { await Console.Out.WriteLineAsync($"{uri} - failed."); } }); } // From c2a015333d1d69a31d70235a956a8badf5efb5ba Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Thu, 23 Jan 2025 19:20:29 +0100 Subject: [PATCH 14/20] Grafana demo --- .../media/grafana-http11-connections.png | Bin 0 -> 32171 bytes .../csharp/Program.cs | 23 +++++++++++++- .../telemetry/media/grafana-connections.png | Bin 121860 -> 0 bytes .../networking/telemetry/metrics.md | 28 +++++++----------- .../telemetry/snippets/metrics/Program.cs | 27 ----------------- 5 files changed, 33 insertions(+), 45 deletions(-) create mode 100644 docs/core/diagnostics/media/grafana-http11-connections.png delete mode 100644 docs/fundamentals/networking/telemetry/media/grafana-connections.png diff --git a/docs/core/diagnostics/media/grafana-http11-connections.png b/docs/core/diagnostics/media/grafana-http11-connections.png new file mode 100644 index 0000000000000000000000000000000000000000..0887f8c43c8ed7669d6308d0965f79994e60eb48 GIT binary patch literal 32171 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

wH+siYMpDP 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 kNArKt9*?&aRaHge9FQc4mY6 +// +app.MapGet("/ClientStress", async Task (ILogger logger, HttpClient client) => +{ + string[] uris = ["http://example.com", "http://httpbin.org/get", "https://example.com", "https://httpbin.org/get"]; + await Parallel.ForAsync(0, 50, async (_, ct) => + { + string uri = uris[Random.Shared.Next(uris.Length)]; + + try + { + await client.GetAsync(uri, ct); + logger.LogInformation($"{uri} - done."); + } + catch { logger.LogInformation($"{uri} - failed."); } + }); + return "Sent 50 requests to example.com and httpbin.org."; +}); +// #if !AZURE_MONITOR // @@ -99,7 +120,7 @@ app.Run(); // -async Task SendGreeting(ILogger logger) +async Task SendGreeting(ILogger logger) { // Create a new Activity scoped to the method using var activity = greeterActivitySource.StartActivity("GreeterActivity"); diff --git a/docs/fundamentals/networking/telemetry/media/grafana-connections.png b/docs/fundamentals/networking/telemetry/media/grafana-connections.png deleted file mode 100644 index 91f032b45ed1f08d323f80e84720f9bf807f6204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121860 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 m{(q_+{txSVvzg metrics - // Metrics provider from OpenTelemetry - .AddAspNetCoreInstrumentation() - .AddMeter(greeterMeter.Name) - // Metrics provided by ASP.NET Core in .NET 8 - .AddMeter("Microsoft.AspNetCore.Hosting") - .AddMeter("Microsoft.AspNetCore.Server.Kestrel") - // Metrics provided by System.Net libraries - .AddMeter("System.Net.Http") - .AddMeter("System.Net.NameResolution") - .AddPrometheusExporter()); - ``` +Create a Grafana dashboard by selecting the **+** icon on the top toolbar then selecting **Dashboard**. In the dashboard editor that appears, enter **Open HTTP/1.1 Connections** in the **Title** box and the following query in the PromQL expression field: + +``` +sum by(http_connection_state) (http_client_open_connections{network_protocol_version="1.1"}) +``` + +Select **Apply** to save and view the new dashboard. It displays the number of active vs idle HTTP/1.1 connections in the pool. -1. Moreover, `HttpClient` usage is needed to see the `System.Net` metrics in action. The `/NestedGreeting` endpoint in the paragraph [Distributed tracing with Jaeger](../../../core/diagnostics/observability-prgrja-example.md#9-distributed-tracing-with-jaeger) provides a simple example for that. +[![HTTP/1.1 Connections in Grafana](../../../core/diagnostics/media/grafana-http11-connections.png)](../../../core/diagnostics/media/grafana-http11-connections.png#lightbox) ## Enrichment diff --git a/docs/fundamentals/networking/telemetry/snippets/metrics/Program.cs b/docs/fundamentals/networking/telemetry/snippets/metrics/Program.cs index 8faeed102857d..d74c10cca6217 100644 --- a/docs/fundamentals/networking/telemetry/snippets/metrics/Program.cs +++ b/docs/fundamentals/networking/telemetry/snippets/metrics/Program.cs @@ -26,33 +26,6 @@ await Parallel.ForAsync(0, Random.Shared.Next(20), async (_, ct) => }); } // -#elif snippet_PrometheusExporter -// -using OpenTelemetry.Metrics; -using OpenTelemetry; -using System.Net; - -using MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder() - .AddMeter("System.Net.Http", "System.Net.NameResolution") - .AddPrometheusHttpListener(options => options.UriPrefixes = new string[] { "http://localhost:9184/" }) - .Build(); - -string[] uris = ["http://example.com", "http://httpbin.org/get", "https://example.com", "https://httpbin.org/get"]; -using HttpClient client = new() -{ - DefaultRequestVersion = HttpVersion.Version20 -}; - -while (!Console.KeyAvailable) -{ - await Parallel.ForAsync(0, Random.Shared.Next(20), async (_, ct) => - { - string uri = uris[Random.Shared.Next(uris.Length)]; - byte[] bytes = await client.GetByteArrayAsync(uri, ct); - await Console.Out.WriteLineAsync($"{uri} - received {bytes.Length} bytes."); - }); -} -// #elif snippet_Enrichment // using System.Net.Http.Metrics; From 17ea9e2c2c334319c24ae9f61399391c16a737bd Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Mon, 27 Jan 2025 23:55:35 +0100 Subject: [PATCH 15/20] review feedback & acrolinx fixes --- .../networking/telemetry/metrics.md | 46 +++++++-------- .../networking/telemetry/tracing.md | 56 +++++++++---------- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index b02359d609614..b161bbc446138 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -8,31 +8,31 @@ ms.date: 11/14/2023 # Networking metrics in .NET -[Metrics](../../../core/diagnostics/metrics.md) are numerical measurements reported over time. They are typically used to monitor the health of an app and generate alerts. +[Metrics](../../../core/diagnostics/metrics.md) are numerical measurements reported over time. They're typically used to monitor the health of an app and generate alerts. Starting with .NET 8, the `System.Net.Http` and the `System.Net.NameResolution` components are instrumented to publish metrics using .NET's new [System.Diagnostics.Metrics API](../../../core/diagnostics/metrics.md). These metrics were designed in cooperation with [OpenTelemetry](https://opentelemetry.io/) to make sure they're consistent with the standard and work well with popular tools like [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/). -They are also [multi-dimensional](../../../core/diagnostics/metrics-instrumentation.md#multi-dimensional-metrics), meaning that measurements are associated with key-value pairs called tags (a.k.a. attributes or labels) that allow data to be categorized for analysis. +They're also [multi-dimensional](../../../core/diagnostics/metrics-instrumentation.md#multi-dimensional-metrics), meaning that measurements are associated with key-value pairs called tags (also known as attributes or labels). Tags enable the categorization of the measurement to help analysis. > [!TIP] > For a comprehensive list of all built-in instruments together with their attributes, see [System.Net metrics](../../../core/diagnostics/built-in-metrics-system-net.md). -## Collecting System.Net metrics +## Collect System.Net metrics -In order to take advangage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, e.g., to monitoring systems. +To take advantage of the built-in metrics instrumentation, a .NET app needs to be configured to collect these metrics. This typically means transforming them for external storage and analysis, for example, to monitoring systems. -There are several ways of collecting networking metrics in .NET. +There are several ways to collect networking metrics in .NET. -- For a quick overview using a simple, self-contained example, see [collecting metrics with dotnet-counters](#collecting-metrics-with-dotnet-counters). -- For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. -- For **development-time** metrics collection and troubleshooting we recommend to use [.NET Aspire](#collecting-metrics-with-net-aspire), which provides a simple, but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. -- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration API-s into your ASP.NET project. +- For a quick overview using a simple, self-contained example, see [collect metrics with dotnet-counters](#collect-metrics-with-dotnet-counters). +- For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools might be inconvenient to use at development time because of their complexity. +- For **development-time** metrics collection and troubleshooting we recommend using [.NET Aspire](#collect-metrics-with-net-aspire), which provides a simple, but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. +- It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration, which is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET project. -### Collecting metrics with dotnet-counters +### Collect metrics with dotnet-counters [`dotnet-counters`](../../../core/diagnostics/dotnet-counters.md) is a cross-platform command line tool for ad-hoc examination of .NET metrics and first-level performance investigation. -For the sake of this tutorial, create a simple app that sends HTTP requests to various endpoints in parallel. +For the sake of this tutorial, create an app that sends HTTP requests to various endpoints in parallel. ```dotnetcli dotnet new console -o HelloBuiltinMetrics @@ -63,15 +63,15 @@ dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n ![`dotnet-counters` output](media/dotnet-counters.png) -### Collecting metrics with .NET Aspire +### Collect metrics with .NET Aspire -The simplest solution for collecting metrics for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. +The simplest solution to collect metrics in ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. -The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. +The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. Each service in the .NET Aspire solution has a reference to the Service Defaults project. -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. For exporting telemetry .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages. These instrumentation components are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. .NET Aspire also includes the OTLP exporter by default, so that it can provide telemetry visualization using the Aspire Dashboard. -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be just as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. #### Quick walkthrough @@ -105,11 +105,11 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb 1. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. Refresh the page several times to send multiple requests. -1. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Srolling down, you should be able to browse the built-in `System.Net` metrics. +1. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Scrolling down, you should be able to browse the built-in `System.Net` metrics. [![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) -For more details on .NET Aspire see: +For more information on .NET Aspire, see: - [Aspire Overview](/dotnet/aspire/get-started/aspire-overview) - [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) @@ -155,12 +155,12 @@ Select **Apply** to save and view the new dashboard. It displays the number of a ## Enrichment -*Enrichment* is the addition of custom tags (a.k.a. attributes or labels) to a metric. This is useful if an app wants to add a custom categorization to dashboards or alerts built with metrics. +*Enrichment* is the addition of custom tags (also known as attributes or labels) to a metric. This is useful if an app wants to add a custom categorization to dashboards or alerts built with metrics. The [`http.client.request.duration`](../../../core/diagnostics/built-in-metrics-system-net.md#metric-httpclientrequestduration) instrument supports enrichment by registering callbacks with the . Note that this is a low-level API and a separate callback registration is needed for each `HttpRequestMessage`. A simple way to do the callback registration at a single place is to implement a custom . -This will allow you to intercept and modify the requests before they are forwarded to the inner handler and sent to the server: +This allows you to intercept and modify the requests before they're forwarded to the inner handler and sent to the server: :::code language="csharp" source="snippets/metrics/Program.cs" id="snippet_Enrichment"::: @@ -175,7 +175,7 @@ If you're working with [`IHttpClientFactory`](../../../core/extensions/httpclien ## `IMeterFactory` and `IHttpClientFactory` integration HTTP metrics were designed with isolation and testability in mind. These aspects are supported by the use of , which enables publishing metrics by a custom instance in order to keep Meters isolated from each other. -By default, all metrics are emitted by a global internal to the `System.Net.Http` library. This behavior can be overriden by assigning a custom instance to or . +By default, a global is used to emit all metrics. This internal to the `System.Net.Http` library. This behavior can be overridden by assigning a custom instance to or . > [!NOTE] > The is `System.Net.Http` for all metrics emitted by `HttpClientHandler` and `SocketsHttpHandler`. @@ -183,7 +183,7 @@ By default, all metrics are emitted by a global and assigns it to the primary handler it creates internally. > [!NOTE] -> Starting with .NET 8, the method automatically calls to initialize the metrics services and register the default implementation with . The default caches instances by name, meaning that there will be one with the name `System.Net.Http` per . +> Starting with .NET 8, the method automatically calls to initialize the metrics services and register the default implementation with . The default caches instances by name, meaning that there's one with the name `System.Net.Http` per . ### Test metrics @@ -197,7 +197,7 @@ Metrics are [more feature-rich](../../../core/diagnostics/compare-metric-apis.md Nevertheless, as of .NET 8, only the `System.Net.Http` and the `System.Net.NameResolutions` components are instrumented using Metrics, meaning that if you need counters from the lower levels of the stack such as `System.Net.Sockets` or `System.Net.Security`, you must use EventCounters. -Moreover, there are some semantical differences between Metrics and their matching EventCounters. +Moreover, there are some semantic differences between Metrics and their matching EventCounters. For example, when using `HttpCompletionOption.ResponseContentRead`, the [`current-requests` EventCounter](../../../core/diagnostics/available-counters.md) considers a request to be active until the moment when the last byte of the request body has been read. Its metrics counterpart [`http.client.active_requests`](../../../core/diagnostics/built-in-metrics-system-net.md#metric-httpclientactive_requests) doesn't include the time spent reading the response body when counting the active requests. diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index aab2dd63e59b2..b1d613de2ef11 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -10,10 +10,10 @@ ms.date: 10/4/2024 [Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that may be distributed across multiple machines or processes. This technique tracks requests through an application correlating together work done by different application components and separating it from other work the application may be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer, then forwarded to a web server process, which then makes several queries to a database. Using distributed tracing allows engineers to distinguish if any of those steps failed, how long each step took, and potentially logging messages produced by each step as it ran. -The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard naming scheme for spans (activties) together with their attributes (tags), known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. +The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard naming scheme for spans (activities) together with their attributes (tags), known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. > [!NOTE] -> The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span is not to be confused with . +> The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span isn't to be confused with . > [!TIP] > For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). @@ -24,32 +24,32 @@ In order to emit traces, the `System.Net` libraries are [instrumented](../../../ The built-in instrumentation has evolved with .NET versions. -- On .NET 8 and earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (e.g., tags) needed to emit useful traces. -- .NET 9 has extended the instrumentation with the emission the name, status, exception info and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. -- .NET 9 has also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activites across the `System.Net` libraries to support diagnosing connection issues. +- On .NET 8 and earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (for example, tags) needed to emit useful traces. +- .NET 9 extended the instrumentation with the emission the name, status, exception info, and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. +- .NET 9 also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activities across the `System.Net` libraries to support diagnosing connection issues. -## Collecting System.Net traces +## Collect System.Net traces At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. -However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export and monitor traces. +However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export, and monitor traces. - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. -- For **development-time** trace collection and monitoring, we recommend to use [.NET Aspire](#collecting-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. -- It is also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. +- For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. +- It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. -### Collecting traces with .NET Aspire +### Collect traces with .NET Aspire -The simplest solution for collecting traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. +The simplest way to collect traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry, .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be just as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. [![Aspire Dashboard](../../../core/diagnostics/media/aspire-dashboard-thumb.png)](../../../core/diagnostics/media/aspire-dashboard.png#lightbox) -For more details on .NET Aspire see: +For more information on .NET Aspire, see: - [Aspire Overview](/dotnet/aspire/get-started/aspire-overview) - [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) @@ -57,7 +57,7 @@ For more details on .NET Aspire see: ### Reusing Service Defaults project without .NET Aspire Orchestration -The Aspire Service Defaults project provides and easy way to to configure OTel for ASP.NET projects, *even if not using the rest of .NET Aspire* such as the AppHost for orchestration. It is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/c94c422e31b2a5181a97b2dcf4bdc984f37ac1ff/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. +The Aspire Service Defaults project provides an easy way to configure OTel for ASP.NET projects, *even if not using the rest of .NET Aspire* such as the AppHost for orchestration. It's available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/c94c422e31b2a5181a97b2dcf4bdc984f37ac1ff/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. The steps to use *ServiceDefaults* outside .NET Aspire are: @@ -67,7 +67,7 @@ The steps to use *ServiceDefaults* outside .NET Aspire are: dotnet new aspire-servicedefaults --output ServiceDefaults ``` -1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use *Add -> Project Reference* and select the *ServiceDefaults* project. +1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio, use *Add -> Project Reference* and select the *ServiceDefaults* project. 1. Call its OpenTelemetry setup function, `ConfigureOpenTelemetry` as part of your application builder initialization. ``` csharp @@ -85,30 +85,30 @@ For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standa ## Experimental connection tracing -When troubleshooting `HttpClient` issues or bottlenecks, it might be crutial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment which typically breaks down to DNS lookup, TCP connection and TLS handshake. +When troubleshooting `HttpClient` issues or bottlenecks, it might be crucial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment which typically breaks down to DNS lookup, TCP connection, and TLS handshake. -.NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span whith 3 child spans representing the DNS, TCP and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. +.NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span with three child spans representing the DNS, TCP, and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. > [!NOTE] -> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live for a long time and serve many requests. When making a request, if there is no connection immediately available in the connection pool, the request will be added to a request queue to wait for an available connection. There is no direct relationship between waiting requests and connections. The connection process may have started when another connection becomes available for use, in which case the freed connection will be used. As a result, the `HTTP connection setup` span is not modeled as a child of the `HTTP client request` span, instead span links are used. +> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live for a long time and serve many requests. When making a request, if there's no connection immediately available in the connection pool, the request is added to a request queue to wait for an available connection. There's no direct relationship between waiting requests and connections. The connection process may have started when another connection becomes available for use, in which case the freed connection will be used. As a result, the `HTTP connection setup` span isn't modeled as a child of the `HTTP client request` span, instead span links are used. -The following spans have been introduced in .NET 9 to enable collecting detailed connection information: +.NET 9 introduced the following spans to enable collecting detailed connection information: | Name | | Description | |---|---|---| | [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. | | [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. A separate trace root span with it's own `TraceId`. `HTTP client request` spans may contain links to `HTTP connection_setup`. | | [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental) | `Experimental.System.Net.NameResolution` | DNS lookup performed by the class. | -| [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connetion. | +| [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connection. | | [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. > [!NOTE] -> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they are somewhat noisy and this level of instrumentation is not normally needed. However, if you are trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. +> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they're noisy and this level of instrumentation isn't normally needed. However, if you're trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. > [!NOTE] -> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggresively walk links between spans to build up their views and so including this span may cause issues when the tools were not designed to account for large numbers of links. +> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggressively walk links between spans to build up their views and so including this span may cause issues when the tools weren't designed to account for large numbers of links. The following diagram illustrates the behavior of the spans and their relationship: @@ -116,7 +116,7 @@ The following diagram illustrates the behavior of the spans and their relationsh ### Walkthrough: Using the experimental connection tracing in .NET 9 -This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collecting-systemnet-traces) as well. The key step is to enable the ActivitySources. +This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/build-your-first-aspire-app) to demonstrate connection tracing, but it should be easy to set it up with [other monitoring tools](#collect-systemnet-traces) as well. The key step is to enable the ActivitySources. 1. Create a **.NET Aspire 9 Starter App** by using `dotnet new`: @@ -144,8 +144,8 @@ When http requests are made with the connection instrumentation enabled, you sho - If a connection needs to be established, or waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: - The selected span is the HttpClient request. - - The one below it is the delay waiting for a connection to be established. - - The lasts span in yellow is from the destination processing the request. + - The one below it's the delay waiting for a connection to be established. + - The last span in yellow is from the destination processing the request. - The HttpClient span will have a link to the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span which represents the activity to create the http connection used by the request. [![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) @@ -154,7 +154,7 @@ As mentioned [in the note above](#experimental-connection-tracing), the [`HTTP c ## Enrichment -In some cases it is necessary to augment the existing `System.Net` tracing functionality. Typically this means injecting additional tags/attributes to the built-in activities. This is called *enrichment*. +In some cases, it's necessary to augment the existing `System.Net` tracing functionality. Typically this means injecting additional tags/attributes to the built-in activities. This is called *enrichment*. ### Enrichment API in the OpenTelemetry instrumentation library @@ -162,7 +162,7 @@ To add additional tags/attributes to the HTTP client request activity, the simpl ### Manual enrichment -It is possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in the code that is running in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occuring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) and the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs) where the notifications are delegated to. +It's possible to implement the enrichment of the `HTTP client request` activity manually. For this you need to access in the code that is running in the scope of the request activity, before the activity is finished. This can be done by implementing an `IObserver` and subscribing it to to get callbacks for when networking activity is occurring. In fact, this is how the [OpenTelemetry HttpClient and HttpWebRequest instrumentation library](#enrichment-api-in-the-opentelemetry-instrumentation-library) is implemented. For a code example, see the subscription code in [`DiagnosticSourceSubscriber.cs`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/Shared/DiagnosticSourceSubscriber.cs#L44) and the underlying implementation in [HttpHandlerDiagnosticListener.cs](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/blob/bfdf02928ea7f958c481493bc1adc238472b9b9c/src/OpenTelemetry.Instrumentation.Http/Implementation/HttpHandlerDiagnosticListener.cs) where the notifications are delegated to. ## Need more tracing? From f64be243e7aed9fdb09ebcaa442420901a34eb9a Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 29 Jan 2025 16:23:28 +0100 Subject: [PATCH 16/20] Apply suggestions from code review Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- .../networking/telemetry/metrics.md | 28 +++++------ .../networking/telemetry/overview.md | 2 +- .../networking/telemetry/tracing.md | 46 +++++++++---------- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index b161bbc446138..85dec32dcc132 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -23,9 +23,9 @@ To take advantage of the built-in metrics instrumentation, a .NET app needs to b There are several ways to collect networking metrics in .NET. -- For a quick overview using a simple, self-contained example, see [collect metrics with dotnet-counters](#collect-metrics-with-dotnet-counters). +- For a quick overview using a simple, self-contained example, see [Collect metrics with dotnet-counters](#collect-metrics-with-dotnet-counters). - For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools might be inconvenient to use at development time because of their complexity. -- For **development-time** metrics collection and troubleshooting we recommend using [.NET Aspire](#collect-metrics-with-net-aspire), which provides a simple, but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. +- For **development-time** metrics collection and troubleshooting, we recommend using [.NET Aspire](#collect-metrics-with-net-aspire), which provides a simple but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. - It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration, which is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET project. ### Collect metrics with dotnet-counters @@ -55,7 +55,7 @@ Start the HelloBuiltinMetrics app. dotnet run -c Release ``` -Start `dotnet-counters` in a separate CLI window and specifying the process name and the meters to watch, then press a key in the HelloBuiltinMetrics app so it starts sending requests. As soon as measurements start landing, `dotnet-counters` continuously refreshes the console with the latest numbers: +Start `dotnet-counters` in a separate CLI window and specify the process name and the meters to watch, then press a key in the HelloBuiltinMetrics app so it starts sending requests. As soon as measurements start landing, `dotnet-counters` continuously refreshes the console with the latest numbers: ```console dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n HelloBuiltinMetrics @@ -65,13 +65,13 @@ dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n ### Collect metrics with .NET Aspire -The simplest solution to collect metrics in ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. +The simplest solution to collect metrics in ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview), which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. -The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. Each service in the .NET Aspire solution has a reference to the Service Defaults project. +The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to set up and configure OTel. Each service in the .NET Aspire solution has a reference to the Service Defaults project. -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages. These instrumentation components are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. .NET Aspire also includes the OTLP exporter by default, so that it can provide telemetry visualization using the Aspire Dashboard. +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages. These instrumentation components are configured in the [Extensions.cs](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. .NET Aspire also includes the OTLP exporter by default, so that it can provide telemetry visualization using the Aspire Dashboard. -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. #### Quick walkthrough @@ -81,7 +81,7 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb dotnet new aspire-starter-9 --output AspireDemo ``` - Or in Visual Studio: + Or in Visual Studio, create a new project and select the **.NET Aspire 9 Starter App** template: ![Create a .NET Aspire 9 Starter App in Visual Studio](media/aspire-starter.png) @@ -105,7 +105,7 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb 1. Navigate to the Weather page of the `webfrontend` app to generate an `HttpClient` request towards `apiservice`. Refresh the page several times to send multiple requests. -1. Return to the Dashboard, navigate to the **Metrics** page and select the `webfrontend` resource. Scrolling down, you should be able to browse the built-in `System.Net` metrics. +1. Return to the Dashboard, navigate to the **Metrics** page, and select the `webfrontend` resource. Scrolling down, you should be able to browse the built-in `System.Net` metrics. [![Networking metrics in Aspire Dashboard](media/aspire-metrics-thumb.png)](media/aspire-metrics.png#lightbox) @@ -115,14 +115,14 @@ For more information on .NET Aspire, see: - [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) - [Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/explore) -### Reusing Service Defaults project without .NET Aspire Orchestration +### Reuse Service Defaults project without .NET Aspire orchestration -Probably the easiest way to configure OTel for ASP.NET projects is to use the Aspire Service Defaults project, even if not using the rest of .NET Aspire such as the AppHost for orchestration. The Service Defaults project is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. +The easiest way to configure OTel for ASP.NET projects is to use the Aspire Service Defaults project, even if you're not using the rest of .NET Aspire, such as the AppHost for orchestration. The Service Defaults project is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to and provide the resource properties for the application. The steps to use *ServiceDefaults* outside .NET Aspire are: -1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new aspire-servicedefaults --output ServiceDefaults` -1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio use "Add -> Project Reference" and select the *ServiceDefaults* project" +1. Add the *ServiceDefaults* project to the solution using **Add New Project** in Visual Studio, or, from the command line, use `dotnet new aspire-servicedefaults --output ServiceDefaults`. +1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio, select **Add** > **Project Reference** and select the **ServiceDefaults** project" 1. Call the OpenTelemetry setup function `ConfigureOpenTelemetry()` as part of your application builder initialization. ``` csharp @@ -137,7 +137,7 @@ For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standa ### View metrics in Grafana with OpenTelemetry and Prometheus -Please follow the walkthrough in [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) to see how to connect an example app with Prometheus and Grafana. +To see how to connect an example app with Prometheus and Grafana, follow the walkthrough in [Using OpenTelemetry with Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md). In order to stress `HttpClient` by sending parallel requests to various endpoints, extend the example app with the following endpoint: diff --git a/docs/fundamentals/networking/telemetry/overview.md b/docs/fundamentals/networking/telemetry/overview.md index 9050e5061a0ff..46a447c5392f5 100644 --- a/docs/fundamentals/networking/telemetry/overview.md +++ b/docs/fundamentals/networking/telemetry/overview.md @@ -11,7 +11,7 @@ ms.date: 10/18/2022 The .NET networking stack is instrumented at various layers. .NET gives you the option to collect accurate timings throughout the lifetime of an HTTP request using metrics, distributed tracing, event counters, and events. - **[Networking metrics](metrics.md)**: Starting with .NET 8, the HTTP and the name resolution (DNS) components are instrumented using the modern [System.Diagnostics.Metrics API](../../../core/diagnostics/metrics.md). These metrics were designed in cooperation with [OpenTelemetry](https://opentelemetry.io/) and can be exported to various monitoring tools. -- **[Distributed tracing](tracing.md)**: `HttpClient` is instrumented to emit [distributed tracing](../../../core/diagnostics/distributed-tracing.md) activities (a.k.a., spans). +- **[Distributed tracing](tracing.md)**: `HttpClient` is instrumented to emit [distributed tracing](../../../core/diagnostics/distributed-tracing.md) activities (also known as spans). - **[Networking events](events.md)**: Events provide debug and trace information with accurate timestamps. - **[Networking event counters](event-counters.md)**: All networking components are instrumented to publish real-time performance metrics using the EventCounters API. diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index b1d613de2ef11..d4db24c532aef 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -8,44 +8,44 @@ ms.date: 10/4/2024 # Networking distributed traces in .NET -[Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that may be distributed across multiple machines or processes. This technique tracks requests through an application correlating together work done by different application components and separating it from other work the application may be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer, then forwarded to a web server process, which then makes several queries to a database. Using distributed tracing allows engineers to distinguish if any of those steps failed, how long each step took, and potentially logging messages produced by each step as it ran. +[Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that are distributed across multiple machines or processes. This technique tracks requests through an application by correlating together work done by different components and separating it from other work the application might be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer and then forwarded to a web server process, which then makes several queries to a database. Distributed tracing allows engineers to distinguish if any of those steps failed and how long each step took. It can also log messages produced by each step as it ran. -The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs where a unit of work is represented by the class which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry is defining an industry-wide standard naming scheme for spans (activities) together with their attributes (tags), known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry is using existing semantic conventions wherever possible. +The tracing system in .NET is designed to work with OpenTelemetry (OTel), and uses OTel to export the data to monitoring systems. Tracing in .NET is implemented using the APIs, where a unit of work is represented by the class, which corresponds to an OTel [span](https://opentelemetry.io/docs/concepts/signals/traces/#spans). OpenTelemetry defines an industry-wide standard naming scheme for spans (activities) together with their attributes (tags), known as [semantic conventions](https://opentelemetry.io/docs/concepts/semantic-conventions). The .NET telemetry uses existing semantic conventions wherever possible. > [!NOTE] -> The terms *span* and *activity* are being used as synonyms in this article. In context of .NET code, they refer to a instance. The OTel span isn't to be confused with . +> The terms *span* and *activity* are synonymous in this article. In context of .NET code, they refer to a instance. Don't confuse the OTel span with . > [!TIP] > For a comprehensive list of all built-in activities together with their tags/attributes, see [Built-in activities in .NET](../../../core/diagnostics/distributed-tracing-builtin-activities.md). ## Instrumentation -In order to emit traces, the `System.Net` libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in -s which create objects to track the work performed. Activities are only created if there are listeners subscribed to the . +To emit traces, the libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in sources, which create objects to track the work performed. Activities are only created if there are listeners subscribed to the . The built-in instrumentation has evolved with .NET versions. - On .NET 8 and earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (for example, tags) needed to emit useful traces. -- .NET 9 extended the instrumentation with the emission the name, status, exception info, and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+ the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. +- .NET 9 extended the instrumentation by emitting the name, status, exception info, and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+, the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. - .NET 9 also introduced [experimental connection tracing](#experimental-connection-tracing), adding new activities across the `System.Net` libraries to support diagnosing connection issues. ## Collect System.Net traces -At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-custom-logic), trace collection is supported via the method that can be used to register objects containing user-defined logic. +At the [lowest level](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-custom-logic), trace collection is supported via the method, which registers objects containing user-defined logic. However, as an application developer, you would likely prefer to rely on the rich ecosystem built upon the features provided by the [OpenTelemetry .NET SDK](https://opentelemetry.io/docs/languages/net/) to collect, export, and monitor traces. - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). -- For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex, and may be inconvenient to use at development time. -- For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire) which provides a simple, but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. +- For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex and might be inconvenient to use at development time. +- For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire). which provides a simple but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. - It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. ### Collect traces with .NET Aspire -The simplest way to collect traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview) which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to setup and configure OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. +The simplest way to collect traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview), which is a set of extensions to .NET that make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which set ups and configures OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry, .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry, .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is proving to be as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. +The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project from the command line. [![Aspire Dashboard](../../../core/diagnostics/media/aspire-dashboard-thumb.png)](../../../core/diagnostics/media/aspire-dashboard.png#lightbox) @@ -85,30 +85,30 @@ For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standa ## Experimental connection tracing -When troubleshooting `HttpClient` issues or bottlenecks, it might be crucial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment which typically breaks down to DNS lookup, TCP connection, and TLS handshake. +When troubleshooting `HttpClient` issues or bottlenecks, it might be crucial to see where time is being spent when sending HTTP requests. Often, the problem occurs during HTTP connection establishment, which typically breaks down to DNS lookup, TCP connection, and TLS handshake. .NET 9 introduced experimental connection tracing adding an `HTTP connection setup` span with three child spans representing the DNS, TCP, and TLS phases of the connection establishment. The HTTP part of the connection tracing is implemented within , meaning that the activity model has to respect the underlying connection pooling behavior. > [!NOTE] -> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live for a long time and serve many requests. When making a request, if there's no connection immediately available in the connection pool, the request is added to a request queue to wait for an available connection. There's no direct relationship between waiting requests and connections. The connection process may have started when another connection becomes available for use, in which case the freed connection will be used. As a result, the `HTTP connection setup` span isn't modeled as a child of the `HTTP client request` span, instead span links are used. +> In , connections and requests have independent lifecycles. A [pooled connection](../http/httpclient-guidelines.md#pooled-connections) can live for a long time and serve many requests. When making a request, if there's no connection immediately available in the connection pool, the request is added to a request queue to wait for an available connection. There's no direct relationship between waiting requests and connections. The connection process might have started when another connection became available for use, in which case the freed connection is used. As a result, the `HTTP connection setup` span isn't modeled as a child of the `HTTP client request` span; instead, span links are used. .NET 9 introduced the following spans to enable collecting detailed connection information: | Name | | Description | |---|---|---| -| [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is spending in the request queue waiting for an available connection. | -| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. A separate trace root span with it's own `TraceId`. `HTTP client request` spans may contain links to `HTTP connection_setup`. | +| [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) | `Experimental.System.Net.Http.Connections` | A child span of the `HTTP client request` span that represents the time interval the request is waiting for an available connection in the request queue. | +| [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) | `Experimental.System.Net.Http.Connections` | Represents the establishment of the HTTP connection. A separate trace root span with its own `TraceId`. `HTTP client request` spans might contain links to `HTTP connection_setup`. | | [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental) | `Experimental.System.Net.NameResolution` | DNS lookup performed by the class. | | [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connection. | | [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | -The corresponding `ActivitySource` names start with the prefix `Experimental` as these spans may be changed in future versions as we learn more about how well they work in production. +The corresponding `ActivitySource` names start with the prefix `Experimental`, as these spans might be changed in future versions as we learn more about how well they work in production. > [!NOTE] -> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they're noisy and this level of instrumentation isn't normally needed. However, if you're trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that is hard to collect by other means. +> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they're noisy and this level of instrumentation isn't normally needed. However, if you're trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that's hard to collect by other means. > [!NOTE] -> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span will contain a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an http connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggressively walk links between spans to build up their views and so including this span may cause issues when the tools weren't designed to account for large numbers of links. +> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span contains a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an HTTP connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggressively walk links between spans to build up their views, and so including this span can cause issues when the tools weren't designed to account for large numbers of links. The following diagram illustrates the behavior of the spans and their relationship: @@ -138,19 +138,19 @@ This walkthrough uses a [.NET 9 Aspire Starter App](/dotnet/aspire/get-started/b 1. Return to the Dashboard and navigate to the **Traces** page. Open the `webfrontend: GET /weather` trace. -[![HttpClient Spans in Aspire Dashboard](media/aspire-httpclient-get-thumb.png)](media/aspire-httpclient-get.png#lightbox) + [![HttpClient Spans in Aspire Dashboard](media/aspire-httpclient-get-thumb.png)](media/aspire-httpclient-get.png#lightbox) -When http requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: +When HTTP requests are made with the connection instrumentation enabled, you should see the following changes to the client request spans: -- If a connection needs to be established, or waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span will be shown which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the picture above: +- If a connection needs to be established, or if the app is waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span is shown, which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the previous image: - The selected span is the HttpClient request. - The one below it's the delay waiting for a connection to be established. - The last span in yellow is from the destination processing the request. -- The HttpClient span will have a link to the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span which represents the activity to create the http connection used by the request. +- The HttpClient span will have a link to the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span, which represents the activity to create the HTTP connection used by the request. [![Connection setup spans in Aspire Dashboard](media/aspire-connection_setup-thumb.png)](media/aspire-connection_setup.png#lightbox) -As mentioned [in the note above](#experimental-connection-tracing), the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span is a separate span with its own `TraceId` as its lifetime is independent from each individual client request. This span will typically have child spans [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental), (TCP) [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) and [`TLS client handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental). +[As mentioned previously](#experimental-connection-tracing), the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span is a separate span with its own `TraceId`, as its lifetime is independent from each individual client request. This span typically has child spans [`DNS lookup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#dns-lookup-experimental), (TCP) [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental), and [`TLS client handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental). ## Enrichment From 5ff34f826eae4711415885c9216750d070c9aece Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 29 Jan 2025 16:39:11 +0100 Subject: [PATCH 17/20] imrpovements --- .../networking/telemetry/metrics.md | 22 +++++++++---------- .../networking/telemetry/tracing.md | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index 85dec32dcc132..87ecb300c1d46 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -89,17 +89,17 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="4"::: - Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscriptions: - - ```csharp - .WithMetrics(metrics => - { - metrics.AddAspNetCoreInstrumentation() - .AddMeter("System.Net.Http") - .AddMeter("System.Net.NameResolution") - .AddRuntimeInstrumentation(); - }) - ``` + > [!NOTE] On .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscriptions: + > + > ```csharp + > .WithMetrics(metrics => + > { + > metrics.AddAspNetCoreInstrumentation() + > .AddMeter("System.Net.Http") + > .AddMeter("System.Net.NameResolution") + > .AddRuntimeInstrumentation(); + > }) + > ``` 1. Run the `AppHost` project. This should launch the Aspire Dashboard. diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index d4db24c532aef..0a5a8ce978637 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -6,7 +6,7 @@ ms.author: samsp ms.date: 10/4/2024 --- -# Networking distributed traces in .NET +# Distributed Tracing in `Sysem.Net` libraries [Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that are distributed across multiple machines or processes. This technique tracks requests through an application by correlating together work done by different components and separating it from other work the application might be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer and then forwarded to a web server process, which then makes several queries to a database. Distributed tracing allows engineers to distinguish if any of those steps failed and how long each step took. It can also log messages produced by each step as it ran. @@ -144,7 +144,7 @@ When HTTP requests are made with the connection instrumentation enabled, you sho - If a connection needs to be established, or if the app is waiting for a connection from the connection pool, then an additional [`HTTP wait_for_connection`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request-wait-for-connection-experimental) span is shown, which represents the delay for waiting for a connection to be made. This helps to understand delays between the `HttpClient` request being made in code, and when the processing of the request actually starts. In the previous image: - The selected span is the HttpClient request. - - The one below it's the delay waiting for a connection to be established. + - The span below represents the time the request spends waiting for a connection to be established. - The last span in yellow is from the destination processing the request. - The HttpClient span will have a link to the [`HTTP connection_setup`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-connection-setup-experimental) span, which represents the activity to create the HTTP connection used by the request. From 69c36a292d7b562522b406bf8a27a3ad39833e27 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 29 Jan 2025 17:25:39 +0100 Subject: [PATCH 18/20] dedupe Aspire content --- .../includes/aspire-service-defaults.md | 22 ++++++++ .../includes/aspire-telemetry-overview.md | 7 +++ .../networking/telemetry/metrics.md | 50 ++++++------------- .../networking/telemetry/tracing.md | 36 ++----------- 4 files changed, 47 insertions(+), 68 deletions(-) create mode 100644 docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md create mode 100644 docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md diff --git a/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md b/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md new file mode 100644 index 0000000000000..847faeac48e91 --- /dev/null +++ b/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md @@ -0,0 +1,22 @@ +The Aspire Service Defaults project provides an easy way to configure OTel for ASP.NET projects, *even if not using the rest of .NET Aspire* such as the AppHost for orchestration. The Service Defaults project is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/c94c422e31b2a5181a97b2dcf4bdc984f37ac1ff/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. + +The steps to use *ServiceDefaults* outside .NET Aspire are: + +1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new`: + + ```dotnetcli + dotnet new aspire-servicedefaults --output ServiceDefaults + ``` + +1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio, select **Add** > **Project Reference** and select the **ServiceDefaults** project" +1. Call the OpenTelemetry setup function `ConfigureOpenTelemetry()` as part of your application builder initialization. + + ``` csharp + var builder = WebApplication.CreateBuilder(args) + builder.ConfigureOpenTelemetry(); // Extension method from ServiceDefaults. + var app = builder.Build(); + app.MapGet("/", () => "Hello World!"); + app.Run(); + ``` + +For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). diff --git a/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md b/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md new file mode 100644 index 0000000000000..f9d1c5891a46c --- /dev/null +++ b/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md @@ -0,0 +1,7 @@ +A simple way to collect traces and metrics in ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview). .NET Aspire is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. + +The default project templates for .NET Aspire contain a `ServiceDefaults` project. Each service in the .NET Aspire solution has a reference to the Service Defaults project. The services use it to set up and configure OTel. + +The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages. These instrumentation components are configured in the [Extensions.cs](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. To support telemetry visualization in Aspire Dashboard, the Service Defaults project also includes the OTLP exporter by default. + +Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project from command line. diff --git a/docs/fundamentals/networking/telemetry/metrics.md b/docs/fundamentals/networking/telemetry/metrics.md index 87ecb300c1d46..4e525a9d66a4a 100644 --- a/docs/fundamentals/networking/telemetry/metrics.md +++ b/docs/fundamentals/networking/telemetry/metrics.md @@ -26,7 +26,7 @@ There are several ways to collect networking metrics in .NET. - For a quick overview using a simple, self-contained example, see [Collect metrics with dotnet-counters](#collect-metrics-with-dotnet-counters). - For **production-time** metrics collection and monitoring, you can use [Grafana with OpenTelemetry and Prometheus](#view-metrics-in-grafana-with-opentelemetry-and-prometheus) or [Azure Monitor Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools might be inconvenient to use at development time because of their complexity. - For **development-time** metrics collection and troubleshooting, we recommend using [.NET Aspire](#collect-metrics-with-net-aspire), which provides a simple but extensible way to kickstart metrics and distributed tracing in your application and to diagnose issues locally. -- It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration, which is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET project. +- It's also possible to [reuse the Aspire Service Defaults](#reuse-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration, which is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET project. ### Collect metrics with dotnet-counters @@ -65,13 +65,7 @@ dotnet-counters monitor --counters System.Net.Http,System.Net.NameResolution -n ### Collect metrics with .NET Aspire -The simplest solution to collect metrics in ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview), which is a set of extensions to .NET to make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. - -The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which is to set up and configure OTel. Each service in the .NET Aspire solution has a reference to the Service Defaults project. - -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages. These instrumentation components are configured in the [Extensions.cs](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. .NET Aspire also includes the OTLP exporter by default, so that it can provide telemetry visualization using the Aspire Dashboard. - -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project. +[!INCLUDE[Aspire Telemetry Overview](./includes/aspire-telemetry-overview.md)] #### Quick walkthrough @@ -89,17 +83,17 @@ The Aspire Dashboard is designed to bring telemetry observation to the local deb :::code language="csharp" source="snippets/tracing/ConnectionTracingDemo.ServiceDefaults/Extensions.cs" id="snippet_Metrics" highlight="4"::: - > [!NOTE] On .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscriptions: - > - > ```csharp - > .WithMetrics(metrics => - > { - > metrics.AddAspNetCoreInstrumentation() - > .AddMeter("System.Net.Http") - > .AddMeter("System.Net.NameResolution") - > .AddRuntimeInstrumentation(); - > }) - > ``` + Note that on .NET 8+, `AddHttpClientInstrumentation()` can be replaced by manual meter subscriptions: + + ```csharp + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddMeter("System.Net.Http") + .AddMeter("System.Net.NameResolution") + .AddRuntimeInstrumentation(); + }) + ``` 1. Run the `AppHost` project. This should launch the Aspire Dashboard. @@ -117,23 +111,7 @@ For more information on .NET Aspire, see: ### Reuse Service Defaults project without .NET Aspire orchestration -The easiest way to configure OTel for ASP.NET projects is to use the Aspire Service Defaults project, even if you're not using the rest of .NET Aspire, such as the AppHost for orchestration. The Service Defaults project is available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to and provide the resource properties for the application. - -The steps to use *ServiceDefaults* outside .NET Aspire are: - -1. Add the *ServiceDefaults* project to the solution using **Add New Project** in Visual Studio, or, from the command line, use `dotnet new aspire-servicedefaults --output ServiceDefaults`. -1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio, select **Add** > **Project Reference** and select the **ServiceDefaults** project" -1. Call the OpenTelemetry setup function `ConfigureOpenTelemetry()` as part of your application builder initialization. - - ``` csharp - var builder = WebApplication.CreateBuilder(args) - builder.ConfigureOpenTelemetry(); // Extension method from ServiceDefaults. - var app = builder.Build(); - app.MapGet("/", () => "Hello World!"); - app.Run(); - ``` - -For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). +[!INCLUDE[Aspire Service Defaults](./includes/aspire-service-defaults.md)] ### View metrics in Grafana with OpenTelemetry and Prometheus diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 0a5a8ce978637..8c3a0c77b8b55 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -37,15 +37,11 @@ However, as an application developer, you would likely prefer to rely on the ric - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex and might be inconvenient to use at development time. - For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire). which provides a simple but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. -- It's also possible to [reuse the Aspire Service Defaults](#reusing-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. +- It's also possible to [reuse the Aspire Service Defaults](#reuse-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. ### Collect traces with .NET Aspire -The simplest way to collect traces for ASP.NET applications is to use [.NET Aspire](/dotnet/aspire/get-started/aspire-overview), which is a set of extensions to .NET that make it easy to create and work with distributed applications. One of the benefits of using .NET Aspire is that telemetry is built in, using the OpenTelemetry libraries for .NET. The default project templates for .NET Aspire contain a `ServiceDefaults` project, part of which set ups and configures OTel. The Service Defaults project is referenced and initialized by each service in a .NET Aspire solution. - -The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages, and those are configured in the [`Extensions.cs`](https://github.com/dotnet/aspire/blob/39912824d33de54be24baf842bf9228a6a84ac33/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/9.0/Extensions.cs) file. For exporting telemetry, .NET Aspire includes the OTLP exporter by default so that it can provide telemetry visualization using the Aspire Dashboard. - -The Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project from the command line. +[!INCLUDE[Aspire Telemetry Overview](./includes/aspire-telemetry-overview.md)] [![Aspire Dashboard](../../../core/diagnostics/media/aspire-dashboard-thumb.png)](../../../core/diagnostics/media/aspire-dashboard.png#lightbox) @@ -55,33 +51,9 @@ For more information on .NET Aspire, see: - [Telemetry in Aspire](/dotnet/aspire/fundamentals/telemetry) - [Aspire Dashboard](/dotnet/aspire/fundamentals/dashboard/explore) -### Reusing Service Defaults project without .NET Aspire Orchestration - -The Aspire Service Defaults project provides an easy way to configure OTel for ASP.NET projects, *even if not using the rest of .NET Aspire* such as the AppHost for orchestration. It's available as a project template via Visual Studio or `dotnet new`. It configures OTel and sets up the OTLP exporter. You can then use the [OTel environment variables](https://github.com/open-telemetry/opentelemetry-dotnet/tree/c94c422e31b2a5181a97b2dcf4bdc984f37ac1ff/src/OpenTelemetry.Exporter.OpenTelemetryProtocol#exporter-configuration) to configure the OTLP endpoint to send telemetry to, and provide the resource properties for the application. - -The steps to use *ServiceDefaults* outside .NET Aspire are: - -1. Add the *ServiceDefaults* project to the solution using Add New Project in Visual Studio, or use `dotnet new`: - - ```dotnetcli - dotnet new aspire-servicedefaults --output ServiceDefaults - ``` - -1. Reference the *ServiceDefaults* project from your ASP.NET application. In Visual Studio, use *Add -> Project Reference* and select the *ServiceDefaults* project. -1. Call its OpenTelemetry setup function, `ConfigureOpenTelemetry` as part of your application builder initialization. - - ``` csharp - var builder = WebApplication.CreateBuilder(args); - builder.ConfigureOpenTelemetry(); - - var app = builder.Build(); - - app.MapGet("/", () => "Hello World!"); - - app.Run(); - ``` +### Reuse Service Defaults project without .NET Aspire Orchestration -For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). +[!INCLUDE[Aspire Service Defaults](./includes/aspire-service-defaults.md)] ## Experimental connection tracing From f4191ac8a04f67dac1fc2236fc4a8e8e59e70be6 Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 29 Jan 2025 17:27:34 +0100 Subject: [PATCH 19/20] fix link --- .../networking/telemetry/includes/aspire-service-defaults.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md b/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md index 847faeac48e91..653c293128789 100644 --- a/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md +++ b/docs/fundamentals/networking/telemetry/includes/aspire-service-defaults.md @@ -19,4 +19,4 @@ The steps to use *ServiceDefaults* outside .NET Aspire are: app.Run(); ``` -For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../core/diagnostics/observability-otlp-example.md). +For a full walkthrough, see [Example: Use OpenTelemetry with OTLP and the standalone Aspire Dashboard](../../../../core/diagnostics/observability-otlp-example.md). From 7725539d588b1ad59f4a04b99c089508f9d0305f Mon Sep 17 00:00:00 2001 From: antonfirsov Date: Wed, 29 Jan 2025 18:09:11 +0100 Subject: [PATCH 20/20] improvements --- .../includes/aspire-telemetry-overview.md | 2 +- .../networking/telemetry/tracing.md | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md b/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md index f9d1c5891a46c..4ee8511a97430 100644 --- a/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md +++ b/docs/fundamentals/networking/telemetry/includes/aspire-telemetry-overview.md @@ -4,4 +4,4 @@ The default project templates for .NET Aspire contain a `ServiceDefaults` projec The Service Defaults project template includes the OTel SDK, ASP.NET, HttpClient, and Runtime Instrumentation packages. These instrumentation components are configured in the [Extensions.cs](https://github.com/dotnet/aspire/blob/main/src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/Extensions.cs) file. To support telemetry visualization in Aspire Dashboard, the Service Defaults project also includes the OTLP exporter by default. -Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to not only ensure that the applications are producing telemetry, but also use that telemetry to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project from command line. +Aspire Dashboard is designed to bring telemetry observation to the local debug cycle, which enables developers to ensure that the applications are producing telemetry. The telemetry visualization also helps to diagnose those applications locally. Being able to observe the calls between services is as useful at debug time as in production. The .NET Aspire dashboard is launched automatically when you F5 the `AppHost` Project from Visual Studio or `dotnet run` the `AppHost` project from command line. diff --git a/docs/fundamentals/networking/telemetry/tracing.md b/docs/fundamentals/networking/telemetry/tracing.md index 8c3a0c77b8b55..2f35ba5742287 100644 --- a/docs/fundamentals/networking/telemetry/tracing.md +++ b/docs/fundamentals/networking/telemetry/tracing.md @@ -6,7 +6,7 @@ ms.author: samsp ms.date: 10/4/2024 --- -# Distributed Tracing in `Sysem.Net` libraries +# Distributed tracing in System.Net libraries [Distributed tracing](../../../core/diagnostics/distributed-tracing.md) is a diagnostic technique that helps engineers localize failures and performance issues within applications, especially those that are distributed across multiple machines or processes. This technique tracks requests through an application by correlating together work done by different components and separating it from other work the application might be doing for concurrent requests. For example, a request to a typical web service might be first received by a load balancer and then forwarded to a web server process, which then makes several queries to a database. Distributed tracing allows engineers to distinguish if any of those steps failed and how long each step took. It can also log messages produced by each step as it ran. @@ -22,7 +22,7 @@ The tracing system in .NET is designed to work with OpenTelemetry (OTel), and us To emit traces, the libraries are [instrumented](../../../core/diagnostics/distributed-tracing-instrumentation-walkthroughs.md#add-basic-instrumentation) with built-in sources, which create objects to track the work performed. Activities are only created if there are listeners subscribed to the . -The built-in instrumentation has evolved with .NET versions. +The built-in instrumentation evolved with .NET versions. - On .NET 8 and earlier, the instrumentation is limited to the creation of an empty [HTTP client request activity](../../../core/diagnostics/distributed-tracing-builtin-activities.md#http-client-request). This means that users have to rely on the [`OpenTelemetry.Instrumentation.Http`](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/1ca05685cbad63d3fa813b9cab49be341048e69e/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry) library to populate the activity with the information (for example, tags) needed to emit useful traces. - .NET 9 extended the instrumentation by emitting the name, status, exception info, and the most important tags according to the OTel [HTTP client semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-client) on the HTTP client request activity. This means that on .NET 9+, the `OpenTelemetry.Instrumentation.Http` dependency can be omitted, unless more advanced features like [enrichment](#enrichment) are required. @@ -36,8 +36,8 @@ However, as an application developer, you would likely prefer to rely on the ric - To get a fundamental understanding on trace collection with OTel, see our guide on [collecting traces using OpenTelemetry](../../../core/diagnostics/distributed-tracing-collection-walkthroughs.md#collect-traces-using-opentelemetry). - For **production-time** trace collection and monitoring, you can use OpenTelemetry with [Prometheus, Grafana, and Jaeger](../../../core/diagnostics/observability-prgrja-example.md) or with [Azure Monitor and Application Insights](../../../core/diagnostics/observability-applicationinsights.md). However, these tools are quite complex and might be inconvenient to use at development time. -- For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire). which provides a simple but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. -- It's also possible to [reuse the Aspire Service Defaults](#reuse-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce the OpenTelemetry tracing and metrics configuration APIs into your ASP.NET projects. +- For **development-time** trace collection and monitoring, we recommend using [.NET Aspire](#collect-traces-with-net-aspire) which provides a simple but extensible way to kickstart distributed tracing in your application and to diagnose issues locally. +- It's also possible to [reuse the Aspire Service Defaults](#reuse-service-defaults-project-without-net-aspire-orchestration) project without the Aspire orchestration. This is a handy way to introduce and configure OpenTelemetry tracing and metrics in your ASP.NET projects. ### Collect traces with .NET Aspire @@ -74,13 +74,12 @@ When troubleshooting `HttpClient` issues or bottlenecks, it might be crucial to | [`socket connect`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#socket-connect-experimental) | `Experimental.System.Net.Sockets` | Establishment of a connection. | | [`TLS handshake`](../../../core/diagnostics/distributed-tracing-builtin-activities.md#tls-handshake-experimental) | `Experimental.System.Net.Security` | TLS client or server handshake performed by . | -The corresponding `ActivitySource` names start with the prefix `Experimental`, as these spans might be changed in future versions as we learn more about how well they work in production. - > [!NOTE] -> These spans are probably too verbose for use 24x7 in production scenarios with high workloads - they're noisy and this level of instrumentation isn't normally needed. However, if you're trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that's hard to collect by other means. +> The corresponding `ActivitySource` names start with the prefix `Experimental`, as these spans might be changed in future versions as we learn more about how well they work in production. -> [!NOTE] -> When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span contains a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an HTTP connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggressively walk links between spans to build up their views, and so including this span can cause issues when the tools weren't designed to account for large numbers of links. +These spans are too verbose for use 24x7 in production scenarios with high workloads - they're noisy and this level of instrumentation isn't normally needed. However, if you're trying to diagnose connection issues or get a deeper understanding of how network and connection latency is affecting your services, then they provide insight that's hard to collect by other means. + +When the `Experimental.System.Net.Http.Connections` ActivitySource is enabled, *the `HTTP client request` span contains a link to the `HTTP connection_setup` span corresponding to the connection serving the request*. As an HTTP connection can be long lived, this could result in many links to the connection span from each of the request activities. Some APM monitoring tools aggressively walk links between spans to build up their views, and so including this span can cause issues when the tools weren't designed to account for large numbers of links. The following diagram illustrates the behavior of the spans and their relationship: