Network Performance Monitoring is now generally available! Network Monitoring is now available!

Jenkins

A Jenkins plugin for automatically forwarding metrics, events, and service checks to a Datadog account.

Note: The Jenkins CI plugin page for this plugin references this documentation.

Setup

Installation

This plugin requires Jenkins 1.580.1 or newer.

This plugin can be installed from the Update Center (found at Manage Jenkins -> Manage Plugins) in your Jenkins installation:

  1. Select the Available tab, search for Datadog, and select the checkbox next to Datadog Plugin.
  2. Install the plugin by using one of the two install buttons at the bottom of the screen.
  3. To verify the plugin is installed, search for Datadog Plugin on the Installed tab. After the plugin is installed successfully, continue to the configuration section below.

Note: If you see an unexpected version of the Datadog Plugin, run Check Now from the Manage Jenkins -> Manage Plugins screen.

Configuration

You can use two ways to configure your plugin to submit data to Datadog:

  • Sending the data directly to Datadog through HTTP.
  • Using a DogStatsD server that acts as a forwarder between Jenkins and Datadog.

The configuration can be done from the plugin user interface with a Groovy script, or through environment variables.

Plugin user interface

To configure your Datadog Plugin, navigate to the Manage Jenkins -> Configure System page on your Jenkins installation. Once there, scroll down to find the Datadog Plugin section:

HTTP forwarding
  1. Select the radio button next to Use Datadog API URL and Key to report to Datadog (selected by default).
  2. Use your Datadog API key in the API Key textbox on the Jenkins configuration screen.
  3. Test your Datadog API key by using the Test Key button on the Jenkins configuration screen directly below the API key textbox.
  4. Save your configuration.
DogStatsD forwarding
  1. Select the radio button next to Use a DogStatsD Server to report to Datadog.
  2. Specify your DogStatsD server hostname and port.
  3. Save your configuration.

Groovy script

Configure your Datadog plugin to forward data through HTTP or DogStatsD using the Groovy scripts below. Configuring the plugin this way might be useful if you’re running your Jenkins Master in a Docker container using the official Jenkins Docker image or any derivative that supports plugins.txt and Groovy init scripts.

HTTP forwarding
import jenkins.model.*
import org.datadog.jenkins.plugins.datadog.DatadogGlobalConfiguration

def j = Jenkins.getInstance()
def d = j.getDescriptor("org.datadog.jenkins.plugins.datadog.DatadogGlobalConfiguration")

// If you want to use Datadog API URL and Key to report to Datadog
d.setReportWith('HTTP')
d.setTargetApiURL('https://api.datadoghq.com/api/')
d.setTargetApiKey('<DATADOG_API_KEY>')

// Customization, see dedicated section below
d.setBlacklist('job1,job2')

// Save config
d.save()
DogStatsD forwarding
import jenkins.model.*
import org.datadog.jenkins.plugins.datadog.DatadogGlobalConfiguration

def j = Jenkins.getInstance()
def d = j.getDescriptor("org.datadog.jenkins.plugins.datadog.DatadogGlobalConfiguration")

d.setReportWith('DSD')
d.setTargetHost('localhost')
d.setTargetPort(8125)

// Customization, see dedicated section below
d.setBlacklist('job1,job2')

// Save config
d.save()

Environment variables

Configure your Datadog plugin using environment variables with the DATADOG_JENKINS_PLUGIN_REPORT_WITH variable, which specifies the report mechanism to use.

HTTP forwarding
  1. Set the DATADOG_JENKINS_PLUGIN_REPORT_WITH variable to HTTP.
  2. Set the DATADOG_JENKINS_PLUGIN_TARGET_API_URL variable, which specifies the Datadog API endpoint (defaults https://api.datadoghq.com/api/).
  3. Set the DATADOG_JENKINS_PLUGIN_TARGET_API_KEY variable, which specifies your Datadog API key.
DogStatsD forwarding
  1. Set the DATADOG_JENKINS_PLUGIN_REPORT_WITH variable to DSD.
  2. Set the DATADOG_JENKINS_PLUGIN_TARGET_HOST variable, which specifies the DogStatsD server host (defaults to localhost).
  3. Set the DATADOG_JENKINS_PLUGIN_TARGET_PORT variable, which specifies the DogStatsD server port (defaults to 8125).

Logging

Logging is done by utilizing the java.util.Logger, which follows the best logging practices for Jenkins. To obtain logs, follow the directions in the Jenkins logging documentation. When adding a logger, all Datadog plugin functions start with org.datadog.jenkins.plugins.datadog. and the function name you are after should autopopulate. As of this writing, the only function available was org.datadog.jenkins.plugins.datadog.listeners.DatadogBuildListener.

Customization

Global customization

From the global configuration page, at Manage Jenkins -> Configure System you can customize your configuration with:

CustomizationDescriptionEnvironment variable
Blacklisted jobsA comma-separated list of regex used to exclude job names from monitoring, for example: susans-job,johns-.*,prod_folder/prod_release.DATADOG_JENKINS_PLUGIN_BLACKLIST
Whitelisted jobsA comma-separated list of regex used to include job names for monitoring, for example: susans-job,johns-.*,prod_folder/prod_release.DATADOG_JENKINS_PLUGIN_WHITELIST
Global tag fileThe path to a workspace file containing a comma separated list of tags (not compatible with pipeline jobs).DATADOG_JENKINS_PLUGIN_GLOBAL_TAG_FILE
Global tagsA comma-separated list of tags to apply to all metrics, events, and service checks.DATADOG_JENKINS_PLUGIN_GLOBAL_TAGS
Global job tagsA comma separated list of regex to match a job and a list of tags to apply to that job. Note: Tags can reference match groups in the regex using the $ symbol, for example: (.*?)_job_(*?)_release, owner:$1, release_env:$2, optional:Tag3DATADOG_JENKINS_PLUGIN_GLOBAL_JOB_TAGS
Send security audit eventsSubmits the Security Events Type of events and metrics (enabled by default).DATADOG_JENKINS_PLUGIN_EMIT_SECURITY_EVENTS
Send system eventsSubmits the System Events Type of events and metrics (enabled by default).DATADOG_JENKINS_PLUGIN_EMIT_SYSTEM_EVENTS

Job customization

From a job specific configuration page:

CustomizationDescription
Custom tagsSet from a File in the job workspace (not compatible with pipeline jobs) or as text Properties directly from the configuration page. If set, this overrides the Global Job Tags configuration.
Send source control management eventsSubmits the Source Control Management Events Type of events and metrics (enabled by default).

Data collected

This plugin is collecting the following events, metrics, and service checks:

Events

Default events type

Event nameTriggered onDefault tagsAssociated RATE metric
Build startedRunListener#onStartedjob, node, branchjenkins.job.started
Build abortedRunListener#onDeletedjob, node, branchjenkins.job.aborted
Build completedRunListener#onCompletedjob, node, branch, result (Git branch, SVN revision, or CVS branch)jenkins.job.completed

Source control management events type

Event nameTriggered onDefault tagsAssociated RATE metric
SCM checkoutSCMListener#onCheckoutjob, node, branchjenkins.scm.checkout

Systems events type

Event nameTriggered onAssociated RATE metric
Computer OnlineComputerListener#onOnlinejenkins.computer.online
Computer OfflineComputerListener#onOfflinejenkins.computer.online
Computer TemporarilyOnlineComputerListener#onTemporarilyOnlinejenkins.computer.temporarily_online
Computer TemporarilyOfflineComputerListener#onTemporarilyOfflinejenkins.computer.temporarily_offline
Computer LaunchFailureComputerListener#onLaunchFailurejenkins.computer.launch_failure
Item CreatedItemListener#onCreatedjenkins.item.created
Item DeletedItemListener#onDeletedjenkins.item.deleted
Item UpdatedItemListener#onUpdatedjenkins.item.updated
Item CopiedItemListener#onCopiedjenkins.item.copied
ItemListener LocationChangedItemListener#onLocationChangedjenkins.item.location_changed
Config ChangedSaveableListener#onChangejenkins.config.changed

Security events type

Event nameTriggered onAssociated RATE metric
User AuthenticatedSecurityListener#authenticatedjenkins.user.authenticated
User failed To AuthenticateSecurityListener#failedToAuthenticatejenkins.user.access_denied
User loggedOutSecurityListener#loggedOutjenkins.user.logout

Metrics

Metric NameDescriptionDefault Tags
jenkins.computer.launch_failureRate of computer launch failures.
jenkins.computer.offlineRate of computer going offline.
jenkins.computer.onlineRate of computer going online.
jenkins.computer.temporarily_offlineRate of computer going temporarily offline.
jenkins.computer.temporarily_onlineRate of computer going temporarily online.
jenkins.config.changedRate of configs being changed.
jenkins.executor.countExecutor count.node_hostname, node_name, node_label
jenkins.executor.freeNumber of unused executor.node_hostname, node_name, node_label
jenkins.executor.in_useNumber of idle executor.node_hostname, node_name, node_label
jenkins.item.copiedRate of items being copied.
jenkins.item.createdRate of items being created.
jenkins.item.deletedRate of items being deleted.
jenkins.item.location_changedRate of items being moved.
jenkins.item.updatedRate of items being updated.
jenkins.job.abortedRate of aborted jobs.branch, job, node
jenkins.job.completedRate of completed jobs.branch, job, node, result
jenkins.job.cycletimeBuild Cycle Time.branch, job, node, result
jenkins.job.durationBuild duration (in seconds).branch, job, node, result
jenkins.job.feedbacktimeFeedback time from code commit to job failure.branch, job, node, result
jenkins.job.leadtimeBuild Lead Time.branch, job, node, result
jenkins.job.mtbfMTBF, time between last successful job and current failed job.branch, job, node, result
jenkins.job.mttrMTTR: time between last failed job and current successful job.branch, job, node, result
jenkins.job.startedRate of started jobs.branch, job, node
jenkins.job.waitingTime spent waiting for job to run (in milliseconds).branch, job, node
jenkins.node.countTotal number of node.
jenkins.node.offlineOffline nodes count.
jenkins.node.onlineOnline nodes count.
jenkins.plugin.countPlugins count.
jenkins.project.countProject count.
jenkins.queue.sizeQueue Size.
jenkins.queue.buildableNumber of Buildable item in Queue.
jenkins.queue.pendingNumber of Pending item in Queue.
jenkins.queue.stuckNumber of Stuck item in Queue.
jenkins.queue.blockedNumber of Blocked item in Queue.
jenkins.scm.checkoutRate of SCM checkouts.branch, job, node
jenkins.user.access_deniedRate of users failing to authenticate.
jenkins.user.authenticatedRate of users authenticating.
jenkins.user.logoutRate of users logging out.

Service checks

Build status jenkins.job.status with the default tags: : job, node, branch, result (Git branch, SVN revision, or CVS branch)

Note: Git branch tag is available when using the Git Plugin.

Issue Tracking

GitHub’s built-in issue tracking system is used to track all issues relating to this plugin: jenkinsci/datadog-plugin/issues. However, given how Jenkins plugins are hosted, there may be issues that are posted to JIRA as well. You can check this jenkins issue for those issue postings.

Note: Unresolved issues on JIRA mentioning Datadog.

Changes

See the CHANGELOG.md.

How to contribute code

First of all and most importantly, thank you for sharing.

Checkout the contributing guidelines before you submit an issue or a pull request.
Checkout the development document for tips on spinning up a quick development environment locally.