2020-01-27 16:10:08 +00:00
# Prometheus
2015-12-21 17:09:38 +00:00
2021-02-22 19:19:08 +00:00
[![CircleCI ](https://circleci.com/gh/prometheus/prometheus/tree/main.svg?style=shield )][circleci]
2016-04-26 15:23:41 +00:00
[![Docker Repository on Quay ](https://quay.io/repository/prometheus/prometheus/status )][quay]
[![Docker Pulls ](https://img.shields.io/docker/pulls/prom/prometheus.svg?maxAge=604800 )][hub]
2016-09-15 03:09:26 +00:00
[![Go Report Card ](https://goreportcard.com/badge/github.com/prometheus/prometheus )](https://goreportcard.com/report/github.com/prometheus/prometheus)
2018-02-05 19:39:32 +00:00
[![CII Best Practices ](https://bestpractices.coreinfrastructure.org/projects/486/badge )](https://bestpractices.coreinfrastructure.org/projects/486)
2020-08-14 15:23:55 +00:00
[![Gitpod ready-to-code ](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod )](https://gitpod.io/#https://github.com/prometheus/prometheus)
2021-02-07 19:51:02 +00:00
[![Fuzzing Status ](https://oss-fuzz-build-logs.storage.googleapis.com/badges/prometheus.svg )](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened& can=1& q=proj:prometheus)
2012-11-24 11:14:12 +00:00
2016-04-13 01:01:09 +00:00
Visit [prometheus.io ](https://prometheus.io ) for the full documentation,
examples and guides.
2016-07-27 22:15:03 +00:00
Prometheus, a [Cloud Native Computing Foundation ](https://cncf.io/ ) project, is a systems and service monitoring system. It collects metrics
2014-12-07 00:23:01 +00:00
from configured targets at given intervals, evaluates rule expressions,
2020-10-27 09:50:37 +00:00
displays the results, and can trigger alerts when specified conditions are observed.
2014-12-07 00:23:01 +00:00
2020-10-27 09:50:37 +00:00
The features that distinguish Prometheus from other metrics and monitoring systems are:
2014-12-06 23:05:10 +00:00
2020-10-27 09:50:37 +00:00
- A **multi-dimensional** data model (time series defined by metric name and set of key/value dimensions)
2020-08-04 20:38:08 +00:00
- PromQL, a **powerful and flexible query language** to leverage this dimensionality
2020-10-27 09:50:37 +00:00
- No dependency on distributed storage; **single server nodes are autonomous**
- An HTTP **pull model** for time series collection
- **Pushing time series** is supported via an intermediary gateway for batch jobs
- Targets are discovered via **service discovery** or **static configuration**
- Multiple modes of **graphing and dashboarding support**
- Support for hierarchical and horizontal **federation**
2014-12-06 23:05:10 +00:00
2014-12-07 00:29:56 +00:00
## Architecture overview
2014-12-07 00:23:01 +00:00
2018-10-13 12:20:29 +00:00
![](https://cdn.jsdelivr.net/gh/prometheus/prometheus@c34257d069c630685da35bcef084632ffd5d6209/documentation/images/architecture.svg)
2014-11-17 18:20:39 +00:00
2014-11-21 12:27:28 +00:00
## Install
2014-11-17 18:20:39 +00:00
2014-11-21 12:27:28 +00:00
There are various ways of installing Prometheus.
2014-11-17 18:20:39 +00:00
2015-05-22 11:31:59 +00:00
### Precompiled binaries
2012-11-24 11:33:34 +00:00
2015-05-22 11:31:59 +00:00
Precompiled binaries for released versions are available in the
2016-09-07 12:32:48 +00:00
[*download* section ](https://prometheus.io/download/ )
on [prometheus.io ](https://prometheus.io ). Using the latest production release binary
2016-09-15 03:09:26 +00:00
is the recommended way of installing Prometheus.
See the [Installing ](https://prometheus.io/docs/introduction/install/ )
2016-04-25 09:31:38 +00:00
chapter in the documentation for all the details.
2015-05-22 11:31:59 +00:00
2016-09-07 12:32:48 +00:00
### Docker images
2016-07-01 08:16:49 +00:00
2018-11-16 11:26:10 +00:00
Docker images are available on [Quay.io ](https://quay.io/repository/prometheus/prometheus ) or [Docker Hub ](https://hub.docker.com/r/prom/prometheus/ ).
2013-01-24 23:33:16 +00:00
2017-03-13 10:37:25 +00:00
You can launch a Prometheus container for trying it out with
2018-11-16 11:26:10 +00:00
$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
2017-03-13 10:37:25 +00:00
Prometheus will now be reachable at http://localhost:9090/.
2015-09-17 16:20:38 +00:00
### Building from source
2013-01-24 23:33:16 +00:00
2021-10-18 10:47:31 +00:00
To build Prometheus from source code, You need:
2021-12-31 14:56:29 +00:00
* Go [version 1.16 or greater ](https://golang.org/doc/install ).
2021-10-18 10:47:31 +00:00
* NodeJS [version 16 or greater ](https://nodejs.org/ ).
* npm [version 7 or greater ](https://www.npmjs.com/ ).
2015-04-10 11:53:32 +00:00
2015-09-17 16:20:38 +00:00
You can directly use the `go` tool to download and install the `prometheus`
2017-10-12 22:15:29 +00:00
and `promtool` binaries into your `GOPATH` :
2013-04-14 04:59:55 +00:00
2021-08-27 09:08:21 +00:00
$ GO111MODULE=on go install github.com/prometheus/prometheus/cmd/...
2017-08-08 07:19:35 +00:00
$ prometheus --config.file=your_config.yml
2013-04-14 04:59:55 +00:00
2021-08-27 09:08:21 +00:00
*However*, when using `go install` to build Prometheus, Prometheus will expect to be able to
2019-10-17 12:38:09 +00:00
read its web assets from local filesystem directories under `web/ui/static` and
`web/ui/templates` . In order for these assets to be found, you will have to run Prometheus
from the root of the cloned repository. Note also that these directories do not include the
2022-04-27 12:18:12 +00:00
React UI unless it has been built explicitly using `make assets` or `make build` .
2019-10-17 12:38:09 +00:00
2021-02-22 19:19:08 +00:00
An example of the above configuration file can be found [here. ](https://github.com/prometheus/prometheus/blob/main/documentation/examples/prometheus.yml )
2019-11-09 08:48:09 +00:00
2019-10-17 12:38:09 +00:00
You can also clone the repository yourself and build using `make build` , which will compile in
the web assets so that Prometheus can be run from anywhere:
2013-04-14 04:59:55 +00:00
2015-09-17 16:20:38 +00:00
$ mkdir -p $GOPATH/src/github.com/prometheus
$ cd $GOPATH/src/github.com/prometheus
$ git clone https://github.com/prometheus/prometheus.git
$ cd prometheus
2016-02-05 10:30:31 +00:00
$ make build
2017-08-08 07:19:35 +00:00
$ ./prometheus --config.file=your_config.yml
2013-04-14 04:59:55 +00:00
2015-09-18 07:34:17 +00:00
The Makefile provides several targets:
2013-04-14 04:59:55 +00:00
2019-10-17 12:38:09 +00:00
* *build*: build the `prometheus` and `promtool` binaries (includes building and compiling in web assets)
2015-09-17 16:20:38 +00:00
* *test*: run the tests
2017-04-07 11:46:06 +00:00
* *test-short*: run the short tests
2015-09-17 16:20:38 +00:00
* *format*: format the source code
* *vet*: check the source code for common errors
2022-04-27 12:18:12 +00:00
* *assets*: build the React UI
2013-06-13 13:17:03 +00:00
2022-03-29 13:48:48 +00:00
### Service discovery plugins
Prometheus is bundled with many service discovery plugins.
When building Prometheus from source, you can edit the [plugins.yml ](./plugins.yml )
file to disable some service discoveries. The file is a yaml-formated list of go
import path that will be built into the Prometheus binary.
After you have changed the file, you
need to run `make build` again.
If you are using another method to compile Prometheus, `make plugins` will
generate the plugins file accordingly.
If you add out-of-tree plugins, which we do not endorse at the moment,
additional steps might be needed to adjust the `go.mod` and `go.sum` files. As
always, be extra careful when loading third party code.
2021-02-09 14:50:36 +00:00
### Building the Docker image
The `make docker` target is designed for use in our CI system.
You can build a docker image locally with the following commands:
$ make promu
$ promu crossbuild -p linux/amd64
2021-06-15 21:16:21 +00:00
$ make npm_licenses
2021-02-09 14:50:36 +00:00
$ make common-docker-amd64
*NB* if you are on a Mac, you will need [gnu-tar ](https://formulae.brew.sh/formula/gnu-tar ).
2022-04-14 20:23:47 +00:00
## Using Prometheus as a Go Library
### Remote Write
We are publishing our Remote Write protobuf independently at
[buf.build ](https://buf.build/prometheus/prometheus/assets ).
You can use that as a library:
```shell
$ go get go.buf.build/protocolbuffers/go/prometheus/prometheus
```
This is experimental.
### Prometheus code base
In order to comply with [go mod ](https://go.dev/ref/mod#versions ) rules,
Prometheus release number do not exactly match Go module releases. For the
Prometheus v2.y.z releases, we are publishing equivalent v0.y.z tags.
Therefore, a user that would want to use Prometheus v2.35.0 as a library could do:
```
$ go get github.com/prometheus/prometheus@v0.35.0
```
This solution makes it clear that we might break our internal Go APIs between
minor user-facing releases, as [breaking changes are allowed in major version
zero](https://semver.org/#spec-item-4).
2019-11-14 18:53:10 +00:00
## React UI Development
2022-04-27 12:18:12 +00:00
For more information on building, running, and developing on the React-based UI, see the React app's [README.md ](web/ui/README.md ).
2019-11-14 18:53:10 +00:00
2014-11-21 12:27:28 +00:00
## More information
2013-05-06 08:54:27 +00:00
2022-04-27 12:15:39 +00:00
* Godoc documentation is available via [pkg.go.dev ](https://pkg.go.dev/github.com/prometheus/prometheus ). Due to peculiarities of Go Modules, v2.x.y will be displayed as v0.x.y.
2020-10-21 07:37:18 +00:00
* You will find a CircleCI configuration in [`.circleci/config.yml` ](.circleci/config.yml ).
2016-11-10 06:45:09 +00:00
* See the [Community page ](https://prometheus.io/community ) for how to reach the Prometheus developers and users on various communication channels.
2013-03-28 14:54:40 +00:00
2013-04-14 04:59:55 +00:00
## Contributing
2021-02-22 19:19:08 +00:00
Refer to [CONTRIBUTING.md ](https://github.com/prometheus/prometheus/blob/main/CONTRIBUTING.md )
2013-04-14 04:59:55 +00:00
2013-01-24 20:56:08 +00:00
## License
2012-11-26 19:11:34 +00:00
2021-02-22 19:19:08 +00:00
Apache License 2.0, see [LICENSE ](https://github.com/prometheus/prometheus/blob/main/LICENSE ).
2015-12-21 17:09:38 +00:00
[hub]: https://hub.docker.com/r/prom/prometheus/
[circleci]: https://circleci.com/gh/prometheus/prometheus
2016-04-26 15:23:41 +00:00
[quay]: https://quay.io/repository/prometheus/prometheus