ITPub博客

首页 > 应用开发 > IT综合 > 小花狸监控之网络收发

小花狸监控之网络收发

原创 IT综合 作者:壹頁書 时间:2015-03-29 17:30:22 0 删除 编辑
小花狸V1.0接近完成.
两个星期的七拼八凑,虽然代码很乱,自己看着都累..
不过基本的功能算是实现了


初步的网络收发功能如下
Agent部署在被监控的服务器上,定期发送本机数据

$GOPATH/src/Agent.go
package main

import (
    "encoding/json"
    "flag"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
    "probe/module"
)

func main() {
    monitorType := flag.String("type", "host", "Monitor Type")
    user := flag.String("user", "", "Service User")
    pwd := flag.String("password", "", "Service Password")
    port := flag.String("port", "", "Service Port")
    path := flag.String("path", "", "Backup Path")
    localAddr := flag.String("localAddr", "", "Backup IP")
    flag.Parse()

    monitorInfo := &MonitorInfo{}
    monitorInfo.MonitorType = *monitorType
    switch *monitorType {
    case "host":
        host := &module.Host{}
        module.NewHost(host)
        host.HostUsage()
        result, _ := json.Marshal(*host)
        monitorInfo.MonitorInfo = string(result)
    case "mysql":
        mysqlinfo := module.GetSlaveInfo(*user, *pwd, *port)
        result, _ := json.Marshal(*mysqlinfo)
        monitorInfo.MonitorInfo = string(result)
    case "redis":
        redisinfo := module.GetRedisInfo(*port, *pwd)
        result, _ := json.Marshal(*redisinfo)
        monitorInfo.MonitorInfo = string(result)
    case "mongodb":
        mongodbinfo := module.GetMongodbInfo(*user, *pwd, *port)
        result, _ := json.Marshal(*mongodbinfo)
        monitorInfo.MonitorInfo = string(result)
    case "backup":
        backupinfo := module.NewBackupInfo(*localAddr, *user, *pwd, *path)
        result, _ := json.Marshal(*backupinfo)
        monitorInfo.MonitorInfo = string(result)
    }
    result, _ := json.Marshal(*monitorInfo)
    data := module.EncryptString(string(result))

    resp, _ := http.PostForm("http://127.0.0.1:8080/monitor", url.Values{"m": {data}})

    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    log.Println(body)
}

type MonitorInfo struct {
    MonitorType string
    MonitorInfo string
}

Server部署在集中监控服务器上,接收消息并保存到数据库(入库的功能还未实现)
$GOPATH/src/Server.go
package main

import (
    "log"
    "net/http"
    "probe/module"
)

func main() {
    http.HandleFunc("/monitor", monitorHandler)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe:", err.Error())
    }
}

func monitorHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    log.Println(r.Form["m"])
    monitorInfo := module.DecryptString(r.Form["m"][0])
    log.Println(monitorInfo)
}

Agent发送消息


Server接收消息,(上面的是密文,下面的是解密后的明文)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1477851/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6340032