Instrumentasikan aplikasi Go Anda dengan agen SkyWalking untuk mengirimkan jejak terdistribusi ke Konsol Managed Service for OpenTelemetry. Setelah jejak tiba, Anda dapat menjelajahi topologi aplikasi, jejak, transaksi lambat, analisis error, dan analitik SQL.
Terdapat dua agen SkyWalking yang mendukung Go:
| Agent | Gaya instrumentasi | Status |
|---|---|---|
| skywalking-go (direkomendasikan) | Non-intrusif -- injeksi saat kompilasi melalui -toolexec | Aktif dipelihara |
| Go2Sky (legacy) | Intrusif -- memerlukan hook per-plugin dalam kode sumber | Dihentikan, tidak lagi dipelihara |
Mulailah dengan skywalking-go, kecuali proyek Anda sudah bergantung pada Go2Sky. SkyWalking secara bertahap memindahkan plugin Go2Sky ke agen skywalking-go, yang juga menambahkan dukungan framework gRPC.
ARMS juga menyediakan agen buatan sendiri yang didukung secara komersial untuk Go, memungkinkan instrumentasi non-intrusif dengan fitur lebih lengkap dan stabilitas yang ditingkatkan.
Laporkan jejak dengan agen skywalking-go
Langkah-langkah berikut memandu Anda melalui proses membangun agen skywalking-go, mengonfigurasikannya untuk Managed Service for OpenTelemetry, serta membangun ulang proyek Go Anda dengan instrumentasi saat kompilasi.
Langkah 1: Dapatkan titik akhir SkyWalking
Masuk ke Konsol Managed Service for OpenTelemetry.
Di panel navigasi kiri, klik Cluster Configurations. Pada halaman yang muncul, klik tab Access point information.
Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan Show Token.
Atur parameter Client ke SkyWalking.
Salin titik akhir dari kolom Related Information.

Jika aplikasi Anda berjalan di lingkungan produksi Alibaba Cloud, gunakan titik akhir VPC. Jika tidak, gunakan titik akhir publik.
Langkah 2: Bangun binari agen
Kloning dan bangun agen skywalking-go:
git clone https://github.com/apache/skywalking-go.git
cd skywalking-go && make buildProses pembangunan menghasilkan file eksekusi di direktori skywalking-go/bin/. Nama file bervariasi tergantung OS—misalnya, skywalking-go-agent--darwin-amd64 pada macOS.

Langkah 3: Tambahkan modul SkyWalking ke proyek Anda
Pilih salah satu metode berikut:
Opsi A -- Impor dalam kode
(tambahkan ke paket utama Anda):
package main
import (
_ "github.com/apache/skywalking-go"
)Opsi B -- Injeksi dengan binari agen
skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-projectJika metode injeksi gagal, gunakan Opsi A sebagai gantinya.
Langkah 4: Konfigurasikan agen
Buat file config.yaml dengan setidaknya tiga parameter berikut:
agent:
service_name: ${SW_AGENT_NAME:<your-service-name>}
reporter:
grpc:
backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:<your-skywalking-endpoint>}
authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:<your-auth-token>}Ganti placeholder dengan nilai Anda:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<your-service-name> | Nama yang mengidentifikasi aplikasi Anda di konsol | my-go-service |
<your-skywalking-endpoint> | Titik akhir yang diperoleh di Langkah 1 | xxx.api.aliyuncs.com:11800 |
<your-auth-token> | Token otentikasi yang ditampilkan di sebelah titik akhir | abcdef123456 |
Tetapkan nilai-nilai ini langsung di config.yaml (disarankan) atau melalui variabel lingkungan:
export SW_AGENT_NAME=my-go-service
export SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE=xxx.api.aliyuncs.com:11800
export SW_AGENT_REPORTER_GRPC_AUTHENTICATION=abcdef123456Nonaktifkan plugin tertentu
Secara default, agen skywalking-go menginstrumentasi semua plugin yang didukung. Untuk mengecualikan plugin tertentu, tambahkan parameter excluded:
plugin:
# Nonaktifkan satu plugin
excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql}
# Nonaktifkan beberapa plugin (dipisahkan koma)
# excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}Langkah 5: Bangun ulang proyek Anda
Kompilasi dengan flag -toolexec yang mengarah ke binari agen dan file konfigurasi Anda:
sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -aLangkah 6: Jalankan aplikasi Anda dan verifikasi
Jalankan binari yang telah dikompilasi. Agen secara otomatis menginstrumentasi semua plugin yang didukung dan mulai melaporkan jejak melalui gRPC.
Setelah Anda menjalankan proyek, SkyWalking melaporkan data ke Konsol Managed Service for OpenTelemetry.
Referensi variabel lingkungan
| Variabel lingkungan | Deskripsi | Default |
|---|---|---|
SW_AGENT_NAME | Nama aplikasi yang ditampilkan di konsol | Tidak ada |
SW_AGENT_INSTANCE_NAME | Nama Instance | Dihasilkan otomatis |
SW_AGENT_SAMPLE | Laju pengambilan sampel (0 hingga 1, di mana 1 = 100%) | 1 |
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE | Titik akhir gRPC untuk pelaporan jejak | 127.0.0.1:11800 |
SW_AGENT_REPORTER_GRPC_AUTHENTICATION | Token otentikasi | Tidak ada |
SW_AGENT_PLUGIN_EXCLUDES | Daftar plugin yang dinonaktifkan, dipisahkan koma | Tidak ada |
Plugin yang didukung
Agen skywalking-go secara otomatis menginstrumentasi pustaka-pustaka berikut saat kompilasi. Tidak diperlukan instalasi per pustaka.
| Pustaka |
|---|
| sql |
| dubbo-go |
| gear |
| gin |
| go-restful |
| gorm |
| http |
| go-kratos v2 |
| logrus |
| go-micro v3.5.0 |
| mongo |
| go-resty v2.2.0 |
| zap v1.16.0 |
Laporkan jejak dengan agen Go2Sky (legacy)
SkyWalking telah menghentikan Go2Sky. Proyek ini tidak lagi menerima pull request atau pembaruan. Gunakan agen skywalking-go untuk proyek baru.
Langkah 1: Siapkan reporter
Konfigurasikan reporter gRPC dengan mengkode keras parameter atau mengatur variabel lingkungan.
Opsi A -- Kode keras dalam proyek Anda
report, err := reporter.NewGRPCReporter(
"<your-backend-server-address>",
reporter.WithAuthentication("<your-auth-token>"))Opsi B -- Atur variabel lingkungan
# Permanen -- tambahkan ke profil shell Anda
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
export SW_AGENT_AUTHENTICATION=<your-auth-token>
# Lalu jalankan aplikasi Anda (agen membaca variabel ini secara otomatis)Langkah 2: Buat tracer
ServiceName := "<your-service-name>"
tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))Langkah 3: Tambahkan hook plugin
Go2Sky memerlukan hook untuk setiap pustaka yang diinstrumentasi. Lihat repositori go2sky-plugins di GitHub — setiap folder plugin berisi README dengan instruksi integrasi.
Contoh – framework gin:
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))
// Tambahkan rute Anda di sini
}Langkah 4: Restart aplikasi
Setelah menambahkan hook, restart aplikasi Anda. Jejak mulai mengalir ke Konsol Managed Service for OpenTelemetry.
Pustaka plugin yang didukung
Setiap plugin memerlukan instalasi terpisah melalui go get:
| Pustaka | Perintah instalasi |
|---|---|
| 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 atau 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 |
Referensi variabel lingkungan
| Variabel lingkungan | Deskripsi | Default |
|---|---|---|
SW_AGENT_NAME | Nama aplikasi | Tidak ada |
SW_AGENT_LAYER | Nama lapisan untuk instans | Tidak ada |
SW_AGENT_INSTANCE_NAME | Nama instans | Acak |
SW_AGENT_SAMPLE | Laju pengambilan sampel (1 = pengambilan sampel penuh) | 1 |
SW_AGENT_COLLECTOR_BACKEND_SERVICES | Titik akhir server untuk pelaporan jejak | Tidak ada |
SW_AGENT_AUTHENTICATION | Token otentikasi | Tidak ada |
SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD | Interval heartbeat dalam detik | 20 |
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL | Interval pengambilan konfigurasi dinamis dalam detik | 20 |
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE | Ukuran buffer antrian rentang | 30000 |
SW_AGENT_PROCESS_STATUS_HOOK_ENABLE | Aktifkan hook status proses | false |
SW_AGENT_PROCESS_LABELS | Label proses yang dipisahkan koma | Tidak ada |
FAQ
Apa yang harus saya lakukan jika perintah inject skywalking-go gagal?

Jika metode -inject gagal, tambahkan impor SkyWalking langsung di paket utama Anda sebagai gantinya:
import _ "github.com/apache/skywalking-go"Lalu bangun ulang dengan -toolexec seperti yang dijelaskan di Langkah 5.
Mengapa konsol menampilkan jejak terputus untuk panggilan lintas-proses dengan Go2Sky?
Managed Service for OpenTelemetry mengorelasikan rentang berdasarkan ID jejak yang dibawa dalam Header HTTP. Jika jejak tampak terputus di berbagai layanan, konteks jejak tidak tersebar dengan benar.
Untuk memperbaikinya, buat rentang masuk dan keluar yang menyebarkan konteks jejak melintasi batas HTTP:
// CreateEntrySpan -- ekstrak konteks jejak dari permintaan HTTP masuk
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/login", func(key string) (string, error) {
return r.Header.Get(key), nil
})
// CreateExitSpan -- suntikkan konteks jejak ke permintaan HTTP keluar
span, err := tracer.CreateExitSpan(req.Context(), "/service/validate", "tomcat-service:8080", func(key, value string) error {
req.Header.Set(key, value)
return nil
})Untuk rentang dalam proses (tanpa batas jaringan), gunakan CreateLocalSpan:
span, ctx, err := tracer.CreateLocalSpan(context.Background())
subSpan, newCtx, err := tracer.CreateLocalSpan(ctx)Setiap panggilan HTTP yang melintasi batas proses harus membawa konteks jejak. Tanpa CreateEntrySpan dan CreateExitSpan di setiap batas, layanan downstream akan memulai jejak baru yang terputus.
Kode contoh
Untuk contoh lengkap yang berfungsi, lihat repositori skywalking-demo di GitHub.