get plugin collect from monapi

This commit is contained in:
710leo 2020-04-20 19:07:38 +08:00
parent 0d496f71ca
commit 45fe14b439
6 changed files with 88 additions and 11 deletions

View File

@ -12,16 +12,18 @@ import (
type Collect struct { type Collect struct {
sync.RWMutex sync.RWMutex
Ports map[int]*PortCollect `json:"ports"` Ports map[int]*PortCollect `json:"ports"`
Procs map[string]*ProcCollect `json:"procs"` Procs map[string]*ProcCollect `json:"procs"`
Logs map[string]*LogCollect `json:"logs"` Logs map[string]*LogCollect `json:"logs"`
Plugins map[string]*PluginCollect `json:"plugins"`
} }
func NewCollect() *Collect { func NewCollect() *Collect {
return &Collect{ return &Collect{
Ports: make(map[int]*PortCollect), Ports: make(map[int]*PortCollect),
Procs: make(map[string]*ProcCollect), Procs: make(map[string]*ProcCollect),
Logs: make(map[string]*LogCollect), Logs: make(map[string]*LogCollect),
Plugins: make(map[string]*PluginCollect),
} }
} }
@ -45,6 +47,12 @@ func (c *Collect) Update(cc *Collect) {
for k, v := range cc.Logs { for k, v := range cc.Logs {
c.Logs[k] = v c.Logs[k] = v
} }
//更新plugin采集配置
c.Plugins = make(map[string]*PluginCollect)
for k, v := range cc.Plugins {
c.Plugins[k] = v
}
} }
func (c *Collect) GetPorts() map[int]*PortCollect { func (c *Collect) GetPorts() map[int]*PortCollect {
@ -80,6 +88,17 @@ func (c *Collect) GetLogConfig() map[string]*LogCollect {
return tmp return tmp
} }
func (c *Collect) GetPlugin() map[string]*PluginCollect {
c.RLock()
defer c.RUnlock()
tmp := make(map[string]*PluginCollect)
for k, v := range c.Plugins {
tmp[k] = v
}
return tmp
}
type PortCollect struct { type PortCollect struct {
Id int64 `json:"id"` Id int64 `json:"id"`
Nid int64 `json:"nid"` Nid int64 `json:"nid"`
@ -114,6 +133,21 @@ type ProcCollect struct {
CollectMethod string `json:"collect_method"` CollectMethod string `json:"collect_method"`
} }
type PluginCollect struct {
Id int64 `json:"id"`
Nid int64 `json:"nid"`
CollectType string `json:"collect_type"`
Name string `json:"name"`
Step int `json:"step"`
FilePath string `json:"file_path"`
Params string `json:"params"`
Comment string `json:"comment"`
Creator string `json:"creator"`
Created time.Time `xorm:"updated" json:"created"`
LastUpdator string `xorm:"last_updator" json:"last_updator"`
LastUpdated time.Time `xorm:"updated" json:"last_updated"`
}
type LogCollect struct { type LogCollect struct {
Id int64 `json:"id"` Id int64 `json:"id"`
Nid int64 `json:"nid"` Nid int64 `json:"nid"`

View File

@ -8,6 +8,7 @@ type SysSection struct {
IgnoreMetricsMap map[string]struct{} `yaml:"-"` IgnoreMetricsMap map[string]struct{} `yaml:"-"`
NtpServers []string `yaml:"ntpServers"` NtpServers []string `yaml:"ntpServers"`
Plugin string `yaml:"plugin"` Plugin string `yaml:"plugin"`
PluginRemote bool `yaml:"pluginRemote"`
Interval int `yaml:"interval"` Interval int `yaml:"interval"`
Timeout int `yaml:"timeout"` Timeout int `yaml:"timeout"`
} }

View File

@ -2,8 +2,6 @@ package plugins
import ( import (
"time" "time"
"github.com/didi/nightingale/src/modules/collector/sys"
) )
func Detect() { func Detect() {
@ -19,7 +17,7 @@ func loopDetect() {
} }
func detect() { func detect() {
ps := ListPlugins(sys.Config.Plugin) ps := ListPlugins()
DelNoUsePlugins(ps) DelNoUsePlugins(ps)
AddNewPlugins(ps) AddNewPlugins(ps)
} }

View File

@ -2,6 +2,7 @@ package plugins
type Plugin struct { type Plugin struct {
FilePath string FilePath string
Params string
MTime int64 MTime int64
Cycle int Cycle int
} }

View File

@ -2,16 +2,57 @@ package plugins
import ( import (
"io/ioutil" "io/ioutil"
"os"
"path/filepath" "path/filepath"
"strconv" "strconv"
"strings" "strings"
"github.com/didi/nightingale/src/modules/collector/stra"
"github.com/didi/nightingale/src/modules/collector/sys"
"github.com/toolkits/pkg/file" "github.com/toolkits/pkg/file"
"github.com/toolkits/pkg/logger" "github.com/toolkits/pkg/logger"
) )
// key: 60_ntp.py // key: 60_ntp.py
func ListPlugins(dir string) map[string]*Plugin { func ListPlugins() map[string]*Plugin {
plugins := make(map[string]*Plugin)
if sys.Config.PluginRemote {
plugins = ListPluginsFromMonapi()
} else {
plugins = ListPluginsFromLocal()
}
return plugins
}
func ListPluginsFromMonapi() map[string]*Plugin {
ret := make(map[string]*Plugin)
plugins := stra.Collect.GetPlugin()
for _, p := range plugins {
fpath := p.FilePath
fileInfo, err := os.Stat(fpath)
if err != nil {
logger.Warningf("plugin:%s get info err:%v", p.FilePath, err)
continue
}
plugin := &Plugin{
FilePath: fpath,
MTime: fileInfo.ModTime().Unix(),
Cycle: p.Step,
Params: p.Params,
}
ret[fpath] = plugin
}
return ret
}
func ListPluginsFromLocal() map[string]*Plugin {
dir := sys.Config.Plugin
ret := make(map[string]*Plugin) ret := make(map[string]*Plugin)
if dir == "" || !file.IsExist(dir) || file.IsFile(dir) { if dir == "" || !file.IsExist(dir) || file.IsFile(dir) {

View File

@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"strings"
"time" "time"
"github.com/toolkits/pkg/file" "github.com/toolkits/pkg/file"
@ -57,7 +58,8 @@ func PluginRun(plugin *Plugin) {
} }
logger.Debug(fpath, " running") logger.Debug(fpath, " running")
cmd := exec.Command(fpath) params := strings.Split(plugin.Params, " ")
cmd := exec.Command(fpath, params...)
cmd.Dir = filepath.Dir(fpath) cmd.Dir = filepath.Dir(fpath)
var stdout bytes.Buffer var stdout bytes.Buffer
cmd.Stdout = &stdout cmd.Stdout = &stdout