小花狸監控之網路收發

壹頁書發表於2015-03-29
小花狸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("", 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部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1477851/,如需轉載,請註明出處,否則將追究法律責任。

相關文章