Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Microsoft OpenTelemetry Distro adalah distribusi observabilitas terpadu yang menyediakan satu pengalaman onboarding untuk mengumpulkan jejak, metrik, dan log dari aplikasi agenik maupun nonagenik. Distro ini mendukung observabilitas untuk Microsoft Agent 365, Microsoft Foundry, Azure Monitor, serta backend yang kompatibel dengan OpenTelemetry Protocol (OTLP). Distro ini mendukung .NET, Node.js, dan Python, serta menyederhanakan penyiapan yang terfragmentasi di berbagai tumpukan observabilitas dengan satu impor dan satu panggilan konfigurasi.
Manfaat utama
Microsoft OpenTelemetry Distro menawarkan manfaat berikut:
- Satu paket, satu API: Ganti beberapa paket eksportir dan instrumentasi dengan satu dependensi.
- Dukungan multi-backend: Kirim telemetri ke Azure Monitor, titik akhir yang kompatibel dengan OpenTelemetry Protocol (OTLP) seperti Datadog, Grafana, atau New Relic, dan Microsoft Agent 365 secara bersamaan.
- Instrumentasi bawaan: Gunakan instrumentasi otomatis untuk HTTP, database, Azure SDK, Azure Functions, dan lainnya tanpa konfigurasi tambahan.
- Berbasis standar: Didasarkan pada OpenTelemetry, kerangka kerja observabilitas standar industri.
- Boilerplate minimal: Tambahkan satu impor dan satu panggilan fungsi ke titik entri aplikasi Anda.
Penginstalan dan konfigurasi
Panduan ini menunjukkan kepada Anda cara menambahkan observabilitas ke aplikasi Anda dengan Microsoft OpenTelemetry Distro. Distro secara otomatis mengumpulkan pelacakan, metrik, dan log dengan instrumentasi bawaan, dan mengekspor telemetri ke Azure Monitor, titik akhir OpenTelemetry Protocol (OTLP) apa pun, atau Microsoft Agent 365.
Menginstal pustaka
Untuk mulai menggunakan Microsoft OpenTelemetry Distro, instal pustaka yang sesuai untuk platform pengembangan Anda menggunakan pengelola paket bahasa Anda.
Prasyarat: Python 3.10 atau yang lebih baru.
pip install microsoft-opentelemetry
Konfigurasi
Eksportir Agent 365 tidak menggunakan string koneksi. Titik akhirnya ditemukan secara otomatis berdasarkan penyewa. Untuk mengaktifkan ekspor ke Agent 365, atur target eksportir dan sediakan token resolver yang mengembalikan token akses untuk setiap ID agen dan ID penyewa yang diberikan.
Panggil use_microsoft_opentelemetry() untuk mengaktifkan observabilitas.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache
token_cache = AgenticTokenCache()
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=lambda agent_id, tenant_id: (
(t := asyncio.run(token_cache.get_observability_token(agent_id, tenant_id)))
and t.token or None
),
)
Untuk resolusi token kustom (daripada token resolver default), lihat Token resolver manual.
Anda dapat menyesuaikan perilaku eksportir dengan meneruskan kwargs a365_* opsional ke use_microsoft_opentelemetry().
| Parameter | Deskripsi | Default |
|---|---|---|
a365_use_s2s_endpoint |
Ketika True, menggunakan jalur titik akhir layanan ke layanan. |
False |
a365_max_queue_size |
Ukuran maksimum antrean untuk prosesor batch. | 2048 |
a365_scheduled_delay_ms |
Penundaan dalam milidetik antara batch ekspor. | 5000 |
a365_exporter_timeout_ms |
Batas waktu dalam milidetik untuk operasi ekspor. | 30000 |
a365_max_export_batch_size |
Ukuran batch maksimum untuk operasi ekspor. | 512 |
Propagasi konteks
Untuk mempertahankan observabilitas di seluruh operasi Agent 365 terdistribusi, lakukan propagasi konteks. Ketika Anda melakukan propagasi konteks melalui agen dan layanan, pastikan bahwa penelusuran, log, dan metrik dikorelasikan dengan benar di seluruh siklus hidup permintaan. Korelasi ini diperlukan untuk pengalaman pemantauan Microsoft Agent 365 yang lengkap dan efektif.
Atribut bagasi
Gunakan BaggageBuilder untuk menetapkan informasi kontekstual yang mengalir melalui semua rentang dalam permintaan.
SDK menerapkan SpanProcessor yang menyalin semua entri bagasi yang tidak kosong ke setiap rentang yang baru dimulai tanpa menimpa atribut yang sudah ada.
from microsoft.opentelemetry.a365.core import BaggageBuilder
with (
BaggageBuilder()
.tenant_id("tenant-123")
.agent_id("agent-456")
.conversation_id("conv-789")
.build()
):
# Any spans started in this context will receive these as attributes
pass
Untuk mengisi BaggageBuilder secara otomatis dari TurnContext, gunakan helper populate dalam paket microsoft-opentelemetry. Fungsi helper ini secara otomatis mengekstrak detail pemanggil, agen, penyewa, saluran, dan percakapan dari aktivitas.
from microsoft.opentelemetry.a365.core import BaggageBuilder
from microsoft.opentelemetry.a365.hosting.scope_helpers.populate_baggage import populate
builder = BaggageBuilder()
populate(builder, turn_context)
with builder.build():
# Baggage is auto-populated from the TurnContext activity
pass
Middleware bagasi
Jika agen Anda menggunakan paket integrasi hosting, daftarkan middleware bagasi untuk secara otomatis mengisi bagasi pada setiap permintaan yang masuk. Langkah ini menghilangkan kebutuhan untuk memanggil BaggageBuilder secara manual di setiap handler aktivitas.
Di Python, daftarkan middleware bagasi melalui ObservabilityHostingManager.configure() alih-alih langsung pada adapter.
from microsoft.opentelemetry.a365.hosting import ObservabilityHostingManager, ObservabilityHostingOptions
options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)
Middleware melewatkan pengaturan bagasi untuk balasan asinkron (peristiwa ContinueConversation) untuk menghindari penimpaan bagasi yang sudah ditetapkan oleh permintaan asal.
Memvalidasi data yang mengalir dalam produk
Untuk melihat telemetri agen di Microsoft Purview atau Microsoft Defender, pastikan persyaratan berikut terpenuhi:
- Microsoft Purview: Auditing harus diaktifkan untuk organisasi Anda. Untuk petunjuk, lihat Mengaktifkan atau menonaktifkan audit.
-
Microsoft Defender: Perburuan tingkat lanjut harus dikonfigurasi untuk mengakses tabel
CloudAppEvents. Untuk informasi selengkapnya, lihat tabel CloudAppEvents di skema perburuan tingkat lanjut.
Instrumentasi otomatis
Microsoft OpenTelemetry Distro menggabungkan alur OpenTelemetry standar dengan instrumentasi yang dikuratori Microsoft. Distro dapat mengumpulkan telemetri aplikasi, telemetri infrastruktur, telemetri agen, dan telemetri AI generatif, tergantung pada bahasa dan konfigurasi.
| Kategori | Cakupan |
|---|---|
| Alur sinyal | Jejak, metrik, dan log. |
| Deteksi sumber daya | Konteks layanan, host, cloud, dan runtime Azure jika didukung. |
| Instrumentasi infrastruktur | Klien HTTP, ASP.NET Core, Azure SDK, database, dan kerangka kerja pengelogan jika didukung. |
| Instrumentasi AI generatif | OpenAI, Azure OpenAI, Kernel Semantik, LangChain, OpenAI Agents SDK, dan Agent Framework jika didukung. |
| Cakupan agen manual | Pemanggilan agen, pelaksanaan alat, inferensi, dan telemetri keluaran jika didukung. |
| Eksportir dan prosesor | Azure Monitor, Microsoft Agent 365, OTLP, output konsol, prosesor rentang, prosesor log, dan pembaca metrik. |
Cakupan instrumentasi
| Bahasa | Instrumentasi aplikasi umum | Instrumentasi AI generatif dan agen umum |
|---|---|---|
| Python | Sumber daya OpenTelemetry, prosesor, pembaca, pengelogan, metrik, dan jejak. | Kernel Semantik, OpenAI Agents SDK, Agent Framework, LangChain, bagasi Microsoft Agent 365, dan cakupan Microsoft Agent 365. |
| Node.js | HTTP, Azure SDK, Azure Functions, MongoDB, MySQL, PostgreSQL, Redis, Bunyan, dan Winston. | OpenAI Agents SDK, LangChain, bagasi Microsoft Agent 365, dan cakupan Microsoft Agent 365. |
| .NET | ASP.NET Core, HttpClient, SQL Client, Azure SDK, deteksi sumber daya, metrik, dan log. | Cakupan Kernel Semantik, OpenAI dan Azure OpenAI, Agent Framework, bagasi Microsoft Agent 365, serta Microsoft Agent 365. |
Instrumentasi otomatis memantau sinyal telemetri yang dipancarkan oleh pustaka dan kerangka kerja yang didukung. Instrumentasi manual digunakan ketika aplikasi perlu mendeskripsikan operasi khusus agen, seperti pemanggilan, eksekusi alat, inferensi, atau output asinkron.
Tambahkan sumber, meteran, prosesor, atau pembaca OpenTelemetry kustom ketika aplikasi Anda menghasilkan telemetri yang tidak tercakup oleh instrumentasi bawaan.
Penting
Instrumentasi otomatis hanya mengisi atribut OpenTelemetry standar. Itu tidak mencakup semua atribut yang diperlukan Agent 365. Anda harus menambahkan atribut khusus Microsoft melalui BaggageBuilder. Untuk melihat atribut yang diperlukan, lihat Menyimpan atribut validasi.
Pustaka instrumentasi bawaan
Instrumentasi otomatis mendengarkan telemetri yang dihasilkan oleh kerangka kerja yang didukung dan meneruskannya melalui alur OpenTelemetry Distro. Untuk skenario agen, atur bagasi seperti ID penyewa dan ID agen sebelum kerangka kerja yang telah diinstrumentasi membuat rentang.
| Kerangka | Python | Node.js | .NET |
|---|---|---|---|
| Kernel Semantik | Didukung | Tidak didukung | Didukung |
| OpenAI dan OpenAI Agents SDK | Didukung | Didukung | Didukung |
| Agent Framework | Didukung | Tidak didukung | Didukung |
| LangChain | Didukung | Didukung | Tidak terdaftar |
Kernel Semantik
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"semantic_kernel": {"enabled": True},
},
)
OpenAI
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"openai_agents": {"enabled": True},
},
)
Agent Framework
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"agent_framework": {"enabled": True},
},
)
LangChain
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"langchain": {"enabled": True},
},
)
Instrumentasi manual
Gunakan instrumentasi manual saat instrumentasi otomatis tidak menjelaskan pengoperasian agen dengan cukup detail. Cakupan manual memungkinkan aplikasi menjelaskan aktivitas agen umum dengan cara yang konsisten di seluruh bahasa.
| Scope | Gunakan untuk |
|---|---|
InvokeAgentScope |
Awal dan penyelesaian pemanggilan agen. |
ExecuteToolScope |
Panggilan alat yang dibuat oleh agen. |
InferenceScope |
Operasi inferensi model AI |
OutputScope |
Output yang harus direkam setelah cakupan asal selesai. |
Gunakan kembali nilai permintaan dan identitas agen yang sama di seluruh cakupan dalam satu permintaan agar telemetri terkait dapat dikorelasikan.
Pemanggilan agen
from microsoft.opentelemetry.a365.core import (
AgentDetails,
Channel,
InvokeAgentScope,
InvokeAgentScopeDetails,
Request,
ServiceEndpoint,
)
agent_details = AgentDetails(
agent_id="agent-456",
agent_name="Email Assistant",
agent_description="An AI agent powered by Azure OpenAI",
agentic_user_id="auid-123",
agentic_user_email="agent@contoso.com",
agent_blueprint_id="blueprint-789",
tenant_id="tenant-123",
)
request = Request(
content="Please help me organize my emails",
session_id="session-42",
conversation_id="conv-xyz",
channel=Channel(name="msteams"),
)
scope_details = InvokeAgentScopeDetails(
endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)
with InvokeAgentScope.start(
request=request,
scope_details=scope_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Please help me organize my emails"])
# Run the agent invocation.
invoke_scope.record_output_messages(["I found 15 urgent emails."])
Eksekusi alat
from microsoft.opentelemetry.a365.core import (
ExecuteToolScope,
ServiceEndpoint,
ToolCallDetails,
ToolType,
)
tool_details = ToolCallDetails(
tool_name="email-search",
arguments={"query": "from:manager@contoso.com"},
tool_call_id="tool-call-456",
description="Search emails by criteria",
tool_type=ToolType.FUNCTION.value,
endpoint=ServiceEndpoint(
hostname="tools.contoso.com",
port=8080,
protocol="https",
),
)
with ExecuteToolScope.start(
request=request,
details=tool_details,
agent_details=agent_details,
) as scope:
result = search_emails(tool_details.arguments)
scope.record_response(result)
Inferensi
from microsoft.opentelemetry.a365.core import (
InferenceCallDetails,
InferenceOperationType,
InferenceScope,
)
inference_details = InferenceCallDetails(
operationName=InferenceOperationType.CHAT,
model="gpt-4o-mini",
providerName="azure-openai",
)
with InferenceScope.start(
request=request,
details=inference_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Summarize the following emails for me."])
response = call_llm()
scope.record_output_messages([response.text])
scope.record_input_tokens(response.usage.input_tokens)
scope.record_output_tokens(response.usage.output_tokens)
scope.record_finish_reasons(["stop"])
Output
from microsoft.opentelemetry.a365.core import OutputScope, Response, SpanDetails
# Capture this before exiting the originating InvokeAgentScope context.
parent_context = invoke_scope.get_span_context()
response = Response(
messages=["Here is your organized inbox."],
)
with OutputScope.start(
request=request,
response=response,
agent_details=agent_details,
user_details=None,
span_details=SpanDetails(parent_context=parent_context),
) as scope:
pass
Dokumentasi produk harus menentukan persyaratan validasi khusus produk untuk cakupan ini.
Validasi lokal
Validasi lokal memastikan bahwa aplikasi menghasilkan telemetri sebelum tujuan khusus produk divalidasi. Gunakan output konsol atau titik akhir OTLP lokal untuk memeriksa apakah jejak, metrik, dan log dibuat.
Validasi dengan titik akhir OTLP lokal
Konfigurasikan Distro untuk mengirim telemetri ke kolektor lokal atau titik akhir yang kompatibel dengan OTLP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry
use_microsoft_opentelemetry()
Validasi dengan output lokal
Gunakan output lokal saat Anda ingin mengonfirmasi instrumentasi sebelum mengirim telemetri ke tujuan jarak jauh.
export ENABLE_A365_OBSERVABILITY_EXPORTER=false
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "local-validation-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
)
# Run instrumented application code.
Tinjau output lokal untuk rentang dari sumber yang diharapkan, seperti permintaan HTTP, panggilan OpenAI atau Azure OpenAI, cakupan pemanggilan agen, cakupan eksekusi alat, atau cakupan inferensi. Validasi khusus tujuan terdapat dalam dokumentasi produk untuk tujuan tersebut.
Menyiapkan autentikasi manual
Saat Anda menggunakan eksportir Agent 365, Anda harus menyediakan mekanisme untuk memberikan token autentikasi. Token resolver bekerja pada setiap batch ekspor menggunakan ID agen dan ID penyewa dari konteks bagasi aktif. Distro mendukung dua pendekatan.
Kiat
Jika Anda membangun agen dengan Agen SDK Microsoft 365, lihat Penyiapan Autentikasi Observabilitas untuk Agen SDK untuk petunjuk langkah demi langkah dalam mengonfigurasi akuisisi token OBO dan S2S untuk agen agenik dan non-agenik.
Token resolver manual
Gunakan resolver manual saat Anda memperoleh token di luar alur Agent Framework, saat Anda membangun aplikasi non-Agent Framework, atau saat Anda menggunakan autentikasi layanan ke layanan (S2S) (alur kredensial klien). Agen dapat menghasilkan token mereka sendiri, misalnya melalui Pustaka Autentikasi Microsoft (MSAL) atau metode akuisisi token lainnya, tetapi mereka perlu memastikan token memiliki cakupan observabilitas yang sesuai (api://9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite).
Catatan
Untuk autentikasi layanan ke layanan (S2S), Anda harus menggunakan pendekatan token resolver manual ini. Cache token agenik hanya mendukung alur autentikasi atas nama (OBO).
Contoh berikut menampilkan pola token resolver OBO (atas nama) — agen memperoleh token pengguna melalui handler autentikasi agenik dan menukarnya dengan token cakupan observabilitas. Untuk contoh S2S (layanan ke layanan) dan perbandingan autentikasi OBO vs S2S, lihat Penyiapan Autentikasi Observabilitas untuk Agent SDK.
Resolver harus sinkron. Dapatkan token di handler aktivitas asinkron Anda (atau melalui MSAL) dan simpan dalam cache untuk digunakan oleh resolver.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
_cached_token: str | None = None
def my_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_token
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=my_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
global _cached_token
_cached_token = await AGENT_APP.auth.exchange_token(
context,
scopes=get_observability_authentication_scope(),
auth_handler_id="AGENTIC",
)
Cache token agenik dengan aplikasi Agent Framework
Untuk aplikasi Agent Framework yang menggunakan autentikasi on-behalf-of (OBO), distro secara otomatis mendaftarkan IExporterTokenCache<AgenticTokenStruct> melalui DI ketika Anda tidak menetapkan TokenResolver kustom. Agen Anda memanggil RegisterObservability() saat runtime untuk menyediakan kredensial, dan cache menangani akuisisi dan refresh token.
Catatan
Pendekatan ini hanya mendukung alur autentikasi atas nama (OBtO). Untuk autentikasi layanan ke layanan (S2S), gunakan token resolver manual sebagai alternatif.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache, AgenticTokenStruct
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
token_cache = AgenticTokenCache()
_cached_tokens: dict[tuple[str, str], str | None] = {}
# Keep the sync resolver side-effect free; refresh the cache in the async request handler.
def sync_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_tokens.get((agent_id, tenant_id))
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=sync_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
agent_id = context.activity.recipient.id
tenant_id = context.activity.recipient.tenant_id
token_cache.register_observability(
agent_id=agent_id,
tenant_id=tenant_id,
token_generator=AgenticTokenStruct(
authorization=AGENT_APP.auth,
turn_context=context,
),
observability_scopes=get_observability_authentication_scope(),
)
_cached_tokens[(agent_id, tenant_id)] = await token_cache.get_observability_token(
agent_id, tenant_id,
)
Menyimpan atribut validasi
Untuk validasi penyimpanan yang berhasil, agen Anda harus mengimplementasikan InvokeAgentScope, InferenceScope, dan ExecuteToolScope. Setiap cakupan berhubungan dengan operasi rentang dalam skema kanonis:
| Cakupan SDK | Operasi rentang | Kode referensi universal |
|---|---|---|
InvokeAgentScope |
invoke_agent |
IA |
ExecuteToolScope |
execute_tool |
ET |
InferenceScope |
chat |
CH |
OutputScope |
output_messages |
OM |
Untuk daftar lengkap atribut wajib dan opsional per cakupan—termasuk penjelasan setiap atribut, panduan pemilihan nilai, dan atribut yang dapat dicari melalui perburuan tingkat lanjut Microsoft Defender—lihat Referensi atribut observabilitas Agent 365. Kolom Berlaku untuk menunjukkan cakupan tempat setiap atribut berada, dan kolom Wajib membedakan atribut yang wajib (M) dari yang opsional (O).
Menguji agen dengan observabilitas
Setelah menerapkan observabilitas, verifikasi bahwa telemetri telah tercatat:
- Membuka
https://admin.cloud.microsoft/#/agents/all. - Pilih agen Anda, lalu pilih Aktivitas.
- Pastikan bahwa sesi dan panggilan ke alat muncul.
Sampel aplikasi dan konfigurasi tingkat lanjut
Untuk sampel kerja dan opsi konfigurasi tingkat lanjut, lihat repositori GitHub untuk setiap bahasa:
Pemecahan masalah
Bagian ini menjelaskan masalah umum saat menerapkan dan menggunakan Microsoft OpenTelemetry Distro dengan Agent 365.
| Masalah | Deskripsi |
|---|---|
| Data observabilitas tidak muncul | Tidak ada telemetri yang terlihat karena ekspor Agent 365 tidak diaktifkan, penyiapan tidak lengkap, atau resolusi token gagal. |
| ID penyewa atau ID agen tidak ada - rentang dilewati | Rentang difilter sebelum ekspor saat atribut identitas penyewa atau agen yang diperlukan tidak ada. |
| Kegagalan resolusi token - ekspor dilewati atau tidak diizinkan | Ekspor dilewati atau ditolak ketika token resolver tidak mengembalikan token atau terjadi kesalahan saat akuisisi token. |
| HTTP 401 Tidak Sah | Permintaan sampai ke layanan tetapi autentikasi gagal karena token tidak valid, kedaluwarsa, atau untuk audiens yang salah. |
| HTTP 403 Forbidden | Otorisasi gagal akibat tidak adanya lisensi penyewa atau izin menulis observabilitas. |
| HTTP 403 Forbidden - Ketidakcocokan ID Agen | Layanan menolak ekspor ketika ID agen dalam permintaan tidak cocok dengan identitas agen yang diotorisasi oleh token. |
| Kesalahan HTTP 429 atau 5xx - Kesalahan sementara | Pembatasan sementara atau ketidakstabilan backend mengganggu ekspor dan mungkin memerlukan pengulangan atau penyesuaian batch. |
| Batas waktu ekspor | Operasi ekspor melebihi batas waktu karena penundaan jaringan atau latensi respons titik akhir. |
| Ekspor berhasil tetapi telemetri tidak muncul di Defender atau Purview | Penyerapan data berhasil tetapi visibilitas tertunda atau diblokir oleh prasyarat hilir dan persyaratan skema. |
Kiat
Panduan Pemecahan Masalah Agent 365 berisi rekomendasi pemecahan masalah tingkat tinggi, praktik terbaik, dan tautan ke konten pemecahan masalah untuk setiap bagian dari siklus hidup pengembangan Agent 365.
Data observabilitas tidak muncul
Gejala:
- Agen sedang berjalan
- Tidak ada telemetri di pusat admin
- Tidak dapat melihat aktivitas agen
Akar penyebab:
- Ekspor Agent 365 tidak diaktifkan
- Kesalahan konfigurasi
- Masalah pada token resolver
Solusi: Coba langkah-langkah berikut untuk menyelesaikan masalah:
Pastikan ekspor Agent 365 sudah diaktifkan
Anda harus mengaktifkan eksportir Agent 365 secara eksplisit. Jika tidak diatur, distro dapat beralih ke eksportir konsol atau tidak mengekspor apa pun. Aktifkan dalam kode:
from microsoft.opentelemetry import use_microsoft_opentelemetry use_microsoft_opentelemetry( enable_a365=True, a365_enable_observability_exporter=True, a365_token_resolver=my_token_resolver, )Atau atur variabel lingkungan:
export ENABLE_A365_OBSERVABILITY_EXPORTER=trueCatatan
ENABLE_A365_OBSERVABILITY_EXPORTERadalah pengalih sekunder yang hanya berlaku ketikaenable_a365=Truediatur dalam kode. Anda juga dapat mengontrolnya melalui kwarga365_enable_observability_exporter.
Periksa konfigurasi token resolver
Eksportir memerlukan token resolver yang valid yang mengembalikan token pembawa untuk setiap permintaan ekspor. Jika token resolver tidak ada atau mengembalikan
null, ekspor akan dilewati secara diam-diam.Aktifkan ekspor konsol dan periksa telemetri secara lokal
Tambahkan eksportir konsol untuk memverifikasi telemetri yang sedang dihasilkan sebelum mencapai titik akhir Agent 365:
Aktifkan pengelogan berlebihan
Periksa log untuk kesalahan ekspor
Gunakan perintah
az webapp log tailuntuk mencari kesalahan terkait observabilitas di log:az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
ID penyewa atau ID agen hilang — rentang diabaikan
Gejala: Sistem secara diam-diam mengabaikan rentang dan tidak pernah mengekspornya. Beberapa platform mencatat jumlah rentang yang dilewati atau pesan seperti No spans with tenant/agent identity found. Yang lain membuangnya tanpa melakukan pengelogan.
Resolution:
- Sebelum diekspor, distro membagi rentang berdasarkan identitas penyewa dan agen. Rentang yang tidak memiliki ID penyewa atau ID agen akan dibuang dan tidak pernah dikirim ke layanan.
- Pastikan
BaggageBuildertelah disiapkan dengan ID penyewa dan ID agen sebelum membuat rentang. Nilai ini diteruskan melalui konteks OpenTelemetry dan melekat pada semua rentang yang dibuat dalam cakupan bagasi. Untuk API khusus platform, lihat Atribut bagasi. - Jika Anda menggunakan middleware bagasi atau mengubah helper konteks dari paket integrasi hosting, pastikan aktivitas
TurnContextmemiliki penerima yang valid dengan identitas agen.
Kegagalan resolusi token — ekspor dilewati atau tidak diizinkan
Gejala: Token resolver mengembalikan null atau melempar kesalahan. Bergantung pada platformnya, ekspor dilewati sepenuhnya atau gagal dengan HTTP 401.
Resolution:
- Token resolver diperlukan. Jika tidak tersedia, eksportir melempar kesalahan saat memulai. Verifikasi bahwa token resolver telah disediakan dan mengembalikan token pembawa yang valid.
- Pastikan ID penyewa dan ID agen yang benar diteruskan ke
BaggageBuilder, karena nilai-nilai ini akan diteruskan ke token resolver. - Untuk agen yang di-host di Azure, pastikan Identitas Terkelola memiliki izin API yang diperlukan untuk cakupan observabilitas.
- Untuk aplikasi .NET yang menggunakan paket hosting Agent Framework, pertukaran token ditangani secara otomatis melalui DI. Jika token hilang, pastikan
Microsoft.Agents.A365.Observability.Hostingtelah diinstal dan didaftarkan.
HTTP 401 Tidak Sah
Gejala: Ekspor gagal dengan HTTP 401. Eksportir tidak mencoba ulang kesalahan ini.
Resolution:
- Verifikasi bahwa audiens token sesuai dengan cakupan titik akhir observabilitas.
- Periksa apakah token resolver tidak mengembalikan token pengguna delegasi, token untuk audiens yang salah, atau token kedaluwarsa.
HTTP 403 Forbidden
Gejala: Ekspor gagal dengan HTTP 403. Eksportir tidak mencoba ulang kesalahan ini.
Penyebab utama: Kesalahan HTTP 403 dapat memiliki berbagai penyebab. Periksa resolusi berikut secara berurutan.
Resolution:
Lisensi hilang — Verifikasi bahwa penyewa Anda memiliki salah satu lisensi berikut yang ditetapkan di Pusat admin Microsoft 365:
- Uji - Microsoft 365 E7
- Microsoft 365 E7
- Microsoft Agent 365 Frontier
Izin
Agent365.Observability.OtelWritetidak ada — Berikan izin untuk identitas Anda (Identitas Terkelola atau pendaftaran aplikasi). Tanpa itu, ekspor telemetri gagal dengan HTTP 403.
Memberikan izin
Gunakan salah satu opsi berikut:
Agent 365 CLI
Memerlukan akun Administrator Global; jalankan dari direktori proyek agen yang berisi
a365.config.json, atau gunakan--agent-name.a365 setup permissions botAtau, tanpa file konfigurasi:
a365 setup permissions bot --agent-name "<agent-name>"Portal Entra
Tidak diperlukan file konfigurasi; memerlukan akses Administrator Global ke pendaftaran aplikasi Blueprint.
- Buka portal Entra>Pendaftaran Aplikasi> pilih aplikasi Blueprint Anda.
- Buka Izin API>Tambah izin>API yang digunakan organisasi saya> cari
9b975845-388f-4429-889e-eab1ef63949c. - Pilih Izin yang didelegasikan> periksa
Agent365.Observability.OtelWrite>Tambah izin. - Ulangi langkah 2-3, kali ini pilih Izin aplikasi> centang
Agent365.Observability.OtelWrite>Tambah izin. - Klik Berikan persetujuan admin dan konfirmasi.
Kedua
Agent365.Observability.OtelWrite(Delegasi) maupunAgent365.Observability.OtelWrite(Aplikasi) menampilkan statusGranted.
HTTP 403 Forbidden — Ketidakcocokan ID Agen
Gejala: Ekspor gagal dengan HTTP 403 dan pesan server yang mirip dengan 403 Forbidden dengan agent-ID-mismatch gagal memanggil titik akhir pelacakan Agent 365.
Akar penyebab: Kesalahan ini terjadi ketika Anda menggunakan ID klien blueprint bukan ID klien instans agen saat mengatur detail agen. ID agen pada URL ekspor tidak sesuai dengan identitas yang diotorisasi oleh token, sehingga titik akhir pelacakan menolak permintaan tersebut.
Resolution:
- Verifikasi apakah ID penyewa telah ditambahkan ke daftar penyewa yang diizinkan Agent 365.
- Atur detail agen dengan ID klien instans agen (bukan ID klien blueprint).
- Verifikasi URL ekspor yang dihasilkan – URL tersebut dicatat jika Anda mengaktifkan logger. Pastikan ID agen pada URL sesuai dengan ID klien instans agen.
- Untuk mengaktifkan pengelogan diagnostik per SDK, lihat Validasi Lokal.
Kesalahan HTTP 429 atau 5xx - Kesalahan sementara
Gejala: Ekspor gagal dengan kode status HTTP sementara seperti 429 atau 5xx.
Resolution:
- Kesalahan ini biasanya bersifat sementara dan akan teratasi sendiri. Distro Python dan JavaScript secara otomatis melakukan percobaan ulang pada kode status HTTP 408, 429, dan 5xx. Distro .NET tidak melakukan percobaan ulang secara otomatis.
- Jika kesalahan berlanjut, periksa dasbor kesehatan layanan.
- Pertimbangkan untuk mengurangi frekuensi ekspor dengan meningkatkan penundaan terjadwal antar batch atau ukuran batch ekspor maksimum. Untuk Python dan JavaScript, gunakan parameter
exporterOptionsataua365_*yang relevan yang didokumentasikan dalam repositori GitHub. Untuk .NET, gunakano.Agent365.Exporter.ScheduledDelayMillisecondsdano.Agent365.Exporter.MaxExportBatchSize.
Batas waktu ekspor
Gejala: Batas waktu upaya ekspor.
Resolution:
Periksa konektivitas jaringan ke titik akhir observabilitas.
Batas waktu permintaan HTTP default adalah 30 detik di semua platform. Jika Anda sering mengalami batas waktu, tingkatkan nilai batas waktu di opsi eksportir Anda:
use_microsoft_opentelemetry( enable_a365=True, a365_token_resolver=my_token_resolver, # No direct timeout kwarg — set via environment variable or exporterOptions if supported )Lihat repositori Python untuk daftar opsi lengkap
a365_*.
Ekspor berhasil tetapi telemetri tidak muncul di Defender atau Purview
Gejala: Log menampilkan bahwa ekspor berhasil (HTTP 200), namun telemetri tidak terlihat di Microsoft Defender atau Microsoft Purview.
Resolution:
- Pastikan Anda memenuhi prasyarat untuk melihat log yang diekspor:
- Microsoft Purview: Auditing harus diaktifkan untuk organisasi Anda. Lihat Mengaktifkan atau menonaktifkan audit.
-
Microsoft Defender: Perburuan tingkat lanjut harus dikonfigurasi untuk mengakses tabel
CloudAppEvents. Lihat tabel CloudAppEvents pada skema perburuan tingkat lanjut.
- Telemetri dapat membutuhkan beberapa menit untuk muncul setelah ekspor berhasil. Tunggu sebelum menyelidiki lebih lanjut.
- Verifikasi bahwa rentang berisi atribut
microsoft.tenant.iddangen_ai.agent.idyang valid. Atribut identitas yang hilang menyebabkan rentang dibuang di sisi server, meskipun ekspor HTTP memberikan respons 200.
Konten terkait
- Konsep observabilitas Agent 365 - Alur data, model identitas, autentikasi, cakupan, dan batas yang berlaku untuk setiap jalur integrasi.
- Referensi atribut observabilitas Agent 365 - Skema atribut rentang kanonik yang harus sesuai dengan setiap rentang yang diserap ke Agent 365.