Netskope LogoNetskope Logo
  • Security Services
  • AI Services
  • Networking Services
  • Analytics Services
  • Integrations
  • getting-started.svgGetting Started
    • Support
    • Community
    • Netskope.com
    © 2026 All Rights Reserved. Netskope Inc.
    Home
    Netskope Private Access
    Publisher Management
    Manage a Publisher
    Enable Prometheus Telemetry on a Publisher

    Enable Prometheus Telemetry on a Publisher

    Netskope recommends to consume Digital Experience Management metrics for capacity and performance monitoring of your Netskope Publishers.

    Prometheus gives you a single, vendor-neutral way to collect, label, and query operational telemetry from anything that can expose an HTTP /metrics endpoint. Its pull model and PromQL make it easy to turn raw counters into rates, percentiles, and SLOs, while Alertmanager turns those signals into precise, low-noise alerts. That lets enterprises standardize on one time-series engine across hosts, containers, apps, and network gear (via exporters), without locking into a proprietary Network Monitoring System (NMS) or schema.

    In a Netskope Private Access (NPA) deployment, Prometheus neatly covers the infrastructure you own side of the equation. The Publisher hosts the broker user-to-app connectivity to the Netskope cloud. By scraping host (node_exporter) and container (cAdvisor) metrics from each Netskope Publisher, which you can deploy on Ubuntu or cloud/virtual platforms, you gain real-time visibility into CPU, memory, disk, NIC errors/drops, and container health that directly impact ZTNA reliability and capacity. 

    Custom Variables

    • Netskope Publisher (this host) IP: $PUBLISHER_IP. (For example: 10.0.0.21)
    • Prometheus NMS IP: $NMS_IP. (For example: 10.0.0.10)

    Ports used:

    • node_exporter: 9100/tcp
    • cAdvisor: 8080/tcp

    Install node_exporter (host metrics)

    Option A: Ubuntu package (fastest)

    sudo apt update
    sudo apt install -y prometheus-node-exporter
    # Listens on :9100

    Option B: Official binary (newer, common in prod)

    VER="1.9.1"
    cd /tmp
    curl -LO https://github.com/prometheus/node_exporter/releases/download/v${VER}/node_exporter-${VER}.linux-amd64.tar.gz
    tar xzf node_exporter-${VER}.linux-amd64.tar.gz
    sudo mv node_exporter-${VER}.linux-amd64/node_exporter /usr/local/bin/
    sudo useradd --no-create-home --shell /usr/sbin/nologin nodeexp || true
    
    sudo tee /etc/systemd/system/node_exporter.service >/dev/null <<'EOF'
    [Unit]
    Description=Prometheus Node Exporter (Netskope Publisher)
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=nodeexp
    Group=nodeexp
    ExecStart=/usr/local/bin/node_exporter \
      --web.listen-address=":9100" \
      --collector.systemd \
      --collector.processes
    # hardening
    ProtectSystem=strict
    ProtectHome=true
    NoNewPrivileges=true
    PrivateTmp=true
    PrivateDevices=true
    CapabilityBoundingSet=
    LockPersonality=true
    MemoryDenyWriteExecute=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now node_exporter

    The two collector flags enable extra, useful host metrics (systemd + processes).

    (Optional) Bind to the Publisher’s IP

    If you don’t want :9100 on all interfaces, bind it:

    1. Package install:
      sudo systemctl edit prometheus-node-exporter

    2. Paste:
      [Service]
      ExecStart=
      ExecStart=/usr/bin/prometheus-node-exporter --web.listen-address="$PUBLISHER_IP:9100" --collector.systemd --collector.processes

    3. Then:
      sudo systemctl daemon-reload
      sudo systemctl restart prometheus-node-exporter

    4. Binary install: change --web.listen-address=":9100" in the unit to
      "${PUBLISHER_IP}:9100" and restart.

    Install cAdvisor (for Docker metrics)

    cAdvisor exposes per-container CPU, memory, filesystem, and network I/O. It listens on :8080 and serves metrics at /metrics.

    sudo docker run -d --name=cadvisor --restart=always -p 8080:8080 \
      -v /:/rootfs:ro \
      -v /var/run:/var/run:ro \
      -v /sys:/sys:ro \
      -v /var/lib/docker/:/var/lib/docker:ro \
      gcr.io/cadvisor/cadvisor:latest

    Optional: manage via systemd (Docker)

    sudo tee /etc/systemd/system/cadvisor-docker.service >/dev/null <<'EOF'
    [Unit]
    Description=cAdvisor (Docker) - Netskope Publisher
    After=docker.service
    Requires=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm -f cadvisor
    ExecStart=/usr/bin/docker run --name=cadvisor -p 8080:8080 \
      -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro \
      -v /var/lib/docker/:/var/lib/docker:ro \
      gcr.io/cadvisor/cadvisor:latest
    ExecStop=/usr/bin/docker rm -f cadvisor
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo systemctl daemon-reload
    sudo systemctl enable --now cadvisor-docker

    Secure the Firewall

    Allow only the Prometheus Network Monitoring System (NMS) to scrape 9100 and 8080.

    sudo apt -y install ufw
    sudo ufw allow from $NMS_IP to any port 9100 proto tcp
    sudo ufw allow from $NMS_IP to any port 8080 proto tcp
    sudo ufw enable
    sudo ufw status

    Verify on the Netskope Publisher

    # Host metrics
    curl -s http://$PUBLISHER_IP:9100/metrics | head
    
    # Container metrics
    curl -s http://$PUBLISHER_IP:8080/metrics | head

    You should see metric names like node_cpu_seconds_total and container_cpu_usage_seconds_total.
    Check services:

    systemctl status prometheus-node-exporter || systemctl status node_exporter
    systemctl status cadvisor-docker

    Configure the Prometheus NMS to scrape this Publisher

    On the NMS, edit /etc/prometheus/prometheus.yml and add these jobs:

    scrape_configs:
      job_name: 'node'
        
    static_configs:
      targets: ['${PUBLISHER_IP}:9100']   # Netskope Publisher host metrics
    
    job_name: 'cadvisor'
      metrics_path: /metrics
    
    static_configs:
      targets: ['${PUBLISHER_IP}:8080']   # Netskope Publisher container metrics

    Reload Prometheus on the NMS:

    sudo systemctl reload prometheus || sudo systemctl restart prometheus

    Quick check on the NMS (Prometheus web > Status > Targets should show both jobs UP). In Explore/Graph, try:

    node_cpu_seconds_total{instance="${PUBLISHER_IP}:9100"}
    container_memory_usage_bytes{instance="${PUBLISHER_IP}:8080"}

    Alerts to Consider (defined on the NMS)

    Create alert rules for:

    • Node down: up{job="node"} == 0
    • High CPU (sustained)
    • Low memory available
    • Filesystem usage or inodes high
    • Container restarts / OOM (via cAdvisor)
    • Network errors/discards on host NICs

    Place rules under /etc/prometheus/rules/*.yml and load them via rule_files: in the NMS config.

    Troubleshooting Tips

    • Target DOWN in Prometheus
      From the NMS:
      curl -s http://$PUBLISHER_IP:9100/metrics | head
      curl -s http://$PUBLISHER_IP:8080/metrics | head

    • If these fail: check UFW, service status, and the bind addresses.
    • cAdvisor shows no containers. Ensure you used the Docker mount set correctly.
    • High CPU/IO from cAdvisor
      • Keep scrape interval at 15s initially; only lower if you truly need higher resolution.
      • Avoid enabling container-level label explosions in downstream queries
    In this Topic
    • Enable Prometheus Telemetry on a Publisher