標籤(空格分隔): go falconsql
處理agent心跳請求,填充host表數據庫
ip白名單下發全部agentexpress
下發執行插件信息json
下發監控端口、進程緩存
緩存監控策略數據結構
HostMap: (hostname, hostId int)
spa
HostGroupsMap: (hostId, groupsId []int)
插件
GroupPlugins: (groupId, pluginsPath []string)
code
GroupTemplates: (groupId, templatesID []int)
排序
TemplateCache: (templateId, Template)
type Template struct { Id int `json:"id"` Name string `json:"name"` ParentId int `json:"parentId"` ActionId int `json:"actionId"` Creator string `json:"creator"` }
Strategies: (strategryID, Strategry)
type Strategy struct { Id int `json:"id"` Metric string `json:"metric"` Tags map[string]string `json:"tags"` Func string `json:"func"` // e.g. max(#3) all(#3) Operator string `json:"operator"` // e.g. < != RightValue float64 `json:"rightValue"` // critical value MaxStep int `json:"maxStep"` Priority int `json:"priority"` Note string `json:"note"` Tpl *Template `json:"tpl"` }
HostTemplates: (hostID, templatesID []int)
ExpressionCache:(expressionId, [] Expression)
type Expression struct { Id int `json:"id"` Metric string `json:"metric"` Tags map[string]string `json:"tags"` Func string `json:"func"` // e.g. max(#3) all(#3) Operator string `json:"operator"` // e.g. < != RightValue float64 `json:"rightValue"` // critical value MaxStep int `json:"maxStep"` Priority int `json:"priority"` Note string `json:"note"` ActionId int `json:"actionId"` }
MonitoredHosts: (hostID, Host)
type Host struct { Id int Name string }
數據庫操做
rows, err = DB.Query(sql) if err != nil { log.Println("ERROR:", err) return err } … defer DB.Close() for rows.Next(){ … err = rows.Scan(&id, &hostname) if err != nil { log.Println("ERROR:", err) continue } … }
緩存策略
初始運行時從portalDB中讀取數據結構數據存於內存中,而後每分鐘執行一次portalDB查詢(與初始運行操做一致)更新數據到內存中。
插件策略
plugins update request 包含hostname和checksum(checksum初始爲空),HBS收到request後從portalDB中讀取插件路徑信息,排序後對路徑取MD5造成checksum,與agent請求的checksum對比,相同則返回空不進行plugins更新,不然返回插件信息,agent收到後更新插件並按期執行插件。
RPC服務可經過HTTP,TCP和JSON的方式創建Sever和Client;Hbs的RPC服務端經過JSON方式實現,可註冊多個client,實現相關接口,供agent和judge調用。