Rapportez les données de trace d'une application Go vers Managed Service for OpenTelemetry à l'aide d'un agent SkyWalking Go. Une fois les données rapportées, vous pouvez surveiller l'application et consulter diverses informations, telles que la topologie de l'application, les traces, les transactions anormales, les transactions lentes et l'analyse SQL.
ARMS propose également un agent développé en interne pour les applications Go. Cet agent bénéficie d'un support commercial et instrumente les applications sans intrusion dans le code. Pour plus d'informations, consultez la rubrique Surveiller les applications Go.
Choisir un agent SkyWalking Go
(Recommandé) Utilisez skywalking-go. Il s'agit du dernier agent SkyWalking Go, bénéficiant d'un support officiel stable, et il instrumente votre application avec pratiquement aucune intrusion dans le code.
Go2Sky est l'ancien agent SkyWalking Go. Bien qu'il compte une large base d'utilisateurs, son niveau d'intrusion est élevé, ce qui a conduit SkyWalking à publier skywalking-go. Cette rubrique décrit la procédure d'intégration pour les deux agents afin que vous puissiez rapporter les données vers la console Managed Service for OpenTelemetry.
| Dimension | skywalking-go | Go2Sky |
| Instrumentation | Pratiquement aucune intrusion dans le code. Spécifiez l'agent avec l'indicateur -toolexec lors de la compilation de votre projet Go ; l'intégration ne nécessite que quelques étapes. |
Fortement intrusif. Vous devez ajouter un hook pour chaque plug-in de votre projet. |
| État de maintenance | Dernier agent SkyWalking Go, avec un support officiel stable. | Le support a pris fin après la publication officielle de skywalking-go. Le site officiel répertorie Go2Sky comme étant retiré, ce qui signifie qu'il n'est plus maintenu et que SkyWalking n'accepte plus de pull requests pour celui-ci. |
| Base d'utilisateurs | Base d'utilisateurs plus petite que celle de Go2Sky. | Large base d'utilisateurs. |
SkyWalking continue de porter les plug-ins Go2Sky vers skywalking-go. Les deux agents instrumentent le même ensemble de bibliothèques, et skywalking-go instrumente en plus le framework gRPC, ce que Go2Sky ne fait pas. Pour la liste des bibliothèques et les commandes d'installation de Go2Sky, consultez la section Bibliothèques d'instrumentation prises en charge.
Obtenir un endpoint
New console
Connectez-vous à la console Managed Service for OpenTelemetry. Dans le volet de navigation de gauche, cliquez sur Integration Center.
Dans la section Open Source Frameworks, cliquez sur la carte SkyWalking.
-
Dans le panneau SkyWalking qui s'affiche, sélectionnez la région vers laquelle vous souhaitez rapporter les données.
Lorsque vous accédez à une région pour la première fois, les ressources sont initialisées automatiquement.
-
Sélectionnez un Connection Type et copiez l'endpoint.
Si votre service est déployé sur Alibaba Cloud dans la région que vous avez sélectionnée, choisissez le réseau VPC Alibaba Cloud. Sinon, sélectionnez le réseau public.

Old console
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Cluster Configurations. Sur la page qui s'affiche, cliquez sur l'onglet Access point information.
En haut de la page, sélectionnez la région vers laquelle vous souhaitez rapporter les données. Dans la section Cluster Information, activez l'option Show Token.
-
Dans la section Client, cliquez sur SkyWalking. Dans la colonne Related Information, obtenez l'endpoint.

Si votre application est déployée sur Alibaba Cloud dans la région que vous avez sélectionnée, utilisez l'endpoint VPC. Sinon, utilisez l'endpoint public.
Rapporter les données avec l'agent skywalking-go (recommandé)
Étape 1 : Télécharger et construire l'agent
Téléchargez l'agent skywalking-go, puis exécutez la commande suivante pour le construire :
cd skywalking-go && make build
Un fichier exécutable est généré dans le répertoire skywalking-go/bin. Le fichier exécutable diffère selon le système d'exploitation :
macOS :
skywalking-go-agent--darwin-amd64Linux :
skywalking-go-agent--linux-amd64Windows :
skywalking-go-agent--windows-amd64
Étape 2 : Activer l'instrumentation dans votre projet Go
Ouvrez votre projet Go et activez l'instrumentation en suivant l'une des méthodes ci-dessous. Si la commande inject renvoie une erreur, importez plutôt le module skywalking dans le package principal.
Importer le module dans le code (recommandé)
Importez le module skywalking dans le package principal :
package main
import (
_ "github.com/apache/skywalking-go"
)
Injecter l'agent (sans modification du code)
Exécutez le fichier exécutable avec l'indicateur -inject :
skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-project
Étape 3 : Configurer les paramètres de connexion
Copiez le fichier skywalking-go/tools/go-agent/config/config.default.yaml depuis le dépôt skywalking-go que vous avez téléchargé à l'étape 1, enregistrez-le sous le nom de votre propre fichier config.yaml, puis définissez les paramètres suivants pour connecter l'agent à Managed Service for OpenTelemetry :
agent:
service_name: ${SW_AGENT_NAME:<your-service-name>}
reporter:
grpc:
backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:<your-endpoint>}
authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:<your-auth-token>}
service_name: le nom du service. Remplacez<your-service-name>par le nom de votre application.backend_service: l'endpoint. Remplacez<your-endpoint>par l'endpoint que vous avez copié lors de l'obtention d'un endpoint.authentication: le jeton d'authentification de l'endpoint. Remplacez<your-auth-token>par votre propre jeton.
Pour les autres paramètres de l'agent, les méthodes de configuration et le fichier de configuration par défaut, consultez la section Configuration avancée de l'agent skywalking-go.
Étape 4 : Reconstruire et démarrer votre projet
Reconstruisez votre projet et transmettez l'agent au compilateur Go à l'aide de l'indicateur -toolexec :
# You must use -toolexec
sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -a
path/to/skywalking-go-agent: le chemin absolu du fichier exécutable que vous avez construit à l'étape 1.path/to/config.yaml: le chemin absolu du fichier de paramètres de l'agent skywalking-go.
Démarrez votre projet. Les données SkyWalking sont alors rapportées vers la console Managed Service for OpenTelemetry.
Rapporter les données avec l'agent Go2Sky (hérité)
Étape 1 : Configurer les paramètres de connexion
Go2Sky prend en charge deux méthodes de configuration : coder en dur les paramètres dans votre projet ou les configurer automatiquement à l'aide de variables d'environnement.
Coder en dur les paramètres
Transmettez l'endpoint et le jeton d'authentification obtenus lors de l'obtention d'un endpoint au reporter :
// Import parameters by using reporter.WithParameter()
report, err := reporter.NewGRPCReporter(
<your-backend-server-address>,
reporter.WithAuthentication(<your-auth-token>))
Configuration automatique avec des variables d'environnement
Pour connaître les variables d'environnement lues par Go2Sky, consultez la section Variables d'environnement Go2Sky. Vous pouvez configurer une variable de l'une des deux manières suivantes. L'exemple ci-dessous utilise macOS :
# Method 1: write to the environment variable configuration file (persistent)
vim ~/.bash_profile
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
source ~/.bash_profile
# Method 2: open a terminal and configure on the command line (temporary; no longer in effect in a new terminal)
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
Étape 2 : Configurer le nom du service
Configurez ServiceName pour identifier l'application :
ServiceName := <your-service-name>
tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))
Étape 3 : Ajouter un hook de plug-in Go2Sky
Go2Sky fournit des plug-ins pour de nombreuses bibliothèques, mais vous devez ajouter l'instrumentation dans le code source de votre projet. Pour savoir comment ajouter l'instrumentation, consultez le dépôt Go2Sky-Plugins sur GitHub. Le fichier README.md de chaque dossier de plug-in fournit un exemple d'utilisation de base.
Pour ajouter le hook pour le framework gin, procédez comme suit :
Accédez au dossier /gin et ouvrez le fichier /gin/v3/README.md.
Ajoutez le hook middleware :
v3.Middleware(r, tracer).
L'exemple suivant montre comment le hook est monté. Remplacez le reporter de journaux par le reporter gRPC et le nom du service que vous avez configurés aux étapes 1 et 2 avant de rapporter les données à Managed Service for OpenTelemetry.
package main
import (
"log"
"github.com/SkyAPM/go2sky"
v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
"github.com/SkyAPM/go2sky/reporter"
"github.com/gin-gonic/gin"
)
func main() {
// Use gRPC reporter for production
re, err := reporter.NewLogReporter()
if err != nil {
log.Fatalf("new reporter error %v \n", err)
}
defer re.Close()
tracer, err := go2sky.NewTracer("gin-server", go2sky.WithReporter(re))
if err != nil {
log.Fatalf("create tracer error %v \n", err)
}
gin.SetMode(gin.ReleaseMode)
r := gin.New()
//Use go2sky middleware with tracing
r.Use(v3.Middleware(r, tracer))
// do something
}
Étape 4 : Redémarrer l'application
Redémarrez l'application.
Configuration avancée de l'agent skywalking-go
Méthodes de définition d'un paramètre
Vous pouvez définir un paramètre de l'agent skywalking-go de deux manières. L'exemple suivant configure service_name :
Méthode 1 (recommandée) : ajouter le paramètre à config.yaml
agent:
service_name: ${SW_AGENT_NAME:<your_service_name>}
Méthode 2 : configurer une variable d'environnement système
export SW_AGENT_NAME=<your_service_name>
Exclure des plug-ins
Par défaut, l'agent skywalking-go instrumente automatiquement tous les plug-ins. Pour exclure un plug-in spécifique, définissez le paramètre excluded :
# To exclude the sql plugin
plugin:
excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql}
# To exclude multiple plugins at the same time, separate them with commas
plugin:
excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}
Fichier de configuration par défaut
L'exemple suivant présente le fichier complet config.default.yaml de l'agent skywalking-go :
agent:
# Service name is showed in UI.
service_name: ${SW_AGENT_NAME:Your_ApplicationName}
# To obtain the environment variable key for the instance name, if it cannot be obtained, an instance name will be automatically generated.
instance_env_name: SW_AGENT_INSTANCE_NAME
# Sampling rate of tracing data, which is a floating-point value that must be between 0 and 1.
sampler: ${SW_AGENT_SAMPLE:1}
meter:
# The interval of collecting metrics, in seconds.
collect_interval: ${SW_AGENT_METER_COLLECT_INTERVAL:20}
reporter:
grpc:
# The gRPC server address of the backend service.
backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}
# The maximum count of segment for reporting tracing data.
max_send_queue: ${SW_AGENT_REPORTER_GRPC_MAX_SEND_QUEUE:5000}
# The interval(s) of checking service and backend service
check_interval: ${SW_AGENT_REPORTER_GRPC_CHECK_INTERVAL:20}
# The authentication string for communicate with backend.
authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}
# The interval(s) of fetching dynamic configuration from backend.
cds_fetch_interval: ${SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL:20}
tls:
# Whether to enable TLS with backend.
enable: ${SW_AGENT_REPORTER_GRPC_TLS_ENABLE:false}
# The file path of ca.crt. The config only works when opening the TLS switch.
ca_path: ${SW_AGENT_REPORTER_GRPC_TLS_CA_PATH:}
# The file path of client.pem. The config only works when mTLS.
client_key_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_KEY_PATH:}
# The file path of client.crt. The config only works when mTLS.
client_cert_chain_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_CERT_CHAIN_PATH:}
# Controls whether a client verifies the server's certificate chain and host name.
insecure_skip_verify: ${SW_AGENT_REPORTER_GRPC_TLS_INSECURE_SKIP_VERIFY:false}
log:
# The type determines which logging type is currently used by the system.
# The Go agent wourld use this log type to generate custom logs. It supports: "auto", "logrus", or "zap".
# auto: Automatically identifies the source of the log.
# If logrus is present in the project, it wourld automatically use logrus.
# If zap has been initialized in the project, it would use the zap framework.
# By default, it would use std errors to output log content.
# logrus: Specifies that the Agent should use the logrus framework.
# zap: Specifies that the Agent should use the zap framework.
# The system must have already been initialized through methods such as "zap.New", "zap.NewProduction", etc.
type: ${SW_AGENT_LOG_TYPE:auto}
tracing:
# Whether to automatically integrate Tracing information into the logs.
enable: ${SW_AGENT_LOG_TRACING_ENABLE:true}
# If tracing information is enabled, the tracing information would be stored in the current Key in each log.
key: ${SW_AGENT_LOG_TRACING_KEY:SW_CTX}
reporter:
# Whether to upload logs to the backend.
enable: ${SW_AGENT_LOG_REPORTER_ENABLE:true}
# The fields name list that needs to added to the label of the log.(multiple split by ",")
label_keys: ${SW_AGENT_LOG_REPORTER_LABEL_KEYS:}
plugin:
# List the names of excluded plugins, multiple plugin names should be splitted by ","
# NOTE: This parameter only takes effect during the compilation phase.
excluded: ${SW_AGENT_PLUGIN_EXCLUDES:}
config:
http:
# Collect the parameters of the HTTP request on the server side
server_collect_parameters: ${SW_AGENT_PLUGIN_CONFIG_HTTP_SERVER_COLLECT_PARAMETERS:false}
mongo:
# Collect the statement of the MongoDB request
collect_statement: ${SW_AGENT_PLUGIN_CONFIG_MONGO_COLLECT_STATEMENT:false}
sql:
# Collect the parameter of the SQL request
collect_parameter: ${SW_AGENT_PLUGIN_CONFIG_SQL_COLLECT_PARAMETER:false}
Variables d'environnement
Variables d'environnement skywalking-go
Le tableau suivant répertorie les variables d'environnement prises en charge par l'agent skywalking-go. NULL indique qu'aucune valeur par défaut n'est définie.
| Variable d'environnement | Description | Valeur par défaut |
SW_AGENT_NAME |
Le nom du service. | NULL |
SW_AGENT_INSTANCE_NAME |
Le nom de l'instance de service. | Généré automatiquement |
SW_AGENT_SAMPLE |
Le taux d'échantillonnage. Valeurs valides : 0 à 1. | 1 |
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE |
L'endpoint du serveur vers lequel les données de surveillance sont rapportées via gRPC. | 127.0.0.1:11800 |
SW_AGENT_REPORTER_GRPC_AUTHENTICATION |
Le jeton d'authentification du serveur vers lequel les données de surveillance sont rapportées via gRPC. | NULL |
SW_AGENT_PLUGIN_EXCLUDES |
Les plug-ins à exclure. | NULL |
Variables d'environnement Go2Sky
Le tableau suivant répertorie les variables d'environnement prises en charge par l'agent Go2Sky. NULL indique qu'aucune valeur par défaut n'est définie.
| Variable d'environnement | Description | Valeur par défaut |
SW_AGENT_NAME |
Le nom du service Go. | NULL |
SW_AGENT_LAYER |
Le nom de la couche à laquelle l'instance appartient, tel que défini dans le backend. | NULL |
SW_AGENT_INSTANCE_NAME |
Le nom de l'instance du service Go. | Généré aléatoirement |
SW_AGENT_SAMPLE |
Le taux d'échantillonnage. Une valeur de 1 indique une collecte complète. | 1 |
SW_AGENT_COLLECTOR_BACKEND_SERVICES |
L'adresse du serveur vers laquelle l'agent rapporte les données. | NULL |
SW_AGENT_AUTHENTICATION |
Le jeton d'authentification du serveur vers lequel l'agent rapporte les données. | NULL |
SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD |
L'intervalle de rapport du heartbeat de l'agent, en secondes. | 20 |
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL |
L'intervalle d'obtention dynamique de la configuration de l'agent, en secondes. | 20 |
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE |
La longueur du tampon de la file d'attente qui envoie les spans. | 30000 |
SW_AGENT_PROCESS_STATUS_HOOK_ENABLE |
Active la fonctionnalité de hook d'état du processus. | False |
SW_AGENT_PROCESS_LABELS |
Les étiquettes du processus. Séparez plusieurs étiquettes par des virgules (,). | NULL |
Bibliothèques d'instrumentation prises en charge
L'agent skywalking-go et l'agent Go2Sky instrumentent les bibliothèques suivantes. L'agent skywalking-go les instrumente automatiquement lorsque vous compilez votre projet et ne nécessite aucune installation. Pour Go2Sky, exécutez la commande d'installation de chaque bibliothèque utilisée par votre projet.
| Bibliothèque | Commande d'installation Go2Sky |
| sql | go get -u github.com/SkyAPM/go2sky-plugins/sql |
| dubbo-go | go get -u github.com/SkyAPM/go2sky-plugins/dubbo-go |
| gear | go get -u github.com/SkyAPM/go2sky-plugins/gear |
| gin | go get -u github.com/SkyAPM/go2sky-plugins/gin/v2 pour gin v2, ou go get -u github.com/SkyAPM/go2sky-plugins/gin/v3 pour gin v3 |
| go-restful | go get -u github.com/SkyAPM/go2sky-plugins/go-restful |
| gorm | go get -u github.com/SkyAPM/go2sky-plugins/gorm |
| http | go get -u github.com/SkyAPM/go2sky |
| go-kratos v2 | go get -u github.com/SkyAPM/go2sky-plugins/kratos |
| logrus | go get -u github.com/SkyAPM/go2sky-plugins/logrus |
| go-micro (v3.5.0) | go get -u github.com/SkyAPM/go2sky-plugins/micro |
| mongo | go get -u github.com/SkyAPM/go2sky-plugins/mongo |
| go-resty (v2.2.0) | go get -u github.com/SkyAPM/go2sky-plugins/resty |
| zap (v1.16.0) | go get -u github.com/SkyAPM/go2sky-plugins/zap |
FAQ
La commande inject de skywalking-go renvoie une erreur de version
L'erreur suivante se produit lorsque vous utilisez skywalking-go :
U-VF4VY9W5-1944:skywalking-go-test whlongxi$ skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject ../skywalking-go-test -all
2023/08/09 16:55:59 version is empty, please use the release version of skywalking-go
Si une erreur se produit lors de l'utilisation de la méthode inject, importez le module skywalking dans le package principal.
Les traces inter-processus ne s'affichent pas correctement lors du rapport de données via Go2Sky
Le traçage de bout en bout connecte une trace à l'aide de l'ID de trace, qui est transmis dans les requêtes HTTP. Une trace incorrecte signifie que l'ID de trace n'est pas propagé correctement, vous devez donc définir les spans de manière appropriée. Utilisez les deux interfaces suivantes pour connecter les appels inter-processus en une seule trace :
CreateEntrySpan: la span d'entrée. Utilisez cette interface pour extraire le contexte de traçage, qui inclut l'ID de trace, d'une requête HTTP.CreateExitSpan: la span de sortie. Utilisez cette interface pour injecter le contexte de traçage, qui inclut l'ID de trace, dans une requête HTTP.
// Within a process, use CreateLocalSpan to create a span.
span, ctx, err := tracer.CreateLocalSpan(context.Background())
subSpan, newCtx, err := tracer.CreateLocalSpan(ctx)
// Across processes, use the entry span CreateEntrySpan to extract the context from the HTTP request, and use the exit span CreateExitSpan to inject the context into the HTTP request.
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/login", func(key string) (string, error) {
return r.Header.Get(key), nil
})
span, err := tracer.CreateExitSpan(req.Context(), "/service/validate", "tomcat-service:8080", func(key, value string) error {
req.Header.Set(key, value)
return nil
})
Dans un projet inter-processus, l'ID de trace doit être propagé entre les processus pour connecter la trace. Utilisez les interfaces précédentes pour injecter le contexte dans les requêtes HTTP afin qu'il soit transmis entre les processus avec les requêtes.
Références
Démonstration SkyWalking : le dépôt de démonstration d'exemple pour cette rubrique.