From 8bf7747f5d8cf5d783e759b83d2a13a4074ea22d Mon Sep 17 00:00:00 2001 From: Sophie Zhao Date: Wed, 19 May 2021 15:26:10 -0400 Subject: [PATCH] add local exporter --- cmd/aks-periscope/aks-periscope.go | 141 +++++++++++++++-------------- 1 file changed, 75 insertions(+), 66 deletions(-) diff --git a/cmd/aks-periscope/aks-periscope.go b/cmd/aks-periscope/aks-periscope.go index aa36bb39..f0e3b7da 100644 --- a/cmd/aks-periscope/aks-periscope.go +++ b/cmd/aks-periscope/aks-periscope.go @@ -2,6 +2,7 @@ package main import ( "log" + "os" "strings" "sync" @@ -14,83 +15,91 @@ import ( func main() { zipAndExportMode := true - exporter := &exporter.AzureBlobExporter{} + exporters := []interfaces.Exporter{} + clusterType := os.Getenv("CLUSTER_TYPE") + + exporters = append(exporters, &exporter.AzureBlobExporter{}) + if strings.EqualFold(clusterType, "connectedCluster") { + exporters = append(exporters, &exporter.LocalMachineExporter{}) + } + var waitgroup sync.WaitGroup err := utils.CreateCRD() if err != nil { log.Printf("Failed to create CRD: %+v", err) } + for _, exporter := range exporters { + collectors := []interfaces.Collector{} + containerLogsCollector := collector.NewContainerLogsCollector(exporter) + collectors = append(collectors, containerLogsCollector) + systemLogsCollector := collector.NewSystemLogsCollector(exporter) + collectors = append(collectors, systemLogsCollector) + networkOutboundCollector := collector.NewNetworkOutboundCollector(5, exporter) + collectors = append(collectors, networkOutboundCollector) + ipTablesCollector := collector.NewIPTablesCollector(exporter) + collectors = append(collectors, ipTablesCollector) + nodeLogsCollector := collector.NewNodeLogsCollector(exporter) + collectors = append(collectors, nodeLogsCollector) + dnsCollector := collector.NewDNSCollector(exporter) + collectors = append(collectors, dnsCollector) + kubeObjectsCollector := collector.NewKubeObjectsCollector(exporter) + collectors = append(collectors, kubeObjectsCollector) + kubeletCmdCollector := collector.NewKubeletCmdCollector(exporter) + collectors = append(collectors, kubeletCmdCollector) + systemPerfCollector := collector.NewSystemPerfCollector(exporter) + collectors = append(collectors, systemPerfCollector) + + for _, c := range collectors { + waitgroup.Add(1) + go func(c interfaces.Collector) { + log.Printf("Collector: %s, collect data\n", c.GetName()) + err := c.Collect() + if err != nil { + log.Printf("Collector: %s, collect data failed: %+v\n", c.GetName(), err) + } + + log.Printf("Collector: %s, export data\n", c.GetName()) + err = c.Export() + if err != nil { + log.Printf("Collector: %s, export data failed: %+v\n", c.GetName(), err) + } + waitgroup.Done() + }(c) + } - collectors := []interfaces.Collector{} - containerLogsCollector := collector.NewContainerLogsCollector(exporter) - collectors = append(collectors, containerLogsCollector) - systemLogsCollector := collector.NewSystemLogsCollector(exporter) - collectors = append(collectors, systemLogsCollector) - networkOutboundCollector := collector.NewNetworkOutboundCollector(5, exporter) - collectors = append(collectors, networkOutboundCollector) - ipTablesCollector := collector.NewIPTablesCollector(exporter) - collectors = append(collectors, ipTablesCollector) - nodeLogsCollector := collector.NewNodeLogsCollector(exporter) - collectors = append(collectors, nodeLogsCollector) - dnsCollector := collector.NewDNSCollector(exporter) - collectors = append(collectors, dnsCollector) - kubeObjectsCollector := collector.NewKubeObjectsCollector(exporter) - collectors = append(collectors, kubeObjectsCollector) - kubeletCmdCollector := collector.NewKubeletCmdCollector(exporter) - collectors = append(collectors, kubeletCmdCollector) - systemPerfCollector := collector.NewSystemPerfCollector(exporter) - collectors = append(collectors, systemPerfCollector) - - for _, c := range collectors { - waitgroup.Add(1) - go func(c interfaces.Collector) { - log.Printf("Collector: %s, collect data\n", c.GetName()) - err := c.Collect() - if err != nil { - log.Printf("Collector: %s, collect data failed: %+v\n", c.GetName(), err) - } - - log.Printf("Collector: %s, export data\n", c.GetName()) - err = c.Export() - if err != nil { - log.Printf("Collector: %s, export data failed: %+v\n", c.GetName(), err) - } - waitgroup.Done() - }(c) - } - - waitgroup.Wait() + waitgroup.Wait() + + diagnosers := []interfaces.Diagnoser{} + diagnosers = append(diagnosers, diagnoser.NewNetworkConfigDiagnoser(dnsCollector, kubeletCmdCollector, exporter)) + diagnosers = append(diagnosers, diagnoser.NewNetworkOutboundDiagnoser(networkOutboundCollector, exporter)) + + for _, d := range diagnosers { + waitgroup.Add(1) + go func(d interfaces.Diagnoser) { + log.Printf("Diagnoser: %s, diagnose data\n", d.GetName()) + err := d.Diagnose() + if err != nil { + log.Printf("Diagnoser: %s, diagnose data failed: %+v\n", d.GetName(), err) + } + + log.Printf("Diagnoser: %s, export data\n", d.GetName()) + err = d.Export() + if err != nil { + log.Printf("Diagnoser: %s, export data failed: %+v\n", d.GetName(), err) + } + waitgroup.Done() + }(d) + } - diagnosers := []interfaces.Diagnoser{} - diagnosers = append(diagnosers, diagnoser.NewNetworkConfigDiagnoser(dnsCollector, kubeletCmdCollector, exporter)) - diagnosers = append(diagnosers, diagnoser.NewNetworkOutboundDiagnoser(networkOutboundCollector, exporter)) + waitgroup.Wait() - for _, d := range diagnosers { - waitgroup.Add(1) - go func(d interfaces.Diagnoser) { - log.Printf("Diagnoser: %s, diagnose data\n", d.GetName()) - err := d.Diagnose() + if zipAndExportMode { + log.Print("Zip and export result files") + err := zipAndExport(exporter) if err != nil { - log.Printf("Diagnoser: %s, diagnose data failed: %+v\n", d.GetName(), err) + log.Printf("Failed to zip and export result files: %+v", err) } - - log.Printf("Diagnoser: %s, export data\n", d.GetName()) - err = d.Export() - if err != nil { - log.Printf("Diagnoser: %s, export data failed: %+v\n", d.GetName(), err) - } - waitgroup.Done() - }(d) - } - - waitgroup.Wait() - - if zipAndExportMode { - log.Print("Zip and export result files") - err := zipAndExport(exporter) - if err != nil { - log.Printf("Failed to zip and export result files: %+v", err) } }