GenAI टेलीमेट्री के लिए कस्टम डैशबोर्ड बनाना
कस्टम डैशबोर्ड क्यों?
जब आप Bedrock Model Invocation Logging सक्षम करते हैं और ADOT ऑटो-इंस्ट्र ुमेंटेशन एजेंट डिप्लॉय करते हैं, तो AWS आपको out-of-the-box डैशबोर्ड के साथ शुरुआत प्रदान करता है। Bedrock स्वचालित रूप से invocation count, latency, token counts, और throttle मेट्रिक्स प्रदान करता है। Application Signals स्वचालित रूप से service maps और SLO views जनरेट करता है। यह एक मजबूत आधार है -- लेकिन यह पूरी तस्वीर नहीं है।
Out-of-the-box डैशबोर्ड "क्या मेरा AI अभी ठीक है?" का जवाब देते हैं। वे उन सवालों का जवाब नहीं देते जो आपकी DevOps, FinOps, और सुरक्षा टीमें वास्तव में पूछती हैं:
- कौन सा caller हमारे Bedrock बजट का 80% खर्च कर रहा है?
- दोपहर 3 बजे की deployment के बाद completion rate क्यों गिरी?
- क्या cross-region inference वास्तव में मदद कर रहा है, या latency बढ़ा रहा है?
- कौन से prompts को caching से सबसे अधिक लाभ होगा?
- PII लौटाने वाला मॉडल कॉल किसने किया, और उन्होंने क्या पूछा?
- क्या मेरा एजेंट tool layer पर विफल हो रहा है या model layer पर?
इन सवालों का जवाब देने के लिए कस्टम queries की आवश्यकता होती है जो log groups को join करती ह ैं, tokens से cost की गणना करती हैं, IAM role द्वारा segment करती हैं, और span trees में drill down करती हैं। raw टेलीमेट्री पहले से बह रही है -- मूल्य इस बात में है कि आप इसे कैसे काटते हैं।
एक पाइपलाइन, विभिन्न दर्शक
आपकी GenAI टेलीमेट्री तीन log groups में आती है: bedrock-model-invocation-logging, aws/spans, और /aws/bedrock-agentcore/runtimes/<agent>। डेटा नहीं बदलता, लेकिन आप इसे कैसे प्रस्तुत करते हैं वह बदलता है। एक ही invocation डेटा बन जाता है:
- DevOps डैशबोर्ड -- completion rate, component latency, और agent error drill-down दिखाता है -- "क्या सिस्टम काम कर रहा है?" पर केंद्रित
- FinOps डैशबोर्ड -- model-wise cost, top spenders, और caching opportunities दिखाता है -- "क्या हम कुशलता से खर्च कर रहे हैं?" पर केंद्रित
यह गाइड आपको दोनों बनाने के लिए queries प्रदान करता है। अपने दर्शकों के अनुसार relevant sections चुनें। प्रत्येक query अपना source log group, view type, query language, और किस प्रश्न का उत्तर देती है यह दर्शाती है।
अंतर्निहित data pipelines के अवलोकन और प्रत्येक को कब सक्षम करना है, इसके लिए AWS पर GenAI ऑब्ज़र्वेबिलिटी देखें।
DevOps पर्सोना डैशबोर्ड
DevOps टीमों को यह जवाब देना होता है: क्या मेरा GenAI वर्कलोड स्वस्थ है, और bottlenecks कहाँ हैं? ये queries invocation health, agent workflow विश्वसनीयता, और performance bottlenecks पर केंद्रित हैं।

मॉडल Invocation Health
1. मॉडल-वार Stop Reason वितरण
- उद्देश्य: सभी मॉडलों में सभी stop reasons के वितरण को दिखाता है। प्रत्येक Bedrock invocation एक stop reason के साथ समाप्त होती है --
end_turn(प्राकृतिक समापन),tool_use(tool calling),max_tokens(truncated),stop_sequence(boundary hit), या error। उदाहरण: आप पा सकते हैं कि आपके summarization model की 15% callsmax_tokensके साथ समाप्त होती हैं -- जिसका अर्थ है कि उपयोगकर्ताओं को काटे हुए responses मिल रहे हैं -- जबकि आपका classification model 100%end_turnहै। - स्रोत:
bedrock-model-invocation-logging - व्यू: Bar chart
- Query भाषा: CloudWatch Logs Insights
- Query:
fields @timestamp, modelId, operation, requestId,
output.outputBodyJson.stopReason as stop_reason
| filter schemaType = "ModelInvocationLog"
| filter ispresent(output.outputBodyJson.stopReason)
or ispresent(output.outputBodyJson.error)
| stats count() as stop_reason_count by stop_reason, modelId
- अलार्म: कोई भी non-healthy stop reason (
end_turn,tool_use, याstop_sequenceनहीं) जो मॉडल की कुल invocations का 10% से अधिक हो।
2. Completion Rate बनाम Truncation (प्रति घंटा)
- उद्देश्य: सफल completions (
end_turn+tool_use) बनाम truncated responses (max_tokens) का प्रति घंटा अनुपात ट्रैक करता है। यह आपका SLA मेट्रिक है -- 95%+ completion rate लक्ष्य रखें। उदाहरण: यदि दोपहर 3 से 4 बजे के बीच completion rate 97% से 88% तक गिरती है, तो कुछ बदला है -- एक नया prompt template, model update, या configuration change अधिक truncation पैदा कर रहा है। - स्रोत:
bedrock-model-invocation-logging - व्यू: Time series (stacked)
- Query भाषा: CloudWatch Logs Insights
- Query:
fields @timestamp, modelId,
output.outputBodyJson.stopReason as stop_reason
| filter schemaType = "ModelInvocationLog"
| filter ispresent(output.outputBodyJson.stopReason)
| stats sum(stop_reason = "end_turn" or stop_reason = "tool_use") as ok,
sum(stop_reason = "max_tokens") as truncated
by bin(@timestamp, 1h) as hour
| sort hour desc
- अलार्म:
ok / (ok + truncated)लगातार 2 घंटे 95% से नीचे।