Merge 9a4d3bdb8e into 02705c44b2
				
					
				
			This commit is contained in:
		
						commit
						78eb1f8c0a
					
				| 
						 | 
					@ -50,6 +50,7 @@ const (
 | 
				
			||||||
	noDiagNetworkFlagName   = "no-diag-network"
 | 
						noDiagNetworkFlagName   = "no-diag-network"
 | 
				
			||||||
	diagContainerIDFlagName = "diag-container-id"
 | 
						diagContainerIDFlagName = "diag-container-id"
 | 
				
			||||||
	diagPodFlagName         = "diag-pod-id"
 | 
						diagPodFlagName         = "diag-pod-id"
 | 
				
			||||||
 | 
						diagNamespaceFlagName   = "diag-namespace-id"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	LogFieldTunnelID = "tunnelID"
 | 
						LogFieldTunnelID = "tunnelID"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -211,6 +212,11 @@ var (
 | 
				
			||||||
		Usage: "Kubernetes POD to collect logs from",
 | 
							Usage: "Kubernetes POD to collect logs from",
 | 
				
			||||||
		Value: "",
 | 
							Value: "",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						diagNamespaceFlagName = &cli.StringFlag{
 | 
				
			||||||
 | 
							Name:  diagNamespaceFlagName,
 | 
				
			||||||
 | 
							Usage: "Kubernetes Namespace to collect logs from",
 | 
				
			||||||
 | 
							Value: "",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	noDiagLogsFlag = &cli.BoolFlag{
 | 
						noDiagLogsFlag = &cli.BoolFlag{
 | 
				
			||||||
		Name:  noDiagLogsFlagName,
 | 
							Name:  noDiagLogsFlagName,
 | 
				
			||||||
		Usage: "Log collection will not be performed",
 | 
							Usage: "Log collection will not be performed",
 | 
				
			||||||
| 
						 | 
					@ -1099,6 +1105,7 @@ func diagCommand(ctx *cli.Context) error {
 | 
				
			||||||
		Address:        sctx.c.String(flags.Metrics),
 | 
							Address:        sctx.c.String(flags.Metrics),
 | 
				
			||||||
		ContainerID:    sctx.c.String(diagContainerIDFlagName),
 | 
							ContainerID:    sctx.c.String(diagContainerIDFlagName),
 | 
				
			||||||
		PodID:          sctx.c.String(diagPodFlagName),
 | 
							PodID:          sctx.c.String(diagPodFlagName),
 | 
				
			||||||
 | 
							NamespaceID:    sctx.c.String(diagNamespaceFlagName),
 | 
				
			||||||
		Toggles: diagnostic.Toggles{
 | 
							Toggles: diagnostic.Toggles{
 | 
				
			||||||
			NoDiagLogs:    sctx.c.Bool(noDiagLogsFlagName),
 | 
								NoDiagLogs:    sctx.c.Bool(noDiagLogsFlagName),
 | 
				
			||||||
			NoDiagMetrics: sctx.c.Bool(noDiagMetricsFlagName),
 | 
								NoDiagMetrics: sctx.c.Bool(noDiagMetricsFlagName),
 | 
				
			||||||
| 
						 | 
					@ -1130,7 +1137,7 @@ func diagCommand(ctx *cli.Context) error {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if errors.Is(err, diagnostic.ErrLogConfigurationIsInvalid) {
 | 
						if errors.Is(err, diagnostic.ErrLogConfigurationIsInvalid) {
 | 
				
			||||||
		log.Info().Msg("Couldn't extract logs from the instance. If the instance is running in a containerized environment use the option --diag-container-id or --diag-pod-id. If there is no logging configuration use --no-diag-logs.")
 | 
							log.Info().Msg("Couldn't extract logs from the instance. If the instance is running in a containerized environment use the option --diag-container-id, --diag-pod-id or --diag-namespace-id. If there is no logging configuration use --no-diag-logs.")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,17 +92,18 @@ type Options struct {
 | 
				
			||||||
	Address        string
 | 
						Address        string
 | 
				
			||||||
	ContainerID    string
 | 
						ContainerID    string
 | 
				
			||||||
	PodID          string
 | 
						PodID          string
 | 
				
			||||||
 | 
						NamespaceID    string   `default: "default"`
 | 
				
			||||||
	Toggles        Toggles
 | 
						Toggles        Toggles
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func collectLogs(
 | 
					func collectLogs(
 | 
				
			||||||
	ctx context.Context,
 | 
						ctx context.Context,
 | 
				
			||||||
	client HTTPClient,
 | 
						client HTTPClient,
 | 
				
			||||||
	diagContainer, diagPod string,
 | 
						diagContainer, diagPod string, diagNamespace string
 | 
				
			||||||
) (string, error) {
 | 
					) (string, error) {
 | 
				
			||||||
	var collector LogCollector
 | 
						var collector LogCollector
 | 
				
			||||||
	if diagPod != "" {
 | 
						if diagPod != "" {
 | 
				
			||||||
		collector = NewKubernetesLogCollector(diagContainer, diagPod)
 | 
							collector = NewKubernetesLogCollector(diagContainer, diagPod, diagNamespace)
 | 
				
			||||||
	} else if diagContainer != "" {
 | 
						} else if diagContainer != "" {
 | 
				
			||||||
		collector = NewDockerLogCollector(diagContainer)
 | 
							collector = NewDockerLogCollector(diagContainer)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					@ -370,6 +371,7 @@ func createJobs(
 | 
				
			||||||
	tunnel *TunnelState,
 | 
						tunnel *TunnelState,
 | 
				
			||||||
	diagContainer string,
 | 
						diagContainer string,
 | 
				
			||||||
	diagPod string,
 | 
						diagPod string,
 | 
				
			||||||
 | 
						diagNamespace string,
 | 
				
			||||||
	noDiagSystem bool,
 | 
						noDiagSystem bool,
 | 
				
			||||||
	noDiagRuntime bool,
 | 
						noDiagRuntime bool,
 | 
				
			||||||
	noDiagMetrics bool,
 | 
						noDiagMetrics bool,
 | 
				
			||||||
| 
						 | 
					@ -406,7 +408,7 @@ func createJobs(
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			jobName: logInformationJobName,
 | 
								jobName: logInformationJobName,
 | 
				
			||||||
			fn: func(ctx context.Context) (string, error) {
 | 
								fn: func(ctx context.Context) (string, error) {
 | 
				
			||||||
				return collectLogs(ctx, client, diagContainer, diagPod)
 | 
									return collectLogs(ctx, client, diagContainer, diagPod, diagNamespace)
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			bypass: noDiagLogs,
 | 
								bypass: noDiagLogs,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					@ -524,6 +526,7 @@ func RunDiagnostic(
 | 
				
			||||||
		tunnel,
 | 
							tunnel,
 | 
				
			||||||
		options.ContainerID,
 | 
							options.ContainerID,
 | 
				
			||||||
		options.PodID,
 | 
							options.PodID,
 | 
				
			||||||
 | 
							options.NamespaceID,
 | 
				
			||||||
		options.Toggles.NoDiagSystem,
 | 
							options.Toggles.NoDiagSystem,
 | 
				
			||||||
		options.Toggles.NoDiagRuntime,
 | 
							options.Toggles.NoDiagRuntime,
 | 
				
			||||||
		options.Toggles.NoDiagMetrics,
 | 
							options.Toggles.NoDiagMetrics,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,12 +12,20 @@ import (
 | 
				
			||||||
type KubernetesLogCollector struct {
 | 
					type KubernetesLogCollector struct {
 | 
				
			||||||
	containerID string // This member identifies the container by identifier or name
 | 
						containerID string // This member identifies the container by identifier or name
 | 
				
			||||||
	pod         string // This member identifies the pod where the container is deployed
 | 
						pod         string // This member identifies the pod where the container is deployed
 | 
				
			||||||
 | 
						namespace   string // This member identifies the namespace where the pod is deployed
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewKubernetesLogCollector(containerID, pod string) *KubernetesLogCollector {
 | 
					func NewKubernetesLogCollector(containerID, pod string, namespace ...string) *KubernetesLogCollector {
 | 
				
			||||||
 | 
					    ns := "default"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(namespace) > 0 && namespace[0] != "" {
 | 
				
			||||||
 | 
							ns = namespace[0]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &KubernetesLogCollector{
 | 
						return &KubernetesLogCollector{
 | 
				
			||||||
		containerID,
 | 
							containerID: containerID,
 | 
				
			||||||
		pod,
 | 
							pod:         pod,
 | 
				
			||||||
 | 
							namespace:   ns
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +46,8 @@ func (collector *KubernetesLogCollector) Collect(ctx context.Context) (*LogInfor
 | 
				
			||||||
			ctx,
 | 
								ctx,
 | 
				
			||||||
			"kubectl",
 | 
								"kubectl",
 | 
				
			||||||
			"logs",
 | 
								"logs",
 | 
				
			||||||
 | 
								"-n",
 | 
				
			||||||
 | 
								collector.namespace,
 | 
				
			||||||
			collector.pod,
 | 
								collector.pod,
 | 
				
			||||||
			"--since-time",
 | 
								"--since-time",
 | 
				
			||||||
			since,
 | 
								since,
 | 
				
			||||||
| 
						 | 
					@ -51,6 +61,8 @@ func (collector *KubernetesLogCollector) Collect(ctx context.Context) (*LogInfor
 | 
				
			||||||
			ctx,
 | 
								ctx,
 | 
				
			||||||
			"kubectl",
 | 
								"kubectl",
 | 
				
			||||||
			"logs",
 | 
								"logs",
 | 
				
			||||||
 | 
								"-n",
 | 
				
			||||||
 | 
								collector.namespace,
 | 
				
			||||||
			collector.pod,
 | 
								collector.pod,
 | 
				
			||||||
			"--since-time",
 | 
								"--since-time",
 | 
				
			||||||
			since,
 | 
								since,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue