2015-06-13 02:58:51 +03:00
# Prometheus Go client library
2012-05-20 01:59:25 +04:00
2022-05-02 17:44:08 +03:00
[![CircleCI ](https://circleci.com/gh/prometheus/client_golang/tree/main.svg?style=svg )](https://circleci.com/gh/prometheus/client_golang/tree/main)
2022-12-13 11:48:40 +03:00
[![Go Report Card ](https://goreportcard.com/badge/git.internal/re/client_golang )](https://goreportcard.com/report/git.internal/re/client_golang)
[![Go Reference ](https://pkg.go.dev/badge/git.internal/re/client_golang.svg )](https://pkg.go.dev/git.internal/re/client_golang)
2022-04-12 17:24:39 +03:00
[![Slack ](https://img.shields.io/badge/join%20slack-%23prometheus--client_golang-brightgreen.svg )](https://slack.cncf.io/)
2012-05-20 01:59:25 +04:00
2015-06-13 02:58:51 +03:00
This is the [Go ](http://golang.org ) client library for
2015-09-18 15:41:53 +03:00
[Prometheus ](http://prometheus.io ). It has two separate parts, one for
instrumenting application code, and one for creating clients that talk to the
Prometheus HTTP API.
2012-05-20 01:59:25 +04:00
2022-06-05 11:01:13 +03:00
__This library requires Go1.17 or later.__
2017-09-06 16:36:30 +03:00
2019-06-14 20:43:08 +03:00
## Important note about releases and stability
This repository generally follows [Semantic
Versioning](https://semver.org/). However, the API client in
prometheus/client_golang/api/… is still considered experimental. Breaking
changes of the API client will _not_ trigger a new major release. The same is
true for selected other new features explicitly marked as **EXPERIMENTAL** in
CHANGELOG.md.
Features that require breaking changes in the stable parts of the repository
are being batched up and tracked in the [v2
2022-12-13 11:48:40 +03:00
milestone](https://git.internal/re/client_golang/milestone/2). The v2
2019-06-14 20:43:08 +03:00
development happens in a [separate
2022-12-13 11:48:40 +03:00
branch](https://git.internal/re/client_golang/tree/dev-v2) for the time
2019-06-14 20:43:08 +03:00
being. v2 releases off that branch will happen once sufficient stability is
reached. In view of the widespread use of this repository, v1 and v2 will
coexist for a while to enable a convenient transition.
2018-02-09 15:41:14 +03:00
2015-06-13 02:58:51 +03:00
## Instrumenting applications
2013-03-28 13:44:20 +04:00
2022-12-13 11:48:40 +03:00
[![code-coverage ](http://gocover.io/_badge/git.internal/re/client_golang/prometheus )](http://gocover.io/git.internal/re/client_golang/prometheus) [![Go Reference ](https://pkg.go.dev/badge/git.internal/re/client_golang/prometheus.svg )](https://pkg.go.dev/git.internal/re/client_golang/prometheus)
2015-06-13 02:58:51 +03:00
2015-09-18 15:41:53 +03:00
The
2022-12-13 11:48:40 +03:00
[`prometheus` directory ](https://git.internal/re/client_golang/tree/main/prometheus )
2015-09-18 15:41:53 +03:00
contains the instrumentation library. See the
2018-10-15 02:48:21 +03:00
[guide ](https://prometheus.io/docs/guides/go-application/ ) on the Prometheus
website to learn more about instrumenting applications.
2015-06-13 02:58:51 +03:00
2015-09-18 15:41:53 +03:00
The
2022-12-13 11:48:40 +03:00
[`examples` directory ](https://git.internal/re/client_golang/tree/main/examples )
2015-09-18 15:41:53 +03:00
contains simple examples of instrumented code.
2013-03-28 13:44:20 +04:00
2015-09-18 15:41:53 +03:00
## Client for the Prometheus HTTP API
2013-02-18 08:09:21 +04:00
2022-12-13 11:48:40 +03:00
[![code-coverage ](http://gocover.io/_badge/git.internal/re/client_golang/api/prometheus/v1 )](http://gocover.io/git.internal/re/client_golang/api/prometheus/v1) [![Go Reference ](https://pkg.go.dev/badge/git.internal/re/client_golang/api.svg )](https://pkg.go.dev/git.internal/re/client_golang/api)
2015-09-18 15:41:53 +03:00
The
2022-12-13 11:48:40 +03:00
[`api/prometheus` directory ](https://git.internal/re/client_golang/tree/main/api/prometheus )
2015-09-18 15:41:53 +03:00
contains the client for the
[Prometheus HTTP API ](http://prometheus.io/docs/querying/api/ ). It allows you
2017-02-16 20:55:22 +03:00
to write Go applications that query time series data from a Prometheus
server. It is still in alpha stage.
2015-09-18 15:41:53 +03:00
## Where is `model`, `extraction`, and `text`?
The `model` packages has been moved to
2022-05-02 17:44:08 +03:00
[`prometheus/common/model` ](https://github.com/prometheus/common/tree/main/model ).
2015-09-18 15:41:53 +03:00
The `extraction` and `text` packages are now contained in
2022-05-02 17:44:08 +03:00
[`prometheus/common/expfmt` ](https://github.com/prometheus/common/tree/main/expfmt ).
2014-04-25 14:50:18 +04:00
2015-06-13 02:58:51 +03:00
## Contributing and community
2014-04-25 14:50:18 +04:00
2015-06-13 02:58:51 +03:00
See the [contributing guidelines ](CONTRIBUTING.md ) and the
[Community section ](http://prometheus.io/community/ ) of the homepage.
2022-04-12 17:24:39 +03:00
2022-05-02 17:44:08 +03:00
`clint_golang` community is also present on the CNCF Slack `#prometheus-client_golang` .
2022-11-01 19:37:13 +03:00
### For Maintainers: Release Process
2022-11-01 19:54:19 +03:00
To cut a minor version:
2022-11-01 19:37:13 +03:00
2022-11-01 19:54:19 +03:00
1. Create a new branch `release-<major>.<minor>` on top of the `main` commit you want to cut the version from and push it.
2. Create a new branch on top of the release branch, e.g. `<yourname>/cut-<major>.<minor>.<patch>` ,
3. Change the `VERSION` file.
2022-11-01 19:37:13 +03:00
4. Update `CHANGELOG` (only user-impacting changes to mention).
2022-11-01 19:54:19 +03:00
5. Create PR, and get it reviewed.
6. Once merged, create a release with the `release-<major>.<minor>` tag on GitHub with the `<version> / <date>` title.
7. Announce on the prometheus-announce mailing list, slack and Twitter.
8. Merge the release branch back to the `main` using the "merge without squashing" approach (!).
2022-11-01 19:37:13 +03:00
2022-11-01 19:54:19 +03:00
> NOTE: In case of merge conflicts, you can checkout the release branch in a new branch, e.g. <yourname>/resolve-conflicts`, fix the merge problems there, and then do a PR into main from the new branch. In that way, you still get all the commits in the release branch back into `main`, but leave the release branch alone.
2022-11-01 19:37:13 +03:00
2022-11-01 19:54:19 +03:00
To cut the patch version:
1. Create a branch on top of the release branch you want to use.
2. Cherry-pick the fixes from the `main` branch (or add new commits) to fix critical bugs for that patch release.
2022-11-01 19:37:13 +03:00
3. Follow steps 3-8 as above.