README

goappmonitor

goappmonitor

Build Status codecov GoDoc Code Health Go Report Card License

Golang application performance data monitoring.

GoAppMonitor is a library which provides a monitor on your golang applications. It contains system level based monitoring and business level monitoring(custom monitoring).Just add the repository into your apps and register what you want to monitoring.

Summary

Using GoAppMonitor to monitor the golang applications, in general as following:

In your golang application code, the user calls the statistics function provided by goappmonitor; when the statistics function is called, the appmonitor generates a statistical record, and is stored in memory.GoAppMonitor will automatically and regularly record these statistics push to the agent such as Open-Falcon agent.

Version

Current version support:

  • v0.0.2

    • Open-Falcon (Open source monitoring system of Xiaomi)
    • InfluxDB (Scalable datastore for metrics, events, and real-time analytics)
todo....
  • support more agent frameworks,such as elasticsearch...
  • go processes manager and debug online...

Install

go get github.com/wgliang/goappmonitor

Demo

demo

Usage

Below is an example which shows some common use cases for goappmonitor. Check example for more usage.

Detail API

package main

import (
	"math/rand"
	"time"

	appm "github.com/wgliang/goappmonitor"
)

// Base or system performance data,such as memeory,gc,network and so on.
func baseOrsystem() {
	for _ = range time.Tick(time.Second * time.Duration(10)) {
		// (commonly used) Meter, used to sum and calculate the rate of change. Use scenarios
		// such as the number of home visits statistics, CG etc..
		pv := int64(rand.Int31n(100))
		appm.Meter("appm.meter", pv)
		appm.Meter("appm.meter.2", pv-50)

		// (commonly used) Gauge, used to preserve the value of the instantaneous value of the
		// type of record. Use scenarios such as statistical queue length, statistics CPU usage,
		// and so on.
		queueSize := int64(rand.Int31n(100) - 50)
		appm.Gauge("appm.gauge", queueSize)

		cpuUtil := float64(rand.Int31n(10000)) / float64(100)
		appm.GaugeFloat64("appm.gauge.float64", cpuUtil)
	}
}

// Custom or business performance data,such as qps,num of function be called, task queue and so on.
func customOrbusiness() {
	for _ = range time.Tick(time.Second) {
		// Histogram, using the exponential decay sampling method, the probability distribution of
		// the statistical object is calculated. Using scenarios such as the probability distribution
		// of the statistics home page to access the delay
		delay := int64(rand.Int31n(100))
		appm.Histogram("appm.histogram", delay)
	}
}

func main() {
	var ch chan int
	go baseOrsystem()
	go customOrbusiness()
	<-ch
}

Credits

Repository is base on goperfcounter of niean

Logo is desigend by xuri

Expand ▾ Collapse ▴

Documentation

Index

Constants

View Source
const (
	// Gauge const
	GAUGE = "GAUGE"
)
View Source
const (
	// VERSION goappmonitor
	VERSION = "0.0.2"
)

Variables

This section is empty.

Functions

func CollectDebugGCStats

func CollectDebugGCStats(r metrics.Collectry, d time.Duration)

    Collect denug gc stats and it will run a goroutine.

    func CollectRuntimeMemStats

    func CollectRuntimeMemStats(r metrics.Collectry, d time.Duration)

      Collect runtime memeory-data:CollectRuntimeMemStats.

      func Counter

      func Counter(name string, count int64)

        Counter Actions

        func Gauge

        func Gauge(name string, value int64)

          Gauge Actions

          func GaugeFloat64

          func GaugeFloat64(name string, value float64)

            GaugeFloat64

            func GetCounter

            func GetCounter(name string) int64

              GetCounter from name

              func GetGauge

              func GetGauge(name string) float64

                GetGauge from name.

                func GetHistogram

                func GetHistogram(name string) int64

                  GetHistogram from name.

                  func GetHistogram50th

                  func GetHistogram50th(name string) float64

                    GetHistogram50th from name.

                    func GetHistogram75th

                    func GetHistogram75th(name string) float64

                      GetHistogram75th from name.

                      func GetHistogram95th

                      func GetHistogram95th(name string) float64

                        GetHistogram95th from name.

                        func GetHistogram999th

                        func GetHistogram999th(name string) float64

                          GetHistogram999th form name.

                          func GetHistogram99th

                          func GetHistogram99th(name string) float64

                            GetHistogram99th from name.

                            func GetHistogramMax

                            func GetHistogramMax(name string) int64

                              GetHistogramMax from name.

                              func GetHistogramMean

                              func GetHistogramMean(name string) float64

                                GetHistogramMean from name.

                                func GetHistogramMin

                                func GetHistogramMin(name string) int64

                                  GetHistogramMin from name.

                                  func GetHistogramStdDev

                                  func GetHistogramStdDev(name string) float64

                                    GetHistogramStdDev from name.

                                    func GetHistogramSum

                                    func GetHistogramSum(name string) int64

                                      GetHistogramSum from name.

                                      func GetMeter

                                      func GetMeter(name string) int64

                                        GetMeter from name.

                                        func GetMeterRate1

                                        func GetMeterRate1(name string) float64

                                          GetMeterRate1 from name.

                                          func GetMeterRate15

                                          func GetMeterRate15(name string) float64

                                            GetMeterRate15 from name.

                                            func GetMeterRate5

                                            func GetMeterRate5(name string) float64

                                              GetMeterRate5 from name.

                                              func GetMeterRateMean

                                              func GetMeterRateMean(name string) float64

                                                GetMeterRateMean from name.

                                                func GetMeterRateStep

                                                func GetMeterRateStep(name string) float64

                                                  GetMeterRateStep from name.

                                                  func Histogram

                                                  func Histogram(name string, count int64)

                                                    Histogram Actions

                                                    func InfluxDBJson

                                                    func InfluxDBJson(w http.ResponseWriter, data interface{})

                                                      Render json

                                                      func InfluxDBString

                                                      func InfluxDBString(w http.ResponseWriter, msg string)

                                                        Render string

                                                        func Meter

                                                        func Meter(name string, count int64)

                                                          Meter Actions

                                                          func RenderJson

                                                          func RenderJson(w http.ResponseWriter, data interface{})

                                                            RenderJson json

                                                            func RenderString

                                                            func RenderString(w http.ResponseWriter, msg string)

                                                              RenderString string

                                                              func SetCounter

                                                              func SetCounter(name string, count int64)

                                                                SetCounter name and value.

                                                                func SetDefaultSetting

                                                                func SetDefaultSetting(setting BeegoHttpSettings)

                                                                  SetDefaultSetting Overwrite default settings

                                                                  func SetGauge

                                                                  func SetGauge(name string, value float64)

                                                                    SetGauge

                                                                    func SetHistogram

                                                                    func SetHistogram(name string, count int64)

                                                                      SetHistogram from name and value.

                                                                      func SetMeter

                                                                      func SetMeter(name string, count int64)

                                                                        SetMeter

                                                                        func TimeoutDialer

                                                                        func TimeoutDialer(cTimeout time.Duration, rwTimeout time.Duration) func(net, addr string) (c net.Conn, err error)

                                                                          TimeoutDialer returns functions of connection dialer with timeout settings for http.Transport Dial field.

                                                                          Types

                                                                          type BeegoHttpRequest

                                                                          type BeegoHttpRequest struct {
                                                                          	// contains filtered or unexported fields
                                                                          }

                                                                            BeegoHttpRequest provides more useful methods for requesting one url than http.Request.

                                                                            func Delete

                                                                            func Delete(url string) *BeegoHttpRequest

                                                                              Delete returns *BeegoHttpRequest DELETE method.

                                                                              func Get

                                                                              func Get(url string) *BeegoHttpRequest

                                                                                Get returns *BeegoHttpRequest with GET method.

                                                                                func Head(url string) *BeegoHttpRequest

                                                                                  Head returns *BeegoHttpRequest with HEAD method.

                                                                                  func Post

                                                                                  func Post(url string) *BeegoHttpRequest

                                                                                    Post returns *BeegoHttpRequest with POST method.

                                                                                    func Put

                                                                                    func Put(url string) *BeegoHttpRequest

                                                                                      Put returns *BeegoHttpRequest with PUT method.

                                                                                      func (*BeegoHttpRequest) Body

                                                                                      func (b *BeegoHttpRequest) Body(data interface{}) *BeegoHttpRequest

                                                                                        Body adds request raw body. it supports string and []byte.

                                                                                        func (*BeegoHttpRequest) Bytes

                                                                                        func (b *BeegoHttpRequest) Bytes() ([]byte, error)

                                                                                          Bytes returns the body []byte in response. it calls Response inner.

                                                                                          func (*BeegoHttpRequest) Debug

                                                                                          func (b *BeegoHttpRequest) Debug(isdebug bool) *BeegoHttpRequest

                                                                                            Debug sets show debug or not when executing request.

                                                                                            func (*BeegoHttpRequest) Header

                                                                                            func (b *BeegoHttpRequest) Header(key, value string) *BeegoHttpRequest

                                                                                              Header add header item string in request.

                                                                                              func (*BeegoHttpRequest) Param

                                                                                              func (b *BeegoHttpRequest) Param(key, value string) *BeegoHttpRequest

                                                                                                Param adds query param in to request. params build query string as ?key1=value1&key2=value2...

                                                                                                func (*BeegoHttpRequest) PostFile

                                                                                                func (b *BeegoHttpRequest) PostFile(formname, filename string) *BeegoHttpRequest

                                                                                                func (*BeegoHttpRequest) Response

                                                                                                func (b *BeegoHttpRequest) Response() (*http.Response, error)

                                                                                                  Response executes request client gets response mannually.

                                                                                                  func (*BeegoHttpRequest) SetBasicAuth

                                                                                                  func (b *BeegoHttpRequest) SetBasicAuth(username, password string) *BeegoHttpRequest

                                                                                                    SetBasicAuth sets the request's Authorization header to use HTTP Basic Authentication with the provided username and password.

                                                                                                    func (*BeegoHttpRequest) SetCookie

                                                                                                    func (b *BeegoHttpRequest) SetCookie(cookie *http.Cookie) *BeegoHttpRequest

                                                                                                      SetCookie add cookie into request.

                                                                                                      func (*BeegoHttpRequest) SetEnableCookie

                                                                                                      func (b *BeegoHttpRequest) SetEnableCookie(enable bool) *BeegoHttpRequest

                                                                                                        SetEnableCookie sets enable/disable cookiejar

                                                                                                        func (*BeegoHttpRequest) SetProtocolVersion

                                                                                                        func (b *BeegoHttpRequest) SetProtocolVersion(vers string) *BeegoHttpRequest

                                                                                                          Set the protocol version for incoming requests. Client requests always use HTTP/1.1.

                                                                                                          func (*BeegoHttpRequest) SetProxy

                                                                                                          func (b *BeegoHttpRequest) SetProxy(proxy func(*http.Request) (*url.URL, error)) *BeegoHttpRequest

                                                                                                            Set http proxy example:

                                                                                                            func(req *http.Request) (*url.URL, error) {
                                                                                                                u, _ := url.ParseRequestURI("http://127.0.0.1:8118")
                                                                                                                return u, nil
                                                                                                            }
                                                                                                            

                                                                                                            func (*BeegoHttpRequest) SetTLSClientConfig

                                                                                                            func (b *BeegoHttpRequest) SetTLSClientConfig(config *tls.Config) *BeegoHttpRequest

                                                                                                              SetTLSClientConfig sets tls connection configurations if visiting https url.

                                                                                                              func (*BeegoHttpRequest) SetTimeout

                                                                                                              func (b *BeegoHttpRequest) SetTimeout(connectTimeout, readWriteTimeout time.Duration) *BeegoHttpRequest

                                                                                                                SetTimeout sets connect time out and read-write time out for BeegoRequest.

                                                                                                                func (*BeegoHttpRequest) SetTransport

                                                                                                                func (b *BeegoHttpRequest) SetTransport(transport http.RoundTripper) *BeegoHttpRequest

                                                                                                                  Set transport to

                                                                                                                  func (*BeegoHttpRequest) SetUserAgent

                                                                                                                  func (b *BeegoHttpRequest) SetUserAgent(useragent string) *BeegoHttpRequest

                                                                                                                    SetUserAgent sets User-Agent header field

                                                                                                                    func (*BeegoHttpRequest) Setting

                                                                                                                      Setting Change request settings

                                                                                                                      func (*BeegoHttpRequest) String

                                                                                                                      func (b *BeegoHttpRequest) String() (string, error)

                                                                                                                        String returns the body string in response. it calls Response inner.

                                                                                                                        func (*BeegoHttpRequest) ToFile

                                                                                                                        func (b *BeegoHttpRequest) ToFile(filename string) error

                                                                                                                          ToFile saves the body data in response to one file. it calls Response inner.

                                                                                                                          func (*BeegoHttpRequest) ToJson

                                                                                                                          func (b *BeegoHttpRequest) ToJson(v interface{}) error

                                                                                                                            ToJson returns the map that marshals from the body bytes as json in response . it calls Response inner.

                                                                                                                            func (*BeegoHttpRequest) ToXml

                                                                                                                            func (b *BeegoHttpRequest) ToXml(v interface{}) error

                                                                                                                              ToXml returns the map that marshals from the body bytes as xml in response . it calls Response inner.

                                                                                                                              type BeegoHttpSettings

                                                                                                                              type BeegoHttpSettings struct {
                                                                                                                              	ShowDebug        bool
                                                                                                                              	UserAgent        string
                                                                                                                              	ConnectTimeout   time.Duration
                                                                                                                              	ReadWriteTimeout time.Duration
                                                                                                                              	TlsClientConfig  *tls.Config
                                                                                                                              	Proxy            func(*http.Request) (*url.URL, error)
                                                                                                                              	Transport        http.RoundTripper
                                                                                                                              	EnableCookie     bool
                                                                                                                              }

                                                                                                                                BeegoHttpSettings struct

                                                                                                                                type DebugMetrics

                                                                                                                                type DebugMetrics struct {
                                                                                                                                	GCStats struct {
                                                                                                                                		LastGC     metrics.Gauge     `json:"lastGC"`
                                                                                                                                		NumGC      metrics.Gauge     `json:"numGC"`
                                                                                                                                		Pause      metrics.Histogram `json:"pause"`
                                                                                                                                		PauseTotal metrics.Gauge     `json:"pauseTotal"`
                                                                                                                                	}
                                                                                                                                	ReadGCStats metrics.Histogram `json:"readGCStats"`
                                                                                                                                }

                                                                                                                                  DebugMetrics ,Monitoring index of application in debug environment.

                                                                                                                                  type GlobalConfig

                                                                                                                                  type GlobalConfig struct {
                                                                                                                                  	Debug    bool        `json:"debug"`
                                                                                                                                  	Hostname string      `json:"hostname"`
                                                                                                                                  	Tags     string      `json:"tags"`
                                                                                                                                  	Step     int64       `json:"step"`
                                                                                                                                  	Bases    []string    `json:"bases"`
                                                                                                                                  	Push     *PushConfig `json:"push"`
                                                                                                                                  	Http     *HttpConfig `json:"http"`
                                                                                                                                  }

                                                                                                                                    GlobalConfig of goappmonitor, and you can config it in cfg.json.

                                                                                                                                    type HttpConfig

                                                                                                                                    type HttpConfig struct {
                                                                                                                                    	Enabled bool   `json:"enabled"`
                                                                                                                                    	Listen  string `json:"listen"`
                                                                                                                                    }

                                                                                                                                      HttpConfig about whether open local server and server address.

                                                                                                                                      type InfluxDBResponse

                                                                                                                                      type InfluxDBResponse struct {
                                                                                                                                      	Msg     string      `json:"msg"`
                                                                                                                                      	Name    string      `json:"name"`
                                                                                                                                      	Columns []string    `json:"columns"`
                                                                                                                                      	Points  interface{} `json:"points"`
                                                                                                                                      }

                                                                                                                                      type InfluxDBx

                                                                                                                                      type InfluxDBx struct {
                                                                                                                                      	Enabled  bool   `json:"enabled"`
                                                                                                                                      	Addr     string `json:"addr"`
                                                                                                                                      	Username string `json:"username"`
                                                                                                                                      	Password string `json:"password"`
                                                                                                                                      }

                                                                                                                                      type MetricValue

                                                                                                                                      type MetricValue struct {
                                                                                                                                      	Endpoint  string      `json:"endpoint"`
                                                                                                                                      	Metric    string      `json:"metric"`
                                                                                                                                      	Value     interface{} `json:"value"`
                                                                                                                                      	Step      int64       `json:"step"`
                                                                                                                                      	Type      string      `json:"counterType"`
                                                                                                                                      	Tags      string      `json:"tags"`
                                                                                                                                      	Timestamp int64       `json:"timestamp"`
                                                                                                                                      }

                                                                                                                                        Data MetricValue struct.

                                                                                                                                        func (*MetricValue) String

                                                                                                                                        func (mv *MetricValue) String() string

                                                                                                                                          Transfer to string.

                                                                                                                                          type OpenFalconx

                                                                                                                                          type OpenFalconx struct {
                                                                                                                                          	Enabled bool   `json:"enabled"`
                                                                                                                                          	Api     string `json:"api"`
                                                                                                                                          }

                                                                                                                                          type Point

                                                                                                                                          type Point []interface{}

                                                                                                                                          type PushConfig

                                                                                                                                          type PushConfig struct {
                                                                                                                                          	OpenFalcon OpenFalconx `json:"open-falcon"`
                                                                                                                                          	InfluxDB   InfluxDBx   `json:"influxDB"`
                                                                                                                                          }

                                                                                                                                            PushConfig of pushing address and switcher.

                                                                                                                                            type Response

                                                                                                                                            type Response struct {
                                                                                                                                            	Msg  string      `json:"msg"`
                                                                                                                                            	Data interface{} `json:"data"`
                                                                                                                                            }

                                                                                                                                              Response http struct

                                                                                                                                              type RuntimeMetrics

                                                                                                                                              type RuntimeMetrics struct {
                                                                                                                                              	MemStats struct {
                                                                                                                                              		Alloc         metrics.Gauge        `json:"alloc"`
                                                                                                                                              		BuckHashSys   metrics.Gauge        `json:"buckHashSys"`
                                                                                                                                              		DebugGC       metrics.Gauge        `json:"debugGC"`
                                                                                                                                              		EnableGC      metrics.Gauge        `json:"enableGC"`
                                                                                                                                              		Frees         metrics.Gauge        `json:"frees"`
                                                                                                                                              		HeapAlloc     metrics.Gauge        `json:"heapAlloc"`
                                                                                                                                              		HeapIdle      metrics.Gauge        `json:"heapIdle"`
                                                                                                                                              		HeapInuse     metrics.Gauge        `json:"heapInuse"`
                                                                                                                                              		HeapObjects   metrics.Gauge        `json:"heapObjects"`
                                                                                                                                              		HeapReleased  metrics.Gauge        `json:"heapReleased"`
                                                                                                                                              		HeapSys       metrics.Gauge        `json:"heapSys"`
                                                                                                                                              		LastGC        metrics.Gauge        `json:"lastGC"`
                                                                                                                                              		Lookups       metrics.Gauge        `json:"lookups"`
                                                                                                                                              		Mallocs       metrics.Gauge        `json:"mallocs"`
                                                                                                                                              		MCacheInuse   metrics.Gauge        `json:"mCacheInuse"`
                                                                                                                                              		MCacheSys     metrics.Gauge        `json:"mCacheSys"`
                                                                                                                                              		MSpanInuse    metrics.Gauge        `json:"mSpanInuse"`
                                                                                                                                              		MSpanSys      metrics.Gauge        `json:"mSpanSys"`
                                                                                                                                              		NextGC        metrics.Gauge        `json:"nextGC"`
                                                                                                                                              		NumGC         metrics.Gauge        `json:"numGC"`
                                                                                                                                              		GCCPUFraction metrics.GaugeFloat64 `json:"gCCPUFraction"`
                                                                                                                                              		PauseNs       metrics.Histogram    `json:"pauseNs"`
                                                                                                                                              		PauseTotalNs  metrics.Gauge        `json:"pauseTotalNs"`
                                                                                                                                              		StackInuse    metrics.Gauge        `json:"stackInuse"`
                                                                                                                                              		StackSys      metrics.Gauge        `json:"stackSys"`
                                                                                                                                              		Sys           metrics.Gauge        `json:"sys"`
                                                                                                                                              		TotalAlloc    metrics.Gauge        `json:"totalAlloc"`
                                                                                                                                              	}
                                                                                                                                              	NumCgoCall   metrics.Gauge     `json:"numCgoCall"`
                                                                                                                                              	NumGoroutine metrics.Gauge     `json:"numGoroutine"`
                                                                                                                                              	ReadMemStats metrics.Histogram `json:"readMemStats"`
                                                                                                                                              }

                                                                                                                                                RuntimeMetrics ,Monitoring index of application in production environment.

                                                                                                                                                Directories

                                                                                                                                                Path Synopsis