Back to MCP directory
publicPublicdnsLocal runtime

dynatrace-managed-mcp

Dynatrace Managed MCP服务器是一个开源项目,允许AI助手通过模型上下文协议(MCP)与自托管的Dynatrace Managed部署进行交互,将可观测性数据直接集成到AI辅助工作流中。它支持本地和远程模式,可配置多个环境,提供问题、安全、实体、SLO、事件、日志和指标等数据的查询能力。

article

README

Dynatrace

我们使用 Dynatrace Managed 作为我们的可观测性解决方案。本文档提供了使用 Dynatrace Managed MCP 从 Dynatrace 检索 EasyTrade 系统数据的说明。

最佳实践

  1. 始终使用特定的时间范围,保持范围狭窄(例如 now-1h、now-24h),以避免大的数据查询。
  2. 对于实体选择器,考虑使用标签标准进行更精确的过滤(如果理解标签策略和命名)。

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 和托管数据进行查询。

要设置此配置,你应该:

  1. 按照上述 说明 设置此 Dynatrace Managed MCP 服务器
  2. 按照 Dynatrace SaaS MCP 的说明 进行设置,确保在 MCP 配置文件中为两个服务器指定不同的名称
  3. 在你的 AI 助手中确认已连接到两个服务器
  4. (可选,但推荐)为你的 AI 助手设置规则或指导,以便明确指导其使用两个 MCP

配置好两个 MCP 服务器后,你可以提出问题,MCP 客户端应将问题传递给正确的 MCP 服务器(或在适当情况下传递给两个服务器)。

请注意,如果不为 MCP 客户端包含规则或指导,诸如 要求 Dynatrace 列出过去 24 小时内的应用程序问题 之类的查询可能会使用一个 MCP 服务器或两个服务器,具体取决于上下文窗口中的内容。如果你选择这样做,请确保你的命令 非常 具体,例如 要求 Dynatrace 列出我托管环境中过去 24 小时内的应用程序问题

规则/指导

AI 助手通常支持规则文件以提供使用指导(有关配置信息,请参阅 规则文件)。 如果你在混合设置中同时使用此 MCP 服务器和 SaaS MCP 服务器,并且/或者你有多个托管环境,建议在配置中添加此内容,以防止 AI 助手使用错误的 MCP 或产生混淆。 你的指导规则将根据你的设置而有所不同,但以下是一些推荐的模板作为起点。你可以根据需要编辑这些模板,并包含特定于你的环境的额外上下文。

多个托管环境

在此示例中,你设置了多个 Dynatrace Managed 环境。这可能是开发/测试/生产环境设置,或者是一组完全不同的应用程序。建议使用 DT_ENVIRONMENT_CONFIGSalias 字段使用的相同别名来引用你的环境,以避免混淆。

# 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
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client