Setelah Anda menggunakan SkyWalking untuk menginstrumentasi aplikasi dan melaporkan data jejak ke konsol Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi. Kemudian, Anda dapat melihat data pemantauan aplikasi, seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan SkyWalking Agent untuk Go untuk secara otomatis menginstrumentasi aplikasi Go dan melaporkan data jejak.
ARMS menyediakan agen komersial yang dikembangkan sendiri untuk aplikasi Go. Agen ini mendukung instrumentasi non-intrusif dengan fitur lebih kaya dan stabilitas yang ditingkatkan.
Prasyarat
Jenis Agen
Go2Sky adalah versi agen lama yang disediakan oleh SkyWalking untuk Go. Agen Go2Sky digunakan oleh banyak pengguna tetapi bersifat intrusif terhadap kode pengguna. Untuk mengatasi masalah ini, SkyWalking merilis agen skywalking-go. Versi baru ini tidak bersifat intrusif terhadap kode pengguna. Topik ini menjelaskan cara menggunakan agen Go2Sky dan skywalking-go untuk melaporkan data ke konsol Managed Service for OpenTelemetry.
Go2Sky
SkyWalking menghentikan dukungan untuk agen Go2Sky setelah agen skywalking-go dirilis secara resmi.
Di situs resmi SkyWalking, agen Go2Sky telah dipindahkan ke kategori Retired dan tidak lagi dipelihara.
Agen Go2Sky bersifat intrusif terhadap kode pengguna dan memerlukan penambahan panggilan balik untuk setiap plugin ke proyek Anda.
Agen Go2Sky digunakan oleh banyak pengguna.
Pustaka instrumentasi yang didukung:
skywalking-go
Agen skywalking-go adalah versi agen baru yang disediakan oleh SkyWalking untuk Go. SkyWalking memberikan dukungan stabil untuk agen skywalking-go.
Agen skywalking-go tidak bersifat intrusif terhadap kode pengguna.
Agen skywalking-go mudah digunakan. Anda hanya perlu menentukan agen skywalking-go menggunakan parameter
-toolexecsaat mengompilasi proyek Go.Jumlah pengguna agen skywalking-go lebih kecil dibandingkan dengan agen Go2Sky.
Pustaka instrumentasi yang didukung:
Agen yang Direkomendasikan
Kami merekomendasikan penggunaan agen skywalking-go. Agen skywalking-go menawarkan manfaat berikut:
Kemudahan penggunaan: Agen skywalking-go lebih mudah digunakan. Anda hanya perlu beberapa langkah sederhana untuk mengintegrasikan agen skywalking-go dan menerapkan instrumentasi otomatis. Agen skywalking-go tidak bersifat intrusif terhadap kode pengguna, sedangkan agen Go2Sky memerlukan penambahan panggilan balik untuk setiap plugin.
Dukungan komunitas: SkyWalking telah menghentikan dukungan untuk agen Go2Sky dan tidak lagi menerima pull request untuk agen Go2Sky.
Ekosistem plugin: SkyWalking secara bertahap memindahkan plugin Go2Sky ke agen skywalking-go. Dibandingkan dengan agen Go2Sky, agen skywalking-go mendukung instrumentasi untuk Google Remote Procedure Call (gRPC) framework.
Kode Contoh
Untuk informasi lebih lanjut tentang repositori kode contoh, lihat skywalking-demo di GitHub.
Gunakan agen skywalking-go untuk melaporkan data jejak
Unduh agen skywalking-go.
Bangun agen skywalking-go.
cd skywalking-go && make buildHasilkan file executable di direktori skywalking-go/bin.
File executable bervariasi berdasarkan sistem operasi Anda. Misalnya, gunakan skywalking-go-agent--darwin-amd64 untuk sistem operasi macOS.

Buka proyek Go dan impor modul SkyWalking ke dalam paket utama.
Metode 1
package main import ( _ "github.com/apache/skywalking-go" )Metode 2
skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-projectKonfigurasikan file config.yaml.
Anda dapat mengonfigurasi file config.yaml dengan merujuk pada file skywalking-go/tools/go-agent/config/config.default.yaml di kode contoh.
Dua metode disediakan untuk mengonfigurasi parameter. Misalnya, untuk mengonfigurasi parameter service_name, gunakan salah satu metode berikut:
Metode 1 (direkomendasikan): Tambahkan parameter service_name ke file config.yaml
agent: service_name: ${SW_AGENT_NAME:<your_service_name>}Metode 2: Konfigurasikan variabel lingkungan sistem
export SW_AGENT_NAME=<your_service_name>Untuk menghubungkan agen skywalking-go ke konsol Managed Service for OpenTelemetry, Anda harus mengonfigurasi parameter berikut:
service_name: ${SW_AGENT_NAME:Your_ApplicationName}: nama aplikasi Go.backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}: titik akhir server.authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}: token autentikasi untuk mengakses server.
Secara default, agen skywalking-go secara otomatis menginstrumentasi semua plugin. Untuk menonaktifkan instrumentasi otomatis untuk plugin tertentu, Anda dapat menentukan parameter excluded. Contoh:
# Nonaktifkan instrumentasi otomatis untuk plugin SQL. plugin: excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql} # Nonaktifkan instrumentasi otomatis untuk beberapa plugin. Pisahkan plugin dengan koma (,). plugin: excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}Bangun ulang proyek.
# Tentukan parameter -toolexec. sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -apath/to/skywalking-go-agent: jalur absolut ke file executable yang dihasilkan di Langkah 3 di bagian "Gunakan agen skywalking-go untuk melaporkan data jejak".path/to/config.yaml: jalur absolut ke file config.yaml agen skywalking-go.
Mulai proyek. Lalu, SkyWalking melaporkan data ke konsol Managed Service for OpenTelemetry.
Lampiran
Tabel berikut menjelaskan beberapa variabel lingkungan agen skywalking-go. Nilai NULL menunjukkan bahwa tidak ada nilai default yang ditentukan.
Variabel Lingkungan | Deskripsi | Nilai Default |
SW_AGENT_NAME | Nama aplikasi Go. | NULL |
SW_AGENT_INSTANCE_NAME | Nama instance aplikasi. | Sistem secara otomatis menghasilkan nama. |
SW_AGENT_SAMPLE | Tingkat sampel. Nilai valid: 0 hingga 1. | 1 |
SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE | Titik akhir server tempat agen skywalking-go melaporkan data jejak melalui gRPC. | 127.0.0.1:11800 |
SW_AGENT_REPORTER_GRPC_AUTHENTICATION | Token autentikasi untuk mengakses server tempat agen skywalking-go melaporkan data jejak melalui gRPC. | NULL |
SW_AGENT_PLUGIN_EXCLUDES | Plugin yang ingin dinonaktifkan instrumentasi otomatisnya. | NULL |
Gunakan agen Go2Sky untuk melaporkan data jejak
Agen Go2Sky memungkinkan Anda menuliskan parameter langsung ke dalam proyek atau menggunakan variabel lingkungan untuk mengonfigurasi parameter.
Tulis parameter langsung ke dalam proyek
### Gunakan metode reporter.WithParameter() untuk mengimpor parameter. report, err := reporter.NewGRPCReporter( <your-backend-server-address>, reporter.WithAuthentication(<your-auth-token>))Gunakan variabel lingkungan untuk mengonfigurasi parameter
### Agen Go2Sky dapat memperoleh nilai parameter berikut dari variabel lingkungan: SW_AGENT_AUTHENTICATION SW_AGENT_LAYER SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL SW_AGENT_COLLECTOR_BACKEND_SERVICES SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE SW_AGENT_PROCESS_STATUS_HOOK_ENABLE SW_AGENT_PROCESS_LABELS ### Konfigurasikan variabel lingkungan. Dalam contoh ini, macOS digunakan. # Metode 1: Tulis file konfigurasi variabel lingkungan. Variabel lingkungan yang dikonfigurasi dengan metode ini berlaku secara permanen. vim ~/.bash_profile export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address> source ~/.bash_profile # Metode 2: Buka terminal dan konfigurasikan variabel lingkungan di baris perintah. Variabel lingkungan yang dikonfigurasi dengan metode ini hanya berlaku sementara dan menjadi tidak valid saat membuka terminal lain. export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>Konfigurasikan parameter ServiceName untuk menentukan aplikasi.
ServiceName := <your-service-name> tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))Tambahkan panggilan balik untuk plugin Go2Sky.
Agen Go2Sky menyediakan plugin untuk banyak pustaka. Anda perlu menambahkan panggilan balik untuk plugin ini ke kode sumber proyek Anda. Untuk informasi lebih lanjut tentang cara menambahkan panggilan balik, lihat repositori go2sky-plugins di GitHub. File README.md disediakan di folder plugin setiap plugin untuk menjelaskan cara menggunakan plugin tersebut.
Dalam contoh ini, kerangka gin digunakan.
Pergi ke folder /gin dan lihat file /gin/v3/README.md.
Tambahkan panggilan balik untuk middleware: v3.Middleware(r, tracer).
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 pelapor 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 penelusuran r.Use(v3.Middleware(r, tracer)) // lakukan sesuatu }
Mulai ulang aplikasi.
Lampiran
Tabel berikut menjelaskan variabel lingkungan agen Go2Sky. Nilai NULL menunjukkan bahwa tidak ada nilai default yang ditentukan.
Variabel Lingkungan | Deskripsi | Nilai Default |
SW_AGENT_NAME | Nama aplikasi Go. | NULL |
SW_AGENT_LAYER | Nama lapisan instance yang didefinisikan di backend Nama lapisan tempat instance aplikasi Go milik. | NULL |
SW_AGENT_INSTANCE_NAME | Nama instance aplikasi Go. | Sistem menghasilkan nama acak. |
SW_AGENT_SAMPLE | Tingkat sampel. Nilai 1 menentukan bahwa semua data disampel. | 1 |
SW_AGENT_COLLECTOR_BACKEND_SERVICES | Titik akhir server tempat agen Go2Sky melaporkan data jejak. | NULL |
SW_AGENT_AUTHENTICATION | Token autentikasi untuk mengakses server tempat agen Go2Sky melaporkan data jejak. | NULL |
SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD | Interval denyut jantung agen Go2Sky. Unit: detik. | 20 |
SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL | Interval pengambilan konfigurasi dinamis agen Go2Sky. Unit: detik. | 20 |
SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE | Ukuran buffer antrian untuk mengirim rentang. | 30000 |
SW_AGENT_PROCESS_STATUS_HOOK_ENABLE | Menentukan apakah akan mengaktifkan fitur hook status proses. | False |
SW_AGENT_PROCESS_LABELS | Label proses. Pisahkan beberapa label proses dengan koma (,). | NULL |
FAQ
Apa yang harus saya lakukan jika pesan kesalahan yang ditunjukkan pada gambar berikut muncul saat saya menggunakan agen skywalking-go?

Jika metode inject gagal, Anda dapat menggunakan metode import untuk mengimpor modul SkyWalking ke dalam paket utama.
Mengapa konsol Managed Service for OpenTelemetry gagal menampilkan data jejak yang benar untuk pemanggilan layanan lintas proses saat saya menggunakan agen Go2Sky untuk melaporkan data jejak?
Managed Service for OpenTelemetry menghubungkan jejak berdasarkan ID jejak. ID jejak dibawa dan ditransmisikan oleh permintaan HTTP. Jika data jejak tidak valid ditampilkan, ID jejak tidak ditransmisikan dengan benar. Dalam hal ini, Anda harus mengonfigurasi rentang yang sesuai untuk instrumentasi.
Anda dapat memanggil dua operasi penting berikut untuk menghubungkan jejak untuk pemanggilan layanan lintas proses:
CreateEntrySpan: membuat rentang entri. Anda dapat memanggil operasi ini untuk mengekstrak konteks analisis jejak, termasuk ID jejak, dari permintaan HTTP.
CreateExitSpan: membuat rentang keluar. Anda dapat memanggil operasi ini untuk menyuntikkan konteks analisis jejak, termasuk ID jejak, ke dalam permintaan HTTP.
// Panggil operasi CreateLocalSpan untuk membuat rentang dalam proses. span, ctx, err := tracer.CreateLocalSpan(context.Background()) subSpan, newCtx, err := tracer.CreateLocalSpan(ctx) // Untuk pemanggilan layanan lintas proses, panggil operasi CreateEntrySpan untuk mengekstrak konteks analisis jejak dari permintaan HTTP, dan panggil operasi CreateExitSpan untuk menyuntikkan konteks analisis jejak 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 })Untuk pemanggilan layservice lintas proses, ID jejak harus ditransmisikan lintas proses untuk menghubungkan jejak. Oleh karena itu, Anda harus memanggil operasi sebelumnya untuk menyuntikkan konteks analisis jejak ke dalam permintaan HTTP yang ditransmisikan lintas proses.
