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.
| Dimensi | skywalking-go | Go2Sky |
| Instrumentasi | Hampir 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 pemeliharaan | Agen 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 pengguna | Basis 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
Masuk ke ARMS console. Di panel navigasi kiri, klik Integration Center.
Di bagian Server-side Applications, klik kartu SkyWalking.
Di panel SkyWalking yang muncul, pilih wilayah tempat Anda ingin melaporkan data.
Saat mengakses wilayah untuk pertama kalinya, sumber daya akan diinisialisasi secara otomatis.
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.

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 buildFile yang dapat dieksekusi dihasilkan di direktori skywalking-go/bin. File tersebut berbeda berdasarkan sistem operasi:
macOS:
skywalking-go-agent--darwin-amd64Linux:
skywalking-go-agent--linux-amd64Windows:
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-projectLangkah 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" -apath/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:
Buka folder /gin dan buka file /gin/v3/README.md.
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 lingkungan | Deskripsi | Nilai default |
SW_AGENT_NAME | Nama layanan. | NULL |
SW_AGENT_INSTANCE_NAME | Nama instans layanan. | Dihasilkan secara otomatis |
SW_AGENT_SAMPLE | Laju pengambilan sampel. Nilai valid: 0 hingga 1. | 1 |
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE | Titik akhir server tempat data pemantauan dilaporkan melalui gRPC. | 127.0.0.1:11800 |
SW_AGENT_REPORTER_GRPC_AUTHENTICATION | Token otentikasi server tempat data pemantauan dilaporkan melalui gRPC. | NULL |
SW_AGENT_PLUGIN_EXCLUDES | Plug-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 lingkungan | Deskripsi | Nilai default |
SW_AGENT_NAME | Nama layanan Go. | NULL |
SW_AGENT_LAYER | Nama lapisan tempat instans tersebut berada, sebagaimana didefinisikan di backend. | NULL |
SW_AGENT_INSTANCE_NAME | Nama instans layanan Go. | Dihasilkan secara acak |
SW_AGENT_SAMPLE | Laju pengambilan sampel. Nilai 1 menunjukkan pengumpulan penuh. | 1 |
SW_AGENT_COLLECTOR_BACKEND_SERVICES | Alamat server tempat agen melaporkan data. | NULL |
SW_AGENT_AUTHENTICATION | Token otentikasi server tempat agen melaporkan data. | NULL |
SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD | Interval pelaporan heartbeat agen, dalam detik. | 20 |
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL | Interval pengambilan konfigurasi agen secara dinamis, dalam detik. | 20 |
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE | Panjang buffer antrian yang mengirimkan rentang. | 30000 |
SW_AGENT_PROCESS_STATUS_HOOK_ENABLE | Mengaktifkan fitur hook status proses. | False |
SW_AGENT_PROCESS_LABELS | Label 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.
| Library | Perintah instalasi 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 untuk gin v2, atau go get -u github.com/SkyAPM/go2sky-plugins/gin/v3 untuk 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
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-goJika 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.