
# Go应用接入APM
#### Go应用接入APM
1. 登录[APM控制台](https://console.huaweicloud.com/apm2/)。
2. 在左侧导航栏中选择"应用监控 \> 应用列表"。
3. 进入"接入应用"页面。 
   - 首次接入应用时，单击"点击接入应用"，进入"接入应用"页面。
   
   - 已有探针接入时，在页面右上角，单击"接入应用"，进入"接入应用"页面。
   
   
   
   
4. 选择"区域"和"应用"。若未有应用，可单击"创建应用"，弹出"创建应用"弹窗，具体操作请参见[创建应用](https://support.huaweicloud.com/usermanual-apm2/apm_07_0050.html#apm_07_0050__section1684713176449)。
5. "接入方式"选择OpenTelemetry。
6. "服务端语言"选择Go。
7. 数据接入。 
   1. 添加OpenTelemetry依赖，命令如下：
      ```
      import (
        "context"
        "go.opentelemetry.io/otel"
        "go.opentelemetry.io/otel/attribute" 
        "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
        "go.opentelemetry.io/otel/sdk/resource"
        sdktrace "go.opentelemetry.io/otel/sdk/trace"
        "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
      ```
      
   
   2. 对接OpenTelemetry，命令如下：
      ```
      const (
      SERVICE_NAME="应用名称.组件名称.环境名称
      APM_ENDPOINT="100.79.29.106:4317"
      APM_TOKEN=" ****** "
      )
      func main() {
      cleanup := initTracer()
      defer cleanup(context.Background())
      r := gin.Default()
      r.Use(otelgin.Middleware(SERVICE_NAME))
      ..业务代码
      }
      func initTracer() func(context.Context) error {
      headers := map[string]string{"Authentication": APM_TOKEN}
      exporter, err := otlptracegrpc.New(
      context.Background(),
      otlptracegrpc.WithInsecure(),
      otlptracegrpc.WithEndpoint(APM_ENDPOINT),
      otlptracegrpc.WithHeaders(headers),
      )
      if err != nil {
      log.Fatalf("Failed to create exporter: %v", err)
      }
      resources, err := resource.New(
      context.Background(),
      resource.WithAttributes(
      attribute.String("service.name", SERVICE_NAME),
      attribute.String("library.language", "go"),
      ),
      )
      if err != nil {
      log.Fatalf("Could not set resources: %v", err)
      }
      otel.SetTracerProvider(
      sdktrace.NewTracerProvider(
      sdktrace.WithSampler(sdktrace.AlwaysSample()),
      sdktrace.WithBatcher(exporter),
      sdktrace.WithResource(resources),
      ),
      )
      return exporter.Shutdown
      }
      ```
      
   
   
   
   
 
