SQL Clone
SQLServerCentral is supported by Redgate
Log in  ::  Register  ::  Not logged in

Setting up Telegraf to Startup on Windows


I’ve noticed on demo machines that sometimes Telegraf doesn’t start on the first try, and this seems to not happen on most of my production servers, but they have a lot more memory and CPU power. So I figured I would write a quick blog post and provide a way to set up a way to get the service to start when the machine is rebooted. This is a known issue that a user has offered a bounty to get it fixed so if you know some Go and have time, please check out the issue on Github.


The solution is relatively simple. I’ve created a PowerShell script to run in a loop to start the service (it usually starts on the second try) and sleeps for 90 seconds between attempts. I’ve edited the Install-Telegraf.ps1 file provided in the presentation Collecting Performance Metrics to auto-create a folder to hold the script that will autostart the job and create a Start-Telegraf.ps1 file to run when the server starts up to loop until the service starts.  NOTE: The script below assumes you will be copying files from a network location to your servers, you will need to make some adjustments if that is not how you install it.

$servers = @(
	'server1', 'server2'
$servers | % {
	Write-Host "$($_)..."
	Write-Host "..Create folders and copy files..."

	New-Item -Path "\\$($_)\c$\Program Files\telegraf" -ItemType Directory -Force
	New-Item -Path "\\$($_)\c$\DBOps" -ItemType Directory -Force
	Copy-Item -Path "\\server\telegraf\telegraf.*" -Destination "\\$($_)\c$\Program Files\telegraf\" -Force
	Copy-Item -Path "\\server\telegraf\Start-Telegraf.ps1" -Destination "\\$($_)\c$\DBops\Start-Telegraf.ps1" -Force

	Invoke-Command -ComputerName $_ -ScriptBlock {
		Write-Host '..Install service...'
		Stop-Service -Name telegraf -ErrorAction SilentlyContinue
		& "c:\program files\telegraf\telegraf.exe" --service install -config "c:\program files\telegraf\telegraf.conf"
		SC.EXE Config telegraf Start=Delayed-Auto
		Start-Service -Name telegraf
		Start-Sleep 90
		# Make sure it starts
		$service = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -eq "telegraf"}
		While($service.count -eq 0) {
    			Start-Service -Name "telegraf"
    			Start-Sleep 90
    			$service = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -eq "telegraf"}

		Write-Host '..Setup job to mark sure it autostarts...'
		#Create job to start job on startup
		$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
		Register-ScheduledJob -Trigger $trigger -FilePath C:\DBOps\Start-Telegraf.ps1 -Name Start-Telegraf

$service = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -eq "telegraf"}
while ($service.count -eq 0) {
    Start-Service -Name "telegraf"
    start-sleep 90
    $service = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -eq "telegraf"}

The developers of Telegraf are looking into this issue on Windows, but until it is identified, I needed a way to make sure my demo machines would start the service without me having to do it manually.

Database Superhero’s Blog

Tracy is the Database Superhero for ChannelAdvisor. She has spent over 20 years in IT and has used SQL Server since 1999. Tracy covers all aspects of administration and deals heavily with performance tuning and high availability and disaster recovery. Tracy is a co-organizer of a Special Interest Group (SIG) dedicated to advanced DBA topics in our local user group TriPass. She is also the founder of http://WeSpeakLinux.com. Before she worked full-time as a DBA she was formally a developer and network administrator. She also tinkered with databases in middle/high school to keep her sports card collection organized.


Leave a comment on the original post [tracyboggiano.com, opens in a new window]

Loading comments...