示例#1
0
文件: mysql.go 项目: 0-T-0/amonagent
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
`
示例#2
0
	"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"`
}
示例#3
0
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
示例#4
0
文件: custom.go 项目: 0-T-0/amonagent
	"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)
	}
示例#5
0
	"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() {
示例#6
0
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
示例#7
0
文件: cpu.go 项目: 0-T-0/amonagent
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"`
示例#8
0
文件: memory.go 项目: 0-T-0/amonagent
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"`
}
示例#9
0
文件: redis.go 项目: 0-T-0/amonagent
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",
示例#10
0
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
示例#11
0
文件: nginx.go 项目: 0-T-0/amonagent
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 {
示例#12
0
文件: disk.go 项目: 0-T-0/amonagent
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"`
示例#13
0
文件: load.go 项目: 0-T-0/amonagent
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()
示例#14
0
文件: agent.go 项目: 0-T-0/amonagent
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------------------")
示例#15
0
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
示例#16
0
文件: all.go 项目: 0-T-0/amonagent
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