1
0
Fork 1
mirror of https://github.com/thatmattlove/hyperglass.git synced 2026-04-18 05:48:27 +00:00
thatmattlove-hyperglass/docs/pages/configuration/config/complete-config.mdx
Wilhelm Schonfeldt 8f7fcac4b1 docs: Add comprehensive configuration documentation and user guide
- Add complete configuration reference (complete-config.mdx) with detailed parameter documentation, examples, and descriptions for all config.yaml options
- Add user guide (user-guide.mdx) explaining hostname resolution, 'My IP' feature, query types, and troubleshooting for end users
- Add quick-start configuration examples (quick-start.mdx) with 8 real-world scenarios: minimal, corporate, privacy-focused, high-performance, ISP, enterprise, development, and monitoring setups
- Update navigation structure (_meta.tsx files) to integrate new documentation sections
- Provide comprehensive coverage of DNS-over-HTTPS hostname resolution, myip.wtf IP detection, web UI customization, logging/webhooks, structured output, and theme configuration
- Include practical examples, use cases, troubleshooting tips, and best practices throughout

This addresses documentation gaps by providing both technical reference material for administrators and user-focused guidance for end users, with extensive real-world configuration examples.
2025-09-26 12:12:27 +02:00

800 lines
No EOL
28 KiB
Text

---
title: Complete Configuration Reference
description: Comprehensive documentation for all config.yaml parameters with examples
---
import { Callout } from 'nextra/components'
import { DocsButton } from '~/components/docs-button'
# Complete Configuration Reference
This is a comprehensive reference for all available configuration options in hyperglass. The configuration is written in YAML format and saved as `config.yaml` in your hyperglass configuration directory.
## Top-Level Parameters
These parameters are configured at the root level of your `config.yaml` file.
### Basic Site Information
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `site_title` | String | `hyperglass` | The name of your hyperglass site. Used in HTML `<title>` tags and API documentation. |
| `org_name` | String | `Beloved Hyperglass User` | Your organization's name. Used in UI, API documentation, and HTML meta tags for SEO. |
| `site_description` | String | `{org_name} Network Looking Glass` | Short description of your site. Used for HTML meta description tag. `{org_name}` is automatically replaced. |
| `primary_asn` | String/Integer | `65001` | Your network's primary ASN. Used for defaults like subtitle and PeeringDB URL. |
#### Example: Basic Site Configuration
```yaml filename="config.yaml"
site_title: "ACME Networks Looking Glass"
org_name: "ACME Networks Inc."
site_description: "Network diagnostic tools for ACME Networks AS65000"
primary_asn: 65000
```
### System Parameters
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `request_timeout` | Integer | `90` | Global timeout in seconds for all requests. Frontend uses this exact value; backend uses value minus 1 second. |
| `fake_output` | Boolean | `false` | Enable fake static output for development/testing purposes. |
| `cors_origins` | Array | `[]` | List of allowed CORS hosts. By default, no CORS hosts are allowed. |
| `plugins` | Array | `[]` | List of paths to custom plugin files. |
#### Example: System Configuration
```yaml filename="config.yaml"
request_timeout: 120
fake_output: false # Set to true for testing
cors_origins:
- "https://network-tools.example.com"
- "https://monitoring.example.com"
plugins:
- "/etc/hyperglass/plugins/custom_validation.py"
```
---
## Cache Configuration
Controls how hyperglass caches query responses to improve performance.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `cache.timeout` | Integer | `120` | Cache timeout in seconds. How long responses are cached. |
| `cache.show_text` | Boolean | `true` | Whether to show cache timeout countdown to users. |
#### Example: Cache Configuration
```yaml filename="config.yaml"
cache:
timeout: 300 # Cache for 5 minutes
show_text: true # Show "Results cached for X seconds" to users
```
---
## API Documentation Configuration
Controls the automatically generated API documentation available at `/api/docs`.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `docs.enable` | Boolean | `true` | Enable or disable API documentation. |
| `docs.base_url` | String | `https://lg.example.net` | Base URL used in API request samples. |
| `docs.path` | String | `/api/docs` | HTTP path where API documentation is accessible. |
| `docs.title` | String | `{site_title} API Documentation` | API documentation title. `{site_title}` is automatically replaced. |
| `docs.description` | String | `` | Description appearing below the API documentation title. |
| `docs.mode` | String | `redoc` | Documentation UI style: `redoc` or `swagger`. |
### API Endpoint Documentation
Each API endpoint's documentation can be customized:
| Parameter | Type | Description |
| :-------- | :--- | :---------- |
| `docs.query.title` | String | Title for the query submission endpoint |
| `docs.query.description` | String | Description for the query submission endpoint |
| `docs.query.summary` | String | Summary text for the query submission endpoint |
| `docs.devices.title` | String | Title for the devices list endpoint |
| `docs.devices.description` | String | Description for the devices list endpoint |
| `docs.devices.summary` | String | Summary text for the devices list endpoint |
| `docs.queries.title` | String | Title for the supported queries endpoint |
| `docs.queries.description` | String | Description for the supported queries endpoint |
| `docs.queries.summary` | String | Summary text for the supported queries endpoint |
| `docs.info.title` | String | Title for the system information endpoint |
| `docs.info.description` | String | Description for the system information endpoint |
| `docs.info.summary` | String | Summary text for the system information endpoint |
#### Example: API Documentation Configuration
```yaml filename="config.yaml"
docs:
enable: true
base_url: "https://lg.acmenetworks.com"
path: "/api/docs"
title: "ACME Networks Looking Glass API"
description: "RESTful API for network diagnostic queries"
mode: "redoc"
# Customize individual endpoints
query:
title: "Execute Network Query"
description: "Submit traceroute, ping, or BGP lookup requests"
summary: "Network Diagnostics"
devices:
title: "Network Locations"
description: "Available routers and their capabilities"
summary: "Router List"
```
---
## Logging & Webhooks Configuration
Controls log output, file logging, syslog, and HTTP webhooks for query notifications.
### File Logging
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `logging.directory` | Path | `/tmp` | Directory where log files are stored. |
| `logging.format` | String | `text` | Log format: `text` or `json`. |
| `logging.max_size` | Size | `50MB` | Maximum log file size before rotation. |
### Syslog
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `logging.syslog.enable` | Boolean | `true` | Enable syslog logging. |
| `logging.syslog.host` | String | | Syslog server hostname or IP address. |
| `logging.syslog.port` | Integer | `514` | Syslog server port. |
### HTTP Webhooks
Send query notifications to external systems (Slack, Teams, custom endpoints).
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `logging.http.enable` | Boolean | `true` | Enable HTTP webhook logging. |
| `logging.http.provider` | String | `generic` | Webhook provider: `slack`, `msteams`, or `generic`. |
| `logging.http.host` | URL | | Webhook endpoint URL. |
| `logging.http.verify_ssl` | Boolean | `true` | Verify SSL certificates for HTTPS webhooks. |
| `logging.http.timeout` | Number | `5.0` | Webhook request timeout in seconds. |
| `logging.http.headers` | Object | `{}` | Custom HTTP headers to send with webhooks. |
| `logging.http.params` | Object | `{}` | Custom URL parameters to send with webhooks. |
#### Authentication for HTTP Webhooks
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `logging.http.authentication.mode` | String | `basic` | Authentication mode: `basic` or `api_key`. |
| `logging.http.authentication.username` | String | | Username for basic authentication. |
| `logging.http.authentication.password` | String | | Password for basic auth or API key value. |
| `logging.http.authentication.header` | String | `x-api-key` | Header name for API key authentication. |
#### Example: Complete Logging Configuration
```yaml filename="config.yaml"
logging:
directory: "/var/log/hyperglass"
format: "json"
max_size: "100MB"
# Send logs to syslog server
syslog:
enable: true
host: "syslog.example.com"
port: 514
# Send query notifications to Slack
http:
enable: true
provider: "slack"
host: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
timeout: 10.0
verify_ssl: true
```
#### Example: Custom Webhook with API Key
```yaml filename="config.yaml"
logging:
http:
enable: true
provider: "generic"
host: "https://monitoring.example.com/webhook"
authentication:
mode: "api_key"
password: "your-secret-api-key"
header: "Authorization"
headers:
"Content-Type": "application/json"
"User-Agent": "hyperglass-webhook"
```
---
## Messages Configuration
Customize error messages and user-facing text shown in the UI and API responses.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `messages.no_input` | String | `{field} must be specified.` | Shown when required field is missing. `{field}` shows field name. |
| `messages.target_not_allowed` | String | `{target} is not allowed.` | Shown when query target is denied by rules. `{target}` shows denied target. |
| `messages.feature_not_enabled` | String | `{feature} is not enabled.` | Shown when disabled query type is requested. `{feature}` shows feature name. |
| `messages.invalid_input` | String | `{target} is not valid.` | Shown for invalid query target values. `{target}` shows invalid input. |
| `messages.invalid_query` | String | `{target} is not a valid {query_type} target.` | Shown for query type/target mismatches. |
| `messages.invalid_field` | String | `{input} is an invalid {field}.` | Shown for invalid field values. |
| `messages.general` | String | `Something went wrong.` | Generic error message for unexpected errors. |
| `messages.not_found` | String | `{type} '{name}' not found.` | Shown when configuration object doesn't exist. |
| `messages.request_timeout` | String | `Request timed out.` | Shown when request exceeds timeout limit. |
| `messages.connection_error` | String | `Error connecting to {device_name}: {error}` | Shown for device connection failures. |
| `messages.authentication_error` | String | `Authentication error occurred.` | Shown for device authentication failures. |
| `messages.no_response` | String | `No response.` | Shown when no output can be read from device. |
| `messages.no_output` | String | `The query completed, but no matching results were found.` | Shown for successful queries with empty results. |
#### Example: Custom Messages
```yaml filename="config.yaml"
messages:
no_input: "Please specify a {field} for your query."
target_not_allowed: "Sorry, {target} is not permitted by our policy."
request_timeout: "Your request took too long and was cancelled."
connection_error: "Unable to reach {device_name}: {error}"
no_output: "Query executed successfully but returned no results."
```
---
## Structured Output Configuration
Controls how hyperglass processes and displays structured data from network devices.
### BGP Communities
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `structured.communities.mode` | String | `deny` | How to handle communities: `permit`, `deny`, or `name`. |
| `structured.communities.items` | Array | `[]` | List of community strings to permit/deny. |
| `structured.communities.names` | Object | `{}` | Map community values to human-readable names. |
### RPKI Validation
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `structured.rpki.mode` | String | `router` | RPKI validation source: `router` or `external`. |
| `structured.rpki.backend` | String | `cloudflare` | External RPKI validation backend to use. |
| `structured.rpki.rpki_server_url` | String | `` | Custom RPKI validation server URL. |
#### Example: Structured Output Configuration
```yaml filename="config.yaml"
structured:
communities:
mode: "name" # Show human-readable names
names:
"65000:100": "Customer Routes"
"65000:200": "Peer Routes"
"65000:300": "Upstream Routes"
"65000:999": "Blackhole"
rpki:
mode: "external" # Use external RPKI validation
backend: "cloudflare" # Use Cloudflare's RPKI API
```
---
## Web UI Configuration
Extensive customization options for the web interface appearance and behavior.
### Basic Web Settings
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.location_display_mode` | String | `auto` | Location selector style: `auto`, `dropdown`, or `gallery`. |
| `web.custom_javascript` | Path | | Path to custom JavaScript file to load. |
| `web.custom_html` | Path | | Path to custom HTML content to display. |
### DNS over HTTPS
Controls hostname resolution in the browser using DNS-over-HTTPS.
<Callout type="info">
When users enter hostnames (like `example.com`) instead of IP addresses, hyperglass uses DNS-over-HTTPS to resolve them to IP addresses directly in the user's browser. This provides privacy and security benefits over traditional DNS queries.
</Callout>
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.dns_provider.name` | String | `cloudflare` | DNS provider: `cloudflare`, `google`, or `custom`. |
| `web.dns_provider.url` | String | Auto-detected | Custom DNS-over-HTTPS endpoint URL. |
#### Example: DNS Configuration
```yaml filename="config.yaml"
web:
dns_provider:
name: "cloudflare" # Privacy-focused option
# Or use a custom DNS resolver:
web:
dns_provider:
name: "custom"
url: "https://dns.example.com/dns-query"
```
### Logo Configuration
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.logo.light` | Path | Built-in logo | Logo image for light theme. |
| `web.logo.dark` | Path | Built-in logo | Logo image for dark theme. |
| `web.logo.favicon` | Path | Built-in icon | Favicon/icon image. |
| `web.logo.width` | String | `50%` | Logo width (percentage or pixels). |
| `web.logo.height` | String | | Logo height (percentage or pixels). |
#### Example: Custom Logo
```yaml filename="config.yaml"
web:
logo:
light: "/etc/hyperglass/images/company-logo-light.svg"
dark: "/etc/hyperglass/images/company-logo-dark.svg"
favicon: "/etc/hyperglass/images/company-icon.svg"
width: "200px"
height: "60px"
```
### Greeting Modal
Show a welcome message or terms of service when users first visit.
<Callout type="info">
The greeting modal is perfect for displaying terms of service, usage policies, or welcome messages. When `required` is set to `true`, users cannot use the looking glass until they acknowledge the greeting.
</Callout>
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.greeting.enable` | Boolean | `false` | Enable the greeting modal. |
| `web.greeting.file` | Path | | Path to markdown/text file with greeting content. |
| `web.greeting.title` | String | `Welcome` | Greeting modal title. |
| `web.greeting.button` | String | `Continue` | Greeting acknowledgment button text. |
| `web.greeting.required` | Boolean | `false` | Whether users must acknowledge before using the looking glass. |
#### Example: Terms of Service Greeting
```yaml filename="config.yaml"
web:
greeting:
enable: true
title: "Terms of Service"
file: "/etc/hyperglass/terms-of-service.md"
button: "I Agree"
required: true # Users must agree to proceed
```
### Text Customization
Customize almost all text displayed in the user interface.
#### Basic Interface Text
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.text.title` | String | `hyperglass` | Main title text. |
| `web.text.subtitle` | String | `Network Looking Glass` | Subtitle text. |
| `web.text.query_location` | String | `Location` | Label for location/router selection field. |
| `web.text.query_type` | String | `Query Type` | Label for query type selection field. |
| `web.text.query_target` | String | `Target` | Label for target input field. |
#### Title Display Mode
| Parameter | Value | Description |
| :-------- | :---- | :---------- |
| `web.text.title_mode` | `logo_only` | Show only logo, hide title and subtitle. |
| | `text_only` | Show only title and subtitle, hide logo. |
| | `logo_subtitle` | Show logo and subtitle, hide title. |
| | `all` | Show logo, title, and subtitle. |
#### Hostname Resolution Text
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.text.fqdn_tooltip` | String | `Use {protocol}` | Tooltip for hostname resolution buttons. `{protocol}` shows IPv4/IPv6. |
| `web.text.fqdn_message` | String | `Your browser has resolved {fqdn} to` | Message shown during hostname resolution. |
| `web.text.fqdn_error` | String | `Unable to resolve {fqdn}` | Error message for failed hostname resolution. |
| `web.text.fqdn_error_button` | String | `Try Again` | Button text for retrying hostname resolution. |
#### "My IP" Feature Text
<Callout type="info">
The "My IP" button automatically detects the user's public IP address and populates it as the query target. This is useful for users who want to test routing or connectivity to their own location.
</Callout>
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.text.ip_button` | String | `My IP` | Text for the IP detection button. |
| `web.text.ip_select` | String | `Select an IP Address` | Prompt for IP address selection. |
| `web.text.ip_error` | String | `Unable to determine IP Address` | Error when IP detection fails. |
| `web.text.no_ip` | String | `No {protocol} Address` | Message when specific IP version unavailable. |
#### Results and Status Text
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.text.cache_prefix` | String | `Results cached for ` | Prefix for cache countdown timer. |
| `web.text.cache_icon` | String | `Cached from {time} UTC` | Tooltip for cached result indicator. |
| `web.text.complete_time` | String | `Completed in {seconds}` | Tooltip showing query completion time. |
#### BGP/RPKI Status Text
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.text.rpki_valid` | String | `Valid` | Text for RPKI valid routes. |
| `web.text.rpki_invalid` | String | `Invalid` | Text for RPKI invalid routes. |
| `web.text.rpki_unknown` | String | `No ROAs Exist` | Text for RPKI unknown routes. |
| `web.text.rpki_unverified` | String | `Not Verified` | Text for RPKI unverified routes. |
| `web.text.no_communities` | String | `No Communities` | Text when route has no BGP communities. |
#### Example: Complete Text Customization
```yaml filename="config.yaml"
web:
text:
title_mode: "all"
title: "Network Operations Center"
subtitle: "AS65000 Looking Glass"
# Customize form labels
query_location: "Router Location"
query_type: "Diagnostic Type"
query_target: "Destination"
# Customize "My IP" feature
ip_button: "Detect My IP"
ip_select: "Choose your IP address"
# Customize hostname resolution
fqdn_message: "We found these IP addresses for {fqdn}"
fqdn_error: "Could not resolve hostname {fqdn}"
# Customize status indicators
cache_prefix: "Cached result expires in "
rpki_valid: "✓ Valid ROA"
rpki_invalid: "✗ Invalid ROA"
```
### Footer Links
Add custom links to the footer for documentation, policies, or external resources.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.links[].title` | String | | Link text displayed to users. |
| `web.links[].url` | URL | | Destination URL. Can use `{primary_asn}` placeholder. |
| `web.links[].show_icon` | Boolean | `true` | Show external link icon. |
| `web.links[].side` | String | `left` | Footer side: `left` or `right`. |
| `web.links[].order` | Integer | `0` | Display order (lower numbers first). |
#### Example: Footer Links
```yaml filename="config.yaml"
web:
links:
# Default PeeringDB link (uses primary_asn automatically)
- title: "PeeringDB"
url: "https://www.peeringdb.com/asn/{primary_asn}"
side: "right"
order: 1
# Company website
- title: "Our Website"
url: "https://acmenetworks.com"
show_icon: false
side: "left"
order: 0
# Network status page
- title: "Network Status"
url: "https://status.acmenetworks.com"
side: "right"
order: 2
```
### Footer Menus
Add dropdown menus in the footer for longer content like terms of service or help documentation.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.menus[].title` | String | | Menu title shown to users. |
| `web.menus[].content` | String | | Menu content (markdown supported) or path to file. |
| `web.menus[].side` | String | `left` | Footer side: `left` or `right`. |
| `web.menus[].order` | Integer | `0` | Display order (lower numbers first). |
<Callout type="info">
For the `content` field, you can either provide the content directly in YAML (for short text) or specify a path to a markdown file (for longer content). Hyperglass automatically detects file paths and loads the content.
</Callout>
#### Example: Footer Menus
```yaml filename="config.yaml"
web:
menus:
# Load terms from external file
- title: "Terms of Service"
content: "/etc/hyperglass/legal/terms.md"
side: "left"
order: 0
# Inline help content
- title: "Help"
content: |
## How to use this looking glass
1. Select a router location
2. Choose your query type (ping, traceroute, etc.)
3. Enter an IP address or hostname
4. Click Submit
For technical support, email network@example.com
side: "right"
order: 0
```
### Theme Customization
Customize colors, fonts, and appearance of the web interface.
#### Colors
You can customize both functional and palette colors:
**Palette Colors:**
```yaml filename="config.yaml"
web:
theme:
colors:
# Basic colors
black: "#000000"
white: "#ffffff"
dark: "#010101"
light: "#f5f6f7"
gray: "#c1c7cc"
# Brand colors
red: "#d84b4b"
orange: "#ff6b35"
yellow: "#edae49"
green: "#35b246"
blue: "#314cb6"
teal: "#35b299"
cyan: "#118ab2"
pink: "#f2607d"
purple: "#8d30b5"
```
**Functional Colors:**
```yaml filename="config.yaml"
web:
theme:
colors:
# Main brand colors
primary: "#118ab2" # Main interactive elements
secondary: "#35b299" # Secondary elements
# Status colors
success: "#35b246" # Success states
warning: "#edae49" # Warning states
error: "#d84b4b" # Error states
danger: "#d84b4b" # Danger states
```
#### Fonts
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.theme.fonts.body` | String | `Nunito` | Font family for body text. |
| `web.theme.fonts.mono` | String | `Fira Code` | Font family for monospace text (IPs, commands, etc.). |
#### Default Color Mode
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.theme.default_color_mode` | String | | Default theme: `light` or `dark`. If not set, uses system preference. |
#### Example: Complete Theme Customization
```yaml filename="config.yaml"
web:
theme:
default_color_mode: "dark"
colors:
# Corporate brand colors
primary: "#1e3a8a" # Corporate blue
secondary: "#059669" # Corporate green
# Custom palette
blue: "#1e40af"
green: "#047857"
red: "#dc2626"
fonts:
body: "Inter" # Modern sans-serif
mono: "JetBrains Mono" # Developer-friendly monospace
```
### Output Highlighting
Highlight specific patterns in query results for better visibility.
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.highlight[].pattern` | String | | Regular expression pattern to match. |
| `web.highlight[].label` | String | | Optional label for the highlight rule. |
| `web.highlight[].color` | String | `primary` | Theme color to use for highlighting. |
#### Example: Output Highlighting
```yaml filename="config.yaml"
web:
highlight:
# Highlight your own ASN in BGP paths
- pattern: "65000"
label: "Our ASN"
color: "primary"
# Highlight private IP ranges
- pattern: "192\.168\.\d+\.\d+"
label: "RFC 1918"
color: "warning"
# Highlight packet loss
- pattern: "\d+% loss"
label: "Packet Loss"
color: "error"
```
### Developer Credit
| Parameter | Type | Default | Description |
| :-------- | :--- | :------ | :---------- |
| `web.credit.enable` | Boolean | `true` | Show hyperglass developer credit in footer. |
<Callout emoji="❤️" type="info">
**Note from the Developer**
If your organization's policy allows, please consider keeping the developer credit enabled. The goal of this project is to get more networks using looking glasses to make all our lives easier. Since it's primarily other network operators who will use your looking glass, it helps them know where they can get their own.
</Callout>
---
## Complete Example Configuration
Here's a comprehensive example showing how all these options work together:
```yaml filename="config.yaml"
# Basic site information
site_title: "ACME Networks Looking Glass"
org_name: "ACME Networks Inc."
site_description: "Network diagnostic tools for ACME Networks AS65000"
primary_asn: 65000
# System settings
request_timeout: 120
fake_output: false
cors_origins:
- "https://network-tools.acmenetworks.com"
# Performance settings
cache:
timeout: 300
show_text: true
# API documentation
docs:
enable: true
base_url: "https://lg.acmenetworks.com"
title: "ACME Networks Looking Glass API"
description: "RESTful API for network diagnostic queries"
# Logging and notifications
logging:
directory: "/var/log/hyperglass"
format: "json"
max_size: "100MB"
# Send notifications to Slack
http:
enable: true
provider: "slack"
host: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
# Custom error messages
messages:
no_input: "Please specify a {field} for your query."
target_not_allowed: "Sorry, {target} is not permitted by our policy."
request_timeout: "Your request took too long and was cancelled."
# Structured data processing
structured:
communities:
mode: "name"
names:
"65000:100": "Customer Routes"
"65000:200": "Peer Routes"
"65000:999": "Blackhole"
rpki:
mode: "external"
backend: "cloudflare"
# Web interface customization
web:
# DNS resolution
dns_provider:
name: "cloudflare"
# Custom branding
logo:
light: "/etc/hyperglass/images/company-logo-light.svg"
dark: "/etc/hyperglass/images/company-logo-dark.svg"
width: "200px"
# Welcome message
greeting:
enable: true
title: "Terms of Service"
file: "/etc/hyperglass/legal/terms.md"
required: true
# Interface text
text:
title_mode: "all"
title: "Network Operations Center"
subtitle: "AS65000 Looking Glass"
query_location: "Router Location"
ip_button: "Detect My IP"
# Footer links
links:
- title: "PeeringDB"
url: "https://www.peeringdb.com/asn/{primary_asn}"
side: "right"
- title: "Network Status"
url: "https://status.acmenetworks.com"
side: "right"
# Footer menus
menus:
- title: "Help"
content: "/etc/hyperglass/help/user-guide.md"
side: "left"
# Theme customization
theme:
default_color_mode: "dark"
colors:
primary: "#1e3a8a"
secondary: "#059669"
fonts:
body: "Inter"
mono: "JetBrains Mono"
# Highlight patterns
highlight:
- pattern: "65000"
label: "Our ASN"
color: "primary"
- pattern: "\d+% loss"
label: "Packet Loss"
color: "error"
# Developer credit
credit:
enable: true
```
---
## Next Steps
<DocsButton href="/configuration/devices">
**Configure Devices** - Set up routers and network devices
</DocsButton>
<DocsButton href="/configuration/directives">
**Configure Directives** - Define available query types
</DocsButton>
<DocsButton href="/configuration/examples">
**See Examples** - View real-world configuration examples
</DocsButton>