diff --git a/docs/self_hosting/index.md b/docs/self_hosting/index.md
index d45fbf237..d7cc06d37 100644
--- a/docs/self_hosting/index.md
+++ b/docs/self_hosting/index.md
@@ -34,3 +34,6 @@ Step-by-step guides that cover the installation, configuration, and scaling of y
- [Week of January 29, 2024 - LangSmith v0.2](./self_hosting/release_notes#week-of-january-29-2024---langsmith-v02): Release notes for version 0.2 of LangSmith.
- [FAQ](./self_hosting/faq): Frequently asked questions about LangSmith.
- [Troubleshooting](./self_hosting/troubleshooting): Troubleshooting common issues with your Self-Hosted LangSmith instance.
+- [Observability](./self_hosting/observability): How to access telemetry data for your self-hosted LangSmith instance.
+ - [Export LangSmith telemetry](./self_hosting/observability/export_backend): Export logs, metrics and traces to your collector and/or backend of choice.
+ - [Collector configuration](./self_hosting/observability/langsmith_collector): Example yaml configurations for an OTel collector to gather LangSmith telemetry data.
diff --git a/docs/self_hosting/observability/export_backend.mdx b/docs/self_hosting/observability/export_backend.mdx
new file mode 100644
index 000000000..f602623e9
--- /dev/null
+++ b/docs/self_hosting/observability/export_backend.mdx
@@ -0,0 +1,104 @@
+---
+sidebar_label: Export LangSmith Telemetry
+sidebar_position: 9
+---
+
+# Exporting LangSmith telemetry to your observability backend
+
+:::warning Important
+**This section is only applicable for Kubernetes deployments.**
+:::
+
+Self-Hosted LangSmith instances produce telemetry data in the form of logs, metrics and traces. This section will show you how to access and export that data to
+an observability collector or backend.
+
+This section assumes that you have monitoring infrastructure set up already, or you will set up this infrastructure and want to know how to configure LangSmith to collect data from it.
+
+Infrastructure refers to:
+
+- Collectors, such as [OpenTelemetry](https://opentelemetry.io/docs/collector/), [FluentBit](https://docs.fluentbit.io/manual) or [Prometheus](https://prometheus.io/)
+- Observability backends, such as [Datadog](https://www.datadoghq.com/) or [the Grafana ecosystem](https://grafana.com/)
+
+# Logs: [OTel Example](./langsmith_collector#logs)
+
+All services that are part of the LangSmith self-hosted deployment write their logs to their node/container filesystem. This includes Postgres, Redis and Clickhouse if you are running the in-cluster versions.
+In order to access these logs, you need to set up your collector to read from those files. Most popular collectors support reading logs from container filsystems.
+
+Example file system integrations:
+
+- **OpenTelemetry**: [File Log Receiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/filelogreceiver)
+- **FluentBit**: [Tail Input](https://docs.fluentbit.io/manual/pipeline/inputs/tail)
+- **Datadog**: [Kubernetes Log Collection](https://docs.datadoghq.com/containers/kubernetes/log/?tab=datadogoperator)
+
+# Metrics: [OTel Example](./langsmith_collector#metrics)
+
+ ## LangSmith Services
+ The following LangSmith services expose metrics at an endpoint, in the Prometheus metrics format.
+ - Backend: `http://..svc.cluster.local:1984/metrics`
+ - Platform Backend: `http://..svc.cluster.local:1986/metrics`
+ - Host Backend: `http://..svc.cluster.local:1985/metrics`
+ - Playground: `http://..svc.cluster.local:1988/metrics`
+
+ It is recommended to use a [Prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/#configure-prometheus-to-monitor-the-sample-targets) or
+ [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/prometheusreceiver) collector to scrape the endpoints, and export metrics to the
+ backend of your choice.
+
+ :::warning Important
+ **The following sections apply for in-cluster databases only. If you are using external databases, you will need to configure exposing and fetching metrics.**
+ :::
+ ## Redis
+ If you are using the in-cluster Redis instance from the Helm chart, LangSmith can expose metrics for you if you upgrade the chart with the following values:
+ ```yaml
+ redis:
+ metrics:
+ enabled: true
+ ```
+ This will run a sidecar container alongside your Redis container, and the LangSmith Redis service will expose Prometheus metrics at: `http://langsmith-..svc.cluster.local:9121/metrics`
+
+ ## Postgres
+ Similarly, to expose Postgres metrics, upgrade the LangSmith Helm chart with the following values:
+ ```yaml
+ postgres:
+ metrics:
+ enabled: true
+ ```
+ This will run a sidecar container alongside Postgres, and expose a Prometheus metrics endpoint at `http://langsmith-..svc.cluster.local:9187/metrics`
+
+ :::note Note
+ **You can modify the Redis and Postgres sidecar exporter configs through the LangSmith Helm chart.**
+ :::
+
+ ## Clickhouse
+ The Clickhouse container can expose metrics directly, without the need for a sidecar. To expose the metrics endpoint, upgrade your LangSmith Helm chart with the
+ following values:
+ ```yaml
+ clickhouse:
+ metrics:
+ enabled: true
+ ```
+ You can then scrape metrics at `http://langsmith-..svc.cluster.local:9363/metrics`
+
+# Traces: [OTel Example](./langsmith_collector#traces)
+
+The LangSmith Backend, Platform Backend, Playground and LangSmith Queue deployments have been instrumented using the OTEL SDK to emit
+traces adhering to the [OpenTelemetry format](https://opentelemetry.io/docs/concepts/signals/traces/). Tracing is toggled off by default, and can be enabled
+and customized with the following in your `values.yaml` file:
+
+```yaml
+config:
+ tracing:
+ enabled: true
+ endpoint: ""
+ useTls: true # Or false
+ env: "ls_self_hosted" # This value will be set as an "env" attribute in your spans
+ exporter: "http" # must be either http or grpc
+```
+
+This will export traces from all LangSmith backend services to the specified endpoint.
+
+:::important Important
+You can override the tracing endpoint for individual services. From our testing, the Python apps require an endpoint in the form
+`http://host:port/v1/traces`, while the Go app requires the same endpoint in the form `host:port` to send to the same collector.
+
+Make sure to check the logs of your services. If the trace endpoint is set incorrectly, you should see error logs in your service.
+:::
diff --git a/docs/self_hosting/observability/index.md b/docs/self_hosting/observability/index.md
new file mode 100644
index 000000000..da9f95683
--- /dev/null
+++ b/docs/self_hosting/observability/index.md
@@ -0,0 +1,12 @@
+---
+sidebar_label: Self-Hosted Observability
+sidebar_position: 11
+description: "Observability guides for LangSmith"
+---
+
+# Self-Hosted Observability
+
+This section contains guides for accessing telemetry data for your self-hosted LangSmith deployments.
+
+- [Export LangSmith Telemetry](./observability/export_backend): Export logs, metrics and traces to your collector and/or backend of choice.
+- [Configure a Collector for LangSmith Telemetry](./observability/langsmith_collector): Example yaml configurations for an OTel collector to gather LangSmith telemetry data.
diff --git a/docs/self_hosting/observability/langsmith_collector.mdx b/docs/self_hosting/observability/langsmith_collector.mdx
new file mode 100644
index 000000000..a1b097816
--- /dev/null
+++ b/docs/self_hosting/observability/langsmith_collector.mdx
@@ -0,0 +1,288 @@
+---
+sidebar_label: Collector Configuration
+sidebar_position: 9
+---
+
+# Configure your Collector to gather LangSmith telemetry
+
+As seen in the previous section, the various services in a LangSmith deployment emit telemetry data in the form of logs, metrics and traces.
+You may already have telemetry collectors set up in your Kubernetes cluster, or would like to deploy one to monitor your application.
+
+This section will show you how to configure an [OTel Collector](https://opentelemetry.io/docs/collector/configuration/) to gather telemetry data from LangSmith.
+Note that all of the concepts discussed below can be translated to other collectors such as [Fluentd](https://www.fluentd.org/) or [FluentBit](https://fluentbit.io/).
+
+:::warning Important
+**This section is only applicable for Kubernetes deployments.**
+:::
+
+# Receivers
+
+## Logs
+
+As discussed previously, logs are read from the filesystem of the nodes/containers running the application.
+This is an example for a Sidecar collector to read logs from its own container, excluding noisy logs from non-domain containers.
+A Sidecar configuration is useful here because we require access to every container's filesystem. A DaemonSet can also be used.
+
+```yaml
+filelog:
+ exclude:
+ - "**/otc-container/*.log"
+ - "**/postgres-metrics-exporter/*.log"
+ - "**/redis-metrics-exporter/*.log"
+ include:
+ - /var/log/pods/${POD_NAMESPACE}_${POD_NAME}_${POD_UID}/*/*.log
+ include_file_name: false
+ include_file_path: true
+ operators:
+ - id: container-parser
+ type: container
+ retry_on_failure:
+ enabled: true
+ start_at: end
+
+env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
+volumes:
+ - name: varlogpods
+ hostPath:
+ path: /var/log/pods
+volumeMounts:
+ - name: varlogpods
+ mountPath: /var/log/pods
+ readOnly: true
+```
+
+:::info Note
+**This configuration requires 'get', 'list', and 'watch' permissions on pods in the given namespace.**
+:::
+
+## Metrics
+
+Metrics can be scraped using the Prometheus endpoints. A single instance Gateway collector can be be used to avoid
+duplication of queries when fetching metrics. The following config scrapes all of the default named LangSmith services:
+
+```yaml
+prometheus:
+ config:
+ scrape_configs:
+ - job_name: langsmith-services
+ metrics_path: /metrics
+ scrape_interval: 15s
+ # Only scrape endpoints in the LangSmith namespace
+ kubernetes_sd_configs:
+ - role: endpoints
+ namespaces:
+ names: []
+ relabel_configs:
+ # Only scrape services with the name langsmith-.*
+ - source_labels: [__meta_kubernetes_service_name]
+ regex: "langsmith-.*"
+ action: keep
+ # Only scrape ports with the following names
+ - source_labels: [__meta_kubernetes_endpoint_port_name]
+ regex: "(backend|platform|playground|redis-metrics|postgres-metrics|ch-metrics)"
+ action: keep
+ # Promote useful metadata into regular labels
+ - source_labels: [__meta_kubernetes_service_name]
+ target_label: k8s_service
+ - source_labels: [__meta_kubernetes_pod_name]
+ target_label: k8s_pod
+ # Replace the default "host:port" as Prom's instance label
+ - source_labels: [__address__]
+ target_label: instance
+```
+
+:::info Note
+**This configuration requires 'get', 'list', and 'watch' permissions on pods, services and endpoints in the given namespace.**
+:::
+
+### Traces
+
+For traces, you need to enable the OTLP receiver. The following configuration can be used to listen to HTTP traces on port 4318, and GRPC on port 4317:
+
+```
+otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+```
+
+## Processors
+
+### Recommended OTEL Processors
+
+The following processors are recommended when using the OTel collector:
+
+- [Batch Processor](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/batchprocessor/README.md): Groups the data into batches before sending to exporters.
+- [Memory Limiter](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/memorylimiterprocessor/README.md): Prevents the collector from using too much memory and crashing. When the soft limit is crossed,
+ the collector stops accepting new data.
+- [Kubernetes Attributes Processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/k8sattributesprocessor): Adds Kubernetes metadata such as pod name into the telemetry data.
+
+## Exporters
+
+Exporters just need to point to an external endpoint of your liking. The following configuration allows you to configure a separate endpoint for logs, metrics and traces:
+
+```yaml
+otlphttp/logs:
+ endpoint:
+otlphttp/metrics:
+ endpoint:
+otlphttp/traces:
+ endpoint:
+```
+
+:::note Note
+**The OTel Collector also supports exporting directly to a [Datadog](https://docs.datadoghq.com/opentelemetry/setup/collector_exporter) endpoint.**
+:::
+
+# Example Collector Configuration: Logs Sidecar
+
+Note that this configuration uses a filter to drop any logs from files other than LangSmith logs in the deployment namespace.
+
+```yaml
+mode: sidecar
+image: otel/opentelemetry-collector-contrib:0.123.0
+
+config:
+ receivers:
+ filelog:
+ exclude:
+ - "**/otc-container/*.log"
+ - "**/postgres-metrics-exporter/*.log"
+ - "**/redis-metrics-exporter/*.log"
+ include:
+ - /var/log/pods/${POD_NAMESPACE}_${POD_NAME}_${POD_UID}/*/*.log
+ include_file_name: false
+ include_file_path: true
+ operators:
+ - id: container-parser
+ type: container
+ retry_on_failure:
+ enabled: true
+ start_at: end
+
+ processors:
+ batch:
+ send_batch_size: 8192
+ timeout: 10s
+ memory_limiter:
+ check_interval: 1m
+ limit_percentage: 90
+ spike_limit_percentage: 80
+
+ exporters:
+ otlphttp/logs:
+ endpoint:
+
+ service:
+ pipelines:
+ logs/langsmith:
+ receivers: [filelog]
+ processors: [batch, memory_limiter]
+ exporters: [otlphttp/logs]
+
+env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: POD_UID
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.uid
+volumes:
+ - name: varlogpods
+ hostPath:
+ path: /var/log/pods
+volumeMounts:
+ - name: varlogpods
+ mountPath: /var/log/pods
+ readOnly: true
+```
+
+# Example Collector Configuration: Metrics and Traces Gateway
+
+```yaml
+mode: deployment
+image: otel/opentelemetry-collector-contrib
+
+config:
+ receivers:
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: langsmith-services
+ metrics_path: /metrics
+ scrape_interval: 15s
+ # Only scrape endpoints in the LangSmith namespace
+ kubernetes_sd_configs:
+ - role: endpoints
+ namespaces:
+ names: []
+ relabel_configs:
+ # Only scrape services with the name langsmith-.*
+ - source_labels: [__meta_kubernetes_service_name]
+ regex: "langsmith-.*"
+ action: keep
+ # Only scrape ports with the following names
+ - source_labels: [__meta_kubernetes_endpoint_port_name]
+ regex: "(backend|platform|playground|redis-metrics|postgres-metrics|ch-metrics)"
+ action: keep
+ # Promote useful metadata into regular labels
+ - source_labels: [__meta_kubernetes_service_name]
+ target_label: k8s_service
+ - source_labels: [__meta_kubernetes_pod_name]
+ target_label: k8s_pod
+ # Replace the default "host:port" as Prom's instance label
+ - source_labels: [__address__]
+ target_label: instance
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:4317
+ http:
+ endpoint: 0.0.0.0:4318
+
+ processors:
+ batch:
+ send_batch_size: 8192
+ timeout: 10s
+ memory_limiter:
+ check_interval: 1m
+ limit_percentage: 90
+ spike_limit_percentage: 80
+
+ exporters:
+ otlphttp/metrics:
+ endpoint:
+ otlphttp/traces:
+ endpoint:
+
+ service:
+ pipelines:
+ metrics/langsmith:
+ receivers: [prometheus]
+ processors: [batch, memory_limiter]
+ exporters: [otlphttp/metrics]
+ traces/langsmith:
+ receivers: [otlp]
+ processors: [batch, memory_limiter]
+ exporters: [otlphttp/traces]
+```