Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
play

GitHub Action

datadog-actions-metrics

v1.34.0

datadog-actions-metrics

play

datadog-actions-metrics

submit metrics of GitHub Actions to Datadog

Installation

Copy and paste the following snippet into your .yml file.

              

- name: datadog-actions-metrics

uses: int128/datadog-actions-metrics@v1.34.0

Learn more about this action in int128/datadog-actions-metrics

Choose a version

datadog-actions-metrics ts e2e

This is an action to send metrics of GitHub Actions to Datadog on an event. It is inspired from yuya-takeyama/github-actions-metrics-to-datadog-action.

Purpose

Improve the reliability and experience of CI/CD pipeline

To collect the metrics when a workflow is completed:

on:
  workflow_run:
    workflows:
      - '**'
    types:
      - completed

jobs:
  send:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: int128/datadog-actions-metrics@v1
        with:
          # create an API key in https://docs.datadoghq.com/account_management/api-app-keys/
          datadog-api-key: ${{ secrets.DATADOG_API_KEY }}

Here is an example of screenshot in Datadog.

image

For developer experience, you can analyze the following metrics:

  • Time to test an application
  • Time to deploy an application

For reliability, you can monitor the following metrics:

  • Success rate of the main branch
  • Rate limit of built-in GITHUB_TOKEN

Improve the reliability and experience of self-hosted runners

For the self-hosted runners, you can monitor the following metrics for reliability and experience:

Improve your team development process

You can analyze your development activity such as number of merged pull requests. It helps the continuous process improvement of your team.

To collect the metrics when a pull request is opened or closed:

on:
  pull_request:
    types:
      - opened
      - closed

jobs:
  send:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: int128/datadog-actions-metrics@v1
        with:
          # create an API key in https://docs.datadoghq.com/account_management/api-app-keys/
          datadog-api-key: ${{ secrets.DATADOG_API_KEY }}

Overview

This action handles the following events:

  • workflow_run event
  • pull_request event
  • push event
  • schedule event

It ignores other events.

Metrics for workflow_run event

Workflow run

This action sends the following metrics.

  • github.actions.workflow_run.total
  • github.actions.workflow_run.conclusion.{CONCLUSION}_total
    • e.g. github.actions.workflow_run.conclusion.success_total
    • e.g. github.actions.workflow_run.conclusion.failure_total
    • See the official document for the possible values of CONCLUSION field
  • github.actions.workflow_run.duration_second
    • Time from a workflow is started until it is updated
  • github.actions.workflow_run.queued_duration_second
    • Time from a workflow is created until the first job is started
    • Available for the first workflow run only

It has the following tags:

  • repository_owner
  • repository_name
  • workflow_name
  • workflow_id
  • run_attempt
    • Attempt number of the run, 1 for first attempt and higher if the workflow was re-run
  • event
  • sender
  • sender_type = either Bot, User or Organization
  • branch
  • default_branch = true or false
  • conclusion

See also the actual metrics in the E2E test.

Job

This action sends the following metrics if collect-job-metrics is enabled.

  • github.actions.job.total
  • github.actions.job.conclusion.{CONCLUSION}_total
    • e.g. github.actions.job.conclusion.success_total
    • e.g. github.actions.job.conclusion.failure_total
  • github.actions.job.duration_second
    • Time from a job is started to completed
  • github.actions.job.queued_duration_second
    • Time from a job is started until the first step is started
  • github.actions.job.lost_communication_with_server_error_total
    • Count of "lost communication with the server" errors of self-hosted runners. See the issue #444 for details

It has the following tags:

  • repository_owner
  • repository_name
  • workflow_name
  • workflow_id
  • event
  • sender
  • sender_type = either Bot, User or Organization
  • branch
  • default_branch = true or false
  • job_name
  • job_id
  • conclusion
  • status
  • runs_on
    • Runner label inferred from the workflow file if available
    • e.g. ubuntu-latest

Step

This action sends the following metrics if collect-step-metrics is enabled.

  • github.actions.step.total
  • github.actions.step.conclusion.{CONCLUSION}_total
    • e.g. github.actions.step.conclusion.success_total
    • e.g. github.actions.step.conclusion.failure_total
  • github.actions.step.duration_second

It has the following tags:

  • repository_owner
  • repository_name
  • workflow_name
  • workflow_id
  • event
  • sender
  • sender_type = either Bot, User or Organization
  • branch
  • default_branch = true or false
  • job_name
  • job_id
  • step_name
  • step_number = 1, 2, ...
  • conclusion
  • status
  • runs_on
    • Runner label inferred from the workflow file if available
    • e.g. ubuntu-latest

Enable job or step metrics

Note that this action calls GitHub GraphQL API to get jobs and steps of a workflow run. It may cause the rate exceeding error if too many workflows are run. It may also increase the cost of custom metrics in Datadog.

To send the metrics of jobs and steps:

      - uses: int128/datadog-actions-metrics@v1
        with:
          datadog-api-key: ${{ secrets.DATADOG_API_KEY }}
          collect-job-metrics: true
          collect-step-metrics: true

To send the metrics of jobs and steps on the default branch only:

      - uses: int128/datadog-actions-metrics@v1
        with:
          datadog-api-key: ${{ secrets.DATADOG_API_KEY }}
          collect-job-metrics: ${{ github.event.workflow_run.head_branch == github.event.repository.default_branch }}
          collect-step-metrics: ${{ github.event.workflow_run.head_branch == github.event.repository.default_branch }}

Metrics for pull_request event

Pull request (opened)

This action sends the following metrics on opened type.

  • github.actions.pull_request_opened.total
  • github.actions.pull_request_opened.commits
  • github.actions.pull_request_opened.changed_files
  • github.actions.pull_request_opened.additions
  • github.actions.pull_request_opened.deletions

It has the following tags:

  • repository_owner
  • repository_name
  • sender
  • sender_type = either Bot, User or Organization
  • user
  • pull_request_number
  • draft = true or false
  • base_ref
  • head_ref

Pull request (closed)

This action sends the following metrics on closed type.

  • github.actions.pull_request_closed.total
  • github.actions.pull_request_closed.since_opened_seconds
    • Time from a pull request is opened to closed
  • github.actions.pull_request_closed.since_first_authored_seconds
    • Time from the authored time of the first commit until closed
  • github.actions.pull_request_closed.since_first_committed_seconds
    • Time from the committed time of the first commit until closed
  • github.actions.pull_request_closed.commits
  • github.actions.pull_request_closed.changed_files
  • github.actions.pull_request_closed.additions
  • github.actions.pull_request_closed.deletions

It has the following tags:

  • repository_owner
  • repository_name
  • sender
  • sender_type = either Bot, User or Organization
  • user
  • pull_request_number
  • draft = true or false
  • base_ref
  • head_ref
  • merged = true or false
  • requested_team
    • Team(s) of requested reviewer(s)
  • label
    • Label(s) of a pull request
    • Available if send-pull-request-labels is set

Metrics for push event

This action sends the following metrics.

  • github.actions.push.total

It has the following tags:

  • repository_owner
  • repository_name
  • sender
  • sender_type = either Bot, User or Organization
  • ref
  • created = true or false
  • deleted = true or false
  • forced = true or false
  • default_branch = true or false

Metrics for schedule event

Workflow run

This action sends the following metrics:

  • github.actions.schedule.queued_workflow_run.total (gauge)

It has the following tags:

  • repository_owner
  • repository_name

It is useful for monitoring self-hosted runners.

Metrics for all supported events

Rate limit

This action always sends the following metrics of the built-in GITHUB_TOKEN rate limit.

  • github.actions.api_rate_limit.remaining
  • github.actions.api_rate_limit.limit

It has the following tags:

  • repository_owner
  • repository_name
  • resource = core, search and graphql

This does not affect the rate limit of GitHub API because it just calls /rate_limit endpoint.

Specification

You can set the following inputs:

Name Default Description
github-token github.token GitHub token to get jobs and steps if needed
github-token-rate-limit-metrics github.token GitHub token for rate limit metrics
datadog-api-key - Datadog API key. If not set, this action does not send metrics actually
datadog-site - Datadog Server name such as datadoghq.eu, ddog-gov.com, us3.datadoghq.com
send-pull-request-labels false Send pull request labels as Datadog tags
collect-job-metrics false Collect job metrics
collect-step-metrics false Collect step metrics

Breaking changes

collect-step-metrics is explicitly required to send the step metrics.

collect-job-metrics-for-only-default-branch is no longer supported. Use collect-job-metrics instead.

Contribution

This is an open source software. Feel free to open issues and pull requests.