chore: add system metrics
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/client"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/commander"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/config"
|
||||
agentmetrics "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/metrics"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/logger"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/logsource"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/agent/internal/logsource/docker"
|
||||
@@ -120,6 +121,11 @@ func main() {
|
||||
})
|
||||
}
|
||||
|
||||
// Start system metrics reporting
|
||||
wg.Go(func() error {
|
||||
return reportSystemMetrics(ctx, grpcAddr, creds, cfg.Label, lgr)
|
||||
})
|
||||
|
||||
// Start log collectors
|
||||
if len(cfg.Services) > 0 {
|
||||
wg.Go(func() error {
|
||||
@@ -370,3 +376,59 @@ func reportServices(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// reportSystemMetrics periodically collects and sends system metrics to the backend via gRPC.
|
||||
func reportSystemMetrics(
|
||||
ctx context.Context,
|
||||
grpcAddr string,
|
||||
creds credentials.TransportCredentials,
|
||||
label string,
|
||||
lgr *logger.Logger,
|
||||
) error {
|
||||
conn, err := grpc.NewClient(grpcAddr, grpc.WithTransportCredentials(creds))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to connect for metrics report: %w", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
ccli := proto.NewCollectorClient(conn)
|
||||
collector := agentmetrics.NewCollector()
|
||||
ticker := time.NewTicker(5 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
lgr.Info("System metrics collector started")
|
||||
|
||||
for {
|
||||
metrics, err := collector.Collect()
|
||||
if err != nil {
|
||||
lgr.Warn("Failed to collect system metrics", "err", err)
|
||||
} else {
|
||||
md := metadata.New(map[string]string{"whoami": label})
|
||||
_, err := ccli.ReportSystemMetrics(
|
||||
metadata.NewOutgoingContext(ctx, md),
|
||||
&proto.SystemMetrics{
|
||||
CpuPercent: metrics.CPUPercent,
|
||||
MemoryPercent: metrics.MemoryPercent,
|
||||
DiskPercent: metrics.DiskPercent,
|
||||
NetworkRxBytes: metrics.NetworkRxBytes,
|
||||
NetworkTxBytes: metrics.NetworkTxBytes,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
lgr.Warn("Failed to report system metrics", "err", err)
|
||||
} else {
|
||||
lgr.Debug("System metrics reported",
|
||||
"cpu", metrics.CPUPercent,
|
||||
"mem", metrics.MemoryPercent,
|
||||
"disk", metrics.DiskPercent,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-ticker.C:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user