func StartTelegraf()

in otelcollector/shared/helpers.go [92:182]


func StartTelegraf() {
	fmt.Println("Starting Telegraf")

	if telemetryDisabled := os.Getenv("TELEMETRY_DISABLED"); telemetryDisabled != "true" {
		if os.Getenv("OS_TYPE") == "linux" {
			controllerType := os.Getenv("CONTROLLER_TYPE")
			azmonOperatorEnabled := os.Getenv("AZMON_OPERATOR_ENABLED")

			var telegrafConfig string

			switch {
			case controllerType == "ReplicaSet" && azmonOperatorEnabled == "true":
				telegrafConfig = "/opt/telegraf/telegraf-prometheus-collector-ta-enabled.conf"
			case controllerType == "ReplicaSet":
				telegrafConfig = "/opt/telegraf/telegraf-prometheus-collector.conf"
			default:
				telegrafConfig = "/opt/telegraf/telegraf-prometheus-collector-ds.conf"
			}

			telegrafCmd := exec.Command("/usr/bin/telegraf", "--config", telegrafConfig)
			telegrafCmd.Stdout = os.Stdout
			telegrafCmd.Stderr = os.Stderr
			if err := telegrafCmd.Start(); err != nil {
				fmt.Println("Error starting telegraf:", err)
				return
			}

			telegrafVersion, _ := os.ReadFile("/opt/telegrafversion.txt")
			fmt.Printf("TELEGRAF_VERSION=%s\n", string(telegrafVersion))
		}
	} else {
		telegrafPath := "C:\\opt\\telegraf\\telegraf.exe"
		configPath := "C:\\opt\\telegraf\\telegraf-prometheus-collector-windows.conf"

		// Install Telegraf service
		installCmd := exec.Command(telegrafPath, "--service", "install", "--config", configPath)
		if err := installCmd.Run(); err != nil {
			log.Fatalf("Error installing Telegraf service: %v\n", err)
		}

		// Set delayed start if POD_NAME is set
		serverName := os.Getenv("POD_NAME")
		if serverName != "" {
			setDelayCmd := exec.Command("sc.exe", fmt.Sprintf("\\\\%s", serverName), "config", "telegraf", "start= delayed-auto")
			if err := setDelayCmd.Run(); err != nil {
				log.Printf("Failed to set delayed start for Telegraf: %v\n", err)
			} else {
				fmt.Println("Successfully set delayed start for Telegraf")
			}
		} else {
			fmt.Println("Failed to get environment variable POD_NAME to set delayed Telegraf start")
		}

		// Run Telegraf in test mode
		testCmd := exec.Command(telegrafPath, "--config", configPath, "--test")
		testCmd.Stdout = os.Stdout
		testCmd.Stderr = os.Stderr
		if err := testCmd.Run(); err != nil {
			log.Printf("Error running Telegraf in test mode: %v\n", err)
		}

		// Start Telegraf service
		startCmd := exec.Command(telegrafPath, "--service", "start")
		if err := startCmd.Run(); err != nil {
			log.Printf("Error starting Telegraf service: %v\n", err)
		}

		// Check if Telegraf is running, retry if necessary
		for {
			statusCmd := exec.Command("sc.exe", "query", "telegraf")
			output, err := statusCmd.CombinedOutput()
			if err != nil {
				log.Printf("Error checking Telegraf service status: %v\n", err)
				time.Sleep(30 * time.Second)
				continue
			}

			if string(output) != "" {
				fmt.Println("Telegraf is running")
				break
			}

			fmt.Println("Trying to start Telegraf again in 30 seconds, since it might not have been ready...")
			time.Sleep(30 * time.Second)
			startCmd := exec.Command(telegrafPath, "--service", "start")
			if err := startCmd.Run(); err != nil {
				log.Printf("Error starting Telegraf service again: %v\n", err)
			}
		}
	}
}