$lang['tuto'] = "ട്യൂട്ടോറിയലുകൾ"; ?> ഇഷ്‌ടാനുസൃത

ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിന് സ്‌പ്രിംഗ് ബൂട്ട് 3.4 എങ്ങനെ ഉപയോഗിക്കാം

Temp mail SuperHeros
ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിന് സ്‌പ്രിംഗ് ബൂട്ട് 3.4 എങ്ങനെ ഉപയോഗിക്കാം
ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിന് സ്‌പ്രിംഗ് ബൂട്ട് 3.4 എങ്ങനെ ഉപയോഗിക്കാം

സ്പ്രിംഗ് ബൂട്ടിൽ ഇഷ്‌ടാനുസൃത ഹെഡർ ട്രെയ്‌സുകൾ കൈകാര്യം ചെയ്യുന്നു 3.4

നിങ്ങൾക്ക് രണ്ട് ക്ലയൻ്റുകളുമായി തടസ്സമില്ലാതെ പ്രവർത്തിക്കുന്ന ഒരു സ്പ്രിംഗ് ബൂട്ട് 3.4 വെബ് സേവനം ഉണ്ടെന്ന് സങ്കൽപ്പിക്കുക. ആദ്യത്തെ ക്ലയൻ്റ് സ്പ്രിംഗ് ബൂട്ട് 3+ ഉപയോഗിക്കുന്നു, ഇത് ട്രെയ്‌സ് പ്രചരണത്തെ മികച്ചതാക്കുന്നു. അധിക പരിശ്രമം കൂടാതെ, നിങ്ങൾക്ക് മനോഹരമായ അവസാനം മുതൽ അവസാനം വരെ ട്രെയ്സ് തുടർച്ച ലഭിക്കും 🪄. മാജിക് പോലെ ലോഗുകൾ വൃത്തിയുള്ളതും ബന്ധിപ്പിച്ചതും ദൃശ്യമാകും.

എന്നിരുന്നാലും, ക്ലയൻ്റ് രണ്ട് പ്രവർത്തിക്കുമ്പോൾ കാര്യങ്ങൾ ഒരു വഴിത്തിരിവാകുന്നു. സ്റ്റാൻഡേർഡ് ട്രെയ്‌സിംഗ് ഹെഡറുകൾക്ക് പകരം, അവർ `ot-custom-traceid`, `ot-custom-spanid` തുടങ്ങിയ ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ അയയ്ക്കുന്നു. ഈ ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ സാധുവായ ട്രെയ്‌സ് വിവരങ്ങൾ അടങ്ങിയിട്ടുണ്ടെങ്കിലും, സ്പ്രിംഗ് ബൂട്ട് ഈ ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിൽ പരാജയപ്പെടുന്നു. ഫലം? ക്ലയൻ്റ് ട്രെയ്‌സുകളെ സെർവർ സൈഡ് ലോഗുകളുമായി ബന്ധിപ്പിക്കാനുള്ള കഴിവ് നിങ്ങൾക്ക് നഷ്‌ടമാകും.

ഇത് ഒരു നിരീക്ഷണ വിടവ് സൃഷ്ടിക്കുന്നു. ക്ലയൻ്റ് ഒന്നിന്, സേവനങ്ങളിലുടനീളം ഒരു അഭ്യർത്ഥനയുടെ മുഴുവൻ പാതയും നിങ്ങൾ കാണുന്നു. ക്ലയൻ്റ് രണ്ടിന്, നിങ്ങൾ സെർവർ സൈഡ് ലോഗുകൾ മാത്രമേ കാണൂ, നിർണ്ണായക ക്ലയൻ്റ് ട്രെയ്‌സ് നഷ്‌ടമായി. ഇത് ഒരു പകുതി പസിൽ കാണുന്നത് പോലെയാണ്—എന്തെങ്കിലും നഷ്ടപ്പെട്ടിട്ടുണ്ടെന്ന് നിങ്ങൾക്കറിയാം, പക്ഷേ കഷണങ്ങൾ ഒരുമിച്ച് ചേർക്കാൻ കഴിയില്ല. 😓

ഈ ലേഖനത്തിൽ, സ്‌പ്രിംഗ് ബൂട്ട് 3.4 ഇക്കോസിസ്റ്റം അനുസരിച്ച് സ്‌പ്രിംഗ് ക്ലൗഡ് സ്ലൂത്തിനെ ആശ്രയിക്കാതെ ഈ പ്രശ്നം എങ്ങനെ പരിഹരിക്കാമെന്ന് ഞങ്ങൾ പര്യവേക്ഷണം ചെയ്യും. അവസാനത്തോടെ, ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സുകൾ എങ്ങനെ പ്രചരിപ്പിക്കാമെന്നും തുടരാമെന്നും നിങ്ങൾക്കറിയാം, ഇത് നിങ്ങളുടെ സിസ്റ്റത്തിലുടനീളം തടസ്സമില്ലാത്ത നിരീക്ഷണക്ഷമത ഉറപ്പാക്കും.

കമാൻഡ് ഉപയോഗത്തിൻ്റെ ഉദാഹരണം
MDC.put ഈ കമാൻഡ് മാപ്പ് ചെയ്‌ത ഡയഗ്‌നോസ്റ്റിക് സന്ദർഭം (MDC) ലേക്ക് കീ-വാല്യൂ ജോഡികൾ ചേർക്കുന്നു, ഇത് ലോഗുകളിൽ ഇഷ്‌ടാനുസൃത ട്രെയ്സ് ഐഡികൾ ഉൾപ്പെടുത്താൻ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, MDC.put("traceId", "12345").
MDC.clear അഭ്യർത്ഥനകൾക്കിടയിൽ ട്രെയ്സ് മലിനീകരണം ഒഴിവാക്കാൻ ഒരു അഭ്യർത്ഥന പ്രോസസ്സ് ചെയ്ത ശേഷം MDC-യിൽ നിന്നുള്ള എല്ലാ എൻട്രികളും മായ്‌ക്കുന്നു. ഉദാഹരണത്തിന്, MDC.clear().
OncePerRequestFilter ഒരു HTTP അഭ്യർത്ഥനയ്‌ക്ക് ഒരിക്കൽ മാത്രമേ ഫിൽട്ടർ ലോജിക് എക്‌സിക്യൂട്ട് ചെയ്യൂ എന്ന് ഉറപ്പാക്കുന്ന ഒരു സ്പ്രിംഗ് ബൂട്ട് ഫിൽട്ടർ, ഹെഡറുകൾ കണ്ടെത്തുന്നതിന് അനുയോജ്യമാണ്. ഉദാഹരണം: പൊതു ക്ലാസ് CustomTraceFilter OncePerRequestFilter വിപുലീകരിക്കുന്നു.
filterChain.doFilter അഭ്യർത്ഥന മറ്റ് ഫിൽട്ടറുകളിലൂടെ തുടരുന്നുവെന്ന് ഉറപ്പാക്കിക്കൊണ്ട് ചെയിനിലെ അടുത്ത ഫിൽട്ടറിലേക്ക് പോകുന്നു. ഉദാഹരണത്തിന്, filterChain.doFilter(അഭ്യർത്ഥന, പ്രതികരണം).
RestTemplate.getInterceptors() ഇഷ്‌ടാനുസൃത ഇൻ്റർസെപ്റ്ററുകൾ ചേർക്കാൻ അനുവദിക്കുന്ന ഒരു RestTemplate ഉദാഹരണത്തിനായി ഇൻ്റർസെപ്റ്ററുകളുടെ ലിസ്റ്റ് വീണ്ടെടുക്കുന്നു. ഉദാഹരണം: restTemplate.getInterceptors().add(new CustomInterceptor()).
ClientHttpRequestInterceptor ഔട്ട്‌ഗോയിംഗ് HTTP അഭ്യർത്ഥനകൾ തടസ്സപ്പെടുത്തുന്നതിനും ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ചേർക്കുന്നതിനുമുള്ള ഒരു ഇൻ്റർഫേസ്. ഉദാഹരണത്തിന്, ട്രേസ് ഐഡികൾ ചേർക്കുന്നതിന് ClientHttpRequestInterceptor നടപ്പിലാക്കുന്നു.
HttpServletRequest.getHeader ഇൻകമിംഗ് അഭ്യർത്ഥനയിൽ നിന്ന് ഒരു നിർദ്ദിഷ്‌ട HTTP തലക്കെട്ടിൻ്റെ മൂല്യം എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യുന്നു. ഉദാഹരണം: request.getHeader("ot-custom-traceid").
FilterRegistrationBean സ്പ്രിംഗ് ബൂട്ട് ആപ്ലിക്കേഷനിൽ ഇഷ്‌ടാനുസൃത ഫിൽട്ടറുകൾ രജിസ്റ്റർ ചെയ്യുന്നു. ഉദാഹരണത്തിന്: registrationBean.setFilter(പുതിയ CustomTraceFilter()).
MockMvc.perform സ്പ്രിംഗ് ബൂട്ട് ആപ്ലിക്കേഷനുകൾക്കായുള്ള യൂണിറ്റ് ടെസ്റ്റുകളിൽ HTTP അഭ്യർത്ഥനകൾ അനുകരിക്കുന്നു. ഉദാഹരണം: mockMvc.perform(get("/test-endpoint").header("ot-custom-traceid", "12345")).
ClientHttpRequestExecution.execute നൽകിയിരിക്കുന്ന അഭ്യർത്ഥന ബോഡിയും ഹെഡറുകളും ഉപയോഗിച്ച് തടസ്സപ്പെടുത്തിയ HTTP അഭ്യർത്ഥന നടപ്പിലാക്കുന്നു. ഉദാഹരണം: execution.execute(അഭ്യർത്ഥന, ശരീരം).

സ്പ്രിംഗ് ബൂട്ടിലെ ഇഷ്‌ടാനുസൃത ഹെഡർ ട്രെയ്‌സ് പ്രചരണം

ഈ പ്രശ്നം പരിഹരിക്കുന്നതിനുള്ള പ്രധാന ഘടകങ്ങളിലൊന്നാണ് CustomTraceFilter. ഈ ഫിൽട്ടർ വിപുലീകരിക്കുന്നു OnePerRequestFilter ക്ലാസ്, ഓരോ HTTP അഭ്യർത്ഥനയ്‌ക്കും ട്രെയ്‌സ് ഹെഡർ ലോജിക് ഒരു തവണ മാത്രമേ പ്രവർത്തിക്കൂ എന്ന് ഉറപ്പാക്കുന്നു. ആഗോളതലത്തിൽ അഭ്യർത്ഥനകളോ പ്രതികരണങ്ങളോ പരിഷ്കരിക്കുമ്പോൾ സ്പ്രിംഗ് ബൂട്ടിലെ ഫിൽട്ടറുകൾ അവിശ്വസനീയമാംവിധം ഉപയോഗപ്രദമാണ്. ഉദാഹരണത്തിന്, ക്ലയൻ്റ് ട്രെയ്‌സിംഗ് വിവരങ്ങൾ അയയ്‌ക്കുകയാണെങ്കിൽ ഒട്ടി-കസ്റ്റം-ട്രേസീഡ് അല്ലെങ്കിൽ ഒട്ടി-കസ്റ്റം-സ്പാനിഡ് ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ, ഈ ഫിൽട്ടർ അഭ്യർത്ഥനയെ തടസ്സപ്പെടുത്തുകയും ഈ തലക്കെട്ടുകൾ എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്യുകയും മാപ്പ് ചെയ്‌ത ഡയഗ്‌നോസ്റ്റിക് കോൺടെക്‌സ്‌റ്റിലേക്ക്* (MDC) പ്രചരിപ്പിക്കുകയും ചെയ്യുന്നു. MDC-യിലേക്ക് ട്രെയ്സ് ഐഡികൾ ചേർക്കുന്നതിലൂടെ, അഭ്യർത്ഥന പ്രോസസ്സ് ചെയ്യുമ്പോൾ ജനറേറ്റ് ചെയ്യുന്ന ലോഗുകളിൽ ഈ ഐഡൻ്റിഫയറുകൾ ദൃശ്യമാണെന്ന് ഞങ്ങൾ ഉറപ്പാക്കുന്നു.

SLF4J, Logback തുടങ്ങിയ ലോഗിംഗ് ചട്ടക്കൂടുകളുടെ ഒരു നിർണായക ഭാഗമാണ് MDC. ഇഷ്‌ടാനുസൃത ട്രെയ്‌സ് ഐഡികൾ പോലുള്ള നിലവിലെ ത്രെഡിനായി സന്ദർഭോചിതമായ വിവരങ്ങൾ സംഭരിക്കാൻ ഇത് ഞങ്ങളെ അനുവദിക്കുന്നു. തുടങ്ങിയ കമാൻഡുകൾ ഉപയോഗിക്കുന്നു MDC.പുട്ട് ഒപ്പം MDC.clear, ലോഗിംഗ് സിസ്റ്റത്തിൽ ട്രെയ്സ് വിശദാംശങ്ങൾ ഉൾപ്പെടുന്നുവെന്നും ഒരേസമയം അഭ്യർത്ഥനകൾക്കിടയിലുള്ള മലിനീകരണം ഒഴിവാക്കുന്നുവെന്നും ഞങ്ങൾ ഉറപ്പാക്കുന്നു. ഉദാഹരണത്തിന്, ക്ലയൻ്റ് രണ്ട് `8f7ebd8a73f9a8f50e6a00a87a20952a` ആയി `ot-custom-traceid` അയയ്‌ക്കുകയാണെങ്കിൽ, ഈ ഐഡി MDC-യിൽ സംഭരിക്കുകയും എല്ലാ ഡൗൺസ്‌ട്രീം ലോഗുകളിലും ഉൾപ്പെടുത്തുകയും ഒരു സ്ഥിരതയുള്ള ട്രെയ്‌സ് പാത്ത് സൃഷ്‌ടിക്കുകയും ചെയ്യുന്നു.

മറുവശത്ത്, ഔട്ട്‌ഗോയിംഗ് HTTP അഭ്യർത്ഥനകൾക്ക്, റെസ്റ്റ് ടെംപ്ലേറ്റ് ഇൻ്റർസെപ്റ്റർ ഒരു പ്രധാന പങ്ക് വഹിക്കുന്നു. നടപ്പിലാക്കുന്നതിലൂടെ ClientHttpRequestInterceptor, ഔട്ട്‌ഗോയിംഗ് അഭ്യർത്ഥനകളിലേക്ക് ഞങ്ങൾക്ക് അതേ ട്രെയ്സ് ഹെഡറുകൾ (`ot-custom-traceid`, `ot-custom-spanid`) അറ്റാച്ചുചെയ്യാം. ആപ്ലിക്കേഷൻ മറ്റ് മൈക്രോസർവീസുകളെ വിളിക്കുമ്പോൾ ട്രെയ്സ് തുടർച്ച നിലനിർത്തുന്നുവെന്ന് ഇത് ഉറപ്പാക്കുന്നു. ഉദാഹരണത്തിന്, '8f7ebd8a73f9a8f50e6a00a87a20952a` എന്ന ട്രെയ്‌സ് ഐഡി ഉപയോഗിച്ച് സെർവർ ഒരു അഭ്യർത്ഥന പ്രോസസ്സ് ചെയ്യുമ്പോൾ, അത് ഈ ഐഡി ഔട്ട്‌ഗോയിംഗ് ഹെഡറുകളിലേക്ക് അറ്റാച്ചുചെയ്യുന്നു, അതിനാൽ ഡൗൺസ്‌ട്രീം സേവനങ്ങൾക്ക് ട്രെയ്‌സ് തടസ്സമില്ലാതെ തിരിച്ചറിയാനും പ്രചരിപ്പിക്കാനും കഴിയും.

അവസാനമായി, MockMvc ഉപയോഗിച്ച് എഴുതിയ യൂണിറ്റ് ടെസ്റ്റുകൾ, HTTP അഭ്യർത്ഥനകൾ അനുകരിച്ചും ഹെഡർ പ്രചരണം പരിശോധിച്ചും മുഴുവൻ സജ്ജീകരണവും സാധൂകരിക്കുന്നു. യഥാർത്ഥ ലോക ആപ്ലിക്കേഷനുകളിൽ, ട്രെയ്സ് ഹെഡറുകൾ ശരിയായി കൈകാര്യം ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കാൻ പരിശോധന നിർണായകമാണ്. ഉദാഹരണത്തിന്, ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ഉപയോഗിച്ച് ഒരു GET അഭ്യർത്ഥന അയച്ച് പ്രതികരണമോ ലോഗുകളോ പരിശോധിച്ച്, ഫിൽട്ടറും ഇൻ്റർസെപ്റ്ററും പ്രതീക്ഷിച്ചതുപോലെ പ്രവർത്തിക്കുന്നുവെന്ന് ഞങ്ങൾക്ക് സ്ഥിരീകരിക്കാനാകും. ഈ സമഗ്രമായ സമീപനം സ്പ്രിംഗ് ക്ലൗഡ് സ്ലൂത്ത് പോലുള്ള ലെഗസി ഡിപൻഡൻസികളെ ആശ്രയിക്കാതെ വെല്ലുവിളി പരിഹരിക്കുന്നു. ആത്യന്തികമായി, ഫിൽട്ടറുകൾ, ഇൻ്റർസെപ്റ്ററുകൾ, MDC എന്നിവയുടെ സംയോജനം, ക്ലയൻ്റ്‌സ് ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ഉപയോഗിക്കുമ്പോൾ പോലും ട്രേസ് തുടർച്ച ഉറപ്പാക്കുന്നു, ഇത് സിസ്റ്റത്തെ ശക്തവും പൂർണ്ണമായി നിരീക്ഷിക്കാവുന്നതുമാക്കി മാറ്റുന്നു. 🌟

സ്പ്രിംഗ് ബൂട്ടിൽ ഇഷ്‌ടാനുസൃത ട്രെയ്‌സിംഗ് ഹെഡറുകൾ പ്രചരിപ്പിക്കുന്നു 3.4

ബാക്കെൻഡ് പ്രോസസ്സിംഗിനായി സ്പ്രിംഗ് ബൂട്ട് 3.4, മൈക്രോമീറ്റർ എന്നിവയ്‌ക്കൊപ്പം ജാവ ഉപയോഗിക്കുന്നു

// Solution 1: Extract and Propagate Custom Trace Headers Manually
// Import necessary Spring Boot and Micrometer libraries
import org.slf4j.MDC;
import org.springframework.http.HttpHeaders;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CustomTraceFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws IOException {
        String traceId = request.getHeader("ot-custom-traceid");
        String spanId = request.getHeader("ot-custom-spanid");
        try {
            if (traceId != null) {
                MDC.put("traceId", traceId); // Add traceId to Mapped Diagnostic Context
            }
            if (spanId != null) {
                MDC.put("spanId", spanId);
            }
            filterChain.doFilter(request, response); // Continue request processing
        } finally {
            MDC.clear(); // Ensure MDC is cleared after processing
        }
    }
}

// Register the filter in your configuration class
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<CustomTraceFilter> traceFilter() {
        FilterRegistrationBean<CustomTraceFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new CustomTraceFilter());
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
}

ഇഷ്‌ടാനുസൃത ട്രെയ്‌സ് ഹെഡർ പ്രചരണത്തിനായുള്ള യൂണിറ്റ് ടെസ്റ്റ്

ട്രെയ്‌സ് ഹെഡർ പ്രചരണം സാധൂകരിക്കുന്നതിന് JUnit, MockMvc എന്നിവ ഉപയോഗിച്ച് പരീക്ഷിക്കുന്നു

// Import necessary libraries
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest
public class CustomTraceFilterTest {
    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testCustomTraceHeaders() throws Exception {
        mockMvc.perform(get("/test-endpoint")
                .header("ot-custom-traceid", "12345")
                .header("ot-custom-spanid", "67890"))
                .andExpect(status().isOk());
    }
}

RestTemplate ഉപയോഗിച്ച് HTTP അഭ്യർത്ഥനകളിൽ ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ പ്രചരിപ്പിക്കുന്നു

ഔട്ട്‌ഗോയിംഗ് അഭ്യർത്ഥനകളിൽ ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ചേർക്കാൻ RestTemplate ഇൻ്റർസെപ്റ്ററുകൾ ഉപയോഗിക്കുന്നു

// Import necessary libraries
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;

public class CustomHeaderInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        HttpHeaders headers = request.getHeaders();
        headers.add("ot-custom-traceid", "12345");
        headers.add("ot-custom-spanid", "67890");
        return execution.execute(request, body);
    }
}

// Register the interceptor with RestTemplate
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getInterceptors().add(new CustomHeaderInterceptor());
        return restTemplate;
    }
}

സ്പ്രിംഗ് ബൂട്ട് 3.4-ൽ ഓപ്പൺ ടെലിമെട്രി ഉപയോഗിച്ച് കസ്റ്റം ഹെഡർ ട്രെയ്‌സുകൾ കൈകാര്യം ചെയ്യുന്നു

സ്പ്രിംഗ് ബൂട്ട് 3.4 ഉപയോഗിച്ച് പ്രവർത്തിക്കുമ്പോൾ, ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സ് പ്രചരിപ്പിക്കുന്നതിനുള്ള മറ്റൊരു ശക്തമായ സമീപനം സംയോജിപ്പിക്കുക എന്നതാണ് ഓപ്പൺ ടെലിമെട്രി. ഓപ്പൺ ടെലിമെട്രി, ഒരു ഓപ്പൺ സോഴ്‌സ് ഒബ്സർബിലിറ്റി ഫ്രെയിംവർക്ക്, ഇൻസ്ട്രുമെൻ്റ്, ശേഖരിക്കൽ, കയറ്റുമതി എന്നിവ തടസ്സമില്ലാതെ സഹായിക്കുന്നു. ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ഉൾപ്പെടെ, ട്രെയ്സ് സന്ദർഭം എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യാനും കുത്തിവയ്ക്കാനുമുള്ള സംവിധാനങ്ങൾ ഇത് നൽകുന്നു ഒട്ടി-കസ്റ്റം-ട്രേസീഡ് ഒപ്പം ഒട്ടി-കസ്റ്റം-സ്പാനിഡ്, നിങ്ങളുടെ അപേക്ഷയിലേക്ക്. OpenTelemetry-യുടെ TextMapPropagator പ്രയോജനപ്പെടുത്തുന്നതിലൂടെ, നിങ്ങൾക്ക് നിലവാരമില്ലാത്ത ക്ലയൻ്റുകളും നിങ്ങളുടെ നിരീക്ഷണ സംവിധാനവും തമ്മിലുള്ള വിടവ് നികത്താനാകും.

സ്പ്രിംഗ് ബൂട്ട് 3.4-ൽ OpenTelemetry ഉപയോഗിക്കുന്നതിന്, ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളിൽ നിന്ന് ട്രെയ്‌സിംഗ് വിവരങ്ങൾ എക്‌സ്‌ട്രാക്‌റ്റുചെയ്യുന്നതിനും നിലവിലെ ട്രെയ്‌സ് സന്ദർഭത്തിലേക്ക് അറ്റാച്ചുചെയ്യുന്നതിനും ഇഷ്‌ടാനുസൃത പ്രൊപ്പഗേറ്റർ നടപ്പിലാക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, നിങ്ങളുടെ സെർവറിന് ക്ലയൻ്റ് രണ്ടിൽ നിന്ന് ഒരു ഇൻകമിംഗ് അഭ്യർത്ഥന ലഭിക്കുമ്പോൾ, ഓപ്പൺ ടെലിമെട്രിക്ക് ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ പാഴ്‌സ് ചെയ്യാനും യഥാർത്ഥ ട്രെയ്സ് സന്ദർഭം പുനർനിർമ്മിക്കാനും കഴിയും. എൻഡ്-ടു-എൻഡ് ദൃശ്യപരത അനുവദിക്കുന്ന, ഡൗൺസ്ട്രീം സേവനങ്ങൾ ഒരേ ട്രേസ് ഐഡികൾ കാണുന്നുവെന്ന് ഇത് ഉറപ്പാക്കുന്നു. Spring Cloud Sleuth പോലെയുള്ള പഴയ പരിഹാരങ്ങളിൽ നിന്ന് വ്യത്യസ്തമായി, OpenTelemetry ഭാരം കുറഞ്ഞതും ആധുനിക നിരീക്ഷണ നിലവാരവുമായി യോജിപ്പിക്കുന്നതുമാണ്.

ഓപ്പൺ ടെലിമെട്രിയുടെ പ്രൊപ്പഗേറ്ററിനെ മൈക്രോമീറ്റർ മായി സംയോജിപ്പിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് മെട്രിക്‌സ് സമ്പന്നമാക്കാനും ട്രെയ്സ് വിവരങ്ങൾ ഉപയോഗിച്ച് ലോഗിംഗ് ചെയ്യാനും കഴിയും. ക്ലയൻ്റ് വണ്ണിൽ നിന്നും ക്ലയൻ്റ് രണ്ടിൽ നിന്നും വരുന്ന അഭ്യർത്ഥനകളുടെ ട്രെയ്‌സുകൾ നിങ്ങളുടെ നിരീക്ഷണ ടൂളിൽ തടസ്സമില്ലാതെ കാണുന്നത് സങ്കൽപ്പിക്കുക. ഓപ്പൺ ടെലിമെട്രി സ്വയമേവ പ്രോമിത്യൂസ്, സിപ്കിൻ അല്ലെങ്കിൽ ജെയ്ഗർ എന്നിവയുമായുള്ള സംയോജനത്തെ പിന്തുണയ്ക്കുന്നു, ഇത് ട്രെയ്സ് വിഷ്വലൈസേഷൻ കേന്ദ്രീകരിക്കാൻ നിങ്ങളെ പ്രാപ്തമാക്കുന്നു. ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ഉൾപ്പെട്ടിരിക്കുമ്പോൾ പോലും, ട്രേസ് ഡാറ്റയൊന്നും നഷ്‌ടപ്പെടുന്നില്ലെന്നും ഡീബഗ്ഗിംഗ് വളരെ എളുപ്പമാകുമെന്നും ഈ സമീപനം ഉറപ്പാക്കുന്നു. 🚀

സ്പ്രിംഗ് ബൂട്ടിൽ ഇഷ്‌ടാനുസൃത ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിനെക്കുറിച്ച് പതിവായി ചോദിക്കുന്ന ചോദ്യങ്ങൾ

  1. സ്പ്രിംഗ് ബൂട്ടിൽ ഞാൻ എങ്ങനെ ഇഷ്‌ടാനുസൃത ട്രെയ്‌സ് ഹെഡറുകൾ സ്വമേധയാ എക്‌സ്‌ട്രാക്റ്റ് ചെയ്യാം?
  2. നിങ്ങൾക്ക് request.getHeader("ഇഷ്‌ടാനുസൃത-തലക്കെട്ട്") ഉപയോഗിച്ച് ഒരു നിർദ്ദിഷ്‌ട തലക്കെട്ട് സ്വമേധയാ ലഭ്യമാക്കാനും MDC.put("traceId", value) ഉപയോഗിച്ച് MDC-ലേക്ക് ചേർക്കാനും കഴിയും.
  3. ഇഷ്‌ടാനുസൃത ട്രെയ്സ് പ്രചരണത്തിനായി OpenTelemetry ഉപയോഗിക്കുന്നതിൻ്റെ പ്രയോജനം എന്താണ്?
  4. മൈക്രോസർവീസുകളിലുടനീളം ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ ഉൾപ്പെടെ ട്രെയ്‌സുകൾ പ്രചരിപ്പിക്കുന്നതിന് ഓപ്പൺ ടെലിമെട്രി ഒരു ആധുനിക, വെണ്ടർ-ന്യൂട്രൽ സമീപനം നൽകുന്നു.
  5. എനിക്ക് സ്പ്രിംഗ് ബൂട്ടിൽ RestTemplate ഉപയോഗിച്ച് ഇഷ്ടാനുസൃത തലക്കെട്ടുകൾ പ്രചരിപ്പിക്കാനാകുമോ?
  6. അതെ, ClientHttpRequestInterceptor നടപ്പിലാക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് ഔട്ട്‌ഗോയിംഗ് അഭ്യർത്ഥനകളിലേക്ക് traceid, spanid എന്നിവ പോലുള്ള ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകൾ അറ്റാച്ചുചെയ്യാനാകും.
  7. ആഗോളതലത്തിൽ തലക്കെട്ടുകൾ ക്യാപ്‌ചർ ചെയ്യാൻ ഒരു ഫിൽട്ടർ എങ്ങനെ രജിസ്റ്റർ ചെയ്യാം?
  8. നിങ്ങൾക്ക് OncePerRequestFilter വിപുലീകരിക്കുന്ന ഒരു ഫിൽട്ടർ സൃഷ്‌ടിക്കുകയും എല്ലാ എൻഡ് പോയിൻ്റുകൾക്കുമായി തലക്കെട്ടുകൾ ക്യാപ്‌ചർ ചെയ്യുന്നതിന് FilterRegistrationBean ഉപയോഗിച്ച് രജിസ്റ്റർ ചെയ്യുകയും ചെയ്യാം.
  9. സ്പ്രിംഗ് ബൂട്ടിൽ നിന്നുള്ള ട്രെയ്‌സുകൾ ദൃശ്യവൽക്കരിക്കാൻ എനിക്ക് എന്ത് ഉപകരണങ്ങൾ ഉപയോഗിക്കാം?
  10. Zipkin, Jaeger, Prometheus തുടങ്ങിയ ടൂളുകൾക്ക് എൻഡ്-ടു-എൻഡ് ട്രെയ്‌സുകൾ ദൃശ്യവൽക്കരിക്കുന്നതിന് സ്‌പ്രിംഗ് ബൂട്ട്, ഓപ്പൺ ടെലിമെട്രി എന്നിവയുമായി സംയോജിപ്പിക്കാനാകും.

തടസ്സമില്ലാത്ത ട്രെയ്സ് തുടർച്ച ഉറപ്പാക്കുന്നു

ആധുനിക സിസ്റ്റങ്ങളിൽ, ഇഷ്‌ടാനുസൃത ട്രെയ്സ് ഹെഡറുകൾ കൈകാര്യം ചെയ്യുന്നത് വിശ്വസനീയമായ നിരീക്ഷണത്തിന് നിർണ്ണായകമാണ്. ഫിൽട്ടറുകളും ഇൻ്റർസെപ്റ്ററുകളും ഉപയോഗിക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് ക്ലയൻ്റ് നൽകുന്ന ട്രെയ്‌സിംഗ് വിവരങ്ങൾ ക്യാപ്‌ചർ ചെയ്യാനും നിങ്ങളുടെ സേവനങ്ങളിലുടനീളം അത് ശരിയായി പ്രചരിപ്പിക്കാനും കഴിയും. ഇത് വിഘടിത രേഖകളും കാണാതായ ട്രെയ്‌സുകളും ഒഴിവാക്കുന്നു. 🔍

സ്പ്രിംഗ് ബൂട്ട് 3.4, മൈക്രോമീറ്റർ അല്ലെങ്കിൽ ഓപ്പൺ ടെലിമെട്രി എന്നിവയുമായി ചേർന്ന്, സ്പ്രിംഗ് ക്ലൗഡ് സ്ലൂത്ത് പോലുള്ള പഴയ ടൂളുകളെ ആശ്രയിക്കാതെ ശക്തമായ പരിഹാരങ്ങൾ അനുവദിക്കുന്നു. നിങ്ങൾ ക്ലയൻ്റ് വണ്ണിൻ്റെ സ്റ്റാൻഡേർഡ് ഹെഡറുകളോ ക്ലയൻ്റ് ടുവിൻ്റെ ഇഷ്‌ടാനുസൃത തലക്കെട്ടുകളോ കൈകാര്യം ചെയ്യുകയാണെങ്കിലും, ഈ ടെക്‌നിക്കുകൾ നടപ്പിലാക്കുന്നത് ട്രേസ് വിടവുകൾ കാര്യക്ഷമമായി പരിഹരിക്കുന്നു. 🚀

ഉറവിടങ്ങളും റഫറൻസുകളും
  1. സ്പ്രിംഗ് ബൂട്ട് ഔദ്യോഗിക ഡോക്യുമെൻ്റേഷൻ: ട്രെയ്സിംഗ് സന്ദർഭങ്ങളുടെ പ്രചരണം. സ്പ്രിംഗ് ബൂട്ട് ഡോക്യുമെൻ്റേഷൻ
  2. ജാവ ഡെവലപ്പർമാർക്കുള്ള ഓപ്പൺ ടെലിമെട്രി: ട്രെയ്‌സ് പ്രൊപ്പഗേഷനിലേക്കുള്ള വഴികാട്ടി. ഓപ്പൺ ടെലിമെട്രി ജാവ
  3. മൈക്രോമീറ്റർ ഒബ്സർവബിലിറ്റി ഡോക്യുമെൻ്റേഷൻ: ഇഷ്‌ടാനുസൃത ട്രെയ്‌സ് ഹെഡറുകൾ സംയോജിപ്പിക്കുന്നു. മൈക്രോമീറ്റർ നിരീക്ഷണക്ഷമത
  4. SLF4J ലോഗിംഗ് API: മാപ്പ് ചെയ്ത ഡയഗ്നോസ്റ്റിക് സന്ദർഭം (MDC) കേസുകൾ ഉപയോഗിക്കുക. SLF4J മാനുവൽ