Dynatrace
我們使用 Dynatrace Managed 作為我們的可觀測性解決方案。本文檔提供了使用 Dynatrace Managed MCP 從 Dynatrace 檢索 EasyTrade 系統數據的說明。
最佳實踐
- 始終使用特定的時間範圍,保持範圍狹窄(例如 now-1h、now-24h),以避免大的數據查詢。
- 對於實體選擇器,考慮使用標籤標準進行更精確的過濾(如果理解標籤策略和命名)。
easytrade 的實體選擇器
考慮在 entitySelector 中使用這些標準來過濾我們 easytrade 應用程序的數據:
服務:
type(SERVICE),entityName.contains("easytrade")
type(SERVICE),tag("app:easytrade")
進程組和容器:
type(PROCESS_GROUP),entityName.contains("easytrade")
type(CONTAINER_GROUP_INSTANCE),entityName.contains("easytrade")
主機:
type(HOST),tag("environment:production"),tag("app:easytrade")
AWS Lambda 函數:
type(AWS_LAMBDA_FUNCTION),entityName.contains("easytrade")
type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2"),tag("app:easytrade")
### 環境變量
#### 配置變量
- **`DT_CONFIG_FILE`**(可選):配置文件(JSON 或 YAML)的路徑。**推薦用於本地開發**。
- 支持相對路徑(例如 `./dt-config.yaml`)
- 支持絕對路徑(例如 `/etc/dynatrace/config.yaml`)
- 支持 `~` 擴展(例如 `~/dt-config.yaml`)
- 支持文件內容中的環境變量插值 (`${VAR_NAME}`)
- 示例:`DT_CONFIG_FILE=./dt-config.yaml`
- **`DT_ENVIRONMENT_CONFIGS`**(可選):包含環境配置的 JSON 字符串。**適用於 Kubernetes/Docker**。
- 如果 `DT_CONFIG_FILE` 未設置,則使用此變量
- 必須是有效的 JSON 數組
- 示例:`DT_ENVIRONMENT_CONFIGS='[{"apiEndpointUrl":"...","environmentId":"...","alias":"...","apiToken":"..."}]'`
> **注意**:如果同時設置了 `DT_CONFIG_FILE` 和 `DT_ENVIRONMENT_CONFIGS`,`DT_CONFIG_FILE` 優先。
#### 日誌變量
- `LOG_LEVEL`(可選):日誌詳細程度級別(例如 debug、info、warn、error)。默認:`info`
- `LOG_OUTPUT`(可選):日誌輸出目標。默認:`file`
- `file`:將日誌寫入文件(默認行為)
- `stdout` / `console`:將日誌寫入標準輸出(⚠️ **僅適用於 stdio 傳輸**:stdio 用於 MCP 協議 - 請使用 `stderr-all` 代替)
- `stderr`:將錯誤和警告寫入標準錯誤(info/debug 被抑制)
- `stderr-all`:將所有日誌級別寫入標準錯誤(✅ **推薦用於使用 stdio 傳輸的 VS Code**)
- `file+console` / `file+stdout`:將日誌寫入文件和標準輸出(⚠️ **僅適用於 stdio 傳輸**:stdio 用於 MCP 協議 - 請使用 `stderr-all` 代替)
- `file+stderr`:將日誌寫入文件,將錯誤/警告寫入標準錯誤
- `disabled`:完全禁用日誌記錄
- `LOG_FILE`(可選):當 `LOG_OUTPUT` 包含 `file` 時,日誌文件的路徑。默認:當前工作目錄中的 `dynatrace-managed-mcp.log`
> [!IMPORTANT]
> **為你的設置選擇正確的 LOG_OUTPUT:**
>
> - **stdio 傳輸(默認)**:使用 `LOG_OUTPUT=stderr-all` 或 `LOG_OUTPUT=file`(默認)
> - ❌ `LOG_OUTPUT=console` 不起作用 - stdout 用於 MCP 協議
> - ✅ `LOG_OUTPUT=stderr-all` 在 VS Code 的輸出面板中顯示所有日誌
> - ✅ `LOG_OUTPUT=file` 寫入日誌文件(使用 `tail -f dynatrace-managed-mcp.log` 查看)
> - **HTTP 傳輸 (`--http` 模式)**:任何 `LOG_OUTPUT` 選項都可以
> - ✅ `LOG_OUTPUT=console` 在終端中可見
> - ✅ `LOG_OUTPUT=stderr-all` 在終端中可見
> - ✅ `LOG_OUTPUT=file` 寫入日誌文件
**日誌記錄示例:**
```bash
# 使用 stdio 傳輸的 VS Code - 在輸出面板中查看日誌
LOG_OUTPUT=stderr-all LOG_LEVEL=debug
# 使用 stdio 傳輸的 VS Code - 寫入文件(默認)
LOG_LEVEL=debug
# 使用以下命令查看:tail -f dynatrace-managed-mcp.log
# HTTP 傳輸 - 日誌記錄到控制檯
LOG_OUTPUT=console LOG_LEVEL=debug node dist/index.js --http
# HTTP 傳輸 - 日誌記錄到文件和控制檯
LOG_OUTPUT=file+console LOG_LEVEL=debug node dist/index.js --http
# 日誌記錄到自定義文件路徑
LOG_OUTPUT=file LOG_FILE=/var/log/dynatrace-mcp.log node dist/index.js
# 完全禁用日誌記錄(不推薦)
LOG_OUTPUT=disabled node dist/index.js
速率限制變量
DT_MCP_RATE_LIMIT_MAX_CALLS(可選):速率限制窗口內允許的最大工具調用次數。默認:20
DT_MCP_RATE_LIMIT_WINDOW_MS(可選):速率限制窗口大小(毫秒)。默認:20000(20 秒)
示例:允許每 30 秒進行 50 次調用:
DT_MCP_RATE_LIMIT_MAX_CALLS=50
DT_MCP_RATE_LIMIT_WINDOW_MS=30000
多環境配置字段
在 DT_ENVIRONMENT_CONFIGS 變量中,數組的每個元素必須包含每個環境的以下所有字段:
dynatraceUrl:Dynatrace Managed 儀表盤的基礎 URL,環境 ID 將附加到該 URL 後面(例如 https://dmz123.dynatrace-managed.com)。如果未指定,將默認為 DT_API_ENDPOINT_URL 的值。
apiEndpointUrl(必需):Dynatrace Managed API 的基礎 URL,環境 ID 將附加到該 URL 後面(例如 https://abc123.dynatrace-managed.com:9999)
environmentId(必需):託管環境的 ID,用於構建 API 和儀表盤的 URL(例如 01234567-89ab-cdef-abcd-ef0123456789 形式)
alias:環境的友好/易讀名稱,在與大語言模型區分環境時很有用
apiToken(必需):具有所需作用域的 API 令牌(見 身份驗證)
httpProxyUrl(可選):企業環境的 HTTP 代理,用於路由流量(例如 http://proxy.company.com:8080)
httpsProxyUrl(可選):企業環境的 HTTPS 代理,用於路由流量(例如 https://proxy.company.com:8080)
代理配置
MCP 服務器會遵循你為每個 Dynatrace Managed 環境配置的企業環境系統代理設置:
httpProxyUrl(可選,字符串,例如 http://proxy.company.com:8080) - HTTPS 請求的代理服務器 URL;或
httpsProxyUrl(可選,字符串,例如 http://proxy.company.com:8080) - HTTP 請求的代理服務器 URL
帶有代理的示例配置:
export DT_ENVIRONMENT_CONFIGS='[
{
"dynatraceUrl": "https://my-dashboard-endpoint.com/",
"apiEndpointUrl": "https://my-api-endpoint.com/",
"environmentId": "my-env-id-1",
"alias": "alias-env",
"apiToken": "my-api-token",
"httpProxyUrl": "http://proxy.company.com:8080"
},
{
"dynatraceUrl": "https://my-dashboard2-endpoint.com/",
"apiEndpointUrl": "https://my-api2-endpoint.com/",
"environmentId": "my-env-id-2",
"alias": "alias-env-2",
"apiToken": "my-api-token-2",
"httpProxyUrl": "http://proxy.company.com:8080"
}
]'
請注意,httpProxyUrl/httpsProxyUrl 變量是針對每個環境的,因此你可以配置一個環境使用代理,而其他環境可能不需要。
身份驗證
Dynatrace Managed 使用基於 API 令牌的身份驗證。在你的託管集群中創建一個具有所需作用域的 API 令牌(見下一小節)。
有關在託管部署中創建 API 令牌的更多信息,請參考 Dynatrace Managed 文檔。
託管部署的 API 作用域
你的 API 令牌必須包含以下作用域才能實現完整功能:
必需作用域:
- 讀取審計日誌 (
auditLogs.read)
- 讀取實體 (
entities.read)
- 讀取事件 (
events.read)
- 讀取日誌 (
logs.read)
- 讀取指標 (
metrics.read)
- 讀取網絡區域 (
networkZones.read)
- 讀取問題 (
problems.read)
- 讀取安全問題 (
securityProblems.read)
- 讀取 SLO (
slo.read)
注意:託管部署中的 API 令牌作用域與 SaaS 平臺令牌不同。請確保為你的託管集群版本選擇正確的作用域。
與 SaaS Dynatrace MCP 的主要區別
此 MCP 適用於 Dynatrace Managed 平臺。有一個不同的 Dynatrace MCP 服務器用於 Dynatrace SaaS。
主要區別包括:
- Dynatrace SaaS MCP 使用 DQL,而 Dynatrace Managed 使用 v2 API
- Dynatrace SaaS MCP 使用 Davis CoPilot,而 Dynatrace Managed 不使用
- Dynatrace SaaS MCP 使用 OAuth,而 Dynatrace Managed 使用 API 令牌
同時使用 Dynatrace SaaS MCP 和 Dynatrace Managed MCP 的混合設置
此託管 Dynatrace MCP 可以與 SaaS Dynatrace MCP 一起運行,以實現自託管和 SaaS Dynatrace 環境之間的混合設置。如果你以混合方式運行應用程序,這可能很有用,它也支持遷移場景,即你已遷移到 Dynatrace SaaS,但仍有歷史數據保留在託管平臺上且不打算遷移。在這種情況下,你的 MCP 客戶端可以配置為同時與兩個 MCP 服務器通信,從而使你能夠跨 SaaS 和託管數據進行查詢。
要設置此配置,你應該:
- 按照上述 說明 設置此 Dynatrace Managed MCP 服務器
- 按照 Dynatrace SaaS MCP 的說明 進行設置,確保在 MCP 配置文件中為兩個服務器指定不同的名稱
- 在你的 AI 助手中確認已連接到兩個服務器
- (可選,但推薦)為你的 AI 助手設置規則或指導,以便明確指導其使用兩個 MCP
配置好兩個 MCP 服務器後,你可以提出問題,MCP 客戶端應將問題傳遞給正確的 MCP 服務器(或在適當情況下傳遞給兩個服務器)。
請注意,如果不為 MCP 客戶端包含規則或指導,諸如 要求 Dynatrace 列出過去 24 小時內的應用程序問題 之類的查詢可能會使用一個 MCP 服務器或兩個服務器,具體取決於上下文窗口中的內容。如果你選擇這樣做,請確保你的命令 非常 具體,例如 要求 Dynatrace 列出我託管環境中過去 24 小時內的應用程序問題。
規則/指導
AI 助手通常支持規則文件以提供使用指導(有關配置信息,請參閱 規則文件)。
如果你在混合設置中同時使用此 MCP 服務器和 SaaS MCP 服務器,並且/或者你有多個託管環境,建議在配置中添加此內容,以防止 AI 助手使用錯誤的 MCP 或產生混淆。
你的指導規則將根據你的設置而有所不同,但以下是一些推薦的模板作為起點。你可以根據需要編輯這些模板,幷包含特定於你的環境的額外上下文。
多個託管環境
在此示例中,你設置了多個 Dynatrace Managed 環境。這可能是開發/測試/生產環境設置,或者是一組完全不同的應用程序。建議使用 DT_ENVIRONMENT_CONFIGS 中 alias 字段使用的相同別名來引用你的環境,以避免混淆。
# Dynatrace
- 我有三個獨立的 Dynatrace 環境:
1. "production" 是一個自託管的 Dynatrace Managed 環境。它包含我的生產環境的數據,其問題和故障應優先於任何其他環境,因為這是面向客戶的。它通過名為 dynatrace-managed-mcp-server 的 Dynatrace Managed MCP 訪問。
2. "test" 是一個自託管的 Dynatrace Managed 環境。它包含我的測試環境的數據,用於在代碼進入生產之前進行準備。它通過名為 dynatrace-managed-mcp-server 的 Dynatrace Managed MCP 訪問。
3. "development" 是一個自託管的 Dynatrace Managed 環境。它包含我的開發環境的數據,這是我優先級最低的環境。它通過名為 dynatrace-managed-mcp-server 的 Dynatrace Managed MCP 訪問。
- 注意使用哪個環境。如果不清楚,請詢問使用哪個環境。
- 必須向用戶明確說明數據來自哪個環境。
帶有遷移日期的混合設置
在此示例中,你已從託管環境遷移到 SaaS 環境,但自託管的 Managed 環境中仍有歷史數據。你希望你的 AI 助手瞭解數據的存儲位置。這將使其能夠知道針對你請求的日期範圍應針對哪些環境,例如 顯示過去 7 天內的所有 Dynatrace 問題 可能需要來自兩個環境的數據(因此使用兩個 MCP 服務器),或者可能僅存在於 Dynatrace SaaS 中。
# Dynatrace
- 我有兩個獨立的 Dynatrace 環境:
1. Dynatrace Managed 是自託管的。它僅包含 2025 年 11 月 29 日之前的歷史數據。它通過名為 dynatrace-managed-mcp-server 的 Dynatrace Managed MCP 訪問。
2. Dynatrace SaaS 用於所有即時數據。它通過名為 dynatrace-saas-mcp-server 的 Dynatrace SaaS MCP 訪問。
- 注意使用哪個 MCP。如果不清楚,請詢問使用哪個 MCP。
- 必須向用戶明確說明數據是來自 Dynatrace Managed 還是 Dynatrace SaaS。
同時運行的混合設置
在此示例中,你使用 Dynatrace Managed 管理部分應用程序,使用 Dynatrace SaaS 管理其他應用程序,並希望你的 MCP 客戶端了解每個應用程序的數據位置。
# Dynatrace
- 我有兩個獨立的 Dynatrace 環境,都包含即時數據:
1. Dynatrace Managed 是自託管的。它僅包含我的部分系統的可觀測性數據,主要是書店系統。它通過名為 dynatrace-managed-mcp-server 的 Dynatrace Managed MCP 訪問。
2. Dynatrace SaaS 用於我的所有其他系統的可觀測性。它通過名為 dynatrace-saas-mcp-server 的 Dynatrace SaaS MCP 訪問。
- 注意使用哪個 MCP。如果不清楚,請詢問使用哪個 MCP。
- 必須向用戶明確說明數據是來自 Dynatrace Managed 還是 Dynatrace SaaS。
🔧 技術細節
示例提示
你可以從簡單的提示開始,如 "要求 Dynatrace 列出問題",並參考 示例 進行更復雜的查詢。
故障排除
身份驗證問題
在大多數情況下,身份驗證問題源於缺少作用域或無效的令牌。請確保你已添加上述所有必需的作用域。
遇到錯誤時,你可以要求 AI 助手提供 MCP 返回的準確錯誤信息。對於啟動問題,請檢查 AI 助手日誌。
你也可以直接運行 MCP 以查看啟動時是否報告錯誤:
npx @dynatrace-oss/dynatrace-managed-mcp-server@latest
遙測
Dynatrace MCP 服務器通過 Dynatrace OpenKit 發送遙測數據,以幫助改進產品。這包括:
- 服務器啟動事件
- 工具使用情況(調用了哪些工具、成功/失敗、執行持續時間)
- 錯誤跟蹤,用於調試和改進
隱私和退出選項:
- 遙測 默認啟用,但可以通過設置
DT_MCP_DISABLE_TELEMETRY=true 禁用
- 不會跟蹤你的 Dynatrace 環境中的敏感數據
- 僅收集匿名使用統計信息和錯誤信息
- 使用統計信息和錯誤數據將傳輸到 Dynatrace 的分析端點
配置選項:
DT_MCP_DISABLE_TELEMETRY(布爾值,默認:false) - 禁用遙測
DT_MCP_TELEMETRY_APPLICATION_ID(字符串,默認:dynatrace-managed-mcp) - 用於跟蹤的應用程序 ID
DT_MCP_TELEMETRY_ENDPOINT_URL(字符串,默認:Dynatrace 端點) - OpenKit 端點 URL
DT_MCP_TELEMETRY_DEVICE_ID(字符串,默認:自動生成) - 用於跟蹤的設備標識符
要禁用使用跟蹤,請在配置中添加以下內容:
DT_MCP_DISABLE_TELEMETRY=true