1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
//! <p align="center">
//! <img src="https://github.com/getsentry/relay/blob/master/artwork/relay-logo.png?raw=true" alt="Relay" width="480">
//! </p>
//!
//! Relay is a standalone service for scrubbing personal information and improving event submission
//! response time. It acts as a middle layer between your application and Sentry.io. For information
//! on setting up Relay in front of Sentry, see:
//!
//! [Relay documentation]
//!
//! # Event Ingestion
//!
//! Relay is also the primary event ingestion system at Sentry. When compiled with the `processing`
//! feature and configured for ingestion, Relay ships functionality for:
//!
//! - Acknowledging and handling web requests on store endpoints
//! - Applying rate limits and inbound data filters
//! - Data scrubbing of event payloads and attachments
//! - Validation and normalization of malformed or outdated data
//! - Forwarding of all information into the event processing pipeline
//!
//! # Feature Flags
//!
//! - `processing`: Includes event ingestion and processing functionality. This should only be
//! specified when compiling Relay as Sentry service. Standalone Relays do not need this feature.
//! - `crash-handler`: Allows native crash reporting for segfaults and out-of-memory situations when
//! internal error reporting to Sentry is enabled.
//!
//! # Workspace Crates
//!
//! Relay is split into the following workspace crates:
//!
//! - `relay`: Main entry point and command line interface.
//! - [`relay-auth`]: Authentication and crypto.
//! - [`relay-base-schema`]: Basic types for Relay's API schema used across multiple services.
//! - [`relay-cabi`]: C-bindings for exposing functionality to Python.
//! - [`relay-cardinality`]: Metrics cardinality limiter.
//! - [`relay-common`]: Common utilities and crate re-exports.
//! - [`relay-config`]: Static configuration for the CLI and server.
//! - [`relay-cogs`]: Break down the cost of Relay by its features.
//! - [`relay-crash`]: Crash reporting for the Relay server.
//! - [`relay-dynamic-config`]: Dynamic configuration passed from Sentry.
//! - [`relay-event-derive`]: Derive for visitor traits on the Event schema.
//! - [`relay-event-normalization`]: Event normalization and processing.
//! - [`relay-event-schema`]: Event schema (Error, Transaction, Security) and types for event processing.
//! - [`relay-ffi`]: Utilities for error handling in FFI bindings.
//! - [`relay-ffi-macros`]: Macros for error handling in FFI bindings.
//! - [`relay-filter`]: Inbound data filters.
//! - [`relay-jsonschema-derive`]: Derive for JSON schema on Relay protocol types.
//! - [`relay-kafka`]: Kafka-related functionality.
//! - [`relay-log`]: Error reporting and logging.
//! - [`relay-metrics`]: Metrics protocol and processing.
//! - [`relay-monitors`]: Monitors protocol and processing for Sentry.
//! - [`relay-pii`]: Scrubbing of personally identifiable information (PII) from events
//! - [`relay-profiling`]: Profiling protocol and processing.
//! - [`relay-protocol`]: Types and traits for building JSON-based protocols and schemas.
//! - [`relay-protocol-derive`]: Derives for Relay's protocol traits.
//! - [`relay-quotas`]: Sentry quotas and rate limiting.
//! - [`relay-redis`]: Pooled Redis and Redis cluster abstraction.
//! - [`relay-replays`]: Session replay protocol and processing.
//! - [`relay-sampling`]: Dynamic sampling functionality.
//! - [`relay-server`]: Endpoints and services.
//! - [`relay-statsd`]: High-level StatsD metric client for internal measurements.
//! - [`relay-system`]: Foundational system components for Relay's services.
//! - [`relay-test`]: Helpers for testing the web server and services.
//! - [`relay-ua`]: User agent parser with built-in rules.
//!
//! # Tools
//!
//! Complementary to the Relay binary, the workspace contains a set of tools to interface with some
//! of Relay's functionality or to export information:
//!
//! - [`document-metrics`]: Generate documentation for metrics.
//! - [`generate-schema`]: Generate an event payload schema file.
//! - [`process-event`]: Process a Sentry event payload.
//! - [`scrub-minidump`]: Scrub PII from a Minidump file.
//!
//! [relay documentation]: https://docs.sentry.io/product/relay/
//! [`relay-auth`]: ../relay_auth/index.html
//! [`relay-base-schema`]: ../relay_base_schema/index.html
//! [`relay-cabi`]: ../relay_cabi/index.html
//! [`relay-cardinality`]: ../relay_cardinality/index.html
//! [`relay-common`]: ../relay_common/index.html
//! [`relay-config`]: ../relay_config/index.html
//! [`relay-cogs`]: ../relay_cogs/index.html
//! [`relay-crash`]: ../relay_crash/index.html
//! [`relay-dynamic-config`]: ../relay_dynamic_config/index.html
//! [`relay-event-derive`]: ../relay_event_derive/index.html
//! [`relay-event-normalization`]: ../relay_event_normalization/index.html
//! [`relay-event-schema`]: ../relay_event_schema/index.html
//! [`relay-ffi`]: ../relay_ffi/index.html
//! [`relay-ffi-macros`]: ../relay_ffi_macros/index.html
//! [`relay-filter`]: ../relay_filter/index.html
//! [`relay-jsonschema-derive`]: ../relay_jsonschema_derive/index.html
//! [`relay-kafka`]: ../relay_kafka/index.html
//! [`relay-log`]: ../relay_log/index.html
//! [`relay-metrics`]: ../relay_metrics/index.html
//! [`relay-monitors`]: ../relay_monitors/index.html
//! [`relay-pii`]: ../relay_pii/index.html
//! [`relay-profiling`]: ../relay_profiling/index.html
//! [`relay-protocol`]: ../relay_protocol/index.html
//! [`relay-protocol-derive`]: ../relay_protocol_derive/index.html
//! [`relay-quotas`]: ../relay_quotas/index.html
//! [`relay-redis`]: ../relay_redis/index.html
//! [`relay-replays`]: ../relay_replays/index.html
//! [`relay-sampling`]: ../relay_sampling/index.html
//! [`relay-server`]: ../relay_server/index.html
//! [`relay-statsd`]: ../relay_statsd/index.html
//! [`relay-system`]: ../relay_system/index.html
//! [`relay-test`]: ../relay_test/index.html
//! [`relay-ua`]: ../relay_ua/index.html
//! [`document-metrics`]: ../document_metrics/index.html
//! [`generate-schema`]: ../generate_schema/index.html
//! [`process-event`]: ../process_event/index.html
//! [`scrub-minidump`]: ../scrub_minidump/index.html
#![doc(
html_logo_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png",
html_favicon_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png"
)]
#![allow(clippy::derive_partial_eq_without_eq)]
mod cli;
mod cliapp;
mod setup;
mod utils;
use std::process;
use relay_log::Hub;
#[cfg(target_os = "linux")]
#[global_allocator]
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
pub fn main() {
let exit_code = match cli::execute() {
Ok(()) => 0,
Err(err) => {
relay_log::ensure_error(&err);
1
}
};
Hub::current().client().map(|x| x.close(None));
process::exit(exit_code);
}