> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> SDK de Ruby on Rails para ClickStack - ClickHouse Observability Stack

# Ruby on Rails

export const ClickStackIntegrates = ({signals = []}) => {
  const list = Array.isArray(signals) ? signals : String(signals).split(",");
  const supported = list.map(s => String(s).trim().toLowerCase());
  const pillStyle = {
    display: "inline-flex",
    alignItems: "center",
    padding: "0.125rem 0.625rem",
    borderRadius: "9999px",
    fontSize: "0.8125rem",
    fontWeight: 500,
    lineHeight: 1.6,
    color: "#161517",
    backgroundColor: "#faff69",
    border: "1px solid rgba(0, 0, 0, .1)",
    marginRight: "0.5rem"
  };
  return <div style={{
    margin: "0 0 1.25rem"
  }}>
      <span style={{
    marginRight: "0.5rem"
  }}>Esta guía integra:</span>
      {supported.includes("logs") && <span style={pillStyle}>Logs</span>}
      {supported.includes("metrics") && <span style={pillStyle}>Métricas</span>}
      {supported.includes("traces") && <span style={pillStyle}>Trazas</span>}
    </div>;
};

<ClickStackIntegrates signals={['traces']} />

*Para enviar logs a ClickStack, hágalo a través del [OpenTelemetry Collector](/es/clickstack/ingesting-data/collector).*

<h2 id="getting-started">
  Primeros pasos
</h2>

<h3 id="install-otel-packages">
  Instalar paquetes de OpenTelemetry
</h3>

Utiliza el siguiente comando para instalar el paquete de OpenTelemetry.

```shell theme={null}
bundle add opentelemetry-sdk opentelemetry-instrumentation-all opentelemetry-exporter-otlp
```

<h3 id="configure-otel-logger-formatter">
  Configurar OpenTelemetry + el formateador del logger
</h3>

A continuación, tendrás que inicializar la instrumentación de trazado de OpenTelemetry
y configurar el formateador de mensajes de log para el logger de Rails, de modo que los logs puedan
vincularse automáticamente con las trazas. Sin el formateador personalizado, los logs no
se correlacionarán automáticamente en ClickStack.

En la carpeta `config/initializers`, crea un archivo llamado `hyperdx.rb` y agrega lo
siguiente:

```ruby theme={null}
# config/initializers/hyperdx.rb

require 'opentelemetry-exporter-otlp'
require 'opentelemetry/instrumentation/all'
require 'opentelemetry/sdk'

OpenTelemetry::SDK.configure do |c|
  c.use_all() # ¡habilita toda la instrumentación de trazas!
end

Rails.application.configure do
  Rails.logger = Logger.new(STDOUT)
  # Rails.logger.log_level = Logger::INFO # el valor predeterminado es DEBUG, pero puede que prefieras INFO o superior en producción
  Rails.logger.formatter = proc do |severity, time, progname, msg|
    span_id = OpenTelemetry::Trace.current_span.context.hex_span_id
    trace_id = OpenTelemetry::Trace.current_span.context.hex_trace_id
    if defined? OpenTelemetry::Trace.current_span.name
      operation = OpenTelemetry::Trace.current_span.name
    else
      operation = 'undefined'
    end

    { "time" => time, "level" => severity, "message" => msg, "trace_id" => trace_id, "span_id" => span_id,
      "operation" => operation }.to_json + "\n"
  end

  Rails.logger.info "Logger initialized !! 🐱"
end
```

<h3 id="configure-environment-variables">
  Configurar variables de entorno
</h3>

Después, deberás configurar las siguientes variables de entorno en tu shell para enviar telemetría a ClickStack a través del OpenTelemetry Collector:

<Tabs>
  <Tab title="Managed ClickStack">
    ```shell theme={null}
    export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR_OTEL_COLLECTOR_HTTP_ENDPOINT> \
    OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
    OTEL_SERVICE_NAME='<YOUR_SERVICE_NAME>' \
    ```
  </Tab>

  <Tab title="ClickStack Open Source">
    ```shell theme={null}
    export OTEL_EXPORTER_OTLP_ENDPOINT=<YOUR_OTEL_COLLECTOR_HTTP_ENDPOINT> \
    OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
    OTEL_SERVICE_NAME='<YOUR_SERVICE_NAME>' \
    OTEL_EXPORTER_OTLP_HEADERS='authorization=<YOUR_INGESTION_API_KEY>'
    ```
  </Tab>
</Tabs>

*La variable de entorno `OTEL_SERVICE_NAME` se utiliza para identificar tu servicio
en la aplicación HyperDX; puede ser cualquier nombre que quieras.*

La variable de entorno `OTEL_EXPORTER_OTLP_HEADERS` contiene la clave de API disponible en la aplicación HyperDX, en `Team Settings → API Keys`.
