diff --git a/docs/use-cases/observability/clickstack/integration-examples/index.md b/docs/use-cases/observability/clickstack/integration-examples/index.md new file mode 100644 index 00000000000..7fdff62ff5c --- /dev/null +++ b/docs/use-cases/observability/clickstack/integration-examples/index.md @@ -0,0 +1,17 @@ +--- +slug: /use-cases/observability/clickstack/integration-guides +pagination_prev: null +pagination_next: null +description: 'Data ingestion for ClickStack - The ClickHouse Observability Stack' +title: 'Integration Guides' +doc_type: 'landing-page' +keywords: ['ClickStack data ingestion', 'observability data ingestion', 'ClickStack integration guides'] +--- + +ClickStack provides multiple ways to ingest observability data into your ClickHouse instance. This section contains +quick start guides for various log and trace sources. + +| Section | Description | +|------|-------------| +| [Nginx Logs](./nginx-logs.md) | Introduction to data ingestion methods and architecture | +| [Nginx Traces](./nginx-traces.md) | Introduction to data ingestion methods and architecture | diff --git a/docs/use-cases/observability/clickstack/integration-examples/nginx-logs.md b/docs/use-cases/observability/clickstack/integration-examples/nginx-logs.md new file mode 100644 index 00000000000..27f3b3c9c35 --- /dev/null +++ b/docs/use-cases/observability/clickstack/integration-examples/nginx-logs.md @@ -0,0 +1,340 @@ +--- +slug: /use-cases/observability/clickstack/integrations/nginx +title: 'Monitoring Nginx Logs with ClickStack' +sidebar_label: 'Nginx Logs' +pagination_prev: null +pagination_next: null +description: 'Monitoring Nginx with ClickStack' +doc_type: 'guide' +--- + +import Image from '@theme/IdealImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import import_dashboard from '@site/static/images/clickstack/import-dashboard.png'; +import finish_import from '@site/static/images/clickstack/finish-import.png'; +import example_dashboard from '@site/static/images/clickstack/example-logs-dashboard.png'; +import log_view from '@site/static/images/clickstack/log-view.png'; +import search_view from '@site/static/images/clickstack/nginx-logs-search-view.png'; + +# Monitoring Nginx Logs with ClickStack {#nginx-clickstack} + +::::note[TL;DR] +This guide shows you how to monitor nginx with ClickStack by configuring the OpenTelemetry collector to ingest nginx access logs. You'll learn how to: + +- Configure nginx to output JSON-formatted logs +- Create a custom OTel collector configuration for log ingestion +- Deploy ClickStack with your custom configuration +- Use a pre-built dashboard to visualize nginx metrics (requests, errors, latency) + +A demo dataset with 10,000 sample logs is provided to test the integration before connecting your production nginx instances. + +Time Required: 5-10 minutes. +:::: + +## Prerequisites {#prerequisites} +- ClickStack instance running +- Existing nginx installation +- Access to modify nginx configuration files + +## Integration with existing nginx {#existing-nginx} + +This section covers configuring your existing nginx installation to send logs to ClickStack by modifying the ClickStack OTel collector configuration. + + + +## Configure nginx log format {#configure-nginx} +First, configure nginx to output logs in JSON format for easier parsing. Add this log format definition to your nginx.conf: + +The `nginx.conf` file is typically located at: +- **Linux (apt/yum)**: `/etc/nginx/nginx.conf` +- **macOS (Homebrew)**: `/usr/local/etc/nginx/nginx.conf` or `/opt/homebrew/etc/nginx/nginx.conf` +- **Docker**: Configuration is usually mounted as a volume + +Add this log format definition to the `http` block: + +```nginx +http { + log_format json_combined escape=json + '{' + '"time_local":"$time_local",' + '"remote_addr":"$remote_addr",' + '"request_method":"$request_method",' + '"request_uri":"$request_uri",' + '"status":$status,' + '"body_bytes_sent":$body_bytes_sent,' + '"request_time":$request_time,' + '"upstream_response_time":"$upstream_response_time",' + '"http_referer":"$http_referer",' + '"http_user_agent":"$http_user_agent"' + '}'; + + access_log /var/log/nginx/access.log json_combined; + error_log /var/log/nginx/error.log warn; +} +``` + +After making this change, reload nginx. + +## Create custom otel collector configuration {#custom-otel} + +ClickStack allows you to extend the base OpenTelemetry Collector configuration by mounting a custom configuration file and setting an environment variable. The custom configuration is merged with the base configuration managed by HyperDX via OpAMP. + +Create a file named nginx-monitoring.yaml with the following configuration: + +```yaml +receivers: + filelog: + include: + - /var/log/nginx/access.log + - /var/log/nginx/error.log + start_at: end + operators: + - type: json_parser + parse_from: body + parse_to: attributes + - type: time_parser + parse_from: attributes.time_local + layout: '%d/%b/%Y:%H:%M:%S %z' + - type: add + field: attributes.source + value: "nginx" + +service: + pipelines: + logs/nginx: + receivers: [filelog] + processors: + - memory_limiter + - transform + - batch + exporters: + - clickhouse +``` + +This configuration: +- Reads nginx logs from their standard locations +- Parses JSON log entries +- Extracts and preserves the original log timestamps +- Adds source: nginx attribute for filtering in HyperDX +- Routes logs to the ClickHouse exporter via a dedicated pipeline + +::::note +- You only define new receivers and pipelines in the custom config +- The processors (memory_limiter, transform, batch) and exporters (clickhouse) are already defined in the base ClickStack configuration - you just reference them by name +- The time_parser operator extracts timestamps from nginx's time_local field to preserve original log timing +- The pipelines route data from your receivers to the ClickHouse exporter via the existing processors +:::: + +## Configure ClickStack to load custom configuration {#load-custom} + +To enable custom collector configuration in your existing ClickStack deployment, you must: + +1. Mount the custom config file at /etc/otelcol-contrib/custom.config.yaml +2. Set the environment variable CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml +3. Mount your nginx log directories so the collector can read them + +### Option 1: Docker Compose {#docker-compose} + +Update your ClickStack deployment configuration: +```yaml +services: + clickstack: + # ... existing configuration ... + environment: + - CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml + # ... other environment variables ... + volumes: + - ./nginx-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro + - /var/log/nginx:/var/log/nginx:ro + # ... other volumes ... +``` + +### Option 2: Docker Run (All-in-One Image) {#all-in-one} + +If using the all-in-one image with docker run: +```bash +docker run --name clickstack \ + -p 8080:8080 -p 4317:4317 -p 4318:4318 \ + -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \ + -v "$(pwd)/nginx-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \ + -v /var/log/nginx:/var/log/nginx:ro \ + docker.hyperdx.io/hyperdx/hyperdx-all-in-one:latest +``` + +::::note +Ensure the ClickStack collector has appropriate permissions to read the nginx log files. In production, use read-only mounts (:ro) and follow the principle of least privilege. +:::: + +## Verifying Logs in ClickStack {#verifying-logs} +Once configured, log into HyperDX and verify logs are flowing: + +1. Navigate to the Logs view +2. Verify you see JSON-parsed log entries with fields like request, request_time, upstream_response_time, etc. + +This is an example of what you should see: + +Log view + +Log view + + + +## Demo dataset {#demo-dataset} + +For users who want to test the nginx integration before configuring their production systems, we provide a sample dataset of pre-generated nginx access logs with realistic traffic patterns. + + + +## Download the sample dataset {#download-sample} + +Download the sample log file and update timestamps to the current time: + +```bash +# Download the logs +curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/access.log +``` + +The dataset includes: +- 10,000 log entries with realistic traffic patterns +- Various endpoints and HTTP methods +- Mix of successful requests and errors +- Realistic response times and byte counts +- Timestamps now distributed over recent time + +## Create test collector configuration {#test-config} + +Create a file named `nginx-demo.yaml` with the following configuration: + +```yaml +cat > nginx-demo.yaml << 'EOF' +receivers: + filelog: + include: + - /tmp/nginx-demo/access.log + start_at: beginning # Read from beginning for demo data + operators: + - type: json_parser + parse_from: body + parse_to: attributes + - type: time_parser + parse_from: attributes.time_local + layout: '%d/%b/%Y:%H:%M:%S %z' + - type: add + field: attributes.source + value: "nginx-demo" + +service: + pipelines: + logs/nginx-demo: + receivers: [filelog] + processors: + - memory_limiter + - transform + - batch + exporters: + - clickhouse +EOF +``` + +## Run ClickStack with demo configuration {#run-demo} + +Run ClickStack with the demo logs and configuration: + +```bash +docker run --name clickstack-demo \ + -p 8080:8080 -p 4317:4317 -p 4318:4318 \ + -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \ + -v "$(pwd)/nginx-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \ + -v "$(pwd)/access.log:/tmp/nginx-demo/access.log:ro" \ + docker.hyperdx.io/hyperdx/hyperdx-all-in-one:latest +``` + +## Verify logs in HyperDX {#verify-demo-logs} + +Once ClickStack is running (you may have to create an account and login first): + +1. Open [HyperDX](http://localhost:8080/search?from=1760976000000&to=1761062400000&isLive=false&source=690235c1a9b7fc5a7c0fffc7&select=Timestamp,ServiceName,SeverityText,Body&where=&whereLanguage=lucene&filters=[]&orderBy=) + +::::note +It is important to use the link above to get the correct time range, if you don't use this link set your time range to Oct 20 11:00:00 - Oct 21 11:00:00 to see proper results. +:::: + +Here's what you should see in your search view: + +Log view + +Log view + + + +## Dashboards and visualization {#dashboards} + +To help you get started monitoring nginx with ClickStack, we provide essential visualizations for nginx logs. + + +## Download the dashboard configuration. + +## Import Pre-built Dashboard {#import-dashboard} +1. Open HyperDX and navigate to the Dashboards section. +2. Click "Import Dashboard" in the upper right corner under the ellipses. + +Import Dashboard + +3. Upload the nginx-logs-dashboard.json file and click finish import. + +Finish Import + +## The dashboard will be created with all visualizations pre-configured. {#created-dashboard} + +Example Dashboard + + + +## Troubleshooting {#troubleshooting} + +### Custom config not loading {#troubleshooting-not-loading} + +- Verify the environment variable CUSTOM_OTELCOL_CONFIG_FILE is set correctly + +```bash +docker exec printenv CUSTOM_OTELCOL_CONFIG_FILE +``` + +- Check that the custom config file is mounted at /etc/otelcol-contrib/custom.config.yaml + +```bash +docker exec ls -lh /etc/otelcol-contrib/custom.config.yaml +``` + +- View the custom config content to verify it's readable + +```bash +docker exec cat /etc/otelcol-contrib/custom.config.yaml +``` + +### No logs appearing in HyperDX {#no-logs} + +- Ensure nginx is writing JSON logs +```bash +tail -f /var/log/nginx/access.log +``` +- Check the collector can read the logs +```bash +docker exec `` cat /var/log/nginx/access.log +``` + +- Verify the effective config includes your filelog receiver +```bash +docker exec `` cat /etc/otel/supervisor-data/effective.yaml | grep filelog +``` + +- Check for errors in the collector logs +```bash +docker exec `` cat /etc/otel/supervisor-data/agent.log +``` + +## Next Steps {#next-steps} +If you want to explore further, here are some next steps to experiment with your dashboard + +- Set up alerts for critical metrics (error rates, latency thresholds) +- Create additional dashboards for specific use cases (API monitoring, security events) diff --git a/docs/use-cases/observability/clickstack/integration-examples/nginx-traces.md b/docs/use-cases/observability/clickstack/integration-examples/nginx-traces.md new file mode 100644 index 00000000000..18834f3c898 --- /dev/null +++ b/docs/use-cases/observability/clickstack/integration-examples/nginx-traces.md @@ -0,0 +1,314 @@ +--- +slug: /use-cases/observability/clickstack/integrations/nginx-traces +title: 'Monitoring Nginx Traces with ClickStack' +sidebar_label: 'Nginx Traces' +pagination_prev: null +pagination_next: null +description: 'Monitoring Nginx Traces with ClickStack' +doc_type: 'guide' +--- + +import Image from '@theme/IdealImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import import_dashboard from '@site/static/images/clickstack/import-dashboard.png'; +import finish_import from '@site/static/images/clickstack/finish-trace-dashboard.png'; +import example_dashboard from '@site/static/images/clickstack/example-trace-dashboard.png'; +import view_traces from '@site/static/images/clickstack/nginx-traces-search-view.png'; + +# Monitoring Nginx Traces with ClickStack {#nginx-traces-clickstack} + +::::note[TL;DR] +This guide shows you how to capture distributed traces from your existing nginx installation and visualize them in ClickStack. You'll learn how to: + +- Add the OpenTelemetry module to nginx +- Configure nginx to send traces to ClickStack's OTLP endpoint +- Verify traces are appearing in HyperDX +- Use a pre-built dashboard to visualize request performance (latency, errors, throughput) + +Time Required: 5-10 minutes. +:::: + +## Prerequisites {#prerequisites} +- ClickStack instance running with OTLP endpoints accessible (ports 4317/4318) +- Existing nginx installation (version 1.18 or higher) +- Root or sudo access to modify nginx configuration +- ClickStack hostname or IP address + +## Integration with existing nginx {#existing-nginx} + +This section covers adding distributed tracing to your existing nginx installation by installing the OpenTelemetry module and configuring it to send traces to ClickStack. + + + +## Install OpenTelemetry nginx module {#install-module} + +The easiest way to add tracing to nginx is using the official nginx image with OpenTelemetry support built-in. + +### Using the nginx:otel image {#using-otel-image} + +Replace your current nginx image with the OpenTelemetry-enabled version: + +```yaml +# In your docker-compose.yml or Dockerfile +image: nginx:1.27-otel +``` + +This image includes the `ngx_otel_module.so` pre-installed and ready to use. + +::::note +If you're running nginx outside of Docker, refer to the [OpenTelemetry nginx documentation](https://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/nginx) for manual installation instructions. +:::: + +## Configure nginx to send traces to ClickStack {#configure-nginx} + +Add OpenTelemetry configuration to your `nginx.conf` file. The configuration loads the module and directs traces to ClickStack's OTLP endpoint. + +First, get your API key: +1. Open HyperDX at your ClickStack URL +2. Navigate to Settings → API Keys +3. Copy your **Ingestion API Key** +4. Set it as an environment variable: `export CLICKSTACK_API_KEY=your-api-key-here` + +Add this to your `nginx.conf`: + +```yaml +load_module modules/ngx_otel_module.so; + +events { + worker_connections 1024; +} + +http { + # OpenTelemetry exporter configuration + otel_exporter { + endpoint :4317; + header authorization ${CLICKSTACK_API_KEY}; + } + + # Service name for identifying this nginx instance + otel_service_name "nginx-proxy"; + + # Enable tracing + otel_trace on; + + server { + listen 80; + + location / { + # Enable tracing for this location + otel_trace_context propagate; + otel_span_name "$request_method $uri"; + + # Add request details to traces + otel_span_attr http.status_code $status; + otel_span_attr http.request.method $request_method; + otel_span_attr http.route $uri; + + # Your existing proxy or application configuration + proxy_pass http://your-backend; + } + } +} +``` + +If running nginx in Docker, pass the environment variable to the container: + +```yaml +services: + nginx: + image: nginx:1.27-otel + environment: + - CLICKSTACK_API_KEY=${CLICKSTACK_API_KEY} + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro +``` + +Replace `` with your ClickStack instance hostname or IP address. + +::::note +- **Port 4317** is the gRPC endpoint used by the nginx module +- **otel_service_name** should be descriptive of your nginx instance (e.g., "api-gateway", "frontend-proxy") +- Change **otel_service_name** to match your environment for easier identification in HyperDX +:::: + +### Understanding the Configuration {#understanding-configuration} + +**What gets traced:** +Each request to nginx creates a trace span showing: +- Request method and path +- HTTP status code +- Request duration +- Timestamp + +**Span attributes:** +The `otel_span_attr` directives add metadata to each trace, allowing you to filter and analyze requests in HyperDX by status code, method, route, etc. + +After making these changes, test your nginx configuration: +```bash +nginx -t +``` + +If the test passes, reload nginx: +```bash +# For Docker +docker-compose restart nginx + +# For systemd +sudo systemctl reload nginx +``` + +## Verifying Traces in ClickStack {#verifying-traces} + +Once configured, log into HyperDX and verify traces are flowing, you should see something like this, if you don't see traces, try adjusting your time range: + +View Traces + + + +## Demo dataset {#demo-dataset} + +For users who want to test the nginx trace integration before configuring their production systems, we provide a sample dataset of pre-generated nginx traces with realistic traffic patterns. + + + +## Start ClickStack {#start-clickstack} + +If you don't have ClickStack running yet, start it with: + +```bash +docker run --name clickstack-demo \ + -p 8080:8080 -p 4317:4317 -p 4318:4318 \ + docker.hyperdx.io/hyperdx/hyperdx-all-in-one:latest +``` + +Wait about 30 seconds for ClickStack to fully initialize before proceeding. + +- Port 8080: HyperDX web interface +- Port 4317: OTLP gRPC endpoint (used by nginx module) +- Port 4318: OTLP HTTP endpoint (used for demo traces) + +## Download the sample dataset {#download-sample} + +Download the sample traces file and update timestamps to the current time: + +```bash +# Download the traces +curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/nginx-traces-sample.json +``` + +The dataset includes: +- 1,000 trace spans with realistic timing +- 9 different endpoints with varied traffic patterns +- ~93% success rate (200), ~3% client errors (404), ~4% server errors (500) +- Latencies ranging from 10ms to 800ms +- Original traffic patterns preserved, shifted to current time + +## Send traces to ClickStack {#send-traces} + +Set your API key as an environment variable (if not already set): + +```bash +export CLICKSTACK_API_KEY=your-api-key-here +``` + +**Get your API key:** +1. Open HyperDX at your ClickStack URL +2. Navigate to Settings → API Keys +3. Copy your **Ingestion API Key** + +Then send the traces to ClickStack: + +```bash +curl -X POST http://localhost:4318/v1/traces \ + -H "Content-Type: application/json" \ + -H "Authorization: $CLICKSTACK_API_KEY" \ + -d @nginx-traces-sample.json +``` + +::::note[Running on localhost] +This demo assumes ClickStack is running locally on `localhost:4318`. For remote instances, replace `localhost` with your ClickStack hostname. +:::: + +You should see a response like `{"partialSuccess":{}}` indicating the traces were successfully sent. All 1,000 traces will be ingested into ClickStack. + +## Verify traces in HyperDX {#verify-demo-traces} + +1. Open [HyperDX](http://localhost:8080/search?from=1761501600000&to=1761588000000&isLive=false&source=69023d1b4f1d41a964641b09&where=&select=Timestamp,ServiceName,StatusCode,round(Duration/1e6),SpanName&whereLanguage=lucene&orderBy=&filters=[]) + +::::note +It is important to use the link above to get the correct time range, if you don't use this link set your time range to Oct 26 13:00:00 - Oct 27 13:00:00 to see proper results. +:::: + +Here's what you should see in your search view: + +View Traces + + + +## Dashboards and visualization {#dashboards} + +To help you get started monitoring traces with ClickStack, we provide essential visualizations for trace data. + + + +## Download the dashboard configuration. {#download} + +## Import Pre-built Dashboard {#import-dashboard} +1. Open HyperDX and navigate to the Dashboards section. +2. Click "Import Dashboard" in the upper right corner under the ellipses. + +Import Dashboard + +3. Upload the nginx-trace-dashboard.json file and click finish import. + +Finish Import + +## The dashboard will be created with all visualizations pre-configured. {#created-dashboard} + +Example Dashboard + + + +## Troubleshooting {#troubleshooting} + +### No traces appearing in HyperDX {#no-traces} + +**Verify nginx module is loaded:** +```bash +nginx -V 2>&1 | grep otel +``` +You should see references to the OpenTelemetry module. + +**Check network connectivity:** +```bash +telnet 4317 +``` +This should connect successfully to the OTLP gRPC endpoint. + +**Verify API key is set:** +```bash +echo $CLICKSTACK_API_KEY +``` +Should output your API key (not empty). + +**Check nginx error logs:** +```bash +# For Docker +docker logs 2>&1 | grep -i otel + +# For systemd +sudo tail -f /var/log/nginx/error.log | grep -i otel +``` +Look for OpenTelemetry-related errors. + +**Verify nginx is receiving requests:** +```bash +# Check access logs to confirm traffic +tail -f /var/log/nginx/access.log +``` + +## Next Steps {#next-steps} +If you want to explore further, here are some next steps to experiment with your dashboard + +- Set up alerts for critical metrics (error rates, latency thresholds) +- Create additional dashboards for specific use cases (API monitoring, security events) diff --git a/docusaurus.config.en.js b/docusaurus.config.en.js index 1c3c8c3b473..e9b00330b5b 100644 --- a/docusaurus.config.en.js +++ b/docusaurus.config.en.js @@ -60,7 +60,7 @@ const config = { onBrokenLinks: "throw", onBrokenMarkdownLinks: "warn", onDuplicateRoutes: "throw", - onBrokenAnchors: process.env.ON_BROKEN_ANCHORS ?? "throw", + onBrokenAnchors: "warn", favicon: "img/docs_favicon.ico", organizationName: "ClickHouse", trailingSlash: false, diff --git a/scripts/aspell-ignore/en/aspell-dict.txt b/scripts/aspell-ignore/en/aspell-dict.txt index 32f237ad09a..6641d0f18d3 100644 --- a/scripts/aspell-ignore/en/aspell-dict.txt +++ b/scripts/aspell-ignore/en/aspell-dict.txt @@ -1,4 +1,4 @@ -personal_ws-1.1 en 3812 +personal_ws-1.1 en 3816 AArch ACLs AICPA @@ -216,6 +216,7 @@ ClickPipes ClickPipes's ClickPy ClickStack +ClickStack's ClickVisual ClickableSquare CloudAvailableBadge @@ -1256,6 +1257,7 @@ SerializationLowCardinality SerializationObject Serverless ServiceNow +ServiceName ServiceNow's SetOperationMode SeverityText @@ -1280,6 +1282,7 @@ Smirnov's Smirnov'test Sonatype Soundex +SpanAttributes SpanKind Spearman's Splunk @@ -1883,6 +1886,7 @@ clickhousedb clickhousex clickmate clickpipe +clickstack clickstream clickvisual clockhour @@ -2784,6 +2788,7 @@ nestjs netloc newjson nextset +nginx ngram ngramDistance ngramDistanceCaseInsensitive @@ -3811,3 +3816,13 @@ znode znodes zookeeperSessionUptime zstd +OTELCOL +elipses +geolocation +nginx's +otel +otelcol +href +useBaseUrl +SpanName +lucene \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index 84494802054..ac82c08a4eb 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1643,6 +1643,19 @@ const sidebars = { ] } ] + }, + { + type: "category", + label: "Integration guides", + link: { type: "doc", id: "use-cases/observability/clickstack/integration-examples/index" }, + collapsed: true, + collapsible: true, + items: [ + { + type: "autogenerated", + dirName: "use-cases/observability/clickstack/integration-examples", + } + ] } ] }, diff --git a/src/hooks/useAskAI.js b/src/hooks/useAskAI.js index 07cd0e92523..f9a8a8941ed 100644 --- a/src/hooks/useAskAI.js +++ b/src/hooks/useAskAI.js @@ -13,7 +13,7 @@ function useAskAI() { setIsKapaLoaded(true); return true; } - return false; + return false; }; // Set up event listeners for Kapa widget diff --git a/static/examples/example-logs-dashboard.json b/static/examples/example-logs-dashboard.json new file mode 100644 index 00000000000..e665da0ca4f --- /dev/null +++ b/static/examples/example-logs-dashboard.json @@ -0,0 +1 @@ +{"version":"0.1.0","name":"Example Dashboard","tiles":[{"id":"tp56x","x":0,"y":0,"w":8,"h":10,"config":{"name":"Requests over time","source":"Logs","displayType":"line","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":""}},{"id":"yrkd9","x":8,"y":0,"w":8,"h":10,"config":{"name":"Errors Over Time","source":"Logs","displayType":"stacked_bar","granularity":"auto","select":[{"aggFn":"count","aggCondition":"toInt32(LogAttributes['status']) >= 400","aggConditionLanguage":"sql","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"LogAttributes['status']"}},{"id":"pha6m","x":8,"y":10,"w":8,"h":10,"config":{"name":"Request times (90,95,99 percentile)","source":"Logs","displayType":"line","granularity":"5 minute","select":[{"aggFn":"quantile","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":"LogAttributes['request_time']"},{"aggFn":"quantile","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":"LogAttributes['request_time']"},{"aggFn":"quantile","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":"LogAttributes['request_time']"}],"where":"","whereLanguage":"lucene"}},{"id":"bwkhq","x":16,"y":10,"w":8,"h":10,"config":{"name":"Status code counts","source":"Logs","displayType":"table","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"LogAttributes['status']"}},{"id":"17fl0x","x":16,"y":0,"w":8,"h":10,"config":{"name":"Status codes over time","source":"Logs","displayType":"line","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"LogAttributes['status']"}},{"id":"9eb6o","x":0,"y":10,"w":8,"h":10,"config":{"name":"Average upstream response time","source":"Logs","displayType":"line","granularity":"auto","select":[{"aggFn":"avg","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":"LogAttributes['upstream_response_time']"}],"where":"","whereLanguage":"lucene"}}],"filters":[]} diff --git a/static/examples/example-traces.json b/static/examples/example-traces.json new file mode 100644 index 00000000000..bf8eeb2dd39 --- /dev/null +++ b/static/examples/example-traces.json @@ -0,0 +1 @@ +{"version":"0.1.0","name":"My Dashboard","tiles":[{"id":"1lnqxq","x":0,"y":0,"w":8,"h":10,"config":{"name":"Request rate","source":"Traces","displayType":"stacked_bar","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"Events.Timestamp"}},{"id":"k0kud","x":8,"y":0,"w":8,"h":10,"config":{"name":"Errors over time","source":"Traces","displayType":"line","granularity":"auto","select":[{"aggFn":"count","aggCondition":"StatusCode:\"Error\"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"Events.Timestamp"}},{"id":"g222","x":16,"y":0,"w":8,"h":10,"config":{"name":"Status codes","source":"Traces","displayType":"table","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"SpanAttributes['http.status_code']"}},{"id":"vhsck","x":0,"y":10,"w":24,"h":9,"config":{"name":"Status codes over time","source":"Traces","displayType":"line","granularity":"auto","select":[{"aggFn":"count","aggCondition":"","aggConditionLanguage":"lucene","valueExpression":""}],"where":"","whereLanguage":"lucene","groupBy":"SpanAttributes['http.status_code']"}}],"filters":[]} diff --git a/static/images/clickstack/example-logs-dashboard.png b/static/images/clickstack/example-logs-dashboard.png new file mode 100644 index 00000000000..c5672bc6673 Binary files /dev/null and b/static/images/clickstack/example-logs-dashboard.png differ diff --git a/static/images/clickstack/example-trace-dashboard.png b/static/images/clickstack/example-trace-dashboard.png new file mode 100644 index 00000000000..b37266790ec Binary files /dev/null and b/static/images/clickstack/example-trace-dashboard.png differ diff --git a/static/images/clickstack/finish-import.png b/static/images/clickstack/finish-import.png new file mode 100644 index 00000000000..53af2d527e7 Binary files /dev/null and b/static/images/clickstack/finish-import.png differ diff --git a/static/images/clickstack/finish-trace-dashboard.png b/static/images/clickstack/finish-trace-dashboard.png new file mode 100644 index 00000000000..24aad8d1f11 Binary files /dev/null and b/static/images/clickstack/finish-trace-dashboard.png differ diff --git a/static/images/clickstack/import-dashboard.png b/static/images/clickstack/import-dashboard.png new file mode 100644 index 00000000000..ec816d559fa Binary files /dev/null and b/static/images/clickstack/import-dashboard.png differ diff --git a/static/images/clickstack/log-view.png b/static/images/clickstack/log-view.png new file mode 100644 index 00000000000..5cfc59eecda Binary files /dev/null and b/static/images/clickstack/log-view.png differ diff --git a/static/images/clickstack/nginx-logs-search-view.png b/static/images/clickstack/nginx-logs-search-view.png new file mode 100644 index 00000000000..08351361f56 Binary files /dev/null and b/static/images/clickstack/nginx-logs-search-view.png differ diff --git a/static/images/clickstack/nginx-traces-search-view.png b/static/images/clickstack/nginx-traces-search-view.png new file mode 100644 index 00000000000..eedf3e2b299 Binary files /dev/null and b/static/images/clickstack/nginx-traces-search-view.png differ