int128 / datadog-actions-metrics

Send GitHub Actions metrics to Datadog for developer experience
Apache License 2.0
64 stars 18 forks source link
datadog github-actions metrics observability

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 run 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 }}

For the developer experience, you can analyze the following metrics:

For the reliability, you can monitor the following metrics:

Here is an example of screenshot in Datadog.

image

Improve the reliability and experience of self-hosted runners

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

Here is an example of screenshot in Datadog.

image

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, closed or merged into main:

on:
  pull_request:
    types:
      - opened
      - closed
  push:
    branches:
      - main

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 can handle the following events:

Other events are ignored.

Metrics for workflow_run event

Workflow run

This action sends the following metrics.

It has the following tags:

See also the actual metrics in the E2E test.

Job

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

It has the following tags:

Step

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

It has the following tags:

Enable job or step metrics

To send the metrics of jobs and steps:

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:

steps:
  - 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 }}

This action calls GitHub REST API and GraphQL API to get jobs and steps of the current workflow run. Note that it may cause the rate exceeding error when too many workflows are run.

If the job or step metrics is enabled, this action requires the following permissions:

permissions:
  actions: read
  checks: read
  contents: read

Prefer distribution metrics

This action sends the gauge metrics by default. To send the distribution metrics instead of the gauge metrics,

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

Note that the distribution metrics may increase the custom metrics cost.

Metrics for pull_request event

Pull request (opened)

This action sends the following metrics on opened type.

It has the following tags:

Pull request (closed)

This action sends the following metrics on closed type.

It has the following tags:

Permissions

For pull_request event, this action requires the following permissions:

permissions:
  pull-requests: read

Metrics for push event

This action sends the following metrics.

It has the following tags:

Metrics for schedule event

Workflow run

This action sends the following metrics:

It has the following tags:

It is useful for monitoring self-hosted runners.

Permissions

For schedule event, this action requires the following permissions:

permissions:
  actions: read

Metrics for all supported events

Rate limit

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

It has the following tags:

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
datadog-tags - Additional tags in the form of key:value in a multiline string
metrics-patterns - Filter the metrics by patterns in a multiline string
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
prefer-distribution-workflow-run-metrics false If true, send the distribution metrics instead of gauge metrics
prefer-distribution-job-metrics false If true, send the distribution metrics instead of gauge metrics
prefer-distribution-step-metrics false If true, send the distribution metrics instead of gauge metrics

Filter metrics

If metrics-patterns is set, this action sends the metrics filtered by the glob patterns. The glob specification is same as the filters of workflow.

To include the specific metrics,

steps:
  - uses: int128/datadog-actions-metrics@v1
    with:
      metrics-patterns: |
        github.actions.workflow_run.*
        github.actions.job.*

To exclude the specific metrics,

steps:
  - uses: int128/datadog-actions-metrics@v1
    with:
      metrics-patterns: |
        *
        !github.actions.*.conclusion.*

If both include and exclude patterns are given, the later pattern has higher precedence.

Proxy

To connect to Datadog API via a HTTPS proxy, set https_proxy environment variable. For example,

steps:
  - uses: int128/datadog-actions-metrics@v1
    with:
      datadog-api-key: ${{ secrets.DATADOG_API_KEY }}
    env:
      https_proxy: http://proxy.example.com:8080

Contribution

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