Token导航 LogoToken导航TokenDH.com
Go MCP Dynatrace logo
安全风控未说明官方级别未说明来源级核验

Go MCP Dynatrace

MCP Server

一个Go语言实现的Dynatrace模型上下文协议(MCP)服务器,支持LLM与Dynatrace平台交互,实现可观测性、安全性和自动化任务。

工具数

18

提示词数

0

GitHub Stars

0

资源数

0
可观测性GoClaude自动化运维Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

JeremyProffitt

提供方

JeremyProffitt

最后核验

2026/5/17 20:23

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

go mcp动态追踪

A Go实现 Dynatrace MCP服务器 -模型上下文协议(MCP)服务器,使LLM能够与Dynatrace交互,以完成可观察性、安全性和自动化任务。

特性

  • 完全支持MCP协议:实现无缝LLM集成的模型上下文协议
  • Dynatrace集成:查询问题、漏洞、实体、日志、指标等
  • 戴维斯副驾驶:自然语言到DQL的转换、DQL解释和会话AI
  • 戴维斯分析仪:执行预测、异常检测和相关性分析器
  • 自动化:创建和管理工作流,通过电子邮件和Slack发送通知
  • 预算跟踪:内置Grail查询预算管理
  • 综合录井:具有可配置级别的基于文件的日志记录
  • DQL查询日志记录:用于调试和审核的所有DQL查询的可选基于文件的日志记录
  • MCP资源:DQL语言参考作为MCP资源提供

快速开始

先决条件

  • 转到1.21或更高版本
  • Dynatrace平台环境
  • OAuth凭据或平台令牌

安装

# Clone the repository
git clone https://github.com/dynatrace-oss/go-mcp-dynatrace.git
cd go-mcp-dynatrace

# Build
go build -o go-mcp-dynatrace .

# Or install directly
go install github.com/dynatrace-oss/go-mcp-dynatrace@latest

配置

设置所需的环境变量:

# Required: Dynatrace environment URL
export DT_ENVIRONMENT="https://abc12345.apps.dynatrace.com"

# Authentication Option 1: OAuth credentials (recommended)
export OAUTH_CLIENT_ID="dt0s02.XXXXXXXX"
export OAUTH_CLIENT_SECRET="dt0s02.XXXXXXXX.XXXXXXXXXXXXXXXX"
export DT_ACCOUNT_URN="urn:dtaccount:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Authentication Option 2: Platform token
export DT_PLATFORM_TOKEN="dt0c01.XXXXXXXX.XXXXXXXXXXXXXXXX"

# Optional: Custom SSO URL (default: https://sso.dynatrace.com/sso/oauth2/token)
export DT_SSO_URL="https://sso.dynatrace.com/sso/oauth2/token"

# Optional: Slack integration
export SLACK_CONNECTION_ID="your-slack-connection-id"

# Optional: Query budget (default: 1000 GB)
export DT_GRAIL_QUERY_BUDGET_GB="500"
备注:使用OAuth身份验证时 DT_ACCOUNT_URN 是必需的。您可以在Dynatrace帐户管理门户的帐户设置下找到您的帐户UUID。

跑步

# Run in stdio mode (for MCP clients)
./go-mcp-dynatrace

# Run in HTTP mode
./go-mcp-dynatrace --http --port 3000

# Run with debug logging
./go-mcp-dynatrace -log-level debug

HTTP模式详细信息

在HTTP模式下运行时,服务器会公开:

  • POST / -MCP JSON-RPC端点
  • GET /health -健康检查端点(返回 {"status":"ok","version":"X.X.X"})

认证:HTTP模式需要 Authorization 所有请求的标头(除 /health).授权层是可插拔的;默认情况下,它接受任何令牌。

按请求凭据:在HTTP模式下,Dynatrace OAuth凭据可以通过标头而不是环境变量传递,从而支持多用户场景:

标题描述
X-DT-OAuth-Client-IdOAuth客户端ID(覆盖 OAUTH_CLIENT_ID)
X-DT-OAuth-Client-SecretOAuth客户端密钥(覆盖 OAUTH_CLIENT_SECRET)
X-DT-Account-URN帐户URN(覆盖 DT_ACCOUNT_URN)

这些标头会覆盖相应的环境变量(如果存在)。

使用Claude Desktop

添加到您的Claude Desktop配置(claude_desktop_config.json):

{
  "mcpServers": {
    "dynatrace": {
      "command": "/path/to/go-mcp-dynatrace",
      "env": {
        "DT_ENVIRONMENT": "https://abc12345.apps.dynatrace.com",
        "OAUTH_CLIENT_ID": "dt0s02.XXXXXXXX",
        "OAUTH_CLIENT_SECRET": "dt0s02.XXXXXXXX.XXXXXXXXXXXXXXXX",
        "DT_ACCOUNT_URN": "urn:dtaccount:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

使用Continue.dev

JSON配置

添加到“继续”配置(config.json):

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "/path/to/go-mcp-dynatrace",
          "args": [],
          "env": {
            "DT_ENVIRONMENT": "https://abc12345.apps.dynatrace.com",
            "OAUTH_CLIENT_ID": "dt0s02.XXXXXXXX",
            "OAUTH_CLIENT_SECRET": "dt0s02.XXXXXXXX.XXXXXXXXXXXXXXXX",
            "DT_ACCOUNT_URN": "urn:dtaccount:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      }
    ]
  }
}

YAML配置

添加到“继续”配置(config.yaml):

experimental:
  modelContextProtocolServers:
    - transport:
        type: stdio
        command: /path/to/go-mcp-dynatrace
        args: []
        env:
          DT_ENVIRONMENT: https://abc12345.apps.dynatrace.com
          OAUTH_CLIENT_ID: dt0s02.XXXXXXXX
          OAUTH_CLIENT_SECRET: dt0s02.XXXXXXXX.XXXXXXXXXXXXXXXX
          DT_ACCOUNT_URN: urn:dtaccount:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

使用环境变量

您可以在配置中引用环境变量,以避免硬编码敏感值。

带有环境变量的JSON:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "/path/to/go-mcp-dynatrace",
          "args": [],
          "env": {
            "DT_ENVIRONMENT": "${DT_ENVIRONMENT}",
            "OAUTH_CLIENT_ID": "${OAUTH_CLIENT_ID}",
            "OAUTH_CLIENT_SECRET": "${OAUTH_CLIENT_SECRET}",
            "DT_ACCOUNT_URN": "${DT_ACCOUNT_URN}"
          }
        }
      }
    ]
  }
}

带有环境变量的YAML:

experimental:
  modelContextProtocolServers:
    - transport:
        type: stdio
        command: /path/to/go-mcp-dynatrace
        args: []
        env:
          DT_ENVIRONMENT: ${DT_ENVIRONMENT}
          OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID}
          OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET}
          DT_ACCOUNT_URN: ${DT_ACCOUNT_URN}

工具参考

此MCP服务器提供19个工具,分为6类,用于全面的Dynatrace可观察性操作。

发现工具(只读)

首先使用这些工具来了解您的环境并查找实体。

工具说明何时使用
get_environment_info获取Dynatrace环境详细信息(名称、ID、功能)首次致电以验证连接并了解环境
find_entity_by_name按名称模式搜索受监视的实体按名称查找主机、服务或应用程序

查询工具(只读)

根据Grail数据湖执行并验证DQL查询。

工具说明何时使用
execute_dql对日志、指标、跨度、事件、实体运行DQL查询主数据检索-用于所有可观察性查询
verify_dql在不执行的情况下验证DQL语法在运行昂贵的查询之前检查查询语法

安全工具(只读)

监控安全态势和漏洞。

工具说明何时使用
list_vulnerabilities获取具有严重性的主动安全漏洞安全审计、漏洞评估
list_problems列出Davis检测到的活动问题事件响应、问题调查
list_exceptions获取应用程序异常和堆栈跟踪调试应用程序错误
get_kubernetes_events检索K8s集群事件Kubernetes故障排除

人工智能工具(Davis CoPilot)

利用Davis AI进行自然语言交互和分析。

工具说明何时使用
generate_dql_from_natural_language将纯英语转换为DQL查询当不确定如何编写DQL查询时
explain_dql_in_natural_language获取人类可读的DQL解释理解复杂的现有查询
chat_with_davis_copilot询问任何Dynatrace问题一般问题、最佳实践、指导
list_davis_analyzers列出可用的AI分析器发现可用的分析功能
execute_davis_analyzer运行预测、异常或相关性分析预测分析、根本原因分析

写入工具(修改)

创建和管理自动化工作流程。

工具说明何时使用
create_workflow_for_notification创建警报通知工作流设置自动警报
make_workflow_public与其他用户共享工作流启用工作流协作

管理工具

系统管理和通知。

工具说明何时使用
send_email通过Dynatrace电子邮件服务发送电子邮件发送报告、通知
send_slack_message发布到Slack频道团队通知、事件警报
reset_grail_budget重置查询预算计数器预算在会话中期用完时

______________________________________________________________________

常见工作流

工作流程1:事故调查

在调查生产问题时,请遵循以下顺序:

1. get_environment_info          # Verify connection
2. list_problems                 # See active Davis-detected problems
3. execute_dql                   # Query logs around problem timeframe
   Query: fetch logs, from: now() - 1h | filter loglevel == "ERROR" | limit 100
4. find_entity_by_name           # Find affected services/hosts
5. execute_dql                   # Get related spans for tracing
   Query: fetch spans, from: now() - 1h | filter status == "ERROR"
6. chat_with_davis_copilot       # Ask Davis for root cause insights

工作流程2:安全评估

1. list_vulnerabilities          # Get all active vulnerabilities
2. execute_dql                   # Query security events
   Query: fetch security_events, from: now() - 24h | summarize count(), by: {severity}
3. find_entity_by_name           # Find vulnerable hosts/services
4. execute_davis_analyzer        # Run security analysis

工作流程3:性能分析

1. execute_dql                   # Get latency percentiles
   Query: fetch spans, from: now() - 1h
   | summarize p50=percentile(duration, 50), p95=percentile(duration, 95), p99=percentile(duration, 99), by: {span.name}
2. list_davis_analyzers          # Find available analyzers
3. execute_davis_analyzer        # Run anomaly detection
4. generate_dql_from_natural_language  # "Show me slow database queries"

工作流程4:日志分析

1. execute_dql                   # Search for errors
   Query: fetch logs, from: now() - 1h | filter loglevel == "ERROR" | summarize count(), by: {log.source}
2. execute_dql                   # Parse and extract fields
   Query: fetch logs | parse content, "status=INT:status duration=INT:duration" | filter status >= 400
3. explain_dql_in_natural_language   # Understand complex existing query

工作流程5:自然语言查询

当用户用简单的英语描述他们想要什么时:

1. generate_dql_from_natural_language  # Convert request to DQL
2. verify_dql                          # Validate generated query
3. execute_dql                         # Run the query
4. explain_dql_in_natural_language     # Explain what query does (if needed)

______________________________________________________________________

DQL快速参考

基本查询模式

# Error count by source (last hour)
fetch logs, from: now() - 1h
| filter loglevel == "ERROR"
| summarize count(), by: {log.source}
| sort count() desc

# Top 10 slowest services
fetch spans, from: now() - 1h
| summarize avg_duration = avg(duration), by: {span.name}
| sort avg_duration desc
| limit 10

# Error rate calculation
fetch logs, from: now() - 1h
| summarize
    total = count(),
    errors = countIf(loglevel == "ERROR"),
    error_rate = 100.0 * countIf(loglevel == "ERROR") / count()

# Time series for graphing
fetch logs, from: now() - 6h
| filter loglevel == "ERROR"
| summarize count(), by: {bin(timestamp, 5m)}
| sort timestamp asc

# Text search in logs
fetch logs, from: now() - 1h
| filter matchesPhrase(content, "connection timeout")

# Find specific entities
fetch entities
| filter entity.type == "HOST"
| filter matchesValue(tags, "environment:production")
| fields entity.name, id, tags

数据源参考

来源用途查询示例
logs应用程序/系统日志`fetch logs \filter loglevel == "ERROR"`
spans分布式跟踪`fetch spans \filter duration > 1000000000`
events戴维斯事件`fetch events \filter event.type == "ERROR_EVENT"`
entities受监控的组件`fetch entities \filter entity.type == "SERVICE"`
metrics时间序列指标`fetch metrics \filter metric.key == "cpu.usage"`
bizevents商务活动`fetch bizevents \filter event.type == "purchase"`

常用函数

功能目的示例
count()统计记录summarize count()
countIf(cond)有条件计数summarize countIf(status >= 400)
avg(field)平均值summarize avg(duration)
percentile(field, p)百分位数计算summarize percentile(latency, 95)
bin(ts, interval)时光倒流by: {bin(timestamp, 5m)}
contains(str, substr)变电站检查filter contains(content, "error")
matchesPhrase(str, phrase)索引文本搜索filter matchesPhrase(content, "timeout")

时间范围

from: now() - 1h      # Last hour
from: now() - 24h     # Last 24 hours
from: now() - 7d      # Last 7 days
from: "2024-01-15T00:00:00Z", to: "2024-01-15T23:59:59Z"  # Absolute range

性能提示

  1. 早期过滤 -将过滤器放在后面 fetch
  2. 使用 matchesPhrase -比 contains 用于索引搜索
  3. 限制时间范围 -始终指定 from: 对于大型数据集
  4. 使用 scanLimitGBytes -控制查询成本: fetch logs, scanLimitGBytes: 100
  5. 选择特定字段 -使用 fields 减少数据传输

______________________________________________________________________

可用工具(传统格式)

命令行选项

Options:
    --http              Run in HTTP mode instead of stdio
    -p, --port 
   Port for HTTP server (default: 3000)
    -H, --host    Host for HTTP server (default: 127.0.0.1)
    -log-dir 
     Directory for log files
    -log-level   Log level: off, error, warn, info, access, debug
    -version            Show version information
    -help               Show help information

环境变量

变量必填描述
DT_ENVIRONMENTDynatrace平台的URL
OAUTH_CLIENT_ID\*OAuth客户端ID
OAUTH_CLIENT_SECRET\*OAuth客户端密钥
DT_ACCOUNT_URN\*OAuth的帐户URN(格式: urn:dtaccount:)
DT_PLATFORM_TOKEN\*\*平台身份验证令牌
DT_SSO_URLSSO URL(默认:SSO.dynatrace.com)
DT_GRAIL_QUERY_BUDGET_GB圣杯查询预算(GB)(默认值:1000)
DT_LOG_QUERIES将DQL查询记录到文件中(默认值:false)
SLACK_CONNECTION_ID松弛连接器ID
MCP_LOG_DIR日志目录
MCP_LOG_LEVEL日志级别

\*OAuth身份验证所必需的 \*\*OAuth的替代方案-改用平台令牌

全局环境文件

所有go-mcp服务器都支持从以下位置加载环境变量 ~/.mcp_env。这提供了一个配置凭据和设置的中心位置,在GUI应用程序不从继承shell环境变量的macOS上特别有用 .zshrc.bashrc.

文件格式

创建 ~/.mcp_env 对于KEY=VALUE对:

# ~/.mcp_env - MCP Server Environment Variables

# Dynatrace Configuration
DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com
OAUTH_CLIENT_ID=dt0s02.XXXXXXXX
OAUTH_CLIENT_SECRET=dt0s02.XXXXXXXX.XXXXXXXXXXXXXXXX
DT_ACCOUNT_URN=urn:dtaccount:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# Logging
MCP_LOG_DIR=~/mcp-logs
MCP_LOG_LEVEL=info

特性

  • 以开头的行 # 被视为评论
  • 空行被忽略
  • 值可以用单引号或双引号括起来
  • 现有环境变量不会被覆盖 (环境变量优先)
  • 路径与 ~ 会自动扩展到您的主目录

路径扩展

支持所有与路径相关的设置 ~ 扩展:

MCP_LOG_DIR=~/logs/dynatrace

这在 ~/.mcp_env 文件、环境变量和命令行标志。

日志记录

日志被写入 ~/go-mcp-dynatrace/logs/ 默认情况下,每天轮换。

MCP_LOG_DIR 已设置或 -log-dir 使用标志后,日志会自动放置在以二进制文件命名的子文件夹中(go-mcp-dynatrace).这允许多个MCP服务器共享同一日志目录:

MCP_LOG_DIR=/var/log/mcp
  └── go-mcp-dynatrace/
      └── go-mcp-dynatrace-2026-01-04.log

日志级别:

  • off -禁用日志记录
  • error -仅错误
  • warn -警告和错误
  • info -一般信息(默认)
  • access -API访问操作
  • debug -详细调试

安全说明:日志永远不会捕获查询结果、令牌或响应内容等敏感数据。仅记录操作元数据(端点、持续时间、记录计数)。

DQL查询日志记录

通过设置启用DQL查询文件日志记录以进行调试和审核:

export DT_LOG_QUERIES=true

启用后,所有DQL查询都将保存到单个文件中:

~/go-mcp-dynatrace/logs/DQL/YYYYMMDD/{name}.YYYYMMDD.HHmmss.dql

例子:

~/go-mcp-dynatrace/logs/DQL/20260103/fetch_logs.20260103.142530.dql
~/go-mcp-dynatrace/logs/DQL/20260103/list_problems.20260103.143215.dql

这有助于:

  • 调试查询问题
  • 审核执行了哪些查询
  • 在Dynatrace UI中再现查询
  • 构建一个DQL查询库

需要OAuth作用域

服务器请求以下作用域:

  • app-engine:apps:run -环境信息
  • storage:*:read -读取日志、指标、事件、实体、跨度
  • davis-copilot:*:execute -Davis CoPilot功能
  • davis:analyzers:read/execute -戴维斯分析仪
  • automation:workflows:* -工作流管理
  • email:emails:send -电子邮件发送
  • app-settings:objects:read -应用程序设置

从源头构建

# Build for current platform
go build -o go-mcp-dynatrace .

# Build for all platforms
./build.sh        # Linux/macOS
./build.ps1       # Windows

# Run tests
go test ./...

建筑

go-mcp-dynatrace/
├── main.go                 # Entry point
├── pkg/
│   ├── mcp/               # MCP protocol implementation
│   │   ├── server.go      # JSON-RPC server with resource support
│   │   └── types.go       # Protocol types
│   ├── dynatrace/         # Dynatrace API client
│   │   ├── client.go      # HTTP client with OAuth
│   │   ├── types.go       # API types
│   │   └── token_cache.go # OAuth token caching
│   ├── dql/               # DQL language reference
│   │   ├── reference.go   # Reference provider
│   │   └── mcp_adapter.go # MCP resource adapter
│   ├── tools/             # MCP tool implementations
│   │   └── tools.go       # All tool handlers
│   └── logging/           # Logging infrastructure
│       └── logging.go     # Logger with DQL query file logging
└── go.mod

贡献

欢迎投稿!请在提交PR之前阅读投稿指南。

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

致谢

目录标签

目录标签

可观测性GoClaude自动化运维本地部署AI集成安全监控DQL查询

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

18

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP