> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livepeer.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Tools & Dashboards

> Monitor a Livepeer gateway with Explorer, Livepeer Tools, livepeercli, and Arbiscan - what each tool shows, which to use when, and how to read the data.

export const BorderedBox = ({children, variant = "default", padding = "var(--lp-spacing-4)", borderRadius = "var(--lp-spacing-px-8)", margin = "", accentBar = "", style = {}, className = "", ...rest}) => {
  const variants = {
    default: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "var(--lp-color-bg-card)"
    },
    accent: {
      border: "1px solid var(--lp-color-accent)",
      backgroundColor: "var(--lp-color-bg-card)"
    },
    muted: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "transparent"
    }
  };
  const accentBarColors = {
    accent: "var(--lp-color-accent)",
    positive: "var(--green-9)"
  };
  return <div data-docs-bordered-box="" data-accent-bar={accentBarColors[accentBar] ? "" : undefined} className={className} style={{
    ...variants[variant],
    padding: padding,
    borderRadius: borderRadius,
    ...margin ? {
      margin
    } : {},
    ...accentBarColors[accentBar] ? {
      position: "relative",
      '--accent-bar-color': accentBarColors[accentBar]
    } : {},
    ...style
  }} {...rest}>
      {children}
    </div>;
};

export const TableCell = ({children, align = "left", header = false, style = {}, className = "", ...rest}) => {
  const Component = header ? "th" : "td";
  return <Component className={className} style={{
    padding: "0.75rem 1rem",
    textAlign: align,
    border: header ? "none" : "1px solid var(--lp-color-border-default)",
    ...style
  }} {...rest}>
      {children}
    </Component>;
};

export const TableRow = ({children, header = false, hover = false, style = {}, className = "", ...rest}) => {
  const rowId = `table-row-${Math.random().toString(36).substr(2, 9)}`;
  return <>
      {hover && <style>{`
          #${rowId}:hover {
            background-color: var(--lp-color-bg-card);
          }
        `}</style>}
      <tr id={rowId} className={className} style={{
    ...header && ({
      backgroundColor: "var(--lp-color-accent-strong)",
      color: "var(--lp-color-on-accent)",
      fontWeight: "bold"
    }),
    ...style
  }} {...rest}>
        {children}
      </tr>
    </>;
};

export const StyledTable = ({children, variant = "default", style = {}, className = "", ...rest}) => {
  const wrapperVariants = {
    default: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "var(--lp-color-bg-card)",
      overflow: "hidden"
    },
    bordered: {
      border: "2px solid var(--lp-color-accent)",
      backgroundColor: "var(--lp-color-bg-page)",
      overflow: "hidden"
    },
    minimal: {
      border: "none",
      backgroundColor: "transparent",
      overflow: "visible"
    }
  };
  return <div data-docs-styled-table-shell className={className} style={{
    width: "100%",
    padding: 0,
    margin: 0,
    ...wrapperVariants[variant],
    ...style
  }} {...rest}>
      <table data-docs-styled-table style={{
    width: "100%",
    borderCollapse: "collapse",
    borderSpacing: 0,
    margin: 0,
    backgroundColor: "transparent"
  }}>
        {children}
      </table>
    </div>;
};

export const GotoCard = ({label, relativePath, icon, text, cta = '', className = '', style = {}, ...props}) => {
  icon = icon ? icon : 'arrow-turn-down-right';
  return <Card title={label} icon={icon} href={relativePath} cta={cta} className={className} style={style} {...props}>
      {text}
    </Card>;
};

export const LinkArrow = ({href, label, description, newline = true, borderColor, className = '', style = {}, ...rest}) => {
  const linkArrowStyle = {
    display: 'inline-flex',
    alignItems: 'center',
    justifyContent: 'center',
    gap: "var(--lp-spacing-1)",
    width: 'fit-content',
    ...borderColor && ({
      borderColor
    })
  };
  return <span className={className} style={style} {...rest}>
      {newline && <br />}
      <span style={linkArrowStyle}>
        <a href={href} target="_blank" rel="noopener noreferrer">
          {label}
        </a>
        <Icon icon="arrow-up-right" size={14} color="var(--lp-color-accent)" />
      </span>
      {description && description}
      {description && <div style={{
    height: "var(--lp-spacing-3)"
  }} />}
    </span>;
};

export const CustomDivider = ({color = "var(--lp-color-border-default)", middleText = "", spacing = "default", style = {}, className = "", ...rest}) => {
  const spacingPresets = {
    default: {
      margin: "24px 0"
    },
    overlap: {
      margin: "-1rem 0 -1rem 0"
    },
    tight: {
      margin: "0 0 -1rem 0"
    },
    section: {
      margin: "0 0 -2rem 0"
    },
    sectionOverlap: {
      margin: "-1rem 0 -2rem 0"
    },
    deepOverlap: {
      margin: "-1rem 0 -1.5rem 0"
    }
  };
  const spacingStyle = spacingPresets[spacing] || spacingPresets.default;
  return <div role="separator" aria-orientation="horizontal" className={className} style={{
    display: "flex",
    alignItems: "center",
    ...spacingStyle,
    fontSize: style?.fontSize || "16px",
    height: "fit-content",
    ...style
  }} {...rest}>
      <span style={{
    marginRight: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
      </span>
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      {middleText && <>
          <Icon icon="circle" size={2} />
          <span style={{
    margin: "0 8px",
    fontWeight: "bold",
    color: color,
    opacity: 0.7
  }}>
            {middleText}
          </span>
          <Icon icon="circle" size={2} />
        </>}
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      <span style={{
    marginLeft: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <span style={{
    display: "inline-block",
    transform: "scaleX(-1)"
  }}>
          <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
        </span>
      </span>
    </div>;
};

<Tip>
  Gateway monitoring spans three categories: **Dashboards** (Explorer, Livepeer Tools), **On-chain** (Arbiscan), and **CLI Tools** (livepeer\_cli, HTTP API).
  <br /> Use the View Dropdown on the right side panel to toggle.
</Tip>

<CustomDivider style={{margin: "-1rem 0 -1rem 0"}} />

This is the second of five monitoring guides. Four tools form the Gateway operator's monitoring toolkit, each answering different questions. For time-series metrics and alerting, see <LinkArrow href="/v2/gateways/guides/monitoring-and-tooling/monitoring-setup" label="Monitoring Setup" newline={false} />.

## Quick Reference

<AccordionGroup>
  <Accordion title="Funding and deposits" icon="coins">
    **livepeer\_cli** Option 1 (Get node status) for the current balance. **Arbiscan** for the full deposit history and on-chain confirmation. See <LinkArrow href="/v2/gateways/guides/monitoring-and-tooling/on-chain-metrics" label="On-Chain Metrics" newline={false} /> for detailed workflows.
  </Accordion>

  <Accordion title="Orchestrator availability and pricing" icon="server">
    **Livepeer Explorer** for the registered set with pricing and capacity. **livepeer\_cli** for what the node currently sees. For AI Orchestrators specifically, **Livepeer Tools** shows which pipelines are active network-wide.
  </Accordion>

  <Accordion title="Job routing and AI health" icon="brain">
    **Livepeer Tools** for network-wide AI Orchestrator status. `curl http://localhost:8935/health` to confirm the Gateway is responding. Run a test job if routing seems stuck.
  </Accordion>

  <Accordion title="GPU and hardware" icon="microchip">
    `curl http://localhost:8935/hardware/stats` for GPU utilisation, memory used/total, and temperature.
  </Accordion>

  <Accordion title="Historical metrics and alerting" icon="chart-line">
    **Prometheus + Grafana** via the <LinkArrow href="/v2/gateways/guides/monitoring-and-tooling/monitoring-setup" label="Monitoring Setup" newline={false} /> guide. Livepeer\_cli and the HTTP API show current state only.
  </Accordion>
</AccordionGroup>

<CustomDivider style={{margin: "0 0 -2rem 0"}} />

## Overview

<StyledTable>
  <TableRow header>
    <TableCell header>Tool</TableCell>
    <TableCell header>What it shows</TableCell>
    <TableCell header>Node types</TableCell>
    <TableCell header>Access</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>**Livepeer Explorer**</TableCell>
    <TableCell>On-chain data: Orchestrators, staking, Gateway registrations</TableCell>
    <TableCell><Badge color="blue">Video</Badge> <Badge color="green">Dual</Badge></TableCell>
    <TableCell>[explorer.livepeer.org](https://explorer.livepeer.org)</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>**Livepeer Tools**</TableCell>
    <TableCell>Gateway performance metrics, network-wide AI view</TableCell>
    <TableCell><Badge color="blue">Video</Badge> <Badge color="purple">AI</Badge> <Badge color="green">Dual</Badge></TableCell>
    <TableCell>[tools.Livepeer.cloud](https://tools.livepeer.cloud)</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>**Arbiscan**</TableCell>
    <TableCell>Contract events: ticket redemptions, deposit changes, gas</TableCell>
    <TableCell><Badge color="blue">Video</Badge> <Badge color="green">Dual</Badge></TableCell>
    <TableCell>[Arbiscan.io](https://arbiscan.io)</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>**livepeer\_cli**</TableCell>
    <TableCell>Local node status: deposit, reserve, sessions, config</TableCell>
    <TableCell><Badge color="blue">Video</Badge> <Badge color="purple">AI</Badge> <Badge color="green">Dual</Badge></TableCell>
    <TableCell>CLI on host or Docker</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>**CLI HTTP API**</TableCell>
    <TableCell>Programmatic node status and configuration</TableCell>
    <TableCell><Badge color="blue">Video</Badge> <Badge color="purple">AI</Badge> <Badge color="green">Dual</Badge></TableCell>
    <TableCell>`http://localhost:5935/*`</TableCell>
  </TableRow>
</StyledTable>

[//]: # "REVIEW: Confirm the canonical Livepeer Tools URL and keep this page aligned with it."

<CustomDivider style={{marginBottom: "-2rem"}} />

## Tools and Dashboards Detail

<Tabs>
  <Tab title="Livepeer Explorer" icon="gauge-high">
    <BorderedBox variant="accent">
      ## <Icon icon="computer" size={20} color="var(--accent)" />  Livepeer Explorer

      The Livepeer Explorer is the primary tool for on-chain data about the network. It surfaces Orchestrator information, staking, and Gateway registrations from Arbitrum One.

      <Tip>
        Gateway-specific views in the Explorer are currently in development. Some Gateway metrics may not yet be visible.
      </Tip>

      * **Orchestrator discovery:** Browse active Orchestrators, their capacity, advertised price per pixel, stake, and uptime. Useful for evaluating which Orchestrators to target.

      * **Verify Gateway registration:** On-chain Gateways appear in the Explorer after the first successful deposit transaction. Search by Gateway address to see on-chain activity.

      ### Gateway Explorer (Preview)

      Status: <Badge color="red"> In Development </Badge> [PR #410]("https://github.com/livepeer/explorer/pull/410")

      <LinkArrow label="Experimental Gateway Explorer Preview" href="https://explorer-arbitrum-one-git-feat-add-g-10dba1-livepeer-foundation.vercel.app/" />

      <iframe src="https://explorer-arbitrum-one-git-feat-add-g-10dba1-livepeer-foundation.vercel.app/gateways" height="600px" width="100%" style={{marginTop: "1rem"}} title="Embedded content from explorer-arbitrum-one-git-feat-add-g-10dba1-livepeer-foundation.vercel.app" />

      <br />

      <GotoCard relativePath="https://explorer.livepeer.org" icon="link" label="Livepeer Explorer" text="Browse Orchestrators, Gateways, and staking on Arbitrum One" />

      <GotoCard relativePath="https://github.com/livepeer/explorer" icon="github" label="Explorer Repository" text="Open source - contribute or self-host the Explorer" />
    </BorderedBox>
  </Tab>

  <Tab title="Cloud SPE Tools" icon="gauge-high">
    <BorderedBox variant="accent">
      ## <Icon icon="computer" size={20} color="var(--accent)" />  Cloud SPE Tools

      A community-built dashboard providing a network-wide view of Gateway and Orchestrator performance metrics.

      [//]: # "REVIEW: Confirm what Livepeer Tools currently exposes for Gateway operators, especially AI metrics."

      * **Network-wide AI view:** See which AI Orchestrators are active, what pipelines they support, and approximate load. Useful for choosing Orchestrators to add to `-orchAddr`.

      * **Gateway performance:** Compare Gateway performance against network averages. Identify whether problems (high latency, low success rates) are localised or network-wide.

      * **Historical metrics:** Unlike livepeer\_cli which shows current state only, Livepeer Tools provides time-series charts for trend analysis.

      <iframe src="https://tools.livepeer.cloud/gateways" height="600px" width="100%" title="Embedded content from tools.livepeer.cloud" />

      <br />

      <GotoCard relativePath="https://tools.livepeer.cloud" icon="link" label="Livepeer Tools Dashboard" text="Gateway and network performance metrics" />
    </BorderedBox>
  </Tab>

  <Tab title="CLI Tools" icon="terminal">
    <BorderedBox variant="accent">
      ## <Icon icon="tools" size={20} color="var(--accent)" /> livepeer\_cli

      The local command-line interface for a running Gateway node. It communicates with the node over HTTP on port 5935 (the CLI port, not the Gateway port).

      #### Starting livepeer\_cli

      ```bash icon="terminal" Start livepeer_cli theme={"theme":{"light":"github-light","dark":"dark-plus"}}
      # Binary installed on host
      livepeer_cli -host 127.0.0.1 -http 5935

      # Docker container
      docker exec -it <container_name> livepeer_cli -host <container_hostname> -http 5935
      ```

      [//]: # "REVIEW: Confirm the current livepeer_cli default port and whether the -host flag remains required."

      ### Key Options

      * **Option 1: Get node status** - the first thing to check. Output includes node version, network, ETH account address, current session count, and (for on-chain Gateways) deposit and reserve balance.

      * **Option 11: Deposit broadcasting funds** - triggers a deposit and reserve transaction to the TicketBroker contract on Arbitrum. Enter amounts in ETH.

      * **Option 16: Set max price per capability** - updates AI pipeline pricing (`-maxPricePerCapability`) at runtime.

      * **Set broadcast config** - adjusts `-maxPricePerUnit` and transcoding profiles without restarting the node.

      [//]: # "REVIEW: Confirm that the documented livepeer_cli options still match current builds."

      ### Docker usage

      When running the Gateway inside Docker, use the container hostname (not `localhost`):

      ```bash icon="terminal" Run livepeer_cli in Docker theme={"theme":{"light":"github-light","dark":"dark-plus"}}
      docker exec -it livepeer_gateway livepeer_cli -host livepeer_gateway -http 5935
      ```

      Using `localhost` inside Docker fails because it refers to the container itself, not the running Gateway process.
    </BorderedBox>
  </Tab>

  <Tab title="CLI Http API" icon="terminal">
    <BorderedBox variant="accent">
      ## <Icon icon="wifi" size={20} color="var(--accent)" /> CLI HTTP API

      The livepeer\_cli communicates with the node via an HTTP API on port 5935. Call this API directly for automation, scripting, or integration with external monitoring.

      ```bash icon="terminal" Query the CLI HTTP API theme={"theme":{"light":"github-light","dark":"dark-plus"}}
      # Get current node status
      curl http://localhost:5935/status

      # Get hardware stats
      curl http://localhost:8935/hardware/stats
      ```

      Full API reference: <LinkArrow href="/v2/gateways/resources/reference/technical/api-reference/CLI-HTTP/cli-http-api" label="CLI HTTP API Reference" newline={false} />
    </BorderedBox>
  </Tab>

  <Tab title="On-Chain" icon="link">
    <BorderedBox variant="accent">
      ## <Icon icon="ethereum" size={20} color="var(--accent)" /> Arbiscan

      Arbiscan is the block explorer for Arbitrum One - the authoritative source for what has happened on-chain.
      It covers contract event logs, transaction history, and token transfers.

      <br />

      Key use cases include

      * monitoring deposit and reserve changes,
      * tracking ticket redemptions,
      * detecting unexpected drain, and
      * setting up address watchlist notifications.

      <br />

      Contract Addresses:

      * TicketBroker (Target): 0xea1b0F6c8D158328a6e3D3F924B86A759F41465c
      * All Contract Adresses <LinkArrow href="/v2/about/resources/reference/livepeer-contract-addresses" label="Livepeer Contract Addresses" />

      <br />

      For detailed on-chain monitoring workflows, see <LinkArrow href="/v2/gateways/guides/monitoring-and-tooling/on-chain-metrics" label="On-Chain Metrics" newline={false} />.
      <br />For Livepeer contract addresses, see <LinkArrow href="/v2/about/resources/reference/livepeer-contract-addresses" label="Contract Addresses" newline={false} />.
    </BorderedBox>
  </Tab>
</Tabs>

## Related Pages

<CardGroup cols={3}>
  <Card title="Monitoring Setup" icon="chart-line" href="/v2/gateways/guides/monitoring-and-tooling/monitoring-setup">
    Prometheus + Grafana for time-series observability.
  </Card>

  <Card title="On-Chain Metrics" icon="cube" href="/v2/gateways/guides/monitoring-and-tooling/on-chain-metrics">
    TicketBroker events and Arbitrum contract inspection.
  </Card>

  <Card title="API Reference" icon="code" href="/v2/gateways/resources/reference/technical/api-reference/CLI-HTTP/cli-http-api">
    Full /health, /status, /hardware/stats endpoint docs.
  </Card>
</CardGroup>
