get plugin collect from monapi
This commit is contained in:
parent
0d496f71ca
commit
45fe14b439
|
@ -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"`
|
||||||
|
|
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue