无法通过New Relic监控Go项目,Java项目可正常监控求助
Go项目无法被New Relic监控的排查与解决方案
核心问题排查与修复
1. HTTP服务未启动
你的代码仅注册了HTTP handler,但未启动服务监听,导致没有请求触发监控数据上报。必须在main函数末尾添加服务启动逻辑。
2. Agent初始化未等待完成
Go Agent初始化是异步的,若在初始化完成前处理请求,会导致数据无法正常上报。需等待Agent成功连接到New Relic服务器。
3. License Key有效性验证
确认代码中的<YOUR_NEW_RELIC_LICENSE_KEY>已替换为实际有效的密钥,且与Java项目使用的密钥属于同一区域(US/EU),区域不匹配会直接导致上报失败。
4. 开启调试日志定位问题
添加日志配置,查看Agent运行时的错误信息,快速定位网络、权限类问题:
newrelic.ConfigDebugLogger(os.Stdout),
修改后的完整可运行代码
package main import ( "fmt" "io" "net/http" "os" "time" "github.com/newrelic/go-agent/v3/newrelic" ) var newrelicApp *newrelic.Application func main() { app, err := newrelic.NewApplication( newrelic.ConfigAppName("MyAppMain"), newrelic.ConfigLicense("你的实际License Key"), newrelic.ConfigAppLogForwardingEnabled(true), newrelic.ConfigDebugLogger(os.Stdout), // 开启调试日志 ) if err != nil { fmt.Printf("New Relic初始化错误: %v\n", err) return } // 等待Agent连接到New Relic,超时10秒 if err := app.WaitForConnection(10 * time.Second); err != nil { fmt.Printf("等待Agent连接失败: %v\n", err) return } newrelicApp = app http.HandleFunc(newrelic.WrapHandleFunc(app, "/test", customEvent)) // 启动HTTP服务 fmt.Println("服务启动在 :8080") if err := http.ListenAndServe(":8080", nil); err != nil { fmt.Printf("HTTP服务启动失败: %v\n", err) } } func customEvent(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "recording a custom event") // 从请求上下文获取当前事务,这是更推荐的上报方式 txn := newrelic.FromContext(req.Context()) if txn != nil { txn.RecordCustomEvent("MyAppMainEvent", map[string]interface{}{ "text": "Hello VP", "env": "go_local", "alertType": "error", "priority": "Critical", "source": "MyAppMain", }) } else { fmt.Println("无法获取当前事务,上报失败") } }
额外排查步骤
- 检查网络连通性:确保Go项目所在服务器能访问New Relic对应区域的端点
- 确认Go版本兼容性:New Relic Go Agent要求Go 1.18及以上版本
- 查看控制台延迟:New Relic数据上报可能存在几分钟延迟,等待后再检查控制台数据
内容的提问来源于stack exchange,提问作者Urvesh Rathod
相关产品推荐
相关产品推荐

