Custom Source
Connect any JSON or NDJSON log source to RunReveal — even if there isn’t a dedicated source type for it. The Custom Source wizard walks you through selecting an ingest method, configuring the connection, previewing sample data, and optionally mapping fields to a normalized schema.
When to use Custom Source
- You have logs in JSON or NDJSON format that don’t match an existing RunReveal source type.
- You want to bring your own schema and optionally map fields to RunReveal’s normalized columns.
- You need flexibility to ingest from a webhook, S3, GCS, Azure Blob, R2, or a self-hosted MinIO instance.
Wizard walkthrough
The Custom Source wizard in the RunReveal dashboard has four steps. Steps 1–3 are required; Step 4 is optional.
Choose ingest method
Navigate to Sources → Add Source and select the Custom Source tile. Pick how your data will reach RunReveal:
| Method | Best for |
|---|---|
| Webhook | Applications that can POST JSON events in real time. |
| AWS S3 Bucket | Log files already landing in S3 with SNS notifications. |
| AWS S3 (Custom SQS) | S3 ingestion using your own SQS queue instead of RunReveal’s SNS topic. |
| Google Cloud Storage | Log files in GCS with Pub/Sub notifications. |
| Azure Blob Storage | Log files in Azure Blob with storage queue notifications. |
| Cloudflare R2 | Log files in R2 with Workers Queue notifications. |
| MinIO | Self-hosted or S3-compatible storage with PostgreSQL-backed event notifications. |
Click a card to select it, then proceed to the next step.
Configure connection
- Enter a Source Name (and optional display name).
- Fill in the connection settings for your chosen ingest method — see the Ingest method setup tabs below.
- Click Verify Settings. RunReveal tests the connection and fetches sample records.
If you need to switch ingest methods, click Change next to the method badge. This resets your connection settings for that step.
Preview data
After verification succeeds, review the sample records that RunReveal pulled from your source. Confirm the JSON structure and field names look correct.
You can click Preview Data to inspect the records, or Skip Preview to move on.
Field mapping (optional)
Map JSON paths from your data (e.g. $.user.id, $.timestamp) to RunReveal’s normalized fields (e.g. actor.user.id, eventTime). This creates a custom view and, when normalized fields are mapped, a transform.
- Click Suggest mappings to auto-detect fields from the sample. AI-assisted suggestions are used when available.
- Click Skip to create the source without field mappings — data is still ingested as raw JSON.
After clicking Connect Source, a progress dialog shows each step being created (source, custom view, transform). When everything succeeds, you can open the new view in Explorer or return to the Sources list.
Ingest method setup
Each ingest method has its own connection settings. Select the tab that matches the method you chose in Step 1.
Webhook
After you save the source, RunReveal generates a unique Webhook URL (and an optional bearer token). Configure your application or log shipper to send events to that URL.
Required configuration on your side:
| Setting | Value |
|---|---|
| URL | The HTTPS webhook URL from RunReveal. |
| Method | POST |
| Content-Type | application/json |
| Body | A JSON object, JSON array, or NDJSON (one object per line). |
| Authorization (optional) | Bearer YOUR_TOKEN — set this header if you enabled token auth. |
Example curl request:
curl -X POST https://ingest.runreveal.com/sources/s/YOUR_SOURCE_SLUG \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"event": "user.login", "user": "[email protected]", "ts": "2025-06-01T12:00:00Z"}'Verify it’s working
Once your source is created, confirm data is flowing:
- Go to Sources and check your source’s health status.
- Open Explorer and query your data. If you created a custom view, use the view table name. Otherwise, query the raw logs:
SELECT * FROM logs WHERE sourceType = 'custom-source' LIMIT 10- If using a webhook, send a test event and confirm it appears within a few seconds.
Troubleshooting
| Symptom | What to check |
|---|---|
| Verify Settings fails | Confirm credentials, bucket name, and endpoint are correct. For S3, verify the bucket policy allows RunReveal access. |
| No data appearing | For object storage: confirm event notifications are configured and new files are landing in the bucket. For webhook: send a test POST and check the response status code. |
| Field mapping errors | Retry from the progress dialog — RunReveal allows retrying failed view/transform steps without recreating the source. |
| MinIO notifications not working | Verify the PostgreSQL target is reachable from MinIO (mc admin config get myminio notify_postgres). Check that mc event ls myminio/my-logs shows the event rule. |