Panto is a platform for monitoring your infrastructure, servers and applications in production. Agents collect metrics about your systems in real time, and report their health and performance to the server. The server stores metrics, evaluates the state according to user-defined rules, and, in case the state is considered dysfunctional, dispatches alerts to your teams.
⚠️ Note: all commands prepended with a #
prompt might need to be run as root
or using sudo
. The commands started with a $
prompt could be run as any unprivileged user, except stated otherwise.
There are plenty of way to install Panto in your environment, check out the detailed documentation for your prefered methods.
The recommended setup to run a panto-server
instance is to use the Docker Compose version. After making sure docker-compose
is installed, download the docker-compose.yml
file to your computer, you can edit it to adapt the configuration to your environment.
This will download all the necessary images from the official repositories, and run all containers and connect the pieces for you.
By default, this will start all the components (the panto-server
, the TSDB, one panto-agent
and the panto-web
), and will expose the following ports:
TCP/7575
: panto-server
, gRPC interfaceTCP/7576
: panto-server
, REST interfaceTCP/8080
: panto-web
, the web applicationThe recommended setup to run a panto-agent
instance is to use a package version.
Debian packages are available in a dedicated apt repository:
$ wget -qO- https://packages.panto.app/pantomath.key | sudo apt-key add -
$ echo "deb https://packages.panto.app/debian stable main" | sudo tee /etc/apt/sources.list.d/panto.list
$ sudo apt update
You can now install the package:
$ sudo apt install panto-agent
Once you’ve downloaded and installed the Panto files, it’s time to get Panto running. Panto comes in three parts: the server, the agents and the web client.
The server is the “brain” of Panto. It stores the monitoring data for your environment: the metrics from your targets, and the setup of targets, probes and agents in your infrastructure. This is where the agents will report metrics from targets; this is where the web client will fetch and send data to display and update your environment; this is where alerts will be spawned when an agent reports critical behavior.
Now the docker-compose.yml
is confiugred, type:
$ docker-compose up
from the same directory as the docker-compose.yml
file.
When running for the first time, you need to initialize the persistent database. Use the following command, once the docker compose is up:
$ docker exec -it panto-server /usr/bin/panto-ctl init data
You will be asked for your Organization
, and to create your first User
.
⚠️ Note: The panto-agent
container of this docker-compose
might not be working until you configured it.
To learn more about configuration options, use panto --help
or see the documentation.
The web client is a static web application that runs in the browser. The client is the main frontend to display metrics, create targets, configure alerts, etc. Panto uses Caddy to serve the files. This part is included in the docker-compose
setup, so you don’t have to run it manually, but you will need to configure a proxy.
To learn more about setup and configuration options, see the documentation.
The agents are the workers of your Panto environment. Agents collect performance and application metrics and report back to the Panto server.
Before you run the agent, make sure it is declared on the server, and you have the configuration file (e.g. /etc/panto/panto-agent.yaml
) properly updated. The panto-agent
is registered as a service, so you can type:
$ sudo service panto-agent start
To learn more about configuration options, use panto-agent --help
or check the documentation.
You can connect directly to your panto
or panto-web
applications, or you can have them behind a proxy, such as nginx. Installing nginx is out of the scope of this documentation, but here are examples of configuration. Obviously, you’ll need to adapt these, to include a proper TLS certificate, or to setup logs. The configurations shown focus on the proxy part.
For panto-web
, it’s pretty simple, as the application is serving HTTP content:
upstream panto-web {
server localhost:8080 fail_timeout=0;
}
server {
listen 443 ssl;
server_name panto.app;
location / {
proxy_pass http://panto-web;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
if ($uri != '/') {
expires 30d;
}
}
}
For panto
, there are 2 sides: the gRPC server, and the REST gateway. The latter is as straightforward as panto-web
:
upstream panto-api {
server localhost:7576 fail_timeout=0;
}
server {
listen 443 ssl;
server_name api.panto.app;
location / {
proxy_pass http://panto-api;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
The gRPC server can also be proxied, using the gRPC module (introduced in nginx-1.13.10: read announcement).
server {
listen 443 ssl http2;
server_name rpc.panto.app;
location / {
grpc_pass grpc://127.0.0.1:7575;
}
}
Note that this configuration assumes that gRPC is started with --no-tls
activated, and the TLS part is handled by the nginx (so the agent must not use --no-tls
). Please refer to the official documentation for other options.
Once you’ve successfully configured a server and a web client, it’s time to start using Panto. Follow these step-by-step instructions to get your first environment up and running.
To begin, you will deploy an Agent on your server.
Your Agent has now been created, but you still need to run it on the server to start collecting metrics. The following dialog guides you along the last steps to get an Agent running. Until the Agent has connected to the server for the first time, you should see a spinning animation in the lower part of the dialog.
panto-agent
as a service. See the documentation to find out how to setup panto-agent
as a service with systemd
or init
.Congratulations! You’ve successfully deployed your first Panto Agent. To see the status of the Agent, navigate to the Environment page, find your Agent in the left sidebar on the left, and click the cog icon to open the Agent settings dialog.
You can see the time the Agent was last seen by the server, as well as the version of the Agent at that time.
You now have an Agent running, speaking with the server. But in order to start collecting monitoring data, you need to configure a Probe on this Agent.
The job of the Agent is to collect monitoring metrics on a Target, and report them to the server. By configuring Probes on the Agent, you can decide what type of data to collect and how. In the Environment page, select your Agent and you should see the Probe catalog.
Probes act as plugins; if you can’t find the plugin you need, you can drop a feature request on our GitLab page. Or develop it yourself and submit a Merge Request, as Panto is open-source software.
If you checked the “Create Target and setup default Probe configuration for new Agent” option when creating the Agent, a number of Probes are already configured on your Agent. Follow these steps to create a new Probe Configuration.
Throughout this example, we will choose the Ping probe. Ping sends ICMP packets to a target and collects data on the exchange. It is often used as a simple “liveness” test for distant servers.
target.pantomath.io
address, and leave the other options to defaultBefore you continue configuring your Probe, you need to define a Target to monitor. A Target is any piece of your equipment you want to track and collect monitoring metrics about: a database server, an application server, a switch or router, etc. Here’s how to create and assign a Target to your Probe configuration.
target.pantomath.io
server. As with the Agent, where applicable, we recommend choosing an FQDN as the Target name. Click the “Create” button.Now that your Target is set, the Probe is completely configured, and you can finish configuring the Probe on this Agent with the “Next” button.
If the Agent is still running on your server, it should update its configuration automatically and start gathering Ping data about the Target and reporting it to the server. To make good use of this data, you need to define what constitutes a functional or dysfunctional state in your system.
Without States, a Probe only reports measurements to the server. You can display the metrics in a graph in the Dashboard, or query them through the API. However, Panto cannot use these metrics to recognize dysfunctional states, and take action (such as alerting your team) in case such a state occurs. States can be configured as soon as you have configured a Probe to run on an Agent (monitoring a Target).
You can define 2 States of increasing importance:
Here’s how to configure Panto to set a Critical state when the average Ping return-trip time takes over 300ms.
There are two types of combinations of conditions: All or Any. A State of type “All” needs all conditions to be met for the State to be set (logical AND); a State in “Any” type will be set if any of the conditions is met (logical OR).
avg
in the Metrics drop-down list.>
in the Operator drop-down list.300000000
in the Value field (300,000,000ns = 300ms)Your Critical state is now configured. If the Agent reports an average return-trip time of over 300ms for the execution of a Ping probe on this Target, a Critical state will be set on this configuration until an execution of the Probe does not verify these conditions anymore.
Now that your Agent is running, reporting Ping metrics to the server, and the server can tell when the report requires attention, you can setup an Alert to notify you when an issue occurs. Here’s how:
In the following dialog,
An Alert is sent on a Channel. A Channel represents a way to contact you or your team, in case Panto detects an unusual state. You can configure e-mail, Slack, SMS (via Twilio)… Here, we’ll configure our Alert to notify via e-mail.
Congratulations! You now have Panto setup to alert you by e-mail any time your Agent detects a slow ping on your Target.
You can configure more Agents, Targets, Probes and Alerts using the same steps. You can also discover the other sections by navigating to the Pulse or Dashboard pages. Find out more about Panto by reading the documentation.