# Get the latest version of pushgateway from prometheus.io, then download and extract: | |
$ wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz | |
$ tar -xvf pushgateway-0.8.0.linux-amd64.tar.gz | |
# Create the pushgateway user: | |
$ useradd --no-create-home --shell /bin/false pushgateway | |
# Move the binary in place and update the permissions to the user that we created: | |
$ cp pushgateway-0.8.0.linux-amd64/pushgateway /usr/local/bin/pushgateway | |
$ chown pushgateway:pushgateway /usr/local/bin/pushgateway | |
# Create the systemd unit file: | |
$ cat > /etc/systemd/system/pushgateway.service << EOF | |
[Unit] | |
Description=Prometheus Pushgateway | |
Wants=network-online.target | |
After=network-online.target | |
[Service] | |
User=pushgateway | |
Group=pushgateway | |
Type=simple | |
ExecStart=/usr/local/bin/pushgateway | |
[Install] | |
WantedBy=multi-user.target | |
EOF | |
# Reload systemd and restart the pushgateway service: | |
$ systemctl daemon-reload | |
$ systemctl restart pushgateway | |
# Ensure that pushgateway has been started: | |
$ systemctl status pushgateway | |
# Configure Prometheus | |
$ cat /etc/prometheus/prometheus.yml | |
global: | |
scrape_interval: 15s | |
scrape_configs: | |
- job_name: 'prometheus' | |
scrape_interval: 5s | |
static_configs: | |
- targets: ['localhost:9090'] | |
- job_name: 'node_exporter' | |
scrape_interval: 5s | |
static_configs: | |
- targets: ['localhost:9100'] | |
- job_name: 'pushgateway' | |
honor_labels: true | |
static_configs: | |
- targets: ['localhost:9091'] | |
$ systemctl restart prometheus | |
# Push metrics to pushgateway | |
# First we will look at a bash example to push metrics to pushgateway: | |
$ echo "cpu_utilization 20.25" | curl --data-binary @- http://localhost:9091/metrics/job/my_custom_metrics/instance/10.20.0.1:9000/provider/hetzner | |
# Have a look at pushgateway’s metrics endpoint: | |
$ curl -L http://localhost:9091/metrics/ | |
# TYPE cpu_utilization untyped | |
cpu_utlization{instance="10.20.0.1:9000",job="my_custom_metrics",provider="hetzner"} 20.25 | |
# Python example on how we can push metrics to pushgateway: | |
import requests | |
job_name='my_custom_metrics' | |
instance_name='10.20.0.1:9000' | |
provider='hetzner' | |
payload_key='cpu_utilization' | |
payload_value='21.90' | |
response = requests.post('http://localhost:9091/metrics/job/{j}/instance/{i}/team/{t}'.format(j=job_name, i=instance_name, t=team_name), data='{k} {v}\n'.format(k=payload_key, v=payload_value)) | |
print(response.status_code) | |
With this method, you can push any custom metrics (bash, lambda function, etc) to pushgateway and allow prometheus to consume that data into it’s time series database. |
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND