Skip to content

Commit 79097de

Browse files
author
Adrian Wright
committed
docs: add observability docs
1 parent 98c492a commit 79097de

File tree

4 files changed

+77
-11
lines changed

4 files changed

+77
-11
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,8 @@ The purpose of this section is to help you learn how to best leverage this solut
4343

4444
You will experience the benefits of a production-grade AI application when it comes to speed of innovation, maintainability and scalability.
4545

46-
This is a great way to get familiar with the solution and understand how to best leverage it for your own use cases.
46+
This is a great way to get familiar with the solution and understand how to best leverage it for your own use cases.
47+
48+
### [Explore application observability](docs/06_observability/README.md)
49+
50+
Visit this section to observe application behavior and performance through various tools. See logs, traces, and metrics to understand what your application was doing during the realtime conversation.

docs/05_explore/README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
1. First, create a new car rental tools plugin. Create file car_rental_plugins.py in voice_agent\app\backend\agents\tools and add the following code:
66

77
<details>
8-
<summary> Click to expand/collaspse</summary>
8+
<summary> Click to expand/collapse</summary>
99

1010
```python
1111
from typing import List
@@ -44,7 +44,7 @@
4444
2. Create a car rental agent profile. Create car_rental_agent_profile.yaml in voice_agent\app\backend\agents\agent_profiles and add the following:
4545

4646
<details>
47-
<summary> Click to expand/collaspse</summary>
47+
<summary> Click to expand/collapse</summary>
4848

4949
```python
5050
name: car_rental_agent
@@ -67,7 +67,7 @@
6767
3. Modify the RTMiddleTier class to include the new car rental agent. Add the following to the _load_agents method of voice_agent\app\backend\rtmt.py:
6868

6969
<details>
70-
<summary> Click to expand/collaspse</summary>
70+
<summary> Click to expand/collapse</summary>
7171

7272
```python
7373
from agents.tools.car_rental_plugins import Car_Rental_Tools
@@ -113,7 +113,7 @@
113113
4. Next steps are to update the system message to include the car rental agent along with the intent detection functionality. Update the utility.py detect_intent method to now include car rental agent as part of the system message. Add the below code to the messages block.
114114

115115
<details>
116-
<summary> Click to expand/collaspse</summary>
116+
<summary> Click to expand/collapse</summary>
117117

118118
```python
119119
- **car_rental_agent**: Deal with car rentals, vehicle reservations, changes, and general car rental policy questions.
@@ -128,7 +128,7 @@
128128
Create a JSON file for car rental policies. Name the file car_rental_policy.json and store it in the data folder along with the flight & hotel policies:
129129

130130
<details>
131-
<summary> Click to expand/collaspse</summary>
131+
<summary> Click to expand/collapse</summary>
132132

133133
```python
134134
[
@@ -156,7 +156,7 @@
156156
Update the plugin to setup Azure OpenAI client for embeddings, create get_embedding method to generate text embeddings. Define the SearchClient class with semantic search functionality and finally initialize the search client.
157157

158158
<details>
159-
<summary> Click to expand/collaspse</summary>
159+
<summary> Click to expand/collapse</summary>
160160

161161
```python
162162
# Azure OpenAI client setup
@@ -199,7 +199,7 @@
199199
Update the Car_Rental_Tools class to include policy search:
200200

201201
<details>
202-
<summary> Click to expand/collaspse</summary>
202+
<summary> Click to expand/collapse</summary>
203203

204204
```python
205205
from openai import AzureOpenAI
@@ -225,7 +225,7 @@
225225
Create an embedding generation script & store it in ./scripts/generate_car_rental_policy_embeddings.py :
226226

227227
<details>
228-
<summary> Click to expand/collaspse</summary>
228+
<summary> Click to expand/collapse</summary>
229229

230230
```python
231231
import json
@@ -272,7 +272,7 @@
272272
Run the embedding generation script in the terminal
273273

274274
<details>
275-
<summary> Click to expand/collaspse</summary>
275+
<summary> Click to expand/collapse</summary>
276276

277277
```
278278
cd c:\Code\multi-modal-customer-service-agent\voice_agent\app\backend
@@ -739,4 +739,4 @@ This approach provides quantitative metrics to measure the impact of upgrading y
739739
- (phase-2 / consider once this functionality is integrated into the AI Foundry Agent Service post Build 2025): Exercise 4: real-time monitoring around generative quality & safety (RAI)
740740

741741
---
742-
#### Navigation: [Home](../../README.md) | [Previous Section](../04_deploy/README.md)
742+
#### Navigation: [Home](../../README.md) | [Previous Section](../04_deploy/README.md) | [Next Section](../06_observability/README.md)

docs/06_observability/README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Observe application behavior
2+
3+
## Semantic Kernel and Observability
4+
5+
It's worth taking a minute to read these two pages about observability with semantic kernel:
6+
[Observability in Semantic Kernel](https://learn.microsoft.com/en-us/semantic-kernel/concepts/enterprise-readiness/observability)
7+
8+
## Observability Architecture
9+
10+
This application uses the [Open Telemetry](https://opentelemetry.io/) standard for shipping application tracing data to three telemetry destinations:
11+
- [.NET Aspire Dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/overview?tabs=bash), an OTEL-based dashboard for viewing application behavior.
12+
- [Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview), Azure's application observability service.
13+
- Console log
14+
15+
## How does the app send telemetry data to observability destinations?
16+
17+
The application uses the python `opentelemetry` sdk to send data to various destinations. The sdk uses base classes `LogProvider`, `SpanProvider` and `MetricProvider` to send data to various endpoints. In [utility.py]('..\..\voice_agent\app\backend\utility.py) the application uses specific implementations of those classes to send telemetry data to the destinations.
18+
19+
## What observability resources are deployed to my resource group?
20+
21+
### Aspire Dashboard
22+
23+
The bicep infrastructure deploys Aspire Dashboard as a standalone ACA container called `aspire-dashboard`. You can find it in the list of resources in your resource group. Browse the dashboard by clicking the container link.
24+
25+
![Logical architecture](../../media/aspire_dashboard.png)
26+
27+
### Application Insights Resource
28+
29+
The bicep infrastructure deploys an Application Insights resource where you can observe your telemetry data. Use the following features to observe semantic kernel behavior in App Insights:
30+
31+
## Observe Application Behavior
32+
33+
### Conduct a conversation with the customer service agents
34+
35+
Conduct a conversation with the customer service agents following this sequence:
36+
- Ask about your upcoming hotel stay
37+
- Upgrade the room to a suite
38+
- Ask about your upcoming flights
39+
- Upgrade your seat to Business class
40+
41+
### Observe application behavior in Aspire Dashboard
42+
43+
- Go to your resource group in Azure Portal
44+
- Click on the `aspire-dashboard` resource
45+
- Click on the `Application URL` in the top right corner to navigate to the dashboard
46+
- Observe the application log showing the conversation you conducted. Locate an entry: "Function hotel_tools-load_user_reservation_info invoking." and click on the Trace link. This navigates you to the Trace page for that function call.
47+
- Observe the details of the trace, such as the duration and other metadata.
48+
- Click on the Traces navigation on the left.
49+
- Observe the sequence of function calls and confirm it matches the conversation you had. Drill into traces to see information as desired.
50+
- Click on the Metrics navigation on the left.
51+
- Click on the function duration metric to see the duration on the most recent function calls.
52+
53+
## Application Environment Variables
54+
55+
- You can disable specific OTEL destinations by adjusting the `TELEMETRY_SCENARIO` variable. By default it is `console,application_insights,aspire_dashboard`. You can remove any destination from the list by and re-deploy by this sequence:
56+
- Go to the `backend` ACA app
57+
- Click on containers
58+
- Click on Environment Variables
59+
- Adjust the value as desired
60+
- Click `Deploy as new revision`. This will deploy a new revision of the backend app with your new value.
61+
---
62+
#### Navigation: [Home](../../README.md) | [Previous Section](../05_explore/README.md)

media/aspire_dashboard.png

70.6 KB
Loading

0 commit comments

Comments
 (0)