import ( "database/sql" "encoding/json" "fmt" "net/url" "strconv" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" // Mysql Driver _ "github.com/go-sql-driver/mysql" ) var pluginLogger = logging.GetLogger("amonagent.mysql") // Config - XXX type Config struct { Host string DB string } var sampleConfig = ` # Available config options: # # {"host": "username:password@protocol(address)/dbname"} # # Config location: /etc/opt/amonagent/plugins-enabled/mysql.conf `
"reflect" "strconv" "strings" "time" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" // MongoDB Driver "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) var pluginLogger = logging.GetLogger("amonagent.mongodb") var localhost = &url.URL{Host: "127.0.0.1:27017"} // Server - XXX type Server struct { URL *url.URL Session *mgo.Session lastResult *ServerStatus } // TableSizeData - XXX type TableSizeData struct { Headers []string `json:"headers"` Data []interface{} `json:"data"` }
package collectors import ( "encoding/json" "os/exec" "regexp" "strconv" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/util" "github.com/shirou/gopsutil/mem" ) var processLogger = logging.GetLogger("amonagent.processes") func (p ProcessStruct) String() string { s, _ := json.Marshal(p) return string(s) } // ProcessStruct - individual process data type ProcessStruct struct { CPU float64 `json:"cpu"` Memory string `json:"memory_mb"` KBRead float64 `json:"kb_read"` KBWrite float64 `json:"kb_write"` Name string `json:"name"` } // ProcessesList - list of individual process data
"strings" "sync" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/gonuts/go-shellquote" ) // Metric - XXX type Metric struct { Name string `json:"name"` Value float64 `json:"value"` Type string `json:"type"` } var pluginLogger = logging.GetLogger("amonagent.custom") // Run - XXX func Run(command *Command) (string, error) { splitCmd, err := shellquote.Split(command.Command) if err != nil || len(splitCmd) == 0 { return "", fmt.Errorf("exec: unable to parse command, %s", err) } cmd := exec.Command(splitCmd[0], splitCmd[1:]...) var out bytes.Buffer cmd.Stdout = &out if err := cmd.Run(); err != nil { return "", fmt.Errorf("exec: %s for command '%s'", err, command.Command) }
"fmt" "log" "os" "os/signal" "path/filepath" "github.com/amonapp/amonagent" "github.com/amonapp/amonagent/collectors" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" _ "github.com/amonapp/amonagent/plugins/all" "github.com/amonapp/amonagent/settings" ) var agentLogger = logging.GetLogger("amonagent.main") var fTest = flag.Bool("test", false, "gather all metrics, print them out, and exit") var fListPlugins = flag.Bool("list-plugins", false, "lists all available plugins and exit") var fTestPlugin = flag.String("test-plugin", "", "gather plugin metrics, print them out, and exit") var fPluginConfig = flag.String("plugin-config", "", "Shows the example config for a plugin") var fVersion = flag.Bool("version", false, "display the version") var fPidfile = flag.String("pidfile", "", "file to write our pid to") var fMachineID = flag.Bool("machineid", false, "Returns machine id, this value is used in the Salt minion config") // Amonagent version // -ldflags "-X main.Version=`git describe --always --tags`" var Version string // ListPlugins -- XXX func ListPlugins() {
package haproxy import ( "encoding/csv" "fmt" "io" "net/http" "net/url" "strconv" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" ) var pluginLogger = logging.GetLogger("amonagent.haproxy") var haproxyType = map[string]string{ "0": "frontend", "1": "backend", "2": "server", "3": "listen", } //CSV format: https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#9.1 const ( HF_PXNAME = 0 // 0. pxname [LFBS]: proxy name HF_SVNAME = 1 // 1. svname [LFBS]: service name (FRONTEND for frontend, BACKEND for backend, any name for server/listener) HF_QCUR = 2 //2. qcur [..BS]: current queued requests. For the backend this reports the number queued without a server assigned. HF_QMAX = 3 //3. qmax [..BS]: max value of qcur HF_SCUR = 4 // 4. scur [LFBS]: current sessions
package collectors import ( "encoding/json" "os/exec" "regexp" "strconv" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/util" ) var cpuLogger = logging.GetLogger("amonagent.cpu") //{'iowait': '0.00', 'system': '0.50', 'idle': '98.50', 'user': '******', 'steal': '0.00', 'nice': '0.00'} // the header values are %idle, %wait var headerRE = regexp.MustCompile(`([%][a-zA-Z0-9]+)[\s+]?`) var valueRE = regexp.MustCompile(`\d+[\.,]\d+`) func (p CPUUsageStruct) String() string { s, _ := json.Marshal(p) return string(s) } // CPUUsageStruct - returns CPU usage stats type CPUUsageStruct struct { User float64 `json:"user"` Idle float64 `json:"idle"` Nice float64 `json:"nice"` Steal float64 `json:"steal"`
package collectors import ( "encoding/json" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/util" psmem "github.com/shirou/gopsutil/mem" ) var memoryLogger = logging.GetLogger("amonagent.memory") //{'used_percent': 62, 'swap_free_mb': 0, 'used_mb': 2452, 'swap_used_percent': 0, 'swap_used_mb': 0, 'total_mb': 3939, 'swap_total_mb': 0, 'free_mb': 1487} func (p MemoryStruct) String() string { s, _ := json.Marshal(p) return string(s) } // MemoryStruct - XXX type MemoryStruct struct { UsedPercent float64 `json:"used_percent"` UsedMB float64 `json:"used_mb"` TotalMB float64 `json:"total_mb"` FreeMB float64 `json:"free_mb"` SwapUsedMB float64 `json:"swap_used_mb"` SwapFreeMB float64 `json:"swap_free_mb"` SwapTotalMB float64 `json:"swap_total_mb"` SwapUsedPercent float64 `json:"swap_used_percent"` }
package redis import ( "encoding/json" "fmt" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" "gopkg.in/redis.v3" ) var pluginLogger = logging.GetLogger("amonagent.redis") func (p PerformanceStruct) String() string { s, _ := json.Marshal(p) return string(s) } // PerformanceStruct - XXX type PerformanceStruct struct { Gauges map[string]interface{} `json:"gauges"` } // RedisPerformanceFields - XXX var RedisPerformanceFields = map[string]string{ "aof_last_rewrite_time_sec": "aof.last_rewrite_time", "aof_rewrite_in_progress": "aof.rewrite", "aof_current_size": "aof.size",
package collectors import ( "encoding/json" "time" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/util" "github.com/shirou/gopsutil/net" ) // {'docker0': {'inbound': '0.00', 'outbound': '0.00'}, 'eth0': {'inbound': '0.12', 'outbound': '0.00'}} var networkLogger = logging.GetLogger("amonagent.net") func stringInSlice(str string, list []string) bool { for _, v := range list { if v == str { return true } } return false } func (p NetworkStruct) String() string { s, _ := json.Marshal(p) return string(s) } // NetworkUsageList struct type NetworkUsageList []NetworkStruct // NetworkStruct - net interfaces data
import ( "bufio" "crypto/tls" "fmt" "net/http" "net/url" "strconv" "strings" "time" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" ) var pluginLogger = logging.GetLogger("amonagent.nginx") var tr = &http.Transport{ ResponseHeaderTimeout: time.Duration(3 * time.Second), TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // move this to a config option } var client = &http.Client{Transport: tr} // PerformanceStruct - XXX type PerformanceStruct struct { Gauges map[string]interface{} `json:"gauges"` } // Config - XXX type Config struct {
package collectors import ( "encoding/json" "io/ioutil" "os" "regexp" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/util" "github.com/shirou/gopsutil/disk" ) var diskLogger = logging.GetLogger("amonagent.disk") func (p DiskUsageStruct) String() string { s, _ := json.Marshal(p) return string(s) } func (p DiskIOtruct) String() string { s, _ := json.Marshal(p) return string(s) } // DiskUsageStruct - volume usage data // {'sda1': {'used': '28851', 'percent': 84.0, 'free': '5625', 'volume': '/dev/sda1', 'path': '/', 'total': '36236'} type DiskUsageStruct struct { Name string `json:"name"` Path string `json:"path"`
package collectors import ( "encoding/json" "github.com/amonapp/amonagent/logging" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/load" ) var loadLogger = logging.GetLogger("amonagent.load") //{'cores': 1, 'fifteen_minutes': '0.14', 'five_minutes': '0.11', 'minute': '0.01'} func (p LoadStruct) String() string { s, _ := json.Marshal(p) return string(s) } // LoadStruct - returns load avg type LoadStruct struct { Minute float64 `json:"minute"` FiveMinutes float64 `json:"five_minutes"` FifteenMinutes float64 `json:"fifteen_minutes"` Cores int `json:"cores"` } // LoadAverage - returns load avg func LoadAverage() LoadStruct { cores, _ := cpu.CPUCounts(true) load, _ := load.LoadAvg()
package amonagent import ( "fmt" "time" "github.com/amonapp/amonagent/collectors" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/remote" "github.com/amonapp/amonagent/settings" ) var agentLogger = logging.GetLogger("amonagent.log") // Agent - XXX type Agent struct { // Interval at which to gather information Interval time.Duration } // Test - XXX func (a *Agent) Test(config settings.Struct) error { allMetrics := collectors.CollectAllData() fmt.Println("\n------------------") fmt.Println("\033[92mCollecting Metrics: \033[0m") fmt.Println("") fmt.Println(allMetrics) fmt.Println("\n------------------")
import ( "database/sql" "encoding/json" "fmt" "net/url" "strings" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/mitchellh/mapstructure" // Postgres Driver _ "github.com/lib/pq" ) var pluginLogger = logging.GetLogger("amonagent.postgresql") // Counters - XXX var Counters = map[string]string{ "xact_commit": "xact.commits", "xact_rollback": "xact.rollbacks", "blks_read": "performance.disk_read", "blks_hit": "performance.buffer_hit", "tup_returned": "rows.returned", "tup_fetched": "rows.fetched", "tup_inserted": "rows.inserted", "tup_updated": "rows.updated", "tup_deleted": "rows.deleted", } // Gauges - XXX
package collectors import ( "encoding/json" "sync" "github.com/amonapp/amonagent/logging" "github.com/amonapp/amonagent/plugins" "github.com/amonapp/amonagent/settings" ) // CollectorLogger - XXX var CollectorLogger = logging.GetLogger("amonagent.collector") func (p SystemDataStruct) String() string { s, _ := json.Marshal(p) return string(s) } func (p AllMetricsStruct) String() string { s, _ := json.Marshal(p) return string(s) } func (p HostDataStruct) String() string { s, _ := json.Marshal(p) return string(s) } // AllMetricsStruct -XXX