You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.4 KiB
106 lines
3.4 KiB
package service
|
|
|
|
import (
|
|
"fmt"
|
|
"rition-probe/client"
|
|
"time"
|
|
)
|
|
|
|
func (s *Service) Run() {
|
|
ticker := time.NewTicker(s.config.ReportInterval)
|
|
defer ticker.Stop()
|
|
|
|
for range ticker.C {
|
|
s.Report()
|
|
}
|
|
}
|
|
|
|
func (s *Service) Report() {
|
|
dataItems := make([]client.DataItem, 0)
|
|
nowTime := time.Now()
|
|
now := nowTime.UnixMilli()
|
|
|
|
// cpu
|
|
_5minCPULoad := s.prevCpuLoadData
|
|
if nowTime.Sub(s.prevCpuLoadDataCollectTime).Minutes() >= 5 {
|
|
_5minCPULoad = s.probe.CurrentCPUTotalPercent()
|
|
}
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_load5",
|
|
Value: _5minCPULoad,
|
|
Timestamp: now,
|
|
})
|
|
|
|
sysUptime := s.probe.HostUptime()
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_cpu_seconds_total",
|
|
Value: sysUptime,
|
|
Timestamp: now,
|
|
})
|
|
|
|
// mem
|
|
memTotal, memUsed, memBuffers, memCached := s.probe.RamUsage()
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_memory_MemTotal_bytes", Value: memTotal, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_memory_MemFree_bytes", Value: memTotal - memUsed, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_memory_Buffers_bytes", Value: memBuffers, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_memory_Cached_bytes", Value: memCached, Timestamp: now,
|
|
})
|
|
|
|
// disk
|
|
usageStat, diskIoCount := s.probe.DiskStatus(s.config.MonitorDiskMountPoint, s.config.MonitorDiskDevice)
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_filesystem_avail_bytes", Value: usageStat.Free, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_filesystem_size_bytes", Value: usageStat.Total, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_filesystem_free_bytes", Value: usageStat.Free, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_disk_read_bytes_total", Value: diskIoCount.ReadBytes, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_disk_written_bytes_total", Value: diskIoCount.WriteBytes, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_disk_reads_completed_total", Value: diskIoCount.MergedWriteCount, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_disk_writes_completed_total", Value: diskIoCount.MergedWriteCount, Timestamp: now,
|
|
})
|
|
|
|
// network
|
|
networkIoCount, conns := s.probe.GetNetworkCounterOne(s.config.MonitorNetworkInterface)
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_network_receive_bytes_total", Value: networkIoCount.BytesRecv, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_network_transmit_bytes_total", Value: networkIoCount.BytesSent, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_network_receive_packets_total", Value: networkIoCount.PacketsRecv, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_network_transmit_packets_total", Value: networkIoCount.PacketsSent, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_network_receive_drop_total", Value: networkIoCount.Dropin, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_network_transmit_drop_total", Value: networkIoCount.Dropout, Timestamp: now,
|
|
})
|
|
|
|
estabCnt, twCnt := 0, 0
|
|
for _, conn := range conns {
|
|
switch conn.Status {
|
|
case "ESTABLISHED":
|
|
estabCnt++
|
|
case "TIME_WAIT":
|
|
twCnt++
|
|
}
|
|
}
|
|
dataItems = append(dataItems, client.DataItem{
|
|
Metric: "node_netstat_Tcp_CurrEstab", Value: estabCnt, Timestamp: now,
|
|
}, client.DataItem{
|
|
Metric: "node_netstat_Tcp_tw", Value: twCnt, Timestamp: now,
|
|
})
|
|
|
|
_, err := s.client.Report(dataItems)
|
|
if err != nil {
|
|
fmt.Println("err: ", err.Error())
|
|
}
|
|
}
|
|
|