{"id":13643499,"url":"https://github.com/DataDog/orchestrion","last_synced_at":"2025-04-21T01:32:58.560Z","repository":{"id":177009535,"uuid":"608346290","full_name":"DataDog/orchestrion","owner":"DataDog","description":"Automatic compile-time instrumentation of Go code","archived":false,"fork":false,"pushed_at":"2025-04-10T07:57:38.000Z","size":3611,"stargazers_count":385,"open_issues_count":20,"forks_count":15,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-10T08:44:23.334Z","etag":null,"topics":["apm","datadog","go","instrumentation","monitoring","tracing"],"latest_commit_sha":null,"homepage":"http://datadoghq.dev/orchestrion/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DataDog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-01T20:37:21.000Z","updated_at":"2025-04-10T07:57:41.000Z","dependencies_parsed_at":"2024-02-15T14:26:46.574Z","dependency_job_id":"fc932f0b-1d01-4ed8-b9a7-34ed5640d67a","html_url":"https://github.com/DataDog/orchestrion","commit_stats":null,"previous_names":["datadog/orchestrion"],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDog%2Forchestrion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDog%2Forchestrion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDog%2Forchestrion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DataDog%2Forchestrion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DataDog","download_url":"https://codeload.github.com/DataDog/orchestrion/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249982659,"owners_count":21355740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apm","datadog","go","instrumentation","monitoring","tracing"],"created_at":"2024-08-02T01:01:48.450Z","updated_at":"2025-04-21T01:32:53.548Z","avatar_url":"https://github.com/DataDog.png","language":"Go","readme":"# Orchestrion\n\n[![Documentation](https://img.shields.io/badge/documentation-datadoghq.dev/orchestrion-blue.svg?style=flat)](https://datadoghq.dev/orchestrion)\n![Latest Release](https://img.shields.io/github/v/release/DataDog/orchestrion?display_name=tag\u0026label=Latest%20Release)\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/datadog/orchestrion)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/DataDog/orchestrion/badge)](https://scorecard.dev/viewer/?uri=github.com/DataDog/orchestrion)\n\nAutomatic compile-time instrumentation of Go code.\n\n## Overview\n\n[Orchestrion](https://en.wikipedia.org/wiki/Orchestrion) processes Go source code at compilation time and automatically\ninserts instrumentation. This instrumentation produces Datadog APM traces from the instrumented code and supports\nDatadog Application Security Management.\n\n\u003e [!IMPORTANT]\n\u003e Orchestrion is under active development. The supported features are rapidly growing, and the user experiece may evolve\n\u003e with future releases.\n\u003e\n\u003e Should you encounter issues or a bug when using `orchestrion`, please report it in the [bug tracker][gh-issues].\n\u003e\n\u003e For support \u0026 general questions, you are welcome to use [GitHub discussions][gh-discussions]. You may also contact us\n\u003e privately via Datadog support.\n\u003e\n\u003e [gh-issues]: https://github.com/DataDog/orchestrion/issues/new/choose\n\u003e [gh-discussions]: https://github.com/DataDog/orchestrion/discussions\n\n## Requirements\n\nOrchestrion supports the two latest releases of Go, matching Go's [official release policy][go-releases]. It may\nfunction correctly with older Go releases; but we will not be able to offer support for these if they don't.\n\nIn addition to this, Orchestrion only supports projects using [Go modules][go-modules].\n\n[go-releases]: https://go.dev/doc/devel/release#policy\n[go-modules]: https://pkg.go.dev/cmd/go#hdr-Modules__module_versions__and_more\n\n## Getting started\n\n1. Install Orchestrion:\n    ```console\n    $ go install github.com/DataDog/orchestrion@latest\n    ```\n\n2. \u003cdetails\u003e\u003csummary\u003eOptional: project \u003ctt\u003ego.mod\u003c/tt\u003e registration\u003c/summary\u003e\n\n      \u003e  You can automatically add `orchestrion` to your project's dependencies by running:\n      \u003e ```console\n      \u003e $ orchestrion pin\n      \u003e ```\n      \u003e This will:\n      \u003e 1. Create a new `orchestrion.tool.go` file containing content similar to:\n      \u003e     ```go\n      \u003e     // Code generated by `orchestrion pin`; DO NOT EDIT.\n      \u003e\n      \u003e     // This file is generated by `orchestrion pin`, and is used to include a blank import of the\n      \u003e     // orchestrion package(s) so that `go mod tidy` does not remove the requirements from go.mod.\n      \u003e     // This file should be checked into source control.\n      \u003e\n      \u003e     //go:build tools\n      \u003e\n      \u003e     package tools\n      \u003e\n      \u003e     import _ \"github.com/DataDog/orchestrion\"\n      \u003e     ```\n      \u003e 2. Run `go get github.com/DataDog/orchstrion@\u003ccurrent-release\u003e` to make sure the project version corresponds to the\n      \u003e    one currently being used\n      \u003e 3. Run `go mod tidy` to make sure your `go.mod` and `go.sum` files are up-to-date\n      \u003e\n      \u003e If you do not run this command, it will be done automatically when required. Once done, the version of `orchestrion`\n      \u003e used by this project can be controlled directly using the `go.mod` file, as you would control any other dependency.\n    \u003c/details\u003e\n\n3. Prefix your `go` commands with `orchestrion`:\n    ```console\n    $ orchestrion go build .\n    $ orchestrion go test -race ./...\n    ```\n\n    If you have not run `orchestrion pin`, you may see a message similar to the following appear, as `orchestrion pin`\n    is automatically executed:\n    ```\n    ╭──────────────────────────────────────────────────────────────────────────────╮\n    │                                                                              │\n    │  Warning: github.com/DataDog/orchestrion is not present in your go.mod       │\n    │  file.                                                                       │\n    │  In order to ensure build reliability and reproductibility, orchestrion      │\n    │  will now add itself in your go.mod file by:                                 │\n    │                                                                              │\n    │      1. creating a new file named orchestrion.tool.go                        │\n    │      2. running go get github.com/DataDog/orchestrion@v0.7.0-dev.2           │\n    │      3. running go mod tidy                                                  │\n    │                                                                              │\n    │  You should commit the resulting changes into your source control system.    │\n    │                                                                              │\n    ╰──────────────────────────────────────────────────────────────────────────────╯\n    ```\n\n\n    \u003cdetails\u003e\u003csummary\u003eAlternative\u003c/summary\u003e\n\n    \u003e _Orchestrion_ at the core is a standard Go toolchain `-toolexec` proxy. Instead of using `orchestrion go`, you can\n    \u003e also manually provide the `-toolexec` argument to `go` commands that accept it:\n    \u003e ```console\n    \u003e $ go build -toolexec 'orchestrion toolexec' .\n    \u003e $ go test -toolexec 'orchestrion toolexec' -race .\n    \u003e ```\n    \u003c/details\u003e\n\n\u003e The version of `orchestrion` used to compile your project is ultimately tracked in the `go.mod` file. You can manage\n\u003e it in the same way you manage any other dependency, and updating to the latest release is as simple as doing:\n\u003e ```console\n\u003e $ go get github.com/DataDog/orchestrion@latest\n\u003e ```\n\n## Supported libraries\n\nOrchestrion supports automatic tracing of the following libraries:\n\nLibrary                               | Since    | Notes\n--------------------------------------|:--------:|-----------------------------------------------\n`database/sql`                        | `v0.7.0` | [Aspect][db-sql]\n`github.com/gin-gonic/gin`            | `v0.7.0` | [Aspect][gin]\n`github.com/go-chi/chi/v5`            | `v0.7.0` | [Aspect][chi-v5]\n`github.com/go-chi/chi`               | `v0.7.0` | [Aspect][chi-v1]\n`github.com/go-redis/redis/v7`        | `v0.7.0` | [Aspect][go-redis-v7]\n`github.com/go-redis/redis/v8`        | `v0.7.0` | [Aspect][go-redis-v8]\n`github.com/gofiber/fiber/v2`         | `v0.7.0` | [Aspect][fiber-v2]\n`github.com/gomodule/redigo/redis`    | `v0.7.0` | [Aspect][redigo]\n`github.com/gorilla/mux`              | `v0.7.0` | [Aspect][gorilla]. Cannot be opted out of via `//dd:ignore`\n`github.com/jinzhu/gorm`              | `v0.7.0` | [Aspect][jinzhu-gorm]\n`github.com/labstack/echo/v4`         | `v0.7.0` | [Aspect][echo]\n`google.golang.org/grpc`              | `v0.7.0` | [Aspect][grpc]\n`gorm.io/gorm`                        | `v0.7.0` | [Aspect][gorm]\n`net/http`                            | `v0.7.0` | [Client][net-http.client] / [Server][net-http.server]\n`go.mongodb.org/mongo-driver/mongo`   | `v0.7.3` | [Aspect][mongo]\n`github.com/aws-sdk-go/aws`           | `v0.7.4` | [Aspect][aws-sdk-go]\n`github.com/hashicorp/vault`          | `v0.7.4` | [Aspect][hashicorp-vault]\n`github.com/IBM/sarama`               | `v0.7.4` | [Aspect][ibm-sarama]\n`github.com/Shopify/sarama`           | `v0.7.4` | [Aspect][shopify-sarama]\n`k8s.io/client-go`                    | `v0.7.4` | [Aspect][k8s-client]\n`log/slog`                            | `v0.7.4` | [Aspect][log-slog]\n`os`                                  | `v0.8.0` | [Aspect][os]\n`github.com/aws/aws-sdk-go-v2`        | `v0.8.0` | [Aspect][aws-sdk-go-v2]\n`github.com/redis/go-redis/v9`        | `v0.8.0` | [Aspect][go-redis-v9]\n`github.com/gocql/gocql`              | `v0.8.0` | [Aspect][gocql]\n`cloud.google.com/go/pubsub`          | `v0.9.0` | [Aspect][pubsub]\n`github.com/99designs/gqlgen`         | `v0.9.1` | [Aspect][gqlgen]\n`github.com/redis/go-redis`           | `v0.9.1` | [Aspect][go-redis]\n`github.com/graph-gophers/graphql-go` | `v0.9.1` | [Aspect][graph-gophers]\n`github.com/graphql-go/graphql`       | `v0.9.1` | [Aspect][graphql]\n`github.com/jackc/pgx`                | `v0.9.4` | [Aspect][pgx]\n\n[db-sql]: https://datadoghq.dev/orchestrion/docs/built-in/stdlib/database-sql/\n[gin]: https://datadoghq.dev/orchestrion/docs/built-in/http/gin/\n[chi-v5]: https://datadoghq.dev/orchestrion/docs/built-in/http/chi/#use-v5-tracer-middleware\n[chi-v1]: https://datadoghq.dev/orchestrion/docs/built-in/http/chi/#use-v1-tracer-middleware\n[go-redis-v7]: https://datadoghq.dev/orchestrion/docs/built-in/databases/go-redis/#wrap-v7-client\n[go-redis-v8]: https://datadoghq.dev/orchestrion/docs/built-in/databases/go-redis/#wrap-v8-client\n[go-redis-v9]: https://datadoghq.dev/orchestrion/docs/built-in/databases/go-redis/#wrap-v9-client\n[fiber-v2]: https://datadoghq.dev/orchestrion/docs/built-in/http/fiber/\n[redigo]: https://datadoghq.dev/orchestrion/docs/built-in/databases/redigo/\n[gorilla]: https://datadoghq.dev/orchestrion/docs/built-in/http/gorilla/\n[jinzhu-gorm]: https://datadoghq.dev/orchestrion/docs/built-in/databases/gorm/#jinzhugorm\n[echo]: https://datadoghq.dev/orchestrion/docs/built-in/http/echo/\n[grpc]: https://datadoghq.dev/orchestrion/docs/built-in/grpc/\n[gorm]: https://datadoghq.dev/orchestrion/docs/built-in/databases/gorm/#gormiogorm\n[net-http.Client]: https://datadoghq.dev/orchestrion/docs/built-in/stdlib/net-http.client/\n[net-http.Server]: https://datadoghq.dev/orchestrion/docs/built-in/stdlib/net-http.server/\n[mongo]: https://datadoghq.dev/orchestrion/docs/built-in/databases/mongo/\n[k8s-client]: https://datadoghq.dev/orchestrion/docs/built-in/k8s-client/\n[hashicorp-vault]: https://datadoghq.dev/orchestrion/docs/built-in/api/vault/\n[log-slog]: https://datadoghq.dev/orchestrion/docs/built-in/stdlib/slog/\n[aws-sdk-go]: https://datadoghq.dev/orchestrion/docs/built-in/cloud/aws-sdk/\n[aws-sdk-go-v2]: https://datadoghq.dev/orchestrion/docs/built-in/cloud/aws-sdk-v2/\n[ibm-sarama]: https://datadoghq.dev/orchestrion/docs/built-in/datastreams/ibm_sarama/\n[shopify-sarama]: https://datadoghq.dev/orchestrion/docs/built-in/datastreams/shopify_sarama/\n[os]: https://datadoghq.dev/orchestrion/docs/built-in/stdlib/ossec/\n[gocql]: https://datadoghq.dev/orchestrion/docs/built-in/databases/gocql/\n[pubsub]: https://datadoghq.dev/orchestrion/docs/built-in/datastreams/gcp_pubsub/\n[gqlgen]: https://datadoghq.dev/orchestrion/docs/built-in/graphql/gqlgen/\n[go-redis]: https://datadoghq.dev/orchestrion/docs/built-in/databases/go-redis/#wrap-v0-client\n[graph-gophers]: https://datadoghq.dev/orchestrion/docs/built-in/graphql/graph-gophers/\n[graphql]: https://datadoghq.dev/orchestrion/docs/built-in/graphql/graphql-go/\n[pgx]: https://datadoghq.dev/orchestrion/docs/built-in/databases/pgx\n\nCalls to these libraries are instrumented with library-specific code adding tracing to them, including support for\ndistributed traces.\n\n## Troubleshooting\n\nIf you run into issues when using `orchestrion` please make sure to collect all relevant details about your setup in\norder to help us identify (and ideally reproduce) the issue. The version of orchestrion (which can be obtained from\n`orchestrion version`) as well as of the go toolchain (from `go version`) are essential and must be provided with any\nbug report.\n\nYou can inspect everything Orchestrion is doing by adding the `-work` argument to your `go build` command; when doing so\nthe build will emit a `WORK=` line pointing to a working directory that is retained after the build is finished. The\ncontents of this directory contains all updated source code Orchestrion produced and additional metadata that can help\ndiagnosing issues.\n\n## More information\n\nOrchestrion's documentation can be found at [datadoghq.dev/orchestrion](https://datadoghq.dev/orchestrion); in\nparticular:\n- the [user guide](https://datadoghq.dev/orchestrion/docs/) provides information about available configuration, and how\n  to customize the traces produced by your application;\n- the [contributor guide](https://datadoghq.dev/orchestrion/contributing/) provides more detailed information about how\n  orchestrion works and how to contribute new instrumentation to it.\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDataDog%2Forchestrion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDataDog%2Forchestrion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDataDog%2Forchestrion/lists"}