Step 1: Create Prometheus system group
Let’s start by creating the Prometheus system user and group.
sudo groupadd --system prometheus
The group with ID < 1000 is a system group. Once the system group is added, create Prometheus system user and assign primary group created.
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
Step 2: Create data & configs directories for Prometheus
Prometheus needs a directory to store its data. We will create this under /var/lib/prometheus.
sudo mkdir /var/lib/prometheus
Prometheus primary configuration files directory is /etc/prometheus/. It will have some sub-directories:
for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
Step 3: Download Prometheus
We need to download the latest release of Prometheus archive and extract it to get binary files. You can check releases from Prometheus releases Github page.
Install wget.
sudo apt update sudo apt -y install wget curl vim
Then download latest binary archive for Prometheus.
mkdir -p /tmp/prometheus && cd /tmp/prometheus curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
Extract the file:
tar xvf prometheus*.tar.gz cd prometheus*/
Move the binary files to /usr/local/bin/ directory.
sudo mv prometheus promtool /usr/local/bin/
Check installed version:
$ prometheus --version prometheus, version 2.15.2 (branch: HEAD, revision: d9613e5c466c6e9de548c4dae1b9aabf9aaf7c57) build user: root@688433cf4ff7 build date: 20200106-14:50:51 go version: go1.13.5 $ promtool --version promtool, version 2.15.2 (branch: HEAD, revision: d9613e5c466c6e9de548c4dae1b9aabf9aaf7c57) build user: root@688433cf4ff7 build date: 20200106-14:50:51 go version: go1.13.5
Move Prometheus configuration template to /etc directory.
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
Also move consoles and console_libraries to /etc/prometheus directory:
sudo mv consoles/ console_libraries/ /etc/prometheus/
Step 4: Configure Prometheus on Debian / Ubuntu
Create or edit a configuration file for Prometheus – /etc/prometheus/prometheus.yml.
sudo vim /etc/prometheus/prometheus.yml
The template configurations should look similar to below:
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090']
You can edit the file to your default liking and save it.
Create a Prometheus systemd Service unit file
To be able to manage Prometheus service with systemd, you need to explicitly define this unit file.
sudo tee /etc/systemd/system/prometheus.service<<EOF [Unit] Description=Prometheus Documentation=https://prometheus.io/docs/introduction/overview/ Wants=network-online.target After=network-online.target [Service] Type=simple User=prometheus Group=prometheus ExecReload=/bin/kill -HUP \$MAINPID ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.external-url= SyslogIdentifier=prometheus Restart=always [Install] WantedBy=multi-user.target EOF
Change directory permissions.
Change the ownership of these directories to Prometheus user and group.
for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done sudo chown -R prometheus:prometheus /var/lib/prometheus/
Reload systemd daemon and start the service:
sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus
Check status using systemctl status prometheus command:
$ systemctl status prometheus
If your server has a running firewall service, you’ll need to open port 9090.
sudo ufw allow 9090/tcp
Confirm that you can connect to port 9090 by access the Prometheus server IP address / DNS name in your web browser.