Obtenez des informations détaillées sur les performances de vos applications Go en installant l'agent New Relic Go. Ce guide vous guide à travers une installation complète avec des exemples pour les modèles d'applications Go courants.
Avant de commencer
Créez un compte New Relic - Si vous n'en avez pas déjà un, créez un compte New Relic. C'est gratuit, pour toujours.
Vérifier la compatibilité - Assurez-vous d'avoir :
- Go 1.19 ou supérieur
- Linux, macOS ou Windows
- Un framework ou une bibliothèque webpris en charge
Obtenez votre clé de licence - Vous aurez besoin de votre pendant l'installation.
Étapes d'installation
Installer l'agent Go
Ajoutez l'agent New Relic Go à votre projet :
$go get github.com/newrelic/go-agent/v3/newrelicConseil
Vous utilisez les modules Go ? L'agent fonctionne de manière transparente avec les modules Go. Si vous utilisez une ancienne version de Go, vous devrez peut-être ajouter l'agent à votre dossier vendor.
Importer l'agent
Ajoutez l'importation à votre application Go :
import "github.com/newrelic/go-agent/v3/newrelic"Initialiser l'agent
Créez une instance d'application dans votre fonction main :
func main() { app, err := newrelic.NewApplication( newrelic.ConfigAppName("My Go Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal("Failed to create New Relic application:", err) }
// Wait for the application to connect if err := app.WaitForCompletion(5 * time.Second); err != nil { log.Println("Warning: New Relic application did not connect:", err) }
// Your application code here}Important
Meilleure pratique de sécurité: utilisez toujours des variables d'environnement pour votre clé de licence au lieu de la coder en dur dans votre code source.
Instrumentez vos gestionnaires web
Pour les applications HTTP, enveloppez vos gestionnaires pour monitorer les transactions web :
// Method 1: Wrap individual handlershttp.HandleFunc(newrelic.WrapHandleFunc(app, "/", indexHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))http.HandleFunc(newrelic.WrapHandleFunc(app, "/api/data", apiHandler))
// Method 2: Wrap your entire mux (recommended for many routes)mux := http.NewServeMux()mux.HandleFunc("/", indexHandler)mux.HandleFunc("/users", usersHandler)mux.HandleFunc("/api/data", apiHandler)
http.ListenAndServe(":8080", newrelic.WrapListen(app, mux))Ajoutez une gestion des erreurs de base
Capturez les erreurs dans vos gestionnaires :
func usersHandler(w http.ResponseWriter, r *http.Request) { // Get transaction from request context txn := newrelic.FromContext(r.Context())
user, err := getUserFromDatabase(r.URL.Query().Get("id")) if err != nil { // Report error to New Relic txn.NoticeError(err) http.Error(w, "User not found", http.StatusNotFound) return }
// Add custom attributes txn.AddAttribute("user.id", user.ID) txn.AddAttribute("user.tier", user.Tier)
// Return user data json.NewEncoder(w).Encode(user)}Déployez et vérifiez
Définissez votre variable d'environnement:
bash$export NEW_RELIC_LICENSE_KEY="your-license-key-here"Compiler et exécuter votre application:
bash$go build -o myapp$./myappGénérez du trafic en visitant les URL de votre application
Vérifiez New Relic dans les 2 à 3 minutes sur one.newrelic.com
Exemples d'installation
Serveur HTTP simple
package main
import ( "fmt" "log" "net/http" "os" "time"
"github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, err := newrelic.NewApplication( newrelic.ConfigAppName("Simple Go Server"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), ) if err != nil { log.Fatal(err) }
// Simple handler http.HandleFunc(newrelic.WrapHandleFunc(app, "/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }))
log.Println("Server starting on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}Intégration du framework Gin
package main
import ( "os"
"github.com/gin-gonic/gin" "github.com/newrelic/go-agent/v3/integrations/nrgin" "github.com/newrelic/go-agent/v3/newrelic")
func main() { // Initialize New Relic app, _ := newrelic.NewApplication( newrelic.ConfigAppName("Gin Application"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), )
// Set up Gin with New Relic middleware r := gin.Default() r.Use(nrgin.Middleware(app))
r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello, World!"}) })
r.Run(":8080")}Monitoring des tâches en arrière-plan
func processBackgroundJob(app *newrelic.Application, jobData JobData) { // Create a background transaction txn := app.StartTransaction("background-job") defer txn.End()
// Add job context txn.AddAttribute("job.id", jobData.ID) txn.AddAttribute("job.type", jobData.Type)
// Process job with error handling if err := processJob(jobData); err != nil { txn.NoticeError(err) log.Printf("Job %s failed: %v", jobData.ID, err) return }
log.Printf("Job %s completed successfully", jobData.ID)}Que se passe-t-il ensuite ?
Après avoir terminé l'installation de base, vous verrez immédiatement :
- Dashboard APM avec les temps de réponse, le débit et les taux d'erreur pour vos points de terminaison HTTP
- Traces de transactions montrant les requêtes Web les plus lentes
- Suivi des erreurs de base pour les erreurs signalées via
txn.NoticeError()
Pour débloquer des capacités de monitoring supplémentaires, vous devrez ajouter plus d'instrumentation :
- Monitoring de la base de données - Nécessite l'instrumentation des segments de base de données
- Suivi des services externes - Nécessite une instrumentation de segment externe
- Métriques et événements personnalisés - Nécessite une instrumentation personnalisée
Dépannage
Si vous ne voyez pas de données après l'installation :
- Vérifiez les logs de votre application pour les messages de connexion New Relic
- Vérifiez que votre clé de licence est correcte et non expirée
- Assurez-vous de la connectivité réseau à New Relic (ports 80/443)
- Consultez le guide de dépannage pour une aide détaillée
Conseil
Activez le logging de débogage pour voir ce que fait l'agent :
config := newrelic.NewConfig("My App", os.Getenv("NEW_RELIC_LICENSE_KEY"))config.Logger = newrelic.NewDebugLogger(os.Stdout)app, _ := newrelic.NewApplication(config)Prochaines étapes
Maintenant que vous avez configuré le monitoring de base, vous pouvez améliorer votre observabilité grâce à la configuration et à l'instrumentation:
- Configuration contrôle le comportement de l'agent globalement dans l'ensemble de votre application
- L'instrumentation ajoute du code de monitoring à des opérations spécifiques que vous souhaitez suivre
Configurer l'agent
Utilisez la configuration de l'agent pour contrôler le comportement global et obtenir :
- Activer le tracing distribué - Suivez les requêtes sur plusieurs services
- Contrôler le logging - Définir les niveaux de débogage et les destinations des logs
- Définir les seuils de performance - Configurer quand les requêtes sont considérées comme "lentes"
- Activer les fonctionnalités de sécurité - Activez le mode haute sécurité
Ajouter l'instrumentation
Utilisez l'instrumentation détaillée pour monitorer des opérations spécifiques et obtenir :
- Monitorer les requêtes de base de données - Suivez les performances SQL et les requêtes lentes
- Suivre les appels d'API externes - Monitorer les appels de service tiers
- Monitorer les tâches en arrière-plan - Suivez les transactions non web
- Créer des métriques personnalisées - Monitorez les KPI spécifiques à l'entreprise
Fonctionnalités et monitoring avancés
- Explorez les fonctionnalités avancées telles que le monitoring du navigateur et les événements personnalisés
- Configurer des alertes pour les indicateurs de performance clés
Conseil
Gardez votre agent à jour: Mettez régulièrement à jour vers la dernière version pour obtenir de nouvelles fonctionnalités, des améliorations de performances et des correctifs de sécurité.