All Products
Search
Document Center

Application Real-Time Monitoring Service:Laporkan data jejak aplikasi Go melalui SkyWalking

Last Updated:Aug 26, 2026

Laporkan data jejak dari aplikasi Go ke Managed Service for OpenTelemetry menggunakan Agen SkyWalking untuk Go. Setelah data dilaporkan, Anda dapat memantau aplikasi serta melihat data seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL.

ARMS juga menyediakan agen buatan sendiri untuk aplikasi Go. Agen ini didukung secara komersial dan menginstrumen aplikasi tanpa intrusi kode. Untuk informasi selengkapnya, lihat Monitor Go applications.

Pilih agen SkyWalking untuk Go

(Direkomendasikan) Gunakan skywalking-go. Ini adalah agen SkyWalking terbaru untuk Go, memiliki dukungan resmi yang stabil, dan menginstrumen aplikasi Anda hampir tanpa intrusi kode.

Go2Sky adalah agen SkyWalking lama untuk Go. Agen ini memiliki basis pengguna yang besar tetapi sangat intrusif, sehingga SkyWalking merilis skywalking-go. Topik ini menjelaskan prosedur integrasi untuk kedua agen agar Anda dapat melaporkan data ke konsol Managed Service for OpenTelemetry.

Dimensiskywalking-goGo2Sky
InstrumentasiHampir tidak ada intrusi kode. Anda menentukan agen dengan flag -toolexec saat mengompilasi proyek Go Anda, dan integrasi hanya memerlukan beberapa langkah.Sangat intrusif. Anda harus menambahkan hook untuk setiap plug-in di proyek Anda.
Status pemeliharaanAgen SkyWalking terbaru untuk Go, dengan dukungan resmi yang stabil.Dukungan dihentikan setelah skywalking-go dirilis secara resmi. Situs web resmi mencantumkan Go2Sky sebagai pensiun, artinya agen ini tidak lagi dipelihara, dan SkyWalking tidak menerima pull request untuknya.
Basis penggunaBasis pengguna lebih kecil dibandingkan Go2Sky.Basis pengguna besar.

SkyWalking terus memindahkan plug-in Go2Sky ke skywalking-go. Kedua agen menginstrumen kumpulan library yang sama, dan skywalking-go juga menginstrumen framework gRPC yang tidak didukung oleh Go2Sky. Untuk daftar library dan perintah instalasi Go2Sky, lihat Supported instrumentation libraries.

Dapatkan titik akhir

  1. Masuk ke ARMS console. Di panel navigasi kiri, klik Integration Center.

  2. Di bagian Server-side Applications, klik kartu SkyWalking.

  3. Di panel SkyWalking yang muncul, pilih wilayah tempat Anda ingin melaporkan data.

    Saat mengakses wilayah untuk pertama kalinya, sumber daya akan diinisialisasi secara otomatis.

  4. Pilih Connection Type dan salin titik akhirnya.

    Jika layanan Anda dideploy di Alibaba Cloud pada wilayah yang Anda pilih, pilih jaringan VPC Alibaba Cloud. Jika tidak, pilih jaringan publik.

    SkyWalking endpoint and connection type in the console

Laporkan data dengan agen skywalking-go (direkomendasikan)

Langkah 1: Unduh dan bangun agen

Unduh agen skywalking-go, lalu jalankan perintah berikut untuk membangunnya:

cd skywalking-go && make build

File yang dapat dieksekusi dihasilkan di direktori skywalking-go/bin. File tersebut berbeda berdasarkan sistem operasi:

  • macOS: skywalking-go-agent--darwin-amd64

  • Linux: skywalking-go-agent--linux-amd64

  • Windows: skywalking-go-agent--windows-amd64

Langkah 2: Aktifkan instrumentasi di proyek Go Anda

Buka proyek Go Anda dan aktifkan instrumentasi dengan salah satu cara berikut. Jika perintah inject mengembalikan error, impor modul skywalking di paket utama sebagai gantinya.

Impor modul dalam kode (direkomendasikan)

Impor modul skywalking di paket utama:

package main
import (
    _ "github.com/apache/skywalking-go"
)

Inject agen (tanpa perubahan kode)

Jalankan file yang dapat dieksekusi dengan flag -inject:

skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-project

Langkah 3: Konfigurasikan parameter koneksi

Salin skywalking-go/tools/go-agent/config/config.default.yaml dari repositori skywalking-go yang Anda unduh di Langkah 1, simpan sebagai file config.yaml milik Anda, lalu atur parameter berikut untuk menghubungkan agen ke 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: nama layanan. Ganti <your-service-name> dengan nama aplikasi Anda.

  • backend_service: titik akhir. Ganti <your-endpoint> dengan titik akhir yang Anda salin di Obtain an endpoint.

  • authentication: token otentikasi titik akhir. Ganti <your-auth-token> dengan token Anda sendiri.

Untuk parameter agen lainnya, cara mengaturnya, dan file konfigurasi default, lihat Advanced configuration for the skywalking-go agent.

Langkah 4: Bangun ulang dan jalankan proyek Anda

Bangun ulang proyek Anda dan berikan agen ke kompilator Go dengan flag -toolexec:

# Anda harus menggunakan -toolexec
sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -a
  • path/to/skywalking-go-agent: jalur mutlak file yang dapat dieksekusi yang Anda bangun di Langkah 1.

  • path/to/config.yaml: jalur mutlak file pengaturan parameter agen skywalking-go.

Jalankan proyek Anda. Data SkyWalking kemudian dilaporkan ke konsol Managed Service for OpenTelemetry.

Laporkan data dengan agen Go2Sky (legacy)

Langkah 1: Konfigurasikan parameter koneksi

Go2Sky mendukung dua metode konfigurasi: hard-code parameter di proyek Anda atau konfigurasikan secara otomatis menggunakan variabel lingkungan.

Hard-code parameter

Berikan titik akhir dan token otentikasi yang Anda peroleh di Obtain an endpoint ke reporter:

// Impor parameter menggunakan reporter.WithParameter()
report, err := reporter.NewGRPCReporter(
    <your-backend-server-address>,
    reporter.WithAuthentication(<your-auth-token>))

Konfigurasi otomatis dengan variabel lingkungan

Untuk variabel lingkungan yang dibaca oleh Go2Sky, lihat Go2Sky environment variables. Anda dapat mengonfigurasi variabel dengan salah satu cara berikut. Contoh berikut menggunakan macOS:

# Metode 1: tulis ke file konfigurasi variabel lingkungan (persisten)
vim ~/.bash_profile
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
source ~/.bash_profile
# Metode 2: buka terminal dan konfigurasi di command line (temporary; tidak berlaku di terminal baru)
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>

Langkah 2: Konfigurasikan nama layanan

Konfigurasikan ServiceName untuk mengidentifikasi aplikasi:

ServiceName := <your-service-name>
tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))

Langkah 3: Tambahkan hook plug-in Go2Sky

Go2Sky menyediakan plug-in untuk banyak library, tetapi Anda harus menambahkan instrumentasi di kode sumber proyek Anda. Untuk informasi tentang cara menambahkan instrumentasi, lihat Go2Sky-Plugins repository on GitHub. File README.md di setiap folder plug-in menyediakan contoh penggunaan dasar.

Untuk menambahkan hook untuk framework gin, lakukan operasi berikut:

  1. Buka folder /gin dan buka file /gin/v3/README.md.

  2. Tambahkan hook middleware: v3.Middleware(r, tracer).

Contoh berikut menunjukkan cara hook dipasang. Ganti reporter log dengan reporter gRPC dan nama layanan yang Anda konfigurasikan di Langkah 1 dan Langkah 2 sebelum melaporkan data ke 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() {
    // Gunakan reporter gRPC untuk produksi
    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()
    // Gunakan middleware go2sky dengan pelacakan
    r.Use(v3.Middleware(r, tracer))
    // lakukan sesuatu
}

Langkah 4: Mulai ulang aplikasi

Mulai ulang aplikasi.

Konfigurasi lanjutan untuk agen skywalking-go

Cara mengatur parameter

Anda dapat mengatur parameter agen skywalking-go dengan dua cara. Contoh berikut mengonfigurasi service_name:

Metode 1 (direkomendasikan): tambahkan parameter ke config.yaml

agent:
  service_name: ${SW_AGENT_NAME:<your_service_name>}

Metode 2: konfigurasikan variabel lingkungan sistem

export SW_AGENT_NAME=<your_service_name>

Kecualikan plug-in

Secara default, agen skywalking-go menginstrumen semua plug-in secara otomatis. Untuk mengecualikan plug-in tertentu, atur parameter excluded:

# Untuk mengecualikan plug-in sql
plugin:
  excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql}
# Untuk mengecualikan beberapa plug-in sekaligus, pisahkan dengan koma
plugin:
  excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}

File konfigurasi default

Contoh berikut menunjukkan file lengkap config.default.yaml agen skywalking-go:

agent:
  # Nama layanan ditampilkan di UI.
  service_name: ${SW_AGENT_NAME:Your_ApplicationName}
  # Untuk mendapatkan kunci variabel lingkungan untuk nama instans, jika tidak dapat diperoleh, nama instans akan dihasilkan secara otomatis.
  instance_env_name: SW_AGENT_INSTANCE_NAME
  # Laju pengambilan sampel data pelacakan, yaitu nilai floating-point antara 0 dan 1.
  sampler: ${SW_AGENT_SAMPLE:1}
  meter:
    # Interval pengumpulan metrik, dalam detik.
    collect_interval: ${SW_AGENT_METER_COLLECT_INTERVAL:20}
reporter:
  grpc:
    # Alamat server gRPC layanan backend.
    backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}
    # Jumlah maksimum segmen untuk melaporkan data pelacakan.
    max_send_queue: ${SW_AGENT_REPORTER_GRPC_MAX_SEND_QUEUE:5000}
    # Interval (detik) pemeriksaan layanan dan layanan backend
    check_interval: ${SW_AGENT_REPORTER_GRPC_CHECK_INTERVAL:20}
    # String otentikasi untuk berkomunikasi dengan backend.
    authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}
    # Interval (detik) pengambilan konfigurasi dinamis dari backend.
    cds_fetch_interval: ${SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL:20}
    tls:
      # Apakah mengaktifkan TLS dengan backend.
      enable: ${SW_AGENT_REPORTER_GRPC_TLS_ENABLE:false}
      # Jalur file ca.crt. Konfigurasi ini hanya berlaku saat saklar TLS diaktifkan.
      ca_path: ${SW_AGENT_REPORTER_GRPC_TLS_CA_PATH:}
      # Jalur file client.pem. Konfigurasi ini hanya berlaku saat mTLS.
      client_key_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_KEY_PATH:}
      # Jalur file client.crt. Konfigurasi ini hanya berlaku saat mTLS.
      client_cert_chain_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_CERT_CHAIN_PATH:}
      # Mengontrol apakah klien memverifikasi rantai sertifikat dan nama host server.
      insecure_skip_verify: ${SW_AGENT_REPORTER_GRPC_TLS_INSECURE_SKIP_VERIFY:false}
log:
  # Jenis menentukan jenis logging yang saat ini digunakan oleh sistem.
  # Agen Go akan menggunakan jenis log ini untuk menghasilkan log kustom. Mendukung: "auto", "logrus", atau "zap".
  # auto: Secara otomatis mengidentifikasi sumber log.
  #       Jika logrus ada di proyek, secara otomatis akan menggunakan logrus.
  #       Jika zap telah diinisialisasi di proyek, akan menggunakan framework zap.
  #       Secara default, akan menggunakan std errors untuk mengeluarkan konten log.
  # logrus: Menentukan bahwa Agen harus menggunakan framework logrus.
  # zap: Menentukan bahwa Agen harus menggunakan framework zap.
  # Sistem harus sudah diinisialisasi melalui metode seperti "zap.New", "zap.NewProduction", dll.
  type: ${SW_AGENT_LOG_TYPE:auto}
  tracing:
    # Apakah secara otomatis mengintegrasikan informasi Tracing ke dalam log.
    enable: ${SW_AGENT_LOG_TRACING_ENABLE:true}
    # Jika informasi pelacakan diaktifkan, informasi pelacakan akan disimpan di Key saat ini di setiap log.
    key: ${SW_AGENT_LOG_TRACING_KEY:SW_CTX}
  reporter:
    # Apakah mengunggah log ke backend.
    enable: ${SW_AGENT_LOG_REPORTER_ENABLE:true}
    # Daftar nama bidang yang perlu ditambahkan ke label log. (pisahkan beberapa dengan ",")
    label_keys: ${SW_AGENT_LOG_REPORTER_LABEL_KEYS:}
plugin:
  # Daftar nama plug-in yang dikecualikan, nama plug-in ganda harus dipisahkan dengan ","
  # CATATAN: Parameter ini hanya berlaku selama fase kompilasi.
  excluded: ${SW_AGENT_PLUGIN_EXCLUDES:}
  config:
    http:
      # Kumpulkan parameter permintaan HTTP di sisi server
      server_collect_parameters: ${SW_AGENT_PLUGIN_CONFIG_HTTP_SERVER_COLLECT_PARAMETERS:false}
    mongo:
      # Kumpulkan pernyataan permintaan MongoDB
      collect_statement: ${SW_AGENT_PLUGIN_CONFIG_MONGO_COLLECT_STATEMENT:false}
    sql:
      # Kumpulkan parameter permintaan SQL
      collect_parameter: ${SW_AGENT_PLUGIN_CONFIG_SQL_COLLECT_PARAMETER:false}

Variabel lingkungan

Variabel lingkungan skywalking-go

Tabel berikut mencantumkan variabel lingkungan yang didukung oleh agen skywalking-go. NULL menunjukkan bahwa tidak ada nilai default yang ditetapkan.

Variabel lingkunganDeskripsiNilai default
SW_AGENT_NAMENama layanan.NULL
SW_AGENT_INSTANCE_NAMENama instans layanan.Dihasilkan secara otomatis
SW_AGENT_SAMPLELaju pengambilan sampel. Nilai valid: 0 hingga 1.1
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICETitik akhir server tempat data pemantauan dilaporkan melalui gRPC.127.0.0.1:11800
SW_AGENT_REPORTER_GRPC_AUTHENTICATIONToken otentikasi server tempat data pemantauan dilaporkan melalui gRPC.NULL
SW_AGENT_PLUGIN_EXCLUDESPlug-in yang dikecualikan.NULL

Variabel lingkungan Go2Sky

Tabel berikut mencantumkan variabel lingkungan yang didukung oleh agen Go2Sky. NULL menunjukkan bahwa tidak ada nilai default yang ditetapkan.

Variabel lingkunganDeskripsiNilai default
SW_AGENT_NAMENama layanan Go.NULL
SW_AGENT_LAYERNama lapisan tempat instans tersebut berada, sebagaimana didefinisikan di backend.NULL
SW_AGENT_INSTANCE_NAMENama instans layanan Go.Dihasilkan secara acak
SW_AGENT_SAMPLELaju pengambilan sampel. Nilai 1 menunjukkan pengumpulan penuh.1
SW_AGENT_COLLECTOR_BACKEND_SERVICESAlamat server tempat agen melaporkan data.NULL
SW_AGENT_AUTHENTICATIONToken otentikasi server tempat agen melaporkan data.NULL
SW_AGENT_COLLECTOR_HEARTBEAT_PERIODInterval pelaporan heartbeat agen, dalam detik.20
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVALInterval pengambilan konfigurasi agen secara dinamis, dalam detik.20
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZEPanjang buffer antrian yang mengirimkan rentang.30000
SW_AGENT_PROCESS_STATUS_HOOK_ENABLEMengaktifkan fitur hook status proses.False
SW_AGENT_PROCESS_LABELSLabel proses. Pisahkan beberapa label dengan koma (,).NULL

Library instrumentasi yang didukung

Baik agen skywalking-go maupun agen Go2Sky menginstrumen library berikut. Agen skywalking-go menginstrumennya secara otomatis saat Anda mengompilasi proyek dan tidak memerlukan instalasi. Untuk Go2Sky, jalankan perintah instalasi masing-masing library yang digunakan proyek Anda.

LibraryPerintah instalasi Go2Sky
sqlgo get -u github.com/SkyAPM/go2sky-plugins/sql
dubbo-gogo get -u github.com/SkyAPM/go2sky-plugins/dubbo-go
geargo get -u github.com/SkyAPM/go2sky-plugins/gear
gingo get -u github.com/SkyAPM/go2sky-plugins/gin/v2 untuk gin v2, atau go get -u github.com/SkyAPM/go2sky-plugins/gin/v3 untuk gin v3
go-restfulgo get -u github.com/SkyAPM/go2sky-plugins/go-restful
gormgo get -u github.com/SkyAPM/go2sky-plugins/gorm
httpgo get -u github.com/SkyAPM/go2sky
go-kratos v2go get -u github.com/SkyAPM/go2sky-plugins/kratos
logrusgo get -u github.com/SkyAPM/go2sky-plugins/logrus
go-micro (v3.5.0)go get -u github.com/SkyAPM/go2sky-plugins/micro
mongogo 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

Perintah inject skywalking-go mengembalikan error versi

Error berikut terjadi saat Anda menggunakan 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

Jika terjadi error saat menggunakan metode inject, impor modul skywalking di paket utama.

Jejak lintas-proses tidak ditampilkan dengan benar saat melaporkan data melalui Go2Sky

Pelacakan end-to-end menghubungkan jejak menggunakan ID jejak, yang dibawa dalam permintaan HTTP. Jejak yang salah berarti ID jejak tidak disebarluaskan dengan benar, sehingga Anda harus mengatur rentang dengan tepat. Gunakan dua antarmuka berikut untuk menghubungkan panggilan lintas-proses menjadi satu jejak:

  • CreateEntrySpan: rentang masuk. Gunakan antarmuka ini untuk mengekstrak konteks pelacakan, yang mencakup ID jejak, dari permintaan HTTP.

  • CreateExitSpan: rentang keluar. Gunakan antarmuka ini untuk menyuntikkan konteks pelacakan, yang mencakup ID jejak, ke dalam permintaan HTTP.

// Dalam satu proses, gunakan CreateLocalSpan untuk membuat rentang.
span, ctx, err := tracer.CreateLocalSpan(context.Background())
subSpan, newCtx, err := tracer.CreateLocalSpan(ctx)
// Antara proses, gunakan rentang masuk CreateEntrySpan untuk mengekstrak konteks dari permintaan HTTP, dan gunakan rentang keluar CreateExitSpan untuk menyuntikkan konteks ke dalam permintaan HTTP.
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
})

Dalam proyek lintas-proses, ID jejak harus disebarluaskan antar proses untuk menghubungkan jejak. Gunakan antarmuka di atas untuk menyuntikkan konteks ke dalam permintaan HTTP sehingga dilewatkan antar proses bersama permintaan tersebut.

Referensi