iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0

我們已經把Elastic APM可前的需要都部署好了,接下來為了使用APM,對官方提供的APM Agent的函式庫,修改一下完成的APM測試範例,所以我們來測試一下Elastic APM的資訊收集功能。

範例程式

主要測試功能為: apmgin、apmgorm、apmredigo。
可測試api為: /apm/db、/apm/redis、/apm/error

package main

import (
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/gomodule/redigo/redis"
	"go.elastic.co/apm/module/apmgin"
	"go.elastic.co/apm/module/apmgorm"
	"go.elastic.co/apm/module/apmredigo"
	_ "go.elastic.co/apm/module/apmsql/mysql"
)

func main() {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", "root", "password", "127.0.0.1", "3306", "mytest")
	apmDb, err := apmgorm.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}
	redisConn, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		panic(err)
	}
	defer redisConn.Close()

	engine := gin.New()
	engine.Use(apmgin.Middleware(engine))
	server := &http.Server{
		Addr:    ":8080",
		Handler: engine,
	}
	engine.GET("/apm/db", func(c *gin.Context) {
		var name string
		db := apmgorm.WithContext(c.Request.Context(), apmDb)
		row := db.Table("tb_users").Where("id = ?", 1).Select("name").Row()
		err := row.Scan(&name)
		if err != nil {
			panic(err)
		}
		c.JSON(200, name)
	})
	engine.GET("/apm/redis", func(c *gin.Context) {
		conn := apmredigo.Wrap(redisConn).WithContext(c.Request.Context())
		defer conn.Close()
		conn.Do("SET", "foo", 1)
		c.JSON(200, "ok")
	})
	engine.GET("/apm/error", func(c *gin.Context) {
		panic("apm test error")
	})

	go func() {
		if err := server.ListenAndServe(); err != nil {
			panic(err)
		}
	}()

	c := make(chan int)
	<-c
}

APM 結果

進入APM頁面後,可以發現之前建立的服務apm-it13
https://ithelp.ithome.com.tw/upload/images/20210925/20129762x7q1zI7gJ1.png
點選apm-it13進入到頁面,可以查看監控的資訊。
https://ithelp.ithome.com.tw/upload/images/20210925/20129762H2WQ929muw.png
點選/apm/db進入Transaction,查看詳細的連線資訊。
https://ithelp.ithome.com.tw/upload/images/20210925/20129762K8WSqqxt6J.jpg
點選Span可以看到APM Agent連完整的sql語法都有收集。
https://ithelp.ithome.com.tw/upload/images/20210925/20129762wAWzslWVoa.png
應用程式中使用cpu、memory的資訊也都有收集。
https://ithelp.ithome.com.tw/upload/images/20210925/20129762CtCYiv7NAN.png

總結

Elastic APM 可以用來做分散式服務的追蹤,並提供從請求的建立到結束時間統計,而且結合ELK來使用,讓我們可以直接在kibana上查看監控資訊,可以說是一款很好的效能監控工具。


上一篇
Day18 Elastic APM (二)
下一篇
Day20 Metricbeat(一)
系列文
Elastic Stack(ELK)數據圖表化與異常監控30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言