Golang 如何做 APM 监控

本文中业务 golang 程序 和 ELK、APM-Server均运行在 K8S 中

15696711591447

# 1. 部署 apm-server

前提:ES 已部署好

参照文末 apm-server 的部署方式,使用 helm 部署 apm-server。

apm-server:
  host: "0.0.0.0:8200"
output.elasticsearch:
  hosts: ["elasticsearch:9200"]

# 2. 修改业务 Golang 客户端

modules-apmhttprouter
import (
	"github.com/julienschmidt/httprouter"

	"go.elastic.co/apm/module/apmhttprouter"
)

func main() {
	r := httprouter.New()
	r.GET("/", apmhttprouter.Wrap(getIP, "/"))
	...
}

# 3. 修改业务 golang 程序的 系统环境变量

由于业务golang程序运行在 K8S 中,所以修改 deployment 的配置文件。

ELASTIC_APM_SERVICE_NAMEELASTIC_APM_SERVER_URL

ELASTIC_APM_SERVICE_NAME:标识服务 ELASTIC_APM_SERVER_URL:apm server 地址,默认 http://localhost:8200

    spec:
      containers:
      - env:
        - name: ELASTIC_APM_SERVICE_NAME
          value: <YOUR_ELASTIC_APM_SERVICE_NAME>
        - name: ELASTIC_APM_SERVER_URL
          value: <YOUR_ELASTIC_APM_SERVER_URL>

都部署好了后,访问服务,在 Kibana 上就可以看到 APM 的数据了。

# FAQ

# GO GET 报错:error_unix.go:29:9: undefined: unix.ErrnoName

go get 如下报错

go get go.elastic.co/apm/module/apmhttprouter
# go.elastic.co/apm
../../go/src/go.elastic.co/apm/error_unix.go:29:9: undefined: unix.ErrnoName
Could you please update your golang.org/x/sys/unix package by go get -u golang.org/x/sys/unix?

your local unix package may not be up to date with the change.

# reference

访客IP ,您的网络 访问优先