મેટ્રિક્સને એકરૂપે અને વસંત બૂટમાં ટ્રેસિંગ
ડિસ્ટ્રિબ્યુટેડ સિસ્ટમ્સ સાથે કામ કરતી વખતે, બધા સ્તરોમાં નિરીક્ષણની ખાતરી કરવી નિર્ણાયક છે. વસંત બૂટમાં, લ s ગ્સ પહેલેથી જ ટ્રેસ આઈડી કેપ્ચર કરી શકે છે, જે સેવાઓ પરની વિનંતીઓને ટ્ર track ક કરવાનું સરળ બનાવે છે. જો કે, આ ટ્રેસ અને સ્પેન આઈડીને મેટ્રિક્સમાં એકીકૃત કરવું એક પડકાર છે. .
કલ્પના કરો કે તમે કોઈ પ્રદર્શનના મુદ્દાને ડિબગ કરી રહ્યાં છો, અને તમે ટ્રેસ આઈડી સાથે લોગ જોઈ શકો છો પરંતુ તેમને વિશિષ્ટ મેટ્રિક ડેટા સાથે સંકળાયેલ નથી. આ મર્યાદા સિસ્ટમ વર્તનનું અસરકારક રીતે વિશ્લેષણ કરવું મુશ્કેલ બનાવે છે. આ અંતરને દૂર કરવા માટે, અમને વિવિધ સ્તરો - રેસ્ટ કંટ્રોલર્સ અને જેપીએ રીપોઝીટરીઝ - માંથી મેટ્રિક્સને ટેગ કરવાની રીતની જરૂર છે - ટ્રેસ અને સ્પેન આઈડી સાથે.
પ્રોમિથિયસ, ગ્રાફના અને ઝિપકીન શક્તિશાળી મોનિટરિંગ અને ટ્રેસિંગ ક્ષમતાઓ પ્રદાન કરે છે. જ્યારે લ s ગ્સ વિનંતીના પ્રવાહમાં આંતરદૃષ્ટિ પ્રદાન કરે છે, મેટ્રિક્સ સાથે ટ્રેસ સંદર્ભ જોડવાથી બધા સ્તરોમાં દૃશ્યતા વધશે. આનો અર્થ એ છે કે આપણે લેટન્સી, ભૂલ દર અને વિશિષ્ટ વપરાશકર્તા વિનંતીઓ સાથે થ્રુપુટને સુસંગત કરી શકીએ છીએ.
આ માર્ગદર્શિકામાં, અમે દરેક એપ્લિકેશન લેયર પર મેટ્રિક્સમાં ટ્રેસ અને સ્પેન આઈડી ઉમેરવા માટે સ્પ્રિંગ બૂટને કેવી રીતે ગોઠવી શકાય તે અન્વેષણ કરીશું. પછી ભલે તમે બાકીના અંતિમ બિંદુઓ અથવા ડેટાબેઝ ક્રિયાપ્રતિક્રિયાઓ સાથે વ્યવહાર કરી રહ્યાં છો, આ અભિગમ તમને પૂર્ણ-સ્ટેક અવલોકનક્ષમતા પ્રાપ્ત કરવામાં મદદ કરશે. .
આદેશ આપવો | ઉપયોગનું ઉદાહરણ |
---|---|
OncePerRequestFilter | એક સ્પ્રિંગ બૂટ ફિલ્ટર જે વિનંતી કરે છે કે વિનંતી પર ફક્ત એક જ વાર પ્રક્રિયા કરવામાં આવે છે, જે મેટ્રિક્સમાં ટ્રેસ આઈડી ઉમેરવા માટે ઉપયોગી બનાવે છે. |
MeterRegistry.counter() | કસ્ટમ મેટ્રિક કાઉન્ટર બનાવવા અને વધારવા માટે વપરાય છે, માઇક્રોમીટરમાં ટ્રેસ આઈડી સાથે મેટ્રિક્સના ટેગિંગને મંજૂરી આપે છે. |
TraceContextHolder.getTraceId() | એક વૈવિધ્યપૂર્ણ ઉપયોગિતા પદ્ધતિ જે ટ્રેસિંગ સંદર્ભમાંથી વર્તમાન ટ્રેસ આઈડી પ્રાપ્ત કરે છે, સ્તરોમાં સાચા સંબંધને સુનિશ્ચિત કરે છે. |
StatementInspector | હાઇબરનેટનો ઇન્ટરફેસ જે એક્ઝેક્યુશન પહેલાં એસક્યુએલ ક્વેરીઝમાં ફેરફાર અને નિરીક્ષણને મંજૂરી આપે છે, ડેટાબેઝ મેટ્રિક્સને ટેગ કરવા માટે ઉપયોગી છે. |
fetch("http://localhost:9090/api/v1/query") | અગ્રતામાં રીઅલ-ટાઇમ ટ્રેસ આઈડી-આધારિત મેટ્રિક્સ પ્રદર્શિત કરવા માટે તેના API દ્વારા પ્રોમિથિયસ મેટ્રિક્સ ડેટા મેળવે છે. |
response.json() | પ્રોમિથિયસ એપીઆઈ પ્રતિસાદને જેએસઓન ફોર્મેટમાં પાર્સ કરે છે, જેનાથી પ્રતિક્રિયામાં મેટ્રિક્સ પર પ્રક્રિયા અને પ્રદર્શિત કરવામાં સરળ બને છે. |
meterRegistry.counter().increment() | દરેક વિનંતી અથવા ડેટાબેઝ ક્વેરીને ટ્રેસ આઈડી સાથે ગણાવી શકે છે, તે સ્પષ્ટ રીતે ચોક્કસ મેટ્રિક કાઉન્ટરમાં વધારો કરે છે. |
filterChain.doFilter() | મેટ્રિક્સ ઉમેર્યા પછી સામાન્ય વિનંતી પ્રક્રિયાને સુનિશ્ચિત કરીને, સાંકળમાં આગામી ફિલ્ટરને વિનંતી અને પ્રતિસાદ પસાર કરે છે. |
useEffect(() =>useEffect(() => {}, []) | એક પ્રતિક્રિયા હૂક જે ઘટક માઉન્ટ પર એકવાર ચાલે છે, જ્યારે ડેશબોર્ડ લોડ થાય છે ત્યારે પ્રોમિથિયસ મેટ્રિક્સ મેળવવા માટે અહીં વપરાય છે. |
મેટ્રિક્સમાં ટ્રેસ આઈડી સાથે અવલોકનક્ષમતા વધારવી
આધુનિક વિતરિત સિસ્ટમોમાં, ડિબગીંગ અને પ્રદર્શન મોનિટરિંગ માટે લ s ગ્સ અને મેટ્રિક્સનો સંબંધ નિર્ણાયક છે. અમે વિકસિત કરેલી સ્ક્રિપ્ટો એકીકૃત કરવામાં મદદ કરે છે ટ્રેસ આઈ.ડી.એસ. અને ગાળ સ્પ્રિંગ બૂટની અવલોકનશીલતા સ્ટેકમાં. પ્રથમ સ્ક્રિપ્ટનો ઉપયોગ કરીને કસ્ટમ ફિલ્ટરનો પરિચય આપે છે એકવાર ઇનકમિંગ એચટીટીપી વિનંતીઓને અટકાવવા અને માઇક્રોમીટર મેટ્રિક્સ પર ટ્રેસ આઈડી જોડવા માટે. આ સુનિશ્ચિત કરે છે કે દરેક HTTP વિનંતીની ગણતરી કરવામાં આવે છે અને તેના સંબંધિત ટ્રેસ ID સાથે લેબલ કરવામાં આવે છે. આ વિના, બહુવિધ સેવાઓ પર વ્યક્તિગત વિનંતીને ટ્રેસ કરવી પડકારજનક હશે. આ મુદ્દો નિયંત્રક, સેવા અથવા ડેટાબેઝ સ્તરમાં છે કે કેમ તે જાણ્યા વિના ધીમી API પ્રતિસાદની મુશ્કેલીનિવારણની કલ્પના કરો! .
અમારી બીજી સ્ક્રિપ્ટ લાભ દ્વારા દ્ર istence તા સ્તર પર ધ્યાન કેન્દ્રિત કરે છે હાઇબરનેટનું સ્ટેટમેન્ટ ઇન્સપેક્ટર. આ ઘટક એક્ઝેક્યુશન પહેલાં એસક્યુએલ ક્વેરીઝનું નિરીક્ષણ કરે છે, અમને ડેટાબેઝ ક્રિયાપ્રતિક્રિયામાં ટ્રેસ આઈડી ઉમેરવાની મંજૂરી આપે છે. આનો અર્થ એ છે કે અમે ફક્ત HTTP વિનંતીઓ જ નહીં, પરંતુ તેઓ જે પ્રશ્નો ઉત્પન્ન કરે છે તે પણ શોધી શકીએ છીએ, સિસ્ટમ પ્રદર્શનનો સંપૂર્ણ સ્ટેક દૃશ્ય આપી શકીએ છીએ. ઉદાહરણ તરીકે, જો રિપોઝિટરી પદ્ધતિને ક calling લ કરવાના અંતિમ બિંદુ ધીમી પ્રશ્નોમાં પરિણમે છે, તો અમારી ટ ged ગ કરેલી મેટ્રિક્સ મૂળ કારણને ઓળખવામાં મદદ કરી શકે છે. ઉપયોગ કરીને meterregistry.counter (), અમે દર વખતે ક્વેરી ચલાવવામાં આવે ત્યારે મેટ્રિક વધારીએ છીએ, ડેટાબેઝ પ્રદર્શનમાં સંપૂર્ણ દૃશ્યતાની ખાતરી કરીએ છીએ.
ફ્રન્ટ-એન્ડ બાજુ પર, અમે એક સરળ રિએક્ટ ડેશબોર્ડ બનાવ્યું છે જે ટ્રેસ આઈડી સાથે ટ ged ગ કરેલા પ્રોમિથિયસ મેટ્રિક્સ લાવે છે અને પ્રદર્શિત કરે છે. નો ઉપયોગ લાવવું અમારી એપ્લિકેશનને રીઅલ ટાઇમમાં પ્રોમિથિયસમાંથી ડેટા પ્રાપ્ત કરવાની મંજૂરી આપે છે. જ્યારે કોઈ વપરાશકર્તા ડેશબોર્ડ ખોલે છે, ત્યારે તેઓ ટ્રેસ આઈડી દીઠ કરેલી વિનંતીઓની સંખ્યા જુએ છે, ટીમોને વપરાશકર્તા વર્તન સાથે બેકએન્ડ પ્રવૃત્તિને સહન કરવામાં મદદ કરે છે. કોઈ વિશિષ્ટ વિનંતીને ડિબગ કરતો વિકાસકર્તા ઝડપથી તેની ટ્રેસ આઈડી શોધી શકે છે અને જોઈ શકે છે કે તે કેટલી ક્વેરીઝ ટ્રિગર કરે છે. આ અભિગમ મોનિટરિંગમાં સુધારો કરે છે અને ડિબગીંગ સત્રોને વધુ કાર્યક્ષમ બનાવે છે. .
આખરે, આ ઉકેલો બધા એપ્લિકેશન સ્તરોમાં સીમલેસ ટ્રેસિંગ અનુભવ બનાવવા માટે સાથે મળીને કાર્ય કરે છે. પ્રોમિથિયસ, ગ્રાફના અને ઝિપકીન સાથે સ્પ્રિંગ બૂટના નિરીક્ષણ સાધનોને જોડીને, અમે ફુલ-સ્ટેક મોનિટરિંગ પ્રાપ્ત કરીએ છીએ. વિકાસકર્તાઓ હવે સરળતા સાથે ડેટાબેઝ ક્વેરીઝ પર એન્ટ્રી પોઇન્ટથી વિનંતીઓ ટ્ર track ક કરી શકે છે. આ ફક્ત સિસ્ટમની વિશ્વસનીયતામાં સુધારો કરે છે પરંતુ ડિબગીંગ સમયને પણ ઘટાડે છે. વાસ્તવિક-વિશ્વના દૃશ્યમાં, આ મુદ્દાઓ વધતા પહેલા કામગીરીની અડચણોને શોધવામાં અને સંસાધન ફાળવણીને optim પ્ટિમાઇઝ કરવામાં મદદ કરશે. આવી અવલોકનશીલતા શ્રેષ્ઠ પ્રયાસોનો અમલ વધુ સારી કામગીરી, ઝડપી મુશ્કેલીનિવારણ અને ઉન્નત વપરાશકર્તા અનુભવની ખાતરી આપે છે. .
સંપૂર્ણ નિરીક્ષણ માટે મેટ્રિક્સમાં ટ્રેસ આઈડીનો અમલ
માઇક્રોમીટર અને સ્લુથ સાથે સ્પ્રિંગ બૂટનો ઉપયોગ કરીને બેક-એન્ડ સોલ્યુશન
// Import necessary packages
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Optional;
@Component
public class TraceIdMetricFilter extends OncePerRequestFilter {
private final MeterRegistry meterRegistry;
public TraceIdMetricFilter(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String traceId = Optional.ofNullable(request.getHeader("traceId")).orElse("unknown");
meterRegistry.counter("http.requests", "traceId", traceId).increment();
filterChain.doFilter(request, response);
}
}
જેપીએ સાથે ડેટાબેઝ મેટ્રિક્સમાં ટ્રેસ આઈડી એકીકૃત
હાઇબરનેટ અને માઇક્રોમીટર સાથે સ્પ્રિંગ બૂટનો ઉપયોગ કરીને બેક-એન્ડ સોલ્યુશન
// Import necessary packages
import io.micrometer.core.instrument.MeterRegistry;
import org.hibernate.resource.jdbc.spi.StatementInspector;
import org.springframework.stereotype.Component;
@Component
public class TraceIdStatementInspector implements StatementInspector {
private final MeterRegistry meterRegistry;
public TraceIdStatementInspector(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@Override
public String inspect(String sql) {
String traceId = TraceContextHolder.getTraceId(); // Assume TraceContextHolder gets the traceId
meterRegistry.counter("database.queries", "traceId", traceId).increment();
return sql;
}
}
અગ્ર એકીકરણ: ટ્રેસ આઈડી મેટ્રિક્સ પ્રદર્શિત
રિએક્ટ અને પ્રોમિથિયસ એપીઆઈનો ઉપયોગ કરીને ફ્રન્ટ-એન્ડ અમલીકરણ
import React, { useEffect, useState } from "react";
const MetricsDashboard = () => {
const [metrics, setMetrics] = useState([]);
useEffect(() => {
fetch("http://localhost:9090/api/v1/query?query=http_requests_total")
.then(response => response.json())
.then(data => setMetrics(data.data.result));
}, []);
return (
<div>
<h2>Trace ID Metrics</h2>
<ul>
{metrics.map((metric, index) => (
<li key={index}>{metric.metric.traceId}: {metric.value[1]} requests</li>
))}
</ul>
</div>
);
};
export default MetricsDashboard;
વસંત બૂટ મેટ્રિક્સમાં અદ્યતન ટ્રેસબિલીટી
જ્યારે અમે એકીકૃત કરવાની શોધ કરી છે ટ્રેસ આઈ.ડી.એસ. આરામ અને ડેટાબેઝ મેટ્રિક્સમાં, બીજો નિર્ણાયક પાસું વિતરિત વ્યવહારોનું નિરીક્ષણ કરવું છે. માઇક્રો સર્વિસિસ આર્કિટેક્ચરમાં, એક જ વપરાશકર્તા વિનંતી ઘણીવાર બહુવિધ સેવાઓનો વિસ્તાર કરે છે, વિનંતી કેવી રીતે ફેલાય છે તે ટ્ર track ક કરવાનું જરૂરી બનાવે છે. સ્પ્રિંગ બૂટ, જ્યારે opentelemtry જેવા સાધનો સાથે જોડવામાં આવે છે, ત્યારે અમને દરેક સેવા ક્રિયાપ્રતિક્રિયા માટે વિગતવાર સ્પાન્સ કેપ્ચર કરવાની મંજૂરી આપે છે. આ સુનિશ્ચિત કરે છે કે બેકએન્ડ એપીઆઇ અને ડેટાબેસેસ માટે અગ્ર યુઆઈ તરફથી વિનંતીઓ બધા એક જ ટ્રેસ હેઠળ સંકળાયેલ છે. આ વિના, ડિબગીંગ પર્ફોર્મન્સ અડચણો નોંધપાત્ર રીતે મુશ્કેલ બને છે. .
બીજો મહત્વપૂર્ણ પાસું એ અસુમેળ કામગીરીમાં ટ્રેસબિલીટી લાગુ કરવું છે. આધુનિક એપ્લિકેશનોમાં, ઘણી પ્રક્રિયાઓ પૃષ્ઠભૂમિમાં ચાલે છે, જેમ કે કાફકા અથવા રેબિટએમક્યુ સાથે ઇવેન્ટ આધારિત ક્રિયાઓ. સંદેશ કતારોમાં ટ્રેસ આઈડી પ્રચાર કરવા માટે સ્પ્રિંગ બૂટને ગોઠવીને, અમે સુનિશ્ચિત કરી શકીએ છીએ કે અસુમેળ કાર્યો પણ યોગ્ય રીતે શોધી કા .વામાં આવે છે. દાખલા તરીકે, જ્યારે કોઈ ઇ-ક ce મર્સ સિસ્ટમમાં ઓર્ડર આપવામાં આવે છે, ત્યારે બહુવિધ સેવાઓ ઇન્વેન્ટરી, ચુકવણી અને સૂચનાઓને હેન્ડલ કરે છે. જો આમાંના એક પગલામાં કોઈ મુદ્દો .ભો થાય છે, તો યોગ્ય ગાળાના પ્રસાર વિના મૂળ કારણને શોધી કા about વું લગભગ અશક્ય હશે.
ટ્રેસિંગનો અમલ કરતી વખતે સુરક્ષા અને ડેટા અખંડિતતા પણ ચાવીરૂપ હોય છે. બાહ્યરૂપે ટ્રેસ આઈડીનો પર્દાફાશ કરવો જો યોગ્ય રીતે નિયંત્રિત ન કરવામાં આવે તો સુરક્ષા જોખમો તરફ દોરી શકે છે. શ્રેષ્ઠ પ્રયાસોમાં સંવેદનશીલ ટ્રેસ માહિતીને ફિલ્ટર કરવી અને સુનિશ્ચિત કરવું કે લોગ અને મેટ્રિક્સ અજાણતાં વ્યક્તિગત ડેટાને ખુલ્લા પાડતા નથી. તદુપરાંત, ભૂમિકા આધારિત control ક્સેસ નિયંત્રણ સાથે ટ્રેસબિલીટીને જોડવું એ સુનિશ્ચિત કરે છે કે ફક્ત અધિકૃત કર્મચારીઓ વિગતવાર ટ્રેસિંગ માહિતીની પૂછપરછ કરી શકે છે. આ સુરક્ષા પગલાંનો અમલ સુનિશ્ચિત કરે છે કે જવાબદારીને બદલે અવલોકનશીલતા સંપત્તિ રહે છે. .
વસંત બૂટ ટ્રેસબિલીટી વિશે વારંવાર પૂછાતા પ્રશ્નો
- હું વસંત બૂટ એપ્લિકેશનમાં ટ્રેસિંગને કેવી રીતે સક્ષમ કરી શકું?
- વસંત બૂટ દ્વારા ટ્રેસિંગને સપોર્ટ કરે છે Spring Cloud Sleuth અને Micrometer. યોગ્ય અવલંબન ઉમેરીને અને ટ્રેસિંગ ગુણધર્મોને ગોઠવીને, તમે ટ્રેસને કેપ્ચર કરી શકો છો અને આપમેળે આઇડી સ્પેન કરી શકો છો.
- શું હું બહુવિધ માઇક્રો સર્વિસિસ પર ટ્રેસ આઈડી ટ્ર track ક કરી શકું છું?
- હા, ઉપયોગ કરીને Zipkin ન આદ્ય Jaeger વિતરિત ટ્રેસિંગ લાઇબ્રેરીઓ સાથે, ટ્રેસ આઈડી બહુવિધ સેવાઓ પર પ્રચાર કરી શકાય છે, વિનંતી પ્રવાહમાં સંપૂર્ણ દૃશ્યતાને મંજૂરી આપે છે.
- હું કાફકા સંદેશાઓ સાથે ટ્રેસ આઈડી કેવી રીતે જોડી શકું?
- તમે સંદેશ હેડરોમાં ટ્રેસ આઈડી શામેલ કરી શકો છો KafkaTemplate.send(). સંદેશાઓનું સેવન કરતી વખતે, ટ્રેસ આઈડી કા ract ો અને તેને ટ્રેસિંગ સંદર્ભમાં સેટ કરો.
- શું ગ્રાફના ડેશબોર્ડ્સમાં ટ્રેસ આઈડી જોવાનું શક્ય છે?
- હા, પ્રોમિથિયસ અને ગ્રાફનાને ગોઠવીને Micrometer tags, તમે સીધા તમારા ગ્રાફના પેનલ્સમાં ટ્રેસ-સંબંધિત મેટ્રિક્સની કલ્પના કરી શકો છો.
- હું ટ્રેસ આઈડી સુરક્ષા કેવી રીતે સુનિશ્ચિત કરી શકું?
- ટ્રેસ માહિતીને સુરક્ષિત કરવા માટે, બાહ્ય API અને લ s ગમાં ટ્રેસ આઈડીનો પર્દાફાશ કરવાનું ટાળો. ઉપયોગ કરવો log sanitization લ s ગ્સ સ્ટોર કરતા પહેલા સંવેદનશીલ ડેટાને ફિલ્ટર કરવાની તકનીકો.
વસંત બૂટ એપ્લિકેશનોમાં અવલોકનક્ષમતાને izing પ્ટિમાઇઝ કરવું
બધા સ્તરોમાં ટ્રેસ આઈડી લાગુ કરવાથી એપ્લિકેશન વર્તણૂકની deep ંડી આંતરદૃષ્ટિ આપવામાં આવે છે. ટ્રેસ અને સ્પેન આઈડી સાથે મેટ્રિક્સને ટેગ કરીને, વિકાસકર્તાઓ અંતથી અંતની દૃશ્યતા મેળવે છે, ધીમી વિનંતીઓ અથવા નિષ્ફળ સેવાઓનું નિદાન કરવાનું સરળ બનાવે છે. પ્રોમિથિયસ અને ગ્રાફના જેવા સાધનોનો ઉપયોગ રીઅલ-ટાઇમ મોનિટરિંગને વધુ વધારે છે.
ડિબગીંગ ઉપરાંત, સ્ટ્રક્ચર્ડ ટ્રેસિંગ પ્રભાવ optim પ્ટિમાઇઝેશનમાં સુધારો કરવામાં મદદ કરે છે. બિનકાર્યક્ષમ ડેટાબેઝ ક્વેરીઝને ઓળખવા, માઇક્રો સર્વિસિસ લેટન્સીને ટ્રેકિંગ કરવું અને વિનંતીના પ્રવાહનું વિશ્લેષણ કરવું ખૂબ સરળ બને છે. ટ્રેસિંગ તકનીકોમાં રોકાણ કરવાથી માત્ર વધુ સારી મુશ્કેલીનિવારણ જ નહીં, પણ સરળ વપરાશકર્તા અનુભવની પણ ખાતરી થાય છે. .
મેટ્રિક્સમાં ટ્રેસ આઈડી લાગુ કરવાના સ્ત્રોતો અને સંદર્ભો
- માઇક્રોમીટર અને સુથુથ સાથે વસંત બૂટમાં ટ્રેસિંગને એકીકૃત કરવા પરના સત્તાવાર દસ્તાવેજો: વસંત વાદળ sleth .
- સ્પ્રિંગ બૂટ એપ્લિકેશનને મોનિટર કરવા માટે પ્રોમિથિયસ અને ગ્રાફના સેટ કરવા માટે માર્ગદર્શિકા: પ્રભામક દસ્તાવેજીકરણ .
- ઝિપકીનનો ઉપયોગ કરીને વિતરિત ટ્રેસિંગ માટે શ્રેષ્ઠ પ્રયાસો: ઝિપકીન સ્થાપત્ય .
- હાઇબરનેટ ક્વેરીઝમાં ટ્રેસ અને સ્પેન આઈડી પ્રચારનો અમલ: હાઇબરનેટ વપરાશકર્તા માર્ગદર્શિકા .