Commit 85d47da0 authored by Node- 门 忠鑫's avatar Node- 门 忠鑫

# 解析健康信息

parent 3451cc63
...@@ -11,6 +11,8 @@ import ( ...@@ -11,6 +11,8 @@ import (
) )
var sysNameIndex = make(map[int64]bool) var sysNameIndex = make(map[int64]bool)
var metricsPointSlice = make([]*client.Point, 0, batchSize)
var healthPointSlice = make([]*client.Point, 0, batchSize)
func AgentMsgProcess(msg string) { func AgentMsgProcess(msg string) {
chunkMsg := end_points.ChunkMsg{} chunkMsg := end_points.ChunkMsg{}
...@@ -18,67 +20,95 @@ func AgentMsgProcess(msg string) { ...@@ -18,67 +20,95 @@ func AgentMsgProcess(msg string) {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
buildMetricsInfluxMsg(chunkMsg) buildMsg(chunkMsg)
} }
func buildMetricsInfluxMsg(chunkMsg end_points.ChunkMsg) { func buildHealthInfluxMsg(appName string, ip string, timestamp time.Time, submitLimit int, db map[string]end_points.DBDetail) {
tags := make(map[string]string, )
tags["sys_name"] = appName
tags["host"] = ip
fields := make(map[string]interface{})
for k, v := range db {
var fieldName = v.Details.Database + "—" + k
fields[fieldName] = isOK(v.Status.Code)
}
if len(healthPointSlice) >= submitLimit {
go batchWrite(healthPointSlice)
healthPointSlice = make([]*client.Point, 0, batchSize)
}
point, _ := client.NewPoint("health_info", tags, fields, timestamp)
println(point)
healthPointSlice = append(healthPointSlice, point)
}
func buildMetricsInfluxMsg(appName string, ip string, timestamp time.Time, submitLimit int, health end_points.Health, metrics end_points.MetricsInfo) {
tags := make(map[string]string, )
fields := make(map[string]interface{})
tags["sys_name"] = appName
tags["host"] = ip
var status = health.Status
fields["sever_status"] = isOK(status.Code)
var diskSpace = health.Details.DiskSpace.Details
fields["disk_tol"] = diskSpace.Total
fields["disk_free"] = diskSpace.Free
fields["disk_threshold"] = diskSpace.Threshold
fields["mem_tol"] = metrics.Mem
fields["mem_free"] = metrics.MemFree
fields["heap_tol"] = metrics.Heap
fields["heap_init"] = metrics.HeapInit
fields["heap_used"] = metrics.HeapUsed
fields["nonheap_tol"] = metrics.Nonheap
fields["nonheap_init"] = metrics.NonheapInit
fields["nonheap_used"] = metrics.NonheapUsed
fields["nonheap_commit"] = metrics.NonheapCommitted
fields["thread_tol"] = metrics.ThreadsTotalStarted
fields["thread_peak"] = metrics.ThreadsPeak
fields["thread_daemon"] = metrics.ThreadsDaemon
fields["class_tol"] = metrics.Classes
fields["class_loaded"] = metrics.ClassesLoaded
fields["class_unloaded"] = metrics.ClassesUnloaded
fields["gc_parnew_count"] = metrics.GcParnewCount
fields["gc_parnew_time"] = metrics.GcParnewTime
fields["gc_concurrent_mark_sweep"] = metrics.GcConcurrentmarksweepCount
fields["gc_concurrent_mark_time"] = metrics.GcConcurrentmarksweepTime
fields["uptime"] = metrics.Uptime
fields["instance_uptime"] = metrics.InstanceUptime
fields["system_load_average"] = metrics.SystemloadAverage
if len(metricsPointSlice) >= submitLimit {
go batchWrite(metricsPointSlice)
metricsPointSlice = make([]*client.Point, 0, batchSize)
}
point, _ := client.NewPoint("machine_info", tags, fields, timestamp)
metricsPointSlice = append(metricsPointSlice, point)
}
func buildMsg(chunkMsg end_points.ChunkMsg) {
var ip = inetAtoN(chunkMsg.Ip) var ip = inetAtoN(chunkMsg.Ip)
sysNameIndex[ip] = true sysNameIndex[ip] = true
var sysNameCount = len(sysNameIndex) var sysNameCount = len(sysNameIndex)
for _, p := range chunkMsg.EndPoints { for _, p := range chunkMsg.EndPoints {
tags := make(map[string]string, )
tags["sys_name"] = chunkMsg.AppName var appName = chunkMsg.AppName
tags["host"] = chunkMsg.Ip var ip = chunkMsg.Ip
fields := make(map[string]interface{})
var metrics = p.Metrics
var health = p.Health
var status = health.Status
if "UP" == status.Code {
fields["sever_status"] = 1
}
var diskSpace = health.Details.DiskSpace.Details
fields["disk_tol"] = diskSpace.Total
fields["disk_free"] = diskSpace.Free
fields["disk_threshold"] = diskSpace.Threshold
fields["mem_tol"] = metrics.Mem
fields["mem_free"] = metrics.MemFree
fields["heap_tol"] = metrics.Heap
fields["heap_init"] = metrics.HeapInit
fields["heap_used"] = metrics.HeapUsed
fields["nonheap_tol"] = metrics.Nonheap
fields["nonheap_init"] = metrics.NonheapInit
fields["nonheap_used"] = metrics.NonheapUsed
fields["nonheap_commit"] = metrics.NonheapCommitted
fields["thread_tol"] = metrics.ThreadsTotalStarted
fields["thread_peak"] = metrics.ThreadsPeak
fields["thread_daemon"] = metrics.ThreadsDaemon
fields["class_tol"] = metrics.Classes
fields["class_loaded"] = metrics.ClassesLoaded
fields["class_unloaded"] = metrics.ClassesUnloaded
fields["gc_parnew_count"] = metrics.GcParnewCount
fields["gc_parnew_time"] = metrics.GcParnewTime
fields["gc_concurrent_mark_sweep"] = metrics.GcConcurrentmarksweepCount
fields["gc_concurrent_mark_time"] = metrics.GcConcurrentmarksweepTime
fields["uptime"] = metrics.Uptime
fields["instance_uptime"] = metrics.InstanceUptime
fields["system_load_average"] = metrics.SystemloadAverage
unix := time.Unix(0, p.Timestamp*1000000) unix := time.Unix(0, p.Timestamp*1000000)
if len(pointSlice) >= sysNameCount { //metricsInfo
go batchWrite(pointSlice) buildMetricsInfluxMsg(appName, ip, unix, sysNameCount, p.Health, p.Metrics)
pointSlice = make([]*client.Point, 0, batchSize)
} //health_info
point, _ := client.NewPoint("machine_info", tags, fields, unix) buildHealthInfluxMsg(appName, ip, unix, sysNameCount, p.Health.Details.Db.Details)
pointSlice = append(pointSlice, point)
} }
} }
...@@ -87,3 +117,10 @@ func inetAtoN(ip string) int64 { ...@@ -87,3 +117,10 @@ func inetAtoN(ip string) int64 {
ret.SetBytes(net.ParseIP(ip).To4()) ret.SetBytes(net.ParseIP(ip).To4())
return ret.Int64() return ret.Int64()
} }
func isOK(code string) int {
if "UP" == code {
return 1
}
return 0
}
package end_points package end_points
type ChunkMsg struct { type ChunkMsg struct {
AppName string `json:"appName"` AppName string `json:"appName"`
Ip string `json:"ip"` Ip string `json:"ip"`
EndPoints []EndPoint `json:"endPoints"` EndPoints []EndPoint `json:"endPoints"`
} }
type EndPoint struct { type EndPoint struct {
Health Health `json:"health"` Health Health `json:"health"`
Metrics MetricsInfo `json:"metrics"` Metrics MetricsInfo `json:"metrics"`
Timestamp int64 `json:"timestamp"` Timestamp int64 `json:"timestamp"`
} }
type Health struct { type Health struct {
Status Status `json:"status"` Status Status `json:"status"`
Details Detail `json:"details"` Details Detail `json:"details"`
} }
type Detail struct { type Detail struct {
DiskSpace DiskInfo `json:"diskSpace"` DiskSpace DiskInfo `json:"diskSpace"`
Redis RedisInfo `json:"redis"` Redis RedisInfo `json:"redis"`
Db interface{} `json:"db"` Db DBInfo `json:"db"`
}
type DBInfo struct {
Details map[string]DBDetail `json:"details"`
Status Status `json:"status"`
}
type DBDetail struct {
Status Status `json:"status"`
Details DBDetailInfo `json:"details"`
} }
type DBDetailInfo struct {
Database string `json:"database"`
}
/** /**
硬盘信息 硬盘信息
*/ */
type DiskInfo struct { type DiskInfo struct {
Details DiskDetail `json:"details"` Details DiskDetail `json:"details"`
Status Status `json:"status"` Status Status `json:"status"`
} }
/** /**
硬盘详情 硬盘详情
*/ */
type DiskDetail struct { type DiskDetail struct {
Total int64 `json:"total"` Total int64 `json:"total"`
Free int64 `json:"free"` Free int64 `json:"free"`
Threshold int64 `json:"threshold"` Threshold int64 `json:"threshold"`
} }
...@@ -47,115 +60,35 @@ type RedisInfo struct { ...@@ -47,115 +60,35 @@ type RedisInfo struct {
Status Status `json:"status"` Status Status `json:"status"`
} }
type Status struct { type Status struct {
Code string `json:"code"` Code string `json:"code"`
Description string `json:"description"` Description string `json:"description"`
} }
type MetricsInfo struct { type MetricsInfo struct {
Mem int `json:"mem"` Mem int `json:"mem"`
MemFree int `json:"mem.free"` MemFree int `json:"mem.free"`
Processors int `json:"processors"` Processors int `json:"processors"`
InstanceUptime int `json:"instance.uptime"` InstanceUptime int `json:"instance.uptime"`
Uptime int `json:"uptime"` Uptime int `json:"uptime"`
SystemloadAverage float64 `json:"systemload.average"` SystemloadAverage float64 `json:"systemload.average"`
HeapCommitted int `json:"heap.committed"` HeapCommitted int `json:"heap.committed"`
HeapInit int `json:"heap.init"` HeapInit int `json:"heap.init"`
HeapUsed int `json:"heap.used"` HeapUsed int `json:"heap.used"`
Heap int `json:"heap"` Heap int `json:"heap"`
NonheapCommitted int `json:"nonheap.committed"` NonheapCommitted int `json:"nonheap.committed"`
NonheapInit int `json:"nonheap.init"` NonheapInit int `json:"nonheap.init"`
NonheapUsed int `json:"nonheap.used"` NonheapUsed int `json:"nonheap.used"`
Nonheap int `json:"nonheap"` Nonheap int `json:"nonheap"`
ThreadsPeak int `json:"threads.peak"` ThreadsPeak int `json:"threads.peak"`
ThreadsDaemon int `json:"threads.daemon"` ThreadsDaemon int `json:"threads.daemon"`
ThreadsTotalStarted int `json:"threads.totalStarted"` ThreadsTotalStarted int `json:"threads.totalStarted"`
Threads int `json:"threads"` Threads int `json:"threads"`
Classes int `json:"classes"` Classes int `json:"classes"`
ClassesLoaded int `json:"classes.loaded"` ClassesLoaded int `json:"classes.loaded"`
ClassesUnloaded int `json:"classes.unloaded"` ClassesUnloaded int `json:"classes.unloaded"`
GcParnewCount int `json:"gc.parnew.count"` GcParnewCount int `json:"gc.parnew.count"`
GcParnewTime int `json:"gc.parnew.time"` GcParnewTime int `json:"gc.parnew.time"`
GcConcurrentmarksweepCount int `json:"gc.concurrentmarksweep.count"` GcConcurrentmarksweepCount int `json:"gc.concurrentmarksweep.count"`
GcConcurrentmarksweepTime int `json:"gc.concurrentmarksweep.time"` GcConcurrentmarksweepTime int `json:"gc.concurrentmarksweep.time"`
//CounterStatus200AddReduceApply int `json:"counter.status.200.addReduceApply"` }
//CounterStatus200OwnerList int `json:"counter.status.200.ownerList"`
//CounterStatus200ShowReport int `json:"counter.status.200.showReport"`
//GaugeResponseShowReduceApplyList int `json:"gauge.response.showReduceApplyList"`
//CounterStatus200ShowOwnerReduceApplyList int `json:"counter.status.200.showOwnerReduceApplyList"`
//GaugeResponseQueryPreciseCallRecordList int `json:"gauge.response.queryPreciseCallRecordList"`
//GaugeResponseQueryUserPhoneRemarkList int `json:"gauge.response.queryUserPhoneRemarkList"`
//CounterStatus200FindCreditReport int `json:"counter.status.200.findCreditReport"`
//GaugeResponseAddUserPhoneRemark int `json:"gauge.response.addUserPhoneRemark"`
//CounterStatus200DisperseCase int `json:"counter.status.200.disperseCase"`
//CounterStatus200QueryDispatcherParam int `json:"counter.status.200.queryDispatcherParam"`
//CounterStatus200CheckReduceApply int `json:"counter.status.200.checkReduceApply"`
//GaugeResponseQueryRepayOrderList int `json:"gauge.response.queryRepayOrderList"`
//GaugeResponseAddReduceApply int `json:"gauge.response.addReduceApply"`
//GaugeResponseOwnerList int `json:"gauge.response.ownerList"`
//GaugeResponsePhoneBook int `json:"gauge.response.phoneBook"`
//CounterStatus200ViewCaseDetail int `json:"counter.status.200.viewCaseDetail"`
//GaugeResponseUserInfo int `json:"gauge.response.userInfo"`
//GaugeResponseFindAlipayInfo int `json:"gauge.response.findAlipayInfo"`
//CounterStatus200MenuTree int `json:"counter.status.200.menuTree"`
//GaugeResponseCheckReduceApply int `json:"gauge.response.checkReduceApply"`
//CounterStatus200QueryPreciseCallRecordList int `json:"counter.status.200.queryPreciseCallRecordList"`
//CounterStatus200PhoneBook int `json:"counter.status.200.phoneBook"`
//GaugeResponseAutoAssignReceiveRelation int `json:"gauge.response.autoAssign.receiveRelation"`
//CounterStatus200SaveCall int `json:"counter.status.200.saveCall"`
//CounterStatus200QueryRepayOrderList int `json:"counter.status.200.queryRepayOrderList"`
//CounterStatus200AutoAssignReceiveRelation int `json:"counter.status.200.autoAssign.receiveRelation"`
//CounterStatus200RemoveCallRecord int `json:"counter.status.200.removeCallRecord"`
//GaugeResponseOrganizationList int `json:"gauge.response.organizationList"`
//CounterStatus200QueryCasePackPage int `json:"counter.status.200.queryCasePackPage"`
//GaugeResponseShowOwnerReduceApplyList int `json:"gauge.response.showOwnerReduceApplyList"`
//GaugeResponseHandleCollectionReduce int `json:"gauge.response.handleCollectionReduce"`
//CounterStatus200Logout int `json:"counter.status.200.logout"`
//CounterStatus200QueryCasePage int `json:"counter.status.200.queryCasePage"`
//GaugeResponseSelectList int `json:"gauge.response.selectList"`
//CounterStatus200HandleCollectionReduce int `json:"counter.status.200.handleCollectionReduce"`
//CounterStatus200FindAlipayInfo int `json:"counter.status.200.findAlipayInfo"`
//GaugeResponseFundingList int `json:"gauge.response.fundingList"`
//GaugeResponseTechHealthCheck int `json:"gauge.response.tech.health.check"`
//CounterStatus200Login int `json:"counter.status.200.login"`
//CounterStatus200HaveUnCheckedApply int `json:"counter.status.200.haveUnCheckedApply"`
//GaugeResponseSaveCall int `json:"gauge.response.saveCall"`
//GaugeResponseQueryDispatcherParam int `json:"gauge.response.queryDispatcherParam"`
//CounterStatus200OrganizationList int `json:"counter.status.200.organizationList"`
//GaugeResponseQueryOrganizationList int `json:"gauge.response.queryOrganizationList"`
//CounterStatus200ShowReduceApplyList int `json:"counter.status.200.showReduceApplyList"`
//CounterStatus200QueryDisperseParam int `json:"counter.status.200.queryDisperseParam"`
//CounterStatus200AgingList int `json:"counter.status.200.agingList"`
//CounterStatus200UserInfo int `json:"counter.status.200.userInfo"`
//GaugeResponseQueryUserPage int `json:"gauge.response.queryUserPage"`
//GaugeResponseDisperseCase int `json:"gauge.response.disperseCase"`
//CounterStatus200SelectList int `json:"counter.status.200.selectList"`
//GaugeResponsePackageStatus int `json:"gauge.response.packageStatus"`
//CounterStatus200AddUserPhoneRemark int `json:"counter.status.200.addUserPhoneRemark"`
//GaugeResponseShowReport int `json:"gauge.response.showReport"`
//GaugeResponseQueryCasePage int `json:"gauge.response.queryCasePage"`
//CounterStatus200QueryUserPhoneRemarkList int `json:"counter.status.200.queryUserPhoneRemarkList"`
//CounterStatus200TechHealthCheck int `json:"counter.status.200.tech.health.check"`
//GaugeResponseLogin int `json:"gauge.response.login"`
//CounterStatus200RoleList int `json:"counter.status.200.roleList"`
//GaugeResponseLogout int `json:"gauge.response.logout"`
//GaugeResponseAgingList int `json:"gauge.response.agingList"`
//GaugeResponseRoleList int `json:"gauge.response.roleList"`
//GaugeResponseViewCaseDetail int `json:"gauge.response.viewCaseDetail"`
//GaugeResponseMenuTree int `json:"gauge.response.menuTree"`
//CounterStatus200QueryUserPage int `json:"counter.status.200.queryUserPage"`
//GaugeResponseFindCreditReport int `json:"gauge.response.findCreditReport"`
//GaugeResponseHaveUnCheckedApply int `json:"gauge.response.haveUnCheckedApply"`
//GaugeResponseQueryDisperseParam int `json:"gauge.response.queryDisperseParam"`
//GaugeResponseQueryCasePackPage int `json:"gauge.response.queryCasePackPage"`
//CounterStatus200FundingList int `json:"counter.status.200.fundingList"`
//CounterStatus200PackageStatus int `json:"counter.status.200.packageStatus"`
//GaugeResponseRemoveCallRecord int `json:"gauge.response.removeCallRecord"`
//CounterStatus200QueryOrganizationList int `json:"counter.status.200.queryOrganizationList"`
HttpsessionsMax int `json:"httpsessions.max"`
HttpsessionsActive int `json:"httpsessions.active"`
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment