How To Use Prometheus to Monitor Your Ubuntu 14.04 Server
Table of Contents
Introduction #
Prometheus is an open source monitoring system developed by SoundCloud. Like other monitoring systems, such as InfluxDB and Graphite, Prometheus stores all its data in a time series database. However, it offers a multi-dimensional data-model and a powerful query language, allowing system administrators to not only easily fine tune the definitions of their metrics, but also generate more accurate reports.
Additionally, the Prometheus project also includes PromDash (a browser-based tool that can be used to develop custom dashboards) and an experimental AlertManager capable of sending alerts via e-mail, Flowdock, Slack, HipChat and more.
In this tutorial, you will learn how to install, configure, and use the Prometheus Server, Node Exporter, and PromDash.
Prerequisites #
To follow this tutorial, you will need:
One 64-bit Ubuntu 14.04 Droplet with a sudo non-root user.
Note: If you must use a 32-bit server, make sure you replace -amd64 with -386 in all the filenames and links mentioned in this tutorial.
Step 1 — Installing Prometheus Server #
First, create a new directory to store all the files you download in this tutorial and move to it.
mkdir ~/Downloads
cd ~/Downloads
Use wget
to download the latest build of the Prometheus server and time-series database from GitHub.
wget "https://github.com/prometheus/prometheus/releases/download/0.15.1/prometheus-0.15.1.linux-amd64.tar.gz"
The Prometheus monitoring system consists of several components, each of which needs to be installed separately. Keeping all the components inside one parent directory is a good idea, so create one, and an additional subdirectory to store all the binaries of the Prometheus server.
mkdir -p ~/Prometheus/server
Enter the directory you just created.
cd ~/Prometheus/server
Use tar
to extract prometheus-0.15.1.linux-amd64.tar.gz
.
tar -xvzf ~/Downloads/prometheus-0.15.1.linux-amd64.tar.gz
This completes the installation of Prometheus server. Verify the installation by typing in:
./prometheus -version
You should see the following message on your screen:
Prometheus output
prometheus, version 0.15.1 (branch: master, revision: 64349aa)
build user: julius@julius-thinkpad
build date: 20150727-17:56:00
go version: 1.4.2
Step 2 — Installing Node Exporter #
Prometheus was developed for the purpose of monitoring web services. In order to monitor the metrics of your Ubuntu server, you should install a tool called Node Exporter. Node Exporter, as its name suggests, exports lots of metrics (such as disk I/O statistics, CPU load, memory usage, network statistics, and more) in a format Prometheus understands.
Create a new directory called node_exporter
inside the Prometheus
directory, and get inside it:
mkdir -p ~/Prometheus/node_exporter
cd ~/Prometheus/node_exporter
Use wget
to download the latest build of Node Exporter which is available on GitHub, and place it in the Downloads
directory.
wget https://github.com/prometheus/node_exporter/releases/download/0.11.0/node_exporter-0.11.0.linux-amd64.tar.gz -O ~/Downloads/node_exporter-0.11.0.linux-amd64.tar.gz
You can now use the tar
command to extract node_exporter-0.11.0.linux-amd64.tar.gz
.
tar -xvzf ~/Downloads/node_exporter-0.11.0.linux-amd64.tar.gz
Step 3 — Running Node Exporter as a Service #
To make it easy to start and stop Node Exporter, let us now convert it into a service.
Create a soft link to the node_exporter
binary in /usr/bin
.
sudo ln -s ~/Prometheus/node_exporter/node_exporter /usr/bin
Use nano
or your favorite text editor to create an Upstart configuration file called node_exporter.conf
.
sudo nano /etc/init/node_exporter.conf
This file should contain the link to the node_exporter
executable, and also specify when the executable should be started. Accordingly, add the following code:
/etc/init/node_exporter.conf
# Run node_exporter
start on startup
script
/usr/bin/node_exporter
end script
At this point, Node Exporter is available as a service which can be started using the service
command:
sudo service node_exporter start
After Node Exporter starts, use a browser to view its web interface available at http://your_server_ip:9100/metrics
. You should see a page with a lot of text:
http://your_server_ip:9100/metrics excerpt
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.00023853100000000002
go_gc_duration_seconds{quantile="0.25"} 0.00023998700000000002
go_gc_duration_seconds{quantile="0.5"} 0.00028122
. . .
Step 4 — Starting Prometheus Server #
Enter the directory where you installed the Prometheus server:
cd ~/Prometheus/server
Before you start Prometheus, you must first create a configuration file for it called prometheus.yml
.
nano ~/Prometheus/server/prometheus.yml
Copy the following code into the file.
~/Prometheus/server/prometheus.yml
scrape_configs:
- job_name: "node"
scrape_interval: "15s"
target_groups:
- targets: ['localhost:9100']
This creates a scrape_configs
section and defines a job called node
. It includes the URL of your Node Exporter’s web interface in its array of targets
. The scrape_interval
is set to 15 seconds so that Prometheus scrapes the metrics once every fifteen seconds.
You could name your job anything you want, but calling it “node” allows you to use the default console templates of Node Exporter.
Save the file and exit.
Start the Prometheus server as a background process.
nohup ./prometheus > prometheus.log 2>&1 &
Note that you redirected the output of the Prometheus server to a file called prometheus.log
. You can view the last few lines of the file using the tail
command:
tail ~/Prometheus/server/prometheus.log
Once the server is ready, you will see the following messages in the file:
prometheus.log excerpt
INFO[0000] Starting target manager... file=targetmanager.go line=75
INFO[0000] Listening on :9090 file=web.go line=118
Use a browser to visit Prometheus’s homepage available at http://your_server_ip:9090
. You’ll see the following homepage.
To make sure that Prometheus is scraping data from Node Exporter, click on the Graph tab at the top of the page. On the page that opens, type in the name of a metric (like node_procs_running, for example) in the text field that says Expression. Then, press the blue Execute button. Click Graph (next to Console) just below, and you should see a graph for that metric:
Prometheus has console templates that let you view graphs of a few commonly used metrics. These console template are accessible only if you set the value of job_name
to node
in Prometheus’s configuration.
Visit http://your_server_ip:9090/consoles/node.html
to access the Node Console and click on your server, localhost:9100
, to view its metrics:
Step 5 — Installing PromDash #
Though the Prometheus server allows you to view graphs and experiment with expressions, it is generally used only for debugging purposes or to run one-off queries. The preferred way to visualize the data in Prometheus’s time-series database is to use PromDash, a tool that allows you to create custom dashboards which are not only highly configurable but also better-looking.
Enter the Prometheus
directory:
cd ~/Prometheus
PromDash is a Ruby on Rails application whose source files are available on GitHub. In order to download and run it, you need to install Git, Ruby, SQLite3, Bundler, which is a gem dependency manager, and their dependencies. Use apt-get
to do so.
sudo apt-get update && sudo apt-get install git ruby bundler libsqlite3-dev sqlite3 zlib1g-dev
You can now use the git
command to download the source files.
git clone https://github.com/prometheus/promdash.git
Enter the promdash
directory.
cd ~/Prometheus/promdash
Use bundle
to install the Ruby gems that PromDash requires. As we will be configuring PromDash to work with SQLite3 in this tutorial, make sure you exclude the gems for MySQL and PostgreSQL using the --without
parameter:
bundle install --without mysql postgresql
Because PromDash depends on several gems, you will have to wait for a few minutes for this command to complete. Once done, you should see the following messages.
Bundle output
. . .
Your bundle is complete!
Gems in the groups mysql and postgresql were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Step 6 — Setting Up the Rails Environment #
Create a directory to store the SQLite3 databases associated with PromDash.
mkdir ~/Prometheus/databases
PromDash uses an environment variable called DATABASE_URL
to determine the name of the the database associated with it. Type in the following so that PromDash creates a SQLite3 database called mydb.sqlite3
inside the databases
directory:
echo "export DATABASE_URL=sqlite3:$HOME/Prometheus/databases/mydb.sqlite3" >> ~/.bashrc
In this tutorial, you will be running PromDash in production mode, so set the RAILS_ENV
environment variable to production
.
echo "export RAILS_ENV=production" >> ~/.bashrc
Apply the changes we made to the .bashrc
file.
. ~/.bashrc
Next, create PromDash’s tables in the SQLite3 database using the rake
tool.
rake db:migrate
Because PromDash uses the Rails Asset Pipeline, all the assets(CSS files, images and Javascript files) of the PromDash project should be precompiled. Type in the following to do so:
rake assets:precompile
Step 7 — Starting and Configuring PromDash #
PromDash runs on Thin, a light-weight web server. Start the server as a daemon by typing in the following command:
bundle exec thin start -d
Wait for a few seconds for the server to start and then visit http://your_server_ip:3000/
to view PromDash’s homepage.
Before you start creating your custom dashboards, you should let PromDash know the URL of your Prometheus server. You can do so by clicking on the Servers tab at the top. Click New Server, then in the form, give any name to your Prometheus server. Set the Url field to http://your_server_ip:9090
and the Server type field to Prometheus.
Finally, click on Create Server to complete the configuration. Your page will say Server was successfully created. and you can click back to Dashboards in the top menu.
Step 8 — Creating a Dashboard #
Because a Promdash dashboard should belong to a Promdash directory, first create a new directory by clicking on the New Directory. In the form that shows up, give a name to your directory, like My Dashboards, then click Create Directory.
Once you submit the form, you will be taken back to the homepage. Click on the New Dashboard button now to create a new dashboard. In the form shown, give a name to your dashboard, like Simple Dashboard and select the directory you just created from the drop-down menu.
After submitting the form, you will be able to see the new dashboard.
Your dashboard already has one graph, but it needs to be configured. Hovering over the graph’s header (which says Title) will reveal various icons that let you configure the graph. To change its title, you can click on the Graph and Axis Settings icon (fourth from the left) and type in a new title in the Graph Title field.
Click on the Datasources icon, which is the second to the left, to add one or more expressions to the graph. Click Add Expression, and in the field that says Enter Expression, enter node_procs_running.
Now click on the Refresh icon (the leftmost one) in the graph’s header to update the graph. Your dashboard now contains one fully configured graph. You can add more graphs by clicking on the Add Graph button at the bottom.
After making all the changes, make sure you click on the Save Changes button on the right to make your changes permanent. The next time you visit PromDash’s homepage, you will be able to see a link to your dashboard:
Conclusion #
You now have a fully functional Prometheus ecosystem running on your Ubuntu 14.04 server, and you can use PromDash to create monitoring dashboards that suit your requirements.
Even though you installed all the components on a single Ubuntu machine, you can easily monitor more machines by installing only Node Exporter on each of them, and adding the URLs of the new Node Exporters to the targets
array of prometheus.yml
.
You can learn more about Prometheus by referring to its documentation.