Skip to content

Task: Monitoring Your Actuated Usage

Our team monitors actuated around the clock, on your behalf

The actuated team proactively monitors your servers and build queue for issues. We remediate them on your behalf and for anything cannot be fixed remotely, we'll be in touch via Slack or email.

Monitoring with the CLI

The actuated CLI should be used for support, to query the agent's logs, or the logs of individual VMs.

Monitoring with Grafana

If you would also like to do your own monitoring, you can purchase a monitoring add-on, which will expose metrics for your own Prometheus instance. You can then set up a Grafana dashboard to view the metrics.

The monitoring add-on provides:

  • Control-plane metrics such as queue-depth, delayed VM launches, and failed jobs.
  • Server metrics such as VMs running, load averages, and network I/O.

To opt-in, follow the instructions in the dashboard.

Scrape the metrics

Metrics are currently made available through Prometheus federation. Prometheus can be run with Docker, as a Kubernetes deployment, or as a standalone binary.

You can add a scrape target to your own Prometheus instance, or you can use the Grafana Agent to do that and ship off the metrics to Grafana Cloud.

Here is an example sample scrape config for Prometheus:

scrape_configs:
  - job_name: "actuated"

    bearer_token: "xyz"
    scheme: https
    metrics_path: /api/v1/metrics/federate

    # Note: this value cannot be changed lower than 60s due to rate-limiting
    scrape_interval: 60s
    scrape_timeout: 5s
    static_configs:
    - targets: ["actuated-controlplane.example.com:443"]

The bearer_token is a secret, and unique per customer. Only a bcrypt hash is stored in the control-plane, along with a mapping between GitHub organisations and the token.

The scrape_interval must be 60s, or higher to avoid rate-limiting.

The value actuated-controlplane.example.com is a placeholder, you can request the endpoint from the actuated team.

Control-plane metrics

Check the pending build queue depth:

actuated_controller_db_queued_status>0

Check for delayed VM launches (due to insufficient capacity):

sum by(owner) ( rate(actuated_controller_vm_launch_delayed_total
[$__rate_interval]) )>0

Failed jobs:

sum by (owner) (actuated_controller_job_failed_total{}) > 0

Rate of jobs queued:

sum by(owner) ( rate(actuated_controller_job_queued_total[$__rate_interval]) ) > 0   

Rate of VMs launched:

sum by(owner) (rate(actuated_controller_vm_launch_total [$__rate_interval]))>0

Server metrics

VMs running by host:

sum by(job) (actuated_vm_running_gauge) > 0 

Free RAM by host:

actuated_system_memory_available_bytes{}

VM launch total:

sum by(job) ( actuated_vm_launch_total )

Load averages by host:

actuated_system_load_avg_1

actuated_system_load_avg_5

actuated_system_load_avg_15

Net I/O from egress adapter:

sum by( job) (  actuated_system_egress_rx )

sum by( job) (  actuated_system_egress_tx )