{"id":14628475,"url":"https://github.com/connectrpc/otelconnect-go","last_synced_at":"2025-12-24T12:08:50.303Z","repository":{"id":64877453,"uuid":"499639466","full_name":"connectrpc/otelconnect-go","owner":"connectrpc","description":"OpenTelemetry tracing and metrics for Connect.","archived":false,"fork":false,"pushed_at":"2025-09-22T15:23:05.000Z","size":465,"stargazers_count":145,"open_issues_count":7,"forks_count":32,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-09-22T17:37:07.535Z","etag":null,"topics":["connectrpc","golang","grpc","metrics","opentelemetry","prometheus","rpc","tracing"],"latest_commit_sha":null,"homepage":"https://connectrpc.com","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/connectrpc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-03T20:14:27.000Z","updated_at":"2025-09-22T15:23:10.000Z","dependencies_parsed_at":"2023-12-27T21:10:46.179Z","dependency_job_id":"ac0fa840-bcd7-45c0-b5f3-037b4202ac83","html_url":"https://github.com/connectrpc/otelconnect-go","commit_stats":{"total_commits":97,"total_committers":20,"mean_commits":4.85,"dds":0.711340206185567,"last_synced_commit":"16445b28738d81b2b4c4ba530435040abc2e149a"},"previous_names":["bufbuild/connect-opencensus-go","connectrpc/otelconnect-go"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/connectrpc/otelconnect-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connectrpc%2Fotelconnect-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connectrpc%2Fotelconnect-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connectrpc%2Fotelconnect-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connectrpc%2Fotelconnect-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/connectrpc","download_url":"https://codeload.github.com/connectrpc/otelconnect-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connectrpc%2Fotelconnect-go/sbom","scorecard":{"id":302664,"data":{"date":"2025-08-11","repo":{"name":"github.com/connectrpc/otelconnect-go","commit":"4a3a1f54b09e9e11d3a4b0908887ebff684a75dd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.6,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":1,"reason":"1 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/add-to-project.yaml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yaml:12","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/pr-title.yaml:5","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/add-to-project.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/connectrpc/otelconnect-go/add-to-project.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/connectrpc/otelconnect-go/ci.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/connectrpc/otelconnect-go/ci.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-title.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/connectrpc/otelconnect-go/pr-title.yaml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T21:07:44.717Z","repository_id":64877453,"created_at":"2025-08-17T21:07:44.717Z","updated_at":"2025-08-17T21:07:44.717Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28002250,"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","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["connectrpc","golang","grpc","metrics","opentelemetry","prometheus","rpc","tracing"],"created_at":"2024-09-09T09:01:45.009Z","updated_at":"2025-12-24T12:08:50.267Z","avatar_url":"https://github.com/connectrpc.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"otelconnect\n===========\n\n[![Build](https://github.com/connectrpc/otelconnect-go/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/connectrpc/otelconnect-go/actions/workflows/ci.yaml)\n[![Report Card](https://goreportcard.com/badge/connectrpc.com/otelconnect)](https://goreportcard.com/report/connectrpc.com/otelconnect)\n[![GoDoc](https://pkg.go.dev/badge/connectrpc.com/otelconnect.svg)][godoc]\n\n`connectrpc.com/otelconnect` adds support for [OpenTelemetry][opentelemetry.io]\ntracing and metrics collection to [Connect][connect] servers and clients.\n\nFor more on Connect, OpenTelemetry, and `otelconnect`, see the [Connect\nannouncement blog post][blog] and the observability documentation on\n[connectrpc.com](https://connectrpc.com/docs/go/observability/).\n\n## An example\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\n\t\"connectrpc.com/connect\"\n\t\"connectrpc.com/otelconnect\"\n\t// Generated from your protobuf schema by protoc-gen-go and\n\t// protoc-gen-connect-go.\n\tpingv1 \"connectrpc.com/otelconnect/internal/gen/observability/ping/v1\"\n\t\"connectrpc.com/otelconnect/internal/gen/observability/ping/v1/pingv1connect\"\n)\n\nfunc main() {\n\tmux := http.NewServeMux()\n\totelInterceptor, err := otelconnect.NewInterceptor()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// otelconnect.NewInterceptor provides an interceptor that adds tracing and\n\t// metrics to both clients and handlers. By default, it uses OpenTelemetry's\n\t// global TracerProvider and MeterProvider, which you can configure by\n\t// following the OpenTelemetry documentation. If you'd prefer to avoid\n\t// globals, use otelconnect.WithTracerProvider and\n\t// otelconnect.WithMeterProvider.\n\tmux.Handle(pingv1connect.NewPingServiceHandler(\n\t\t\u0026pingv1connect.UnimplementedPingServiceHandler{},\n\t\tconnect.WithInterceptors(otelInterceptor),\n\t))\n\n\thttp.ListenAndServe(\"localhost:8080\", mux)\n}\n\nfunc makeRequest() {\n\totelInterceptor, err := otelconnect.NewInterceptor()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tclient := pingv1connect.NewPingServiceClient(\n\t\thttp.DefaultClient,\n\t\t\"http://localhost:8080\",\n\t\tconnect.WithInterceptors(otelInterceptor),\n\t)\n\tresp, err := client.Ping(\n\t\tcontext.Background(),\n\t\tconnect.NewRequest(\u0026pingv1.PingRequest{}),\n\t)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tfmt.Println(resp)\n}\n\n```\n\n## Configuration for internal services\n\nBy default, instrumented servers are conservative and behave as though they're\ninternet-facing. They don't trust any tracing information sent by the client,\nand will create new trace spans for each request. The new spans are linked to\nthe remote span for reference (using OpenTelemetry's\n[`trace.Link`](https://pkg.go.dev/go.opentelemetry.io/otel/trace#Link)), but\ntracing UIs will display the request as a new top-level transaction.\n\nIf your server is deployed as an internal service, configure `otelconnect` to\ntrust the client's tracing information using\n[`otelconnect.WithTrustRemote`][WithTrustRemote]. With this option, servers\nwill create child spans for each request.\n\n## Reducing metrics and tracing cardinality\n\nBy default, the [OpenTelemetry RPC conventions][otel-rpc-conventions] produce\nhigh-cardinality server-side metric and tracing output. In particular, servers\ntag all metrics and trace data with the server's IP address and the remote port\nnumber. To drop these attributes, use\n[`otelconnect.WithoutServerPeerAttributes`][WithoutServerPeerAttributes]. For\nmore customizable attribute filtering, use\n[otelconnect.WithFilter][WithFilter].\n\n## Status\n\n|         | Unary | Streaming Client | Streaming Handler |\n|---------|:-----:|:----------------:|:-----------------:|\n| Metrics | ✅    | ✅               | ✅                |\n| Tracing | ✅    | ✅               | ✅                |\n\n## Ecosystem\n\n* [connect-go][connect]: Service handlers and clients for Go\n* [connect-swift]: Swift clients for idiomatic gRPC \u0026 Connect RPC\n* [connect-kotlin]: Kotlin clients for idiomatic gRPC \u0026 Connect RPC\n* [connect-es]: Type-safe APIs with Protobuf and TypeScript.\n* [Buf Studio]: web UI for ad-hoc RPCs\n* [conformance]: Connect, gRPC, and gRPC-Web interoperability tests\n\n## Support and Versioning\n\n`otelconnect` supports:\n\n* The [two most recent major releases][go-support-policy] of Go.\n* v1 of the `go.opentelemetry.io/otel` tracing and metrics SDK.\n\n## Legal\n\nOffered under the [Apache 2 license][license].\n\n[Buf Studio]: https://buf.build/studio\n[WithFilter]: https://pkg.go.dev/connectrpc.com/otelconnect#WithFilter\n[WithTrustRemote]: https://pkg.go.dev/connectrpc.com/otelconnect#WithTrustRemote\n[WithoutServerPeerAttributes]: https://pkg.go.dev/connectrpc.com/otelconnect#WithoutServerPeerAttributes\n[blog]: https://buf.build/blog/connect-a-better-grpc\n[conformance]: https://github.com/connectrpc/conformance\n[connect]: https://github.com/connectrpc/connect-go\n[connect-kotlin]: https://github.com/connectrpc/connect-kotlin\n[connect-swift]: https://github.com/connectrpc/connect-swift\n[connect-es]: https://github.com/connectrpc/connect-es\n[docs]: https://connectrpc.com\n[go-support-policy]: https://go.dev/doc/devel/release#policy\n[godoc]: https://pkg.go.dev/connectrpc.com/otelconnect\n[license]: https://github.com/connectrpc/otelconnect-go/blob/main/LICENSE\n[opentelemetry.io]: https://opentelemetry.io/\n[otel-rpc-conventions]: https://opentelemetry.io/docs/specs/semconv/rpc/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnectrpc%2Fotelconnect-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconnectrpc%2Fotelconnect-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnectrpc%2Fotelconnect-go/lists"}