+ ## Filtrado mejorado de esquemas según la versión
+
+
+*Demo de [@knudtty](https://github.com/knudtty)*
+
+
+
+
+
+ClickStack ahora aplica la optimización `direct_read` solo en las versiones 26.2 y posteriores de ClickHouse, donde el índice de búsqueda de texto completo admite correctamente las columnas `alias` añadidas a los esquemas open-source. Antes, la optimización podía intentarse en versiones anteriores, donde no funcionaba correctamente. La comprobación de versión se realiza en tiempo de consulta inspeccionando el esquema, y las propias columnas `alias` ahora se incluyen de forma predeterminada en los esquemas open-source.
+
+También se mostró trabajo en curso para sustituir la vista materializada de autocompletado por consultas directas al índice de texto. Ahora mismo, ambas hacen trabajo redundante, lo que aumenta la presión sobre la ingesta. Si los benchmarks confirman que las consultas al índice de texto mantienen un buen rendimiento, la vista materializada puede simplificarse o eliminarse. Aaron también respondió preguntas del equipo sobre cómo la codificación posicional en futuras versiones del índice de texto de ClickHouse podría hacer aún más precisas las búsquedas de filtros key-value.
+
+**PR relacionadas:** [#2341](https://github.com/hyperdxio/hyperdx/pull/2341) feat: adds direct_read optimization by default for logs and traces, [#2405](https://github.com/hyperdxio/hyperdx/pull/2405) feat(common-utils): apply direct_read KV items optimization to SQL filters, [#2376](https://github.com/hyperdxio/hyperdx/pull/2376) feat: use text index to power filters and autocomplete
+
+
+ ## Mejor análisis de logs
+
+
+*Demo de [@dhable](https://github.com/dhable)*
+
+
+
+
+
+Un cliente tenía logs en los que el body del evento era un objeto JSON que contenía un campo `level`. La lógica de inferencia de severidad hacía dos cosas: analizaba el body como JSON para extraer attributes y luego recurría a la búsqueda de cadenas si no se había establecido ninguna severidad a nivel de OTel. La búsqueda de cadenas estaba detectando la palabra "alert" en el nombre de un gestor de alertas dentro del body, clasificando incorrectamente el nivel de log.
+
+La corrección añade una condición de control: si el body se analiza como JSON y ya contiene un campo `level`, omite por completo el paso de inferencia por cadenas. Una suite de pruebas de humo creada hace aproximadamente un año permitió verificar fácilmente la corrección y detectar casos límite relacionados simplemente añadiendo nuevos casos de prueba, que es exactamente para lo que fue diseñada.
+
+**PR relacionadas:** [#2363](https://github.com/hyperdxio/hyperdx/pull/2363) fix(log-parser): omitir la inferencia por cadenas cuando el body se analiza como JSON con un campo `level`
+
+
+ ## Mejoras del servidor MCP
+
+
+*Demo de [@brandon-pereira](https://github.com/brandon-pereira)*
+
+
+
+
+
+Esta semana se lanzaron varias mejoras de MCP: mejor agrupación y puntuación de patrones de eventos, mejores sugerencias de error y limpieza de funciones auxiliares compartidas. Los prefijos de las herramientas también se renombraron de `hyperdx_` a `clickstack_` para ajustarse al nombre del producto.
+
+**PR relacionados:** [#2337](https://github.com/hyperdxio/hyperdx/pull/2337) feat(mcp): mejora la calidad de las herramientas de MCP — sugerencias de error, funciones auxiliares compartidas y mejores mensajes, [#2396](https://github.com/hyperdxio/hyperdx/pull/2396) refactor(mcp): renombra los prefijos de las herramientas de hyperdx_ a clickstack_, [#2343](https://github.com/hyperdxio/hyperdx/pull/2343) feat(mcp): añade las herramientas patch_dashboard, get_dashboard_tile y search_dashboards, [#2418](https://github.com/hyperdxio/hyperdx/pull/2418) fix(mcp): mejora las descripciones de alias y los ejemplos para que las leyendas de los gráficos sean legibles, [#2412](https://github.com/hyperdxio/hyperdx/pull/2412) refactor: simplifica la validación de ObjectId de MCP con funciones auxiliares compartidas y comprobaciones a nivel de esquema
+
+
+ ## Nueva paleta de colores para series
+
+
+*Demo de [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Elizabet trabajó en unificar la paleta de colores de las visualizaciones de datos en los temas de HyperDX y ClickStack, como apoyo al trabajo de Alex en el selector de color. Ambos temas tenían paletas distintas con reglas de excepción propias, lo que hacía innecesariamente complejo trabajar con los colores. El objetivo era contar con una única paleta que funcionara en ambos.
+
+Hizo pruebas con paletas estándar del sector (Tableau, Observable, IBM) usando una herramienta de simulación de visión cromática para comprobar el contraste y la accesibilidad. La paleta de ClickHouse dio malos resultados: el verde no tiene suficiente contraste sobre fondo blanco. Tanto Tableau como Observable no superan al menos una comprobación cada una; la paleta de IBM las supera todas, pero solo tiene cinco colores, lo que no es suficiente. En conjunto, la paleta de Observable fue la que más se acercó, con un pequeño ajuste en el azul, y ahora se compartirá entre ambos temas.
+
+**PR relacionadas:** [#2362](https://github.com/hyperdxio/hyperdx/pull/2362) refactor(theme): renombrar los tokens de la paleta de gráficos con nombres de matiz + unificar en ambos temas
+
+
+ ## Nuevo diseño de página con encabezado fijo
+
+
+*Demo de [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Se ha implementado un nuevo conjunto de componentes, PageHeader y PageLayout, en todas las páginas principales: dashboards, mapa de servicios, Client Sessions, Kubernetes y el dashboard de ClickHouse. Ahora todas las páginas comparten el mismo espaciado interno, la línea de borde debajo del encabezado y la estructura del título. Antes, las páginas eran inconsistentes: algunas tenían un título a la izquierda y controles a la derecha, mientras que otras no tenían ningún título.
+
+El comportamiento fijo se activa de forma opcional mediante una prop. Todo lo que pases al slot sticky permanece fijado debajo del encabezado mientras te desplazas; todo lo demás se desplaza con normalidad. Si no se pasa nada, las rutas de navegación o las opciones de la página se fijan automáticamente.
+
+**PR relacionadas:** [#2282](https://github.com/hyperdxio/hyperdx/pull/2282) Add PageHeader/PageLayout and migrate Sessions, [#2345](https://github.com/hyperdxio/hyperdx/pull/2345) Use PageHeader title on list pages, [#2346](https://github.com/hyperdxio/hyperdx/pull/2346) Migrate Service Map to PageLayout, [#2347](https://github.com/hyperdxio/hyperdx/pull/2347) Migrate Kubernetes dashboard to PageLayout, [#2348](https://github.com/hyperdxio/hyperdx/pull/2348) Migrate ClickHouse dashboard to PageLayout, [#2364](https://github.com/hyperdxio/hyperdx/pull/2364) feat(dashboard): migrate to PageLayout with sticky query toolbar, [#2394](https://github.com/hyperdxio/hyperdx/pull/2394) fix(PageHeader): keep sticky header below drawer overlays
+
+
+ ## Nuevo selector de origen de datos y selector de color para series
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Dos mejoras de la UI por parte de Alex. Se ha simplificado el selector de origen de datos: al hacer clic en él, ahora solo se muestran los orígenes de datos entre los que se puede elegir. Las acciones de gestión, como ver el esquema o crear un nuevo origen, se han movido a un menú kebab independiente. Esto separa la selección de la configuración, algo que llevaba tiempo en la lista de tareas pendientes y que responde a los comentarios del equipo.
+
+Los tiles Number ahora también tienen un selector de color estático para que puedas asignar un color específico a una métrica. Las reglas de color condicional (hacer que cambie a rojo, verde o amarillo en función de un valor de umbral o una columna) también están en desarrollo. Cuando llegue la paleta unificada de Elizabet, ambos usarán colores con nombres adecuados en lugar de las etiquetas actuales "color 1, 2, 3", lo que debería suponer una mejora importante para los usuarios que vienen de herramientas como Grafana.
+
+**PR relacionados:** [#2365](https://github.com/hyperdxio/hyperdx/pull/2365) feat(source-picker): chip + menú kebab UX, [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): selector de color estático para tile Number
+
+
+ ## Mejores indicaciones para las acciones del dashboard
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Las filas de los tiles de tabla del dashboard ahora muestran un estado al pasar el cursor más útil. El cursor y el icono cambian al pasar el ratón para indicar qué ocurrirá al hacer clic: o bien se abrirá un dashboard enlazado o bien se profundizará en una fuente de datos. Antes de este cambio, no quedaba claro que se pudiera hacer clic en las filas, y mucho menos qué harían.
+
+**PR relacionadas:** [#2321](https://github.com/hyperdxio/hyperdx/pull/2321) feat(app): indicación al pasar el cursor y comportamiento visual de enlace nativo para el clic en filas de tiles de tabla del dashboard
\ No newline at end of file
diff --git a/es/clickstack/demo-days/2026/2026-06-05.mdx b/es/clickstack/demo-days/2026/2026-06-05.mdx
new file mode 100644
index 000000000..70f7b4133
--- /dev/null
+++ b/es/clickstack/demo-days/2026/2026-06-05.mdx
@@ -0,0 +1,142 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-06-05
+title: 'Demo days - 2026-06-05'
+sidebarTitle: '2026-06-05'
+description: 'ClickStack demo days del 2026-06-05'
+doc_type: 'guide'
+keywords: ['ClickStack', 'Demo days']
+---
+
+
+ ## Vista de traza dividida y vista de traza extendida
+
+
+*Demo de [@karl-power](https://github.com/karl-power)*
+
+
+
+
+
+El panel de traza ahora tiene un modo de vista dividida: al hacer clic en los spans de la línea de tiempo, el panel de detalles se actualiza en su lugar, a la derecha, en vez de abrirse debajo del span seleccionado, como ocurría antes. Así, toda la línea de tiempo permanece visible mientras examinas spans individuales.
+
+También puedes ampliar a una vista de traza extendida para ver una línea de tiempo de ancho completo con compatibilidad con desplazamiento y zoom. Ambos paneles pueden abrirse y cerrarse de forma independiente, lo que facilita alternar entre una visión general de alto nivel y la inspección detallada de spans sin perder el contexto.
+
+**PR relacionadas:** [#2402](https://github.com/hyperdxio/hyperdx/pull/2402) feat: trace panel inline split detail
+
+
+ ## Filtros obligatorios a nivel de la fuente
+
+
+*Demo a cargo de [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+Las fuentes ahora pueden declarar filtros obligatorios que se muestran automáticamente en cualquier dashboard que las use. En lugar de añadir manualmente el mismo filtro a cada dashboard que haga referencia a una fuente, ClickStack detecta este requisito y eleva el filtro al nivel del dashboard, aplicándolo solo a los tiles que realmente usan esa fuente.
+
+Los tiles individuales pueden sobrescribir el valor definido a nivel del dashboard si necesitan valores de filtro distintos, y los filtros obligatorios también se trasladan a la vista previa del editor de gráficos para que puedas validar consultas sin tener que quitarlos. Los filtros obligatorios de la fuente también se integran con la macro SQL filters para los gráficos basados en SQL y, al configurar enlaces entre dashboards, ClickStack los incluye automáticamente como candidatos para los parámetros del enlace.
+
+
+ ## Ajustar el eje Y a los datos
+
+
+*Demo de [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+Los gráficos de líneas tienen una nueva opción de visualización: "Ajustar el eje Y a los datos". De forma predeterminada, el eje Y está anclado en cero, lo que comprime el rango visible cuando los valores son altos pero solo varían ligeramente, haciendo que las tendencias no se aprecien a simple vista.
+
+Con esta opción activada, el rango del eje Y se calcula dinámicamente a partir del rango real de los datos, de modo que las fluctuaciones en series con valores altos sean visibles sin tener que configurar manualmente los límites del eje.
+
+**PR relacionadas:** [#2417](https://github.com/hyperdxio/hyperdx/pull/2417) feat(charts): añade la opción de visualización 'Ajustar el eje Y a los datos' para gráficos de líneas
+
+
+ ## Alertas de anomalías
+
+
+*Demo de [@fleon](https://github.com/fleon)*
+
+
+
+
+
+Himanshu mostró cómo estamos trabajando en alertas basadas en anomalías mediante detección por Z-score. En lugar de un umbral fijo, defines cuántas desviaciones estándar respecto a la media esperada deben activar una alerta. La ventana de estacionalidad (horaria o diaria) controla cómo se calcula la línea base, y el editor de alertas resalta las ventanas que se habrían activado para que puedas ajustar la sensibilidad antes de guardar.
+
+Esto resuelve un problema común con las alertas por umbral: los usuarios a menudo no saben qué valor numérico establecer. Ver cómo las posibles ventanas de alerta se actualizan en tiempo real a medida que ajustas el Z-score hace que sea práctico encontrar un umbral que detecte picos reales sin generar ruido excesivo. Las alertas pueden configurarse para activarse solo cuando los valores superan el rango esperado (no cuando caen por debajo), y una opción de ocurrencia te permite exigir que la condición se mantenga durante varios puntos de datos consecutivos antes de activarse. Esto aún está en desarrollo; actualmente la línea base se calcula como una media móvil, y está previsto añadir compatibilidad con la media móvil exponencial.
+
+
+ ## Configuración más clara para la API y los agentes de IA
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+La configuración de ClickStack ahora incluye una pestaña específica de API y agentes que agrupa las claves API y la configuración de la conexión MCP. Los botones de un clic para Claude, Cursor y OpenCode evitan tener que crear manualmente los comandos de conexión; el botón de Cursor, por ejemplo, abre una terminal con el comando de instalación correcto ya rellenado. Los usuarios de OpenCode disponen de un fragmento de system prompt que pueden copiar y pegar directamente. Una opción genérica de configuración JSON cubre otros clientes MCP.
+
+**PR relacionadas:** [#2407](https://github.com/hyperdxio/hyperdx/pull/2407) feat(team-settings): conecta tu asistente de IA
+
+
+ ## Selección de color para gráficos de número
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Los tiles de número ahora admiten tanto un color estático seleccionado con un selector de color como reglas de color condicionales. La paleta del gráfico se ha actualizado con nombres de color legibles para humanos —"azul" y "gris" en lugar de "color-1" y "color-10"—, lo que facilita mucho entender qué se está seleccionando.
+
+El coloreado condicional permite definir reglas de umbral ordenadas, como verde por debajo de un valor objetivo, ámbar dentro de un rango de advertencia y rojo por encima de un umbral crítico. Esto hace que los tiles de número sean realmente útiles como indicadores de estado en los dashboards, especialmente para métricas como tasas de error o latencia P99, donde se quiere una respuesta visual inmediata sin tener que leer el número.
+
+**PR relacionados:** [#2386](https://github.com/hyperdxio/hyperdx/pull/2386) Reglas de color condicional para tiles de número (umbrales ordenados), [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): selector de color estático para tiles de número
+
+
+ ## Migraciones de esquemas
+
+
+*Demo de [@wrn14897](https://github.com/wrn14897)*
+
+
+
+
+
+ClickStack ahora incluye una pestaña de Migraciones de esquemas en la configuración (Enterprise) para realizar cambios DDL controlados y versionados en tus esquemas de datos. Escribes una migración, le asignas un número de versión y una tarea en segundo plano la detecta y la ejecuta con lógica de reintento y un orden estricto: si una migración falla, las migraciones posteriores que dependen de ella no se ejecutarán hasta que se resuelva o se elimine.
+
+El modelo versionado también permite a ClickHouse aplicar optimizaciones de esquema gestionadas a los equipos de ClickStack Cloud sin requerir trabajo manual con ALTER TABLE. Los equipos pueden revisar las migraciones pendientes y desbloquearlas a su propio ritmo. La fase uno cubre cambios aditivos; las modificaciones de la clave primaria están previstas para la fase dos.
+
+
+ ## Dashboards de Browser RUM listos para usar
+
+
+*Demo de [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+ClickStack ahora incluye un dashboard preconfigurado de Browser RUM que cubre todo el conjunto de métricas de rendimiento web. El dashboard incluye una vista general del rendimiento con vistas de página y tiempo de carga P90, además de las métricas web esenciales —LCP, INP y CLS— con umbrales por niveles para que puedas ver de inmediato si cada métrica es saludable, necesita mejoras o es deficiente.
+
+Las secciones adicionales cubren las vistas de página a lo largo del tiempo, tareas largas, desglose por dispositivo, las páginas más lentas, las sesiones con más errores, las tasas de errores de JavaScript y los fallos de API. Las acciones personalizadas por fila te permiten hacer clic en cualquier fila de la tabla para profundizar en los datos de la sesión o la traza correspondientes. Los filtros de la parte superior de la página te permiten segmentar por servicio, entorno, versión del servicio y página. El filtrado por país está en progreso, a la espera de mejoras en el SDK para navegador para emitir datos geográficos.
+
+**PR relacionadas:** [#2413](https://github.com/hyperdxio/hyperdx/pull/2413) feat: add Browser RUM dashboard template
+
+
+ ## Filtros dependientes del dashboard
+
+
+*Demo de [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+Ahora los filtros del dashboard pueden depender entre sí, de modo que al seleccionar un valor en un filtro se limitan automáticamente las opciones disponibles en los filtros siguientes. El dashboard de Kubernetes es el primero en usarlo: al seleccionar un pod de Kubernetes, las listas desplegables de Implementación y nodo ahora se reducen para mostrar solo los valores relevantes para ese pod, en lugar de mostrar todas las opciones de todo el cluster.
+
+Esto significa que nunca se te ofrecerá una combinación de filtros que devuelva datos vacíos. Esta funcionalidad ya está disponible en la plantilla del dashboard de Kubernetes.
\ No newline at end of file
diff --git a/es/clickstack/features/dashboards/row-click-drilldowns.mdx b/es/clickstack/features/dashboards/row-click-drilldowns.mdx
new file mode 100644
index 000000000..a801d73a4
--- /dev/null
+++ b/es/clickstack/features/dashboards/row-click-drilldowns.mdx
@@ -0,0 +1,160 @@
+---
+slug: /use-cases/observability/clickstack/dashboards/row-click-drilldowns
+title: 'Drilldowns al hacer clic en filas de una tabla'
+sidebarTitle: 'Drilldowns al hacer clic en filas'
+description: 'Convierte un tile de tabla en un flujo de trabajo de inspección: haz clic en una fila para profundizar en un dashboard específico o en los logs y traces subyacentes, limitados a la fila seleccionada'
+doc_type: 'guide'
+keywords: ['clickstack', 'dashboards', 'drilldown', 'tabla', 'clic en una fila', 'inspección', 'observabilidad']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+Un tile de tabla suele ser un **catálogo**: una fila por servicio, host, endpoint o grupo de errores, con unas pocas columnas que puntúan cada uno. Las acciones al hacer clic en una fila convierten ese catálogo en un flujo de inspección. Recorres el catálogo para encontrar la fila que importa, haces clic en ella y ClickStack transmite los valores de la fila seleccionada como filtros. El destino se abre entonces ya acotado a ese único elemento, sin tener que reconstruir ninguna consulta a mano.
+
+Un clic puede llevar a uno de estos dos lugares:
+
+* **otro dashboard**, para una vista centrada en un único elemento, como un dashboard de detalle por servicio, o
+* **los eventos subyacentes** en [Búsqueda](/es/clickstack/features/search), para los logs o traces que hay detrás de la fila.
+
+Ambos casos de uso siguientes parten del mismo catálogo (un inventario de servicios) y desde ahí profundizan en cada destino. Las acciones al hacer clic en una fila se aplican solo a los tiles de tabla. Son distintas del [drilldown a Búsqueda](/es/clickstack/features/dashboards/overview#drilldown-to-search) desde gráficos, que abre un menú contextual al hacer clic en un punto de un gráfico de líneas o de barras.
+
+
+ ## Inspeccionar un servicio en su propio dashboard
+
+
+Una tabla de resumen con una fila por servicio responde a la pregunta "¿qué servicio está fallando?". Al hacer clic en una fila, se puede abrir un dashboard específico de ese servicio que responde "¿qué está pasando dentro?", limitado al servicio en el que hiciste clic. El siguiente patrón combina una tabla de inventario de servicios con un dashboard `Service Detail`.
+
+
+
+ ### Crear el dashboard de detalle
+
+ Crea un dashboard llamado `Service Detail` y añade un [filtro personalizado](/es/clickstack/features/dashboards/overview#custom-filters) con la expresión `ServiceName` en tu fuente de traces. El filtro a nivel de dashboard limita cada tile a un único servicio, por lo que los tiles no tienen que fijar un servicio en sus queries. Añade las vistas por servicio que quieras: métricas clave RED (solicitudes, errores, duración P95), un chart de percentiles de latencia (P50, P95, P99), la tasa de solicitudes a lo largo del tiempo y un desglose por endpoint agrupado por `SpanName`.
+
+ Guarda primero este dashboard para poder seleccionarlo como destino en el siguiente paso.
+
+
+
+ ### Crear el inventario de servicios
+
+ En un dashboard de resumen, añade un tile de **Table** en tu fuente de traces agrupado por `ServiceName`. Asígnale las columnas RED que puntúan cada servicio, cada una como una serie con alias:
+
+ * `Requests`: recuento de spans (tasa).
+ * `Errors`: recuento de spans con estado de error.
+ * `P95 Duration`: el percentil 95 de `Duration`. Configura el formato numérico de la columna como duración para que se muestre como `288ms`, no como nanosegundos sin procesar.
+
+ Ordena por `Requests` de forma descendente para que los servicios con más tráfico aparezcan arriba. Esta tabla es el catálogo: una fila por servicio, puntuado según RED.
+
+
+
+
+ **Empieza por la columna de agrupación**
+
+ De forma predeterminada, una tabla muestra su columna de agrupación (aquí `ServiceName`) a la derecha, después de las series. Un catálogo se lee mejor si la identidad de cada fila aparece primero. Abre **Display Settings** del tile y activa **Display Group By Columns on Left** para mover la columna de agrupación al principio.
+
+
+
+
+ ### Configurar el clic en la fila
+
+ En la tabla de inventario, abre **Row Click Action**, selecciona **Dashboard** y elige `Service Detail` en la lista de dashboards. Elegir el dashboard directamente lo fija por ID. El enlace sigue funcionando si el dashboard se renombra más adelante, y también se conserva al exportar e importar el dashboard. (Reserva la opción **Template** para elegir un dashboard distinto por fila; consulta [Configurar una acción de clic en fila](#set-up).)
+
+ Como `Service Detail` declara un filtro personalizado `ServiceName`, el panel lateral rellena previamente un filtro vacío para esa expresión. Completa su plantilla:
+
+ * **Expression**: `ServiceName` (ya rellenado)
+ * **Template**: `{{ServiceName}}`
+
+ Haz clic en **Aplicar** y guarda. El servicio de la fila seleccionada ahora se pasa al filtro `ServiceName` del dashboard.
+
+
+
+ ### Hacer clic en una fila
+
+ Al pasar el cursor sobre una fila, se muestra un enlace en el borde derecho de la tabla, con una indicación que describe la acción (`Open dashboard \"Service Detail\"`). Al hacer clic en la fila, se abre el dashboard `Service Detail` con su filtro `Service` establecido en el valor seleccionado, de modo que cada tile (las métricas clave RED, los percentiles de latencia y el desglose por endpoint) queda limitado a ese único servicio con un solo clic.
+
+
+
+
+
+
+ ## Ir de un servicio a sus trazas
+
+
+A veces no quieres otra vista de agregación; quieres los eventos sin procesar. La acción **Búsqueda** envía el clic a la página [Búsqueda](/es/clickstack/features/search) en lugar de a un dashboard, y abre los logs o trazas detrás de esa fila, ya filtrados.
+
+Partiendo de la misma tabla de inventario de servicios, haz que el clic en la fila apunte directamente a las trazas en lugar de al dashboard de detalle.
+
+
+
+ ### Haz que el clic en la fila apunte a Búsqueda
+
+ En la tabla de inventario, abre **Row Click Action** y selecciona **Búsqueda**. Elige tu fuente de trazas (solo se muestran las fuentes de logs y trazas). Añade un filtro:
+
+ * **Expression**: `ServiceName`
+ * **Template**: `{{ServiceName}}`
+
+ Haz clic en **Aplicar** y guarda los cambios.
+
+
+
+ ### Haz clic en una fila
+
+ Al hacer clic en una fila de servicio, se abre la página de Búsqueda en esa fuente de trazas, filtrada por `ServiceName = `, para que llegues a los spans de ese servicio dentro del mismo intervalo de tiempo.
+
+
+
+
+
+La misma estructura funciona para cualquier catálogo de elementos. Agrupa la tabla por una operación (`SpanName`) o por un atributo de endpoint en lugar de `ServiceName`, usa esa columna como plantilla para el filtro y, con cada clic en una fila, se abrirán los eventos de esa operación o endpoint. Para un `group-by` sobre un atributo map, consulta la nota sobre alias en [Validación y limitaciones](#validation).
+
+
+ ## Configurar una acción al hacer clic en una fila
+
+
+Las acciones al hacer clic en una fila se configuran en el propio tile de tabla; no hay una página independiente para ellas. Agrega o edita un tile y establece su tipo de visualización en **Table**. Entonces aparece un botón de **Row Click Action** en la barra de herramientas del editor, junto a **Display Settings**. El botón solo se muestra en los tiles de tabla, y su etiqueta refleja la acción actual: `Row Click Action: Default`, `Row Click Action: Search` o `Row Click Action: Dashboard`. Haz clic en él para abrir el panel lateral.
+
+
+
+El panel lateral ofrece tres acciones:
+
+* **Default**: el comportamiento predeterminado. Al hacer clic en una fila, se abre la página de Búsqueda, filtrada por los valores de las columnas de agrupación de la fila y el intervalo de tiempo seleccionado. Esto es lo que obtienes cuando no se configura ninguna acción personalizada.
+* **Search**: envía el clic a la página de Búsqueda de una fuente que elijas.
+* **Dashboard**: envía el clic a otro dashboard de tu equipo.
+
+Para **Search** y **Dashboard**, eliges a dónde lleva el clic y defines con plantillas los filtros que se trasladan:
+
+* **Destination**: elige una fuente o un dashboard concretos, o selecciona **Template** e introduce una plantilla de [Handlebars](https://handlebarsjs.com/) cuyo nombre coincida con el de una fuente o dashboard disponible. Elegir un destino concreto lo fija por ID. Es la opción recomendada para un único destino fijo: resiste cambios de nombre y la exportación e importación de dashboards, y en el caso de un dashboard completa previamente los filtros declarados en el destino. Usa **Template** cuando el destino deba variar según la fila, haciendo referencia a una columna de la fila para elegirlo (por ejemplo, `Errors-{{ServiceName}}`).
+* **Filters**: haz clic en **Add filter** y proporciona una **Expression** (una columna o expresión en el destino, por ejemplo `ServiceName`) y una **Template** para su valor (por ejemplo `{{ServiceName}}`). Las plantillas hacen referencia a las columnas de la fila seleccionada mediante `{{columnName}}` (consulta la nota de abajo sobre qué columnas están disponibles). Cada filtro se convierte en el destino en una condición `expression IN (value)`, y los filtros que comparten una misma expresión se combinan. Cuando el destino es un dashboard, el panel lateral completa previamente un filtro vacío por cada filtro que ese dashboard ya declara, para que solo tengas que rellenar las plantillas.
+* **WHERE** (opcional): una plantilla de Handlebars que se procesa en el filtro global del destino, además de las condiciones por filtro anteriores. Establece su lenguaje de consulta en SQL o Lucene para que el destino la interprete. Por ejemplo, la plantilla SQL `ServiceName = '{{ServiceName}}'` limita el destino al servicio de la fila en la que se hizo clic.
+
+
+ **Las plantillas hacen referencia a las columnas de la tabla**
+
+ Una plantilla `{{...}}` se resuelve usando las propias columnas del tile de tabla: las columnas de agrupación y cada serie por su nombre o alias, exactamente como aparecen en la tabla. No ve las columnas de la fuente subyacente que la tabla no selecciona. Para que un valor se transfiera mediante un clic, debe ser una columna de la tabla; por eso `{{ServiceName}}` funciona, porque `ServiceName` es la columna de agrupación de la tabla, y una columna con alias se referencia por su alias. Si haces referencia a un nombre que la tabla no tiene, el clic falla con `Row has no column ''`.
+
+
+Haz clic en **Aplicar** para validar las plantillas (ClickStack informa de cualquiera que tenga una sintaxis no válida) y, a continuación, guarda el dashboard para conservar la acción.
+
+
+ ## Cómo se resuelven el destino y los filtros
+
+
+Cuando un usuario hace clic en una fila, ClickStack resuelve la acción en función de esa fila:
+
+* **Destino.** Al elegir una fuente o un dashboard específicos, quedan fijados por ID. Un destino **Template** se renderiza a partir de la fila seleccionada y luego se compara por nombre con las fuentes o dashboards de tu equipo. Para que se pueda resolver, el nombre debe ser único: si dos fuentes o dos dashboards comparten el nombre renderizado, el enlace no puede resolverse a uno de ellos. Tampoco se puede resolver si el nombre renderizado está vacío o no coincide con ninguno.
+* **Filtros.** Cada plantilla de filtro se renderiza a partir de la fila y se convierte en una condición `expression IN (value)` en el destino. Una acción `Search` abre `/search` restringido a la fuente elegida; una acción `Dashboard` abre ese dashboard. En ambos casos, se conserva el intervalo de tiempo de la fila seleccionada.
+
+
+ **Los destinos de dashboard necesitan un filtro declarado que coincida**
+
+ Un filtro transferido a un dashboard solo surte efecto si el dashboard de destino declara un [filtro personalizado](/es/clickstack/features/dashboards/overview#custom-filters) de nivel superior cuya expresión coincida con la **Expression** del filtro. Si ningún filtro declarado coincide, ese valor se descarta en el momento del clic y el destino se abre sin filtrar para esa expresión. Por eso, el modo dashboard rellena previamente los filtros declarados del destino: si la expresión coincide, el menú desplegable del destino se completa automáticamente con el valor de la fila seleccionada.
+
+
+
diff --git a/es/integrations/clickpipes/navigation.json b/es/integrations/clickpipes/navigation.json
index 980de39dc..7af53a510 100644
--- a/es/integrations/clickpipes/navigation.json
+++ b/es/integrations/clickpipes/navigation.json
@@ -32,7 +32,6 @@
{
"group": "ClickPipes for Postgres",
"pages": [
- "es/integrations/clickpipes/postgres/index",
"es/integrations/clickpipes/postgres/deduplication",
"es/integrations/clickpipes/postgres/ordering-keys",
"es/integrations/clickpipes/postgres/toast",
@@ -72,7 +71,8 @@
"es/integrations/clickpipes/postgres/source/planetscale"
]
}
- ]
+ ],
+ "root": "es/integrations/clickpipes/postgres/index"
},
{
"group": "ClickPipes for Kafka",
@@ -89,22 +89,21 @@
"group": "ClickPipes for Kinesis",
"pages": [
"es/integrations/clickpipes/kinesis/overview",
- "es/integrations/clickpipes/kinesis/index",
"es/integrations/clickpipes/kinesis/auth"
- ]
+ ],
+ "root": "es/integrations/clickpipes/kinesis/index"
},
{
"group": "ClickPipes for GCP Pub/Sub",
"pages": [
"es/integrations/clickpipes/pubsub/overview",
- "es/integrations/clickpipes/pubsub/index",
"es/integrations/clickpipes/pubsub/auth"
- ]
+ ],
+ "root": "es/integrations/clickpipes/pubsub/index"
},
{
"group": "ClickPipes for MySQL",
"pages": [
- "es/integrations/clickpipes/mysql/index",
"es/integrations/clickpipes/mysql/faq",
"es/integrations/clickpipes/mysql/datatypes",
"es/integrations/clickpipes/mysql/parallel-initial-load",
@@ -134,12 +133,12 @@
"es/integrations/clickpipes/mysql/source/generic-maria"
]
}
- ]
+ ],
+ "root": "es/integrations/clickpipes/mysql/index"
},
{
"group": "ClickPipes for MongoDB",
"pages": [
- "es/integrations/clickpipes/mongodb/index",
"es/integrations/clickpipes/mongodb/datatypes",
"es/integrations/clickpipes/mongodb/quickstart",
"es/integrations/clickpipes/mongodb/lifecycle",
@@ -164,7 +163,8 @@
"es/integrations/clickpipes/mongodb/source/documentdb"
]
}
- ]
+ ],
+ "root": "es/integrations/clickpipes/mongodb/index"
},
{
"group": "ClickPipes for BigQuery",
diff --git a/es/integrations/connectors/navigation.json b/es/integrations/connectors/navigation.json
index 48e6ec0be..7578efbd7 100644
--- a/es/integrations/connectors/navigation.json
+++ b/es/integrations/connectors/navigation.json
@@ -17,7 +17,6 @@
"expanded": false,
"group": "Kafka",
"pages": [
- "es/integrations/connectors/data-ingestion/kafka/index",
"es/integrations/connectors/data-ingestion/kafka/kafka-clickhouse-connect-sink",
"es/integrations/connectors/data-ingestion/kafka/confluent/confluent-cloud",
"es/integrations/connectors/data-ingestion/kafka/confluent/custom-connector",
@@ -28,7 +27,8 @@
"es/integrations/connectors/data-ingestion/kafka/confluent/kafka-connect-http",
"es/integrations/connectors/data-ingestion/kafka/kafka-connect-jdbc",
"es/integrations/connectors/data-ingestion/kafka/kafka-table-engine-named-collections"
- ]
+ ],
+ "root": "es/integrations/connectors/data-ingestion/kafka/index"
},
"es/integrations/connectors/data-sources/mysql",
"es/integrations/connectors/data-sources/cassandra",
@@ -49,10 +49,10 @@
"expanded": false,
"group": "Grafana",
"pages": [
- "es/integrations/connectors/data-visualization/grafana/index",
"es/integrations/connectors/data-visualization/grafana/query-builder",
"es/integrations/connectors/data-visualization/grafana/config"
- ]
+ ],
+ "root": "es/integrations/connectors/data-visualization/grafana/index"
},
"es/integrations/connectors/data-visualization/lightdash-and-clickhouse",
"es/integrations/connectors/data-visualization/looker-and-clickhouse",
@@ -108,11 +108,11 @@
"expanded": false,
"group": "Apache Spark",
"pages": [
- "es/integrations/connectors/data-ingestion/apache-spark/index",
"es/integrations/connectors/data-ingestion/apache-spark/spark-native-connector",
"es/integrations/connectors/data-ingestion/apache-spark/databricks",
"es/integrations/connectors/data-ingestion/apache-spark/spark-jdbc"
- ]
+ ],
+ "root": "es/integrations/connectors/data-ingestion/apache-spark/index"
},
"es/integrations/connectors/data-ingestion/apache-flink",
"es/integrations/connectors/data-ingestion/AWS/glue",
@@ -120,11 +120,11 @@
"expanded": false,
"group": "Azure Data Factory",
"pages": [
- "es/integrations/connectors/data-ingestion/azure/azure-data-factory/index",
"es/integrations/connectors/data-ingestion/azure/azure-data-factory/overview",
"es/integrations/connectors/data-ingestion/azure/azure-data-factory/using-azureblobstorage",
"es/integrations/connectors/data-ingestion/azure/azure-data-factory/using-http-interface"
- ]
+ ],
+ "root": "es/integrations/connectors/data-ingestion/azure/azure-data-factory/index"
},
"es/integrations/connectors/data-ingestion/azure/azure-synapse",
"es/integrations/connectors/data-ingestion/etl-tools/apache-beam",
@@ -150,12 +150,12 @@
"expanded": false,
"group": "dbt",
"pages": [
- "es/integrations/connectors/data-ingestion/etl-tools/dbt/index",
"es/integrations/connectors/data-ingestion/etl-tools/dbt/features-and-configurations",
"es/integrations/connectors/data-ingestion/etl-tools/dbt/materializations",
"es/integrations/connectors/data-ingestion/etl-tools/dbt/materialization-materialized-view",
"es/integrations/connectors/data-ingestion/etl-tools/dbt/guides"
- ]
+ ],
+ "root": "es/integrations/connectors/data-ingestion/etl-tools/dbt/index"
},
"es/integrations/connectors/data-ingestion/etl-tools/dlt-and-clickhouse",
{
diff --git a/es/integrations/language-clients/navigation.json b/es/integrations/language-clients/navigation.json
index d7dbba0fa..05f9e26c6 100644
--- a/es/integrations/language-clients/navigation.json
+++ b/es/integrations/language-clients/navigation.json
@@ -40,7 +40,7 @@
"group": "C",
"icon": "/images/integrations/logos/logo_c.svg",
"pages": [],
- "root": "es/integrations/language-clients/c.mdx"
+ "root": "es/integrations/language-clients/c"
},
{
"group": "Third-party clients",
diff --git a/es/integrations/language-clients/python/navigation.json b/es/integrations/language-clients/python/navigation.json
index 316c9fdec..d8987d6a7 100644
--- a/es/integrations/language-clients/python/navigation.json
+++ b/es/integrations/language-clients/python/navigation.json
@@ -3,12 +3,12 @@
"group": "Python",
"icon": "/images/integrations/logos/notext-python.svg",
"pages": [
- "es/integrations/language-clients/python/index",
"es/integrations/language-clients/python/driver-api",
"es/integrations/language-clients/python/additional-options",
"es/integrations/language-clients/python/advanced-querying",
"es/integrations/language-clients/python/advanced-inserting",
"es/integrations/language-clients/python/advanced-usage",
"es/integrations/language-clients/python/sqlalchemy"
- ]
+ ],
+ "root": "es/integrations/language-clients/python/index"
}
\ No newline at end of file
diff --git a/es/products/chdb/navigation.json b/es/products/chdb/navigation.json
index 05dcecb5e..f7627edd1 100644
--- a/es/products/chdb/navigation.json
+++ b/es/products/chdb/navigation.json
@@ -3,9 +3,9 @@
{
"group": "Get started",
"pages": [
- "es/products/chdb/index",
"es/products/chdb/getting-started"
- ]
+ ],
+ "root": "es/products/chdb/index"
},
{
"group": "Language integrations",
@@ -22,7 +22,6 @@
{
"group": "DataStore",
"pages": [
- "es/products/chdb/datastore/index",
"es/products/chdb/datastore/quickstart",
"es/products/chdb/datastore/factory-methods",
"es/products/chdb/datastore/query-building",
@@ -32,25 +31,26 @@
"es/products/chdb/datastore/execution-model",
"es/products/chdb/datastore/pandas-compat",
"es/products/chdb/datastore/class-reference"
- ]
+ ],
+ "root": "es/products/chdb/datastore/index"
},
{
"group": "Configuration",
"pages": [
- "es/products/chdb/configuration/index",
"es/products/chdb/configuration/execution-engine",
"es/products/chdb/configuration/function-config",
"es/products/chdb/configuration/performance-mode"
- ]
+ ],
+ "root": "es/products/chdb/configuration/index"
},
{
"group": "Debugging",
"pages": [
- "es/products/chdb/debugging/index",
"es/products/chdb/debugging/explain",
"es/products/chdb/debugging/logging",
"es/products/chdb/debugging/profiling"
- ]
+ ],
+ "root": "es/products/chdb/debugging/index"
},
{
"group": "Developer guides",
diff --git a/es/products/cloud/guides/security/cloud-access-management/scim-setup.mdx b/es/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
new file mode 100644
index 000000000..08cc40af1
--- /dev/null
+++ b/es/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
@@ -0,0 +1,334 @@
+---
+sidebarTitle: 'Aprovisionamiento SCIM con Okta'
+slug: /cloud/security/scim-setup
+title: 'Aprovisionamiento SCIM con Okta'
+description: 'Cómo configurar el aprovisionamiento SCIM entre Okta y ClickHouse Cloud'
+doc_type: 'guide'
+keywords: ['ClickHouse Cloud', 'SCIM', 'aprovisionamiento', 'Okta', 'SSO', 'SAML', 'proveedor de identidad', 'IdP', 'gestión de usuarios']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+import EnterprisePlanFeatureBadge from "/snippets/components/EnterprisePlanFeatureBadge/EnterprisePlanFeatureBadge.jsx";
+import PrivatePreviewBadge from "/snippets/components/PrivatePreviewBadge/PrivatePreviewBadge.jsx";
+
+
+
+
+ El aprovisionamiento de SCIM está en vista previa privada.
+
+
+
+
+ClickHouse Cloud admite SCIM 2.0 (System for Cross-domain Identity Management) para la gestión automatizada del ciclo de vida de usuarios y grupos. Una vez conectado a tu proveedor de identidad, cada usuario que asignes a la aplicación de ClickHouse Cloud se crea automáticamente en tu organización con el rol adecuado, las actualizaciones de perfil se aplican automáticamente y, al eliminar a un usuario de tu IdP, se le revoca el acceso, sin invitaciones manuales ni cuentas huérfanas.
+
+Esta guía te explica cómo configurar de principio a fin el aprovisionamiento de SCIM con **Okta**. El endpoint de SCIM de ClickHouse Cloud sigue SCIM 2.0 (RFC 7644), pero la autenticación solo es compatible mediante Basic Auth, y Okta es el único proveedor de identidad con el que lo hemos probado. Otros IdP de SCIM 2.0 pueden funcionar si admiten autenticación mediante Basic Auth, pero hoy no cuentan con soporte oficial.
+
+
+ ## Antes de comenzar
+
+
+Necesitarás:
+
+* El rol **Admin** en tu organización de ClickHouse Cloud.
+* [SAML SSO](/es/cloud/security/saml-setup) ya configurado entre tu IdP y ClickHouse Cloud. SCIM crea las cuentas de usuario; estas cuentas inician sesión mediante SAML, así que SSO debe estar funcionando primero.
+* Acceso de superadministrador a tu tenant de Okta, con permisos para instalar aplicaciones y configurar el aprovisionamiento.
+* Una lista de los roles que quieres asignar mediante SCIM (por ejemplo: Admins, Developers, solo lectura). Decídelo de antemano: crearás grupos correspondientes en Okta.
+
+
+ ## Cómo funciona SCIM con ClickHouse Cloud
+
+
+1. Un administrador en Okta asigna un usuario —directamente o a través de un grupo— a la aplicación de ClickHouse Cloud.
+2. Okta llama al endpoint SCIM de ClickHouse Cloud a través de HTTPS, autenticado con un token que usted genera.
+3. ClickHouse Cloud crea al usuario en su organización y asigna roles según su pertenencia a grupos en Okta.
+4. El usuario inicia sesión en ClickHouse Cloud a través de su flujo existente de SAML SSO.
+5. Los cambios de perfil, los cambios de grupo y la desactivación en Okta se propagan automáticamente a ClickHouse Cloud.
+
+
+ ## Configura SCIM en tu organización de ClickHouse Cloud
+
+
+
+
+ ### Habilita SCIM
+
+ Inicia sesión en **Consola de ClickHouse Cloud** como administrador de la organización y abre **Configuración de la organización → SAML and SCIM settings → Configuración de SCIM**.
+
+
+
+ Haz clic en `Enable SCIM`. SCIM se habilita una vez que SAML SSO está conectado. Si la opción aparece en gris, primero completa la configuración de SAML.
+
+
+
+ Se genera una **URL del endpoint de SCIM** con este formato:
+
+ ```plaintext
+ https://api.clickhouse.cloud/v1/organizations//scim
+ ```
+
+ Cópiala; la pegarás en Okta más adelante.
+
+
+
+ ### Genera un token de acceso de SCIM
+
+ Busca la sección `Create an API key` y elige una fecha de vencimiento.
+
+
+ **Planifica la rotación.** Te recomendamos establecer un vencimiento de 12 meses y añadir un recordatorio en el calendario. ClickHouse Cloud admite hasta dos tokens de SCIM activos al mismo tiempo, por lo que puedes rotarlos sin tiempo de inactividad: genera el token nuevo, actualiza Okta para usarlo, confirma que el aprovisionamiento sigue funcionando y luego revoca el token anterior.
+
+
+ Haz clic en `Generate key`. El token se muestra **una sola vez**, como una clave (con el prefijo `scim_`) y un secreto. Copia ambos de inmediato y guárdalos en un gestor seguro de secretos, ya que no podrás recuperarlos más adelante. Si los pierdes, revoca el token y genera uno nuevo.
+
+
+
+
+
+ ### Define la asignación de roles
+
+ En el panel de Configuración de SCIM, haz clic en **Map roles in "Users and roles"** (o ve directamente a **Users and roles → Roles**).
+
+ Los grupos de SCIM se vinculan a los roles de ClickHouse Cloud por nombre, con algunas reglas que debes tener en cuenta:
+
+ * **No puedes asignar un grupo de SCIM a un rol del sistema predefinido.** Las asignaciones de SCIM se aplican solo a roles personalizados. Si necesitas exponer una capacidad de nivel de sistema mediante SCIM, crea un rol personalizado que agrupe los permisos que quieras.
+ * **Los nombres coincidentes se vinculan automáticamente.** Si un rol personalizado tiene el mismo nombre que el grupo de SCIM entrante, ClickHouse Cloud los vincula automáticamente; no hace falta ninguna asignación manual.
+ * **Para usar un nombre de rol distinto del nombre del grupo**, crea el rol personalizado con el nombre que quieras y luego establece su campo **SCIM group** con el nombre del grupo de SCIM al que debe vincularse.
+ * **Los grupos no asignados crean roles nuevos.** Si Okta envía un grupo que no coincide con el nombre de un rol existente y no está referenciado en el campo `SCIM group` de ningún rol, ClickHouse Cloud crea un nuevo rol personalizado con el nombre de ese grupo. Después puedes concederle los permisos que quieras.
+
+
+
+
+ ## Configure la aplicación de ClickHouse Cloud en Okta
+
+
+
+
+ ### Abre la aplicación de ClickHouse Cloud en Okta
+
+ En la **Okta Admin Console**, ve a **Applications → Applications** y busca la aplicación que creaste al configurar SAML SSO para ClickHouse Cloud. Ábrela.
+
+ Si todavía no has creado la aplicación SAML, sigue primero la [guía de configuración de SAML SSO](/es/cloud/security/saml-setup); el aprovisionamiento de SCIM se configura en la misma aplicación.
+
+ En la pestaña **General**, busca la sección **App Settings** y haz clic en `Edit`. En **Provisioning**, selecciona `SCIM` y, a continuación, haz clic en `Save`.
+
+
+
+ La aplicación ahora muestra una pestaña **Provisioning**.
+
+
+
+
+
+ ### Conecta Okta al endpoint de SCIM
+
+ Abre la pestaña **Provisioning** de la aplicación y haz clic en `Edit`. Completa el formulario:
+
+ * **SCIM connector base URL** — la URL del endpoint de SCIM mencionada anteriormente.
+ * **Unique identifier field for users** — `userName`.
+ * **Supported provisioning actions** — selecciona todas las opciones siguientes:
+ * Import New Users and Profile Updates
+ * Push New Users
+ * Push Profile Updates
+ * Push Groups
+ * Import Groups
+ * **Authentication Mode** — `Basic Auth`.
+ * **Username** — la **key** del token SCIM (empieza por `scim_`).
+ * **Password** — el **secret** del token SCIM.
+
+
+
+
+
+ Haz clic en `Test Connector Configuration`. Deberías ver una confirmación en verde. Si falla, ve a [Troubleshooting](#troubleshooting).
+
+
+
+ Haz clic en `Save`.
+
+
+
+ ### Configura el comportamiento del aprovisionamiento
+
+ Aún en la pestaña **Provisioning**, haz clic en `To App` en la barra lateral izquierda. Haz clic en `Edit` y habilita lo siguiente:
+
+ | Configuración | Acción | Qué hace |
+ | ---------------------- | ------------ | ------------------------------------------------------------------------------------ |
+ | Create Users | Habilitar | Crea nuevos usuarios en ClickHouse Cloud cuando se asignan en Okta |
+ | Update User Attributes | Habilitar | Sincroniza automáticamente los cambios del perfil (nombre, correo electrónico, etc.) |
+ | Deactivate Users | Habilitar | Elimina un usuario de ClickHouse Cloud cuando se desasigna o desactiva en Okta |
+ | Sync Password | Deshabilitar | No se usa — el inicio de sesión se realiza mediante SAML, no con contraseñas |
+
+
+
+ Haz clic en `Save` y luego vuelve a las pestañas **Sign On** / **Provisioning** de la aplicación para confirmar que la configuración esté correcta.
+
+
+
+
+
+ ### Configurar la correspondencia de los atributos de usuario
+
+ Okta y ClickHouse Cloud deben coincidir en cómo se corresponden los campos de usuario. En la pestaña **Provisioning**, haz clic en `To App` y revisa las **Attribute Mappings** de tu aplicación. Los valores predeterminados de la aplicación SAML de Okta suelen ser adecuados; comprueba la tabla siguiente:
+
+ | Atributo de Okta | Atributo de ClickHouse Cloud (SCIM) | Obligatorio |
+ | ----------------- | ----------------------------------- | ----------------------------------------------------------- |
+ | `userName` | `userName` | **Sí** — se usa como identificador único y correo principal |
+ | `email` (primary) | `emails[primary].value` | **Sí** — debe coincidir con `userName` |
+ | `firstName` | `name.givenName` | Recomendado |
+ | `lastName` | `name.familyName` | Recomendado |
+ | `displayName` | `displayName` | Recomendado — se muestra en la UI de ClickHouse Cloud |
+ | `externalId` | `externalId` | Recomendado — mejora la precisión al reconciliar |
+
+ Puedes añadir atributos opcionales, como departamento, responsable y ubicación; ClickHouse Cloud los almacena en el perfil del usuario, pero actualmente no los usa para permisos. Todo lo que quede fuera del conjunto estándar de SCIM se ignora en ClickHouse Cloud.
+
+
+ **Las mayúsculas y minúsculas del correo electrónico importan.** Asegúrate de que `userName` y `email` en Okta usen la misma combinación de mayúsculas y minúsculas. ClickHouse Cloud normaliza las direcciones de correo a minúsculas; las discrepancias entre ambos campos pueden provocar fallos en las pruebas.
+
+
+
+
+ ### Enviar grupos y asignar usuarios
+
+ Aquí es donde los roles se asignan automáticamente.
+
+ **Crea grupos en Okta.** Para cada asignación de roles que configuraste antes, crea o identifica un grupo de Okta con el **nombre para mostrar exactamente igual**. Por ejemplo, si tu asignación dice `ClickHouse-Admins → Admin`, crea un grupo llamado `ClickHouse-Admins` en Okta.
+
+
+
+ Abre el grupo que acabas de crear y haz clic en `Assign people` para añadirle un miembro.
+
+
+
+
+
+ Luego asocia la aplicación SCIM al mismo grupo para que la asignación de roles y el acceso a la aplicación se mantengan sincronizados.
+
+
+
+ **Envía los grupos.** En la pestaña **Provisioning** de la aplicación, haz clic en `Push Groups → Find groups by name`, busca tu grupo y haz clic en `Save`. Repite este proceso para cada grupo de roles. Cada uno debería mostrar un **Push Status** de **Active (Pushed)** una vez aprovisionado.
+
+
+
+ **Asigna usuarios.** Tienes dos opciones:
+
+ * **Mediante grupos (recomendado).** Añade usuarios a los grupos de Okta que acabas de enviar. Se aprovisionarán en ClickHouse Cloud y se les asignará automáticamente el rol correspondiente.
+ * **Directamente.** En la pestaña **Assignments** de la aplicación, haz clic en `Assign → Assign to People` y selecciona usuarios concretos. Se aprovisionarán con el **Default role** a menos que también estén en un grupo enviado.
+
+ La asignación basada en grupos es más práctica para la administración continua: cuando alguien cambia de rol, solo tienes que actualizar la pertenencia al grupo.
+
+
+
+
+ ## Prueba la integración
+
+
+Una vez configurado el aprovisionamiento, vuelve a **Settings → Users and roles** en la Consola de ClickHouse Cloud para confirmar que los usuarios sincronizados aparecen con los roles esperados.
+
+
+
+Sigue este breve plan de prueba con uno o dos usuarios de prueba **antes** de asignar a todo tu equipo. Cada paso debería completarse en pocos segundos; si no es así, comprueba la cola de tareas de Okta y la sección [Solución de problemas](#troubleshooting).
+
+| # | Acción en Okta | Resultado esperado en ClickHouse Cloud |
+| - | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| 1 | Añadir un usuario de prueba al grupo de Okta `ClickHouse-Admins` | El usuario aparece en **Settings → Members** con el rol **Admin** |
+| 2 | El usuario de prueba inicia sesión en ClickHouse Cloud mediante SSO | Accede al dashboard con permisos de administrador |
+| 3 | Actualizar el nombre del usuario en Okta | El nombre actualizado aparece en **Members** en cuestión de segundos |
+| 4 | Mover al usuario de `ClickHouse-Admins` a `ClickHouse-Read-only` | Su rol cambia a **Read-only** |
+| 5 | Desasignar al usuario de la aplicación (o desactivarlo en Okta) | El usuario se elimina de la organización; los siguientes intentos de inicio de sesión fallan |
+
+Si algún paso falla, corrige el problema de fondo antes de continuar; los síntomas suelen acumularse.
+
+
+ **Dónde buscar errores de SCIM en Okta.** Los errores de SCIM aparecen en **Reports → System Log**, filtrados por tu aplicación, y en la pantalla **Provisioning → View Logs** de la aplicación. El mensaje de error devuelto por ClickHouse Cloud se muestra literalmente; empieza por ahí.
+
+
+
+ ## Buenas prácticas de producción
+
+
+**Rote los tokens periódicamente.** Configure un recordatorio en el calendario para rotar el token de SCIM. Frecuencia recomendada: cada 12 meses, o de inmediato cuando un administrador que conocía el token deja la empresa. ClickHouse Cloud permite dos tokens activos por organización precisamente para que pueda rotarlos sin interrumpir el aprovisionamiento.
+
+**Use grupos, no asignaciones directas.** Asignar usuarios directamente a la aplicación funciona, pero enseguida se vuelve difícil de auditar. Gestionar las asignaciones mediante grupos de Okta hace que las revisiones de acceso y los cambios de roles se realicen en un solo lugar.
+
+**Revise el registro de auditoría.** Cada acción de SCIM —usuario creado, usuario desactivado, perfil actualizado— queda registrada en el registro de auditoría de ClickHouse Cloud. Consulte [Audit logging](/es/cloud/security/audit-logging). Revise el registro periódicamente, especialmente después de grandes tandas de aprovisionamiento.
+
+**Defina un rol predeterminado razonable.** Si a un usuario de Okta se le asigna la aplicación, pero no pertenece a ningún grupo sincronizado, se crea con el **rol predeterminado**. Elija el rol más restrictivo que aun así le permita al usuario hacer *algo*, para que un error de configuración falle de forma segura.
+
+**Evite usar SCIM e invitaciones manuales al mismo tiempo.** Una vez activado SCIM, gestione la pertenencia mediante Okta; no envíe también invitaciones manuales a esos mismos usuarios. Mezclar ambas vías genera confusión sobre cuál es la fuente autorizada y puede producir duplicados.
+
+**Supervise las tareas de aprovisionamiento fallidas.** Okta reintenta las llamadas de aprovisionamiento fallidas, pero con el tiempo las deja en la cola de **Tasks**. Añada esta cola a los paneles que su equipo de TI ya supervisa, o use el webhook de Okta o las alertas por correo electrónico para detectar fallos persistentes.
+
+
+ ## Solución de problemas
+
+
+
+ ### "Probar la configuración del conector" falla en Okta
+
+
+* Confirma que SCIM esté **habilitado** en Consola de ClickHouse Cloud.
+* Confirma que la **URL base** en Okta coincida exactamente con la URL del endpoint de SCIM que se muestra en Cloud Console — el ID de la organización debe ser correcto.
+* Confirma que la **clave y el secreto del token** se hayan pegado sin espacios en blanco al principio ni al final.
+* Si has rotado los tokens, asegúrate de usar la **nueva** clave y el nuevo secreto, no el par anterior.
+
+
+ ### Los usuarios se crean, pero no tienen permisos
+
+
+* Comprueba que hayas añadido una fila en **Map roles in "Users and roles"** para el rol esperado.
+* Comprueba que el nombre del grupo de Okta coincida **exactamente** con el nombre del grupo de SCIM en la asignación, incluidas las mayúsculas y los guiones.
+* Si tu diseño aprovisiona intencionadamente algunos usuarios sin grupo, confirma que **rol predeterminado** esté configurado.
+
+
+ ### Usuario duplicado en la lista de miembros
+
+
+Suele deberse a una diferencia en el uso de mayúsculas y minúsculas del correo electrónico entre Okta y una invitación manual anterior. Elimina el duplicado de la lista de miembros y, a continuación, desasigna y vuelve a asignar al usuario en Okta para volver a aprovisionarlo.
+
+
+ ### La sincronización de grupos falla con "displayName not recognised"
+
+
+El nombre del grupo en Okta no coincide con ninguna asignación configurada en ClickHouse Cloud. Cambia el nombre del grupo de Okta o añade una asignación en **Map roles in "Users and roles"** desde el panel **Configuración de SCIM** (o mediante **Users and roles → Roles**).
+
+
+ ### Los usuarios desactivados siguen apareciendo como miembros
+
+
+Okta puede tardar hasta un minuto en reflejar una desactivación. Si el usuario sigue figurando como miembro después de varios minutos, consulta **Provisioning → View Logs** en Okta para ver si hay algún error en la tarea de desactivación.
+
+
+ ### He rotado el token de SCIM y ahora Okta falla
+
+
+Comprueba que has actualizado las credenciales en **la misma aplicación SCIM** de Okta. Después de actualizarlas, haz clic en `Test Connector Configuration` para confirmarlo. Una vez que el aprovisionamiento vuelva a estar en verde, revoca el token anterior en Consola de ClickHouse Cloud.
+
+
+ ### Perdí el token de SCIM
+
+
+Los tokens no se pueden recuperar. En **Configuración de la organización → Configuración de SAML y SCIM → Configuración de SCIM** de la consola de ClickHouse Cloud, revoca el token perdido y genera uno nuevo; después, actualiza las credenciales en Okta.
+
+
+
+*[@knudtty](https://github.com/knudtty)의 시연*
+
+
+
+
+
+이제 ClickStack은 오픈소스 스키마에 추가된 alias 컬럼을 전문 검색 인덱스가 올바르게 지원하는 ClickHouse 26.2 이상 버전에서만 direct_read 최적화를 적용합니다. 이전에는 이 최적화가 제대로 동작하지 않는 구버전에서도 시도될 수 있었습니다. 버전 확인은 스키마를 검사해 쿼리 시점에 수행되며, alias 컬럼 자체도 이제 기본적으로 오픈소스 스키마에 포함됩니다.
+
+또한 자동 완성용 materialized view를 text index에 직접 쿼리하는 방식으로 대체하는 진행 중인 작업도 소개되었습니다. 현재는 두 방식이 겹치는 작업을 수행해 수집 부하를 늘리고 있습니다. 벤치마크를 통해 text index 쿼리가 성능 측면에서도 충분히 버틴다는 점이 확인되면 materialized view를 단순화하거나 제거할 수 있습니다. Aaron은 또한 향후 ClickHouse text index 버전에서 위치 인코딩이 키-값 필터 lookup의 정확도를 어떻게 더 높일 수 있는지에 대한 팀의 질문에도 답했습니다.
+
+**관련 PR:** [#2341](https://github.com/hyperdxio/hyperdx/pull/2341) feat: 로그 및 traces에 기본 direct_read 최적화 추가, [#2405](https://github.com/hyperdxio/hyperdx/pull/2405) feat(common-utils): SQL 필터에 direct_read 키-값 항목 최적화 적용, [#2376](https://github.com/hyperdxio/hyperdx/pull/2376) feat: 필터와 자동 완성에 text index 사용
+
+
+ ## 더 나은 로그 파싱
+
+
+*시연: [@dhable](https://github.com/dhable)*
+
+
+
+
+
+한 고객의 로그에서는 이벤트 body가 `level` 필드를 포함한 JSON 객체였습니다. 심각도 추론 로직은 두 가지를 수행하고 있었습니다. 먼저 body를 JSON으로 파싱해 속성을 추출하고, OTel에서 심각도가 설정되지 않은 경우에는 문자열 매칭으로 폴백했습니다. 그런데 이 문자열 매칭이 body 내부의 alert manager 이름에 들어 있는 "alert"라는 단어를 잡아내면서 로그 레벨을 잘못 분류하고 있었습니다.
+
+이 수정에서는 가드 조건을 추가했습니다. body가 JSON으로 파싱되고 이미 level 필드를 포함하고 있다면 문자열 추론 단계를 완전히 건너뜁니다. 약 1년 전에 구축한 스모크 test suite 덕분에 새 테스트 케이스만 추가해도 수정 사항을 쉽게 검증하고 관련 엣지 케이스를 포착할 수 있었으며, 이는 정확히 그 목적에 맞게 설계된 것이었습니다.
+
+**관련 PR:** [#2363](https://github.com/hyperdxio/hyperdx/pull/2363) fix(log-parser): body가 level 필드를 포함한 JSON으로 파싱될 때 문자열 추론 건너뛰기
+
+
+ ## MCP 서버 개선 사항
+
+
+*시연: [@brandon-pereira](https://github.com/brandon-pereira)*
+
+
+
+
+
+이번 주에는 MCP 관련 여러 개선 사항이 적용되었습니다. 이벤트 패턴의 버킷화와 점수화가 개선되었고, 오류 힌트가 향상되었으며, 공용 헬퍼도 정리되었습니다. 또한 제품명에 맞춰 도구 프리픽스도 `hyperdx_`에서 `clickstack_`로 변경되었습니다.
+
+**관련 PR:** [#2337](https://github.com/hyperdxio/hyperdx/pull/2337) feat(mcp): MCP 도구 품질 개선 — 오류 힌트, 공용 헬퍼, 더 나은 메시지, [#2396](https://github.com/hyperdxio/hyperdx/pull/2396) refactor(mcp): 도구 프리픽스를 hyperdx_에서 clickstack_로 변경, [#2343](https://github.com/hyperdxio/hyperdx/pull/2343) feat(mcp): patch_dashboard, get_dashboard_tile, search_dashboards 도구 추가, [#2418](https://github.com/hyperdxio/hyperdx/pull/2418) fix(mcp): 읽기 쉬운 차트 범례를 위한 alias 설명 및 예시 개선, [#2412](https://github.com/hyperdxio/hyperdx/pull/2412) refactor: 공용 헬퍼와 schema 수준 검사를 사용해 MCP ObjectId 검증 단순화
+
+
+ ## 새로운 시리즈 색상 팔레트
+
+
+*시연: [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Elizabet는 Alex의 색상 선택기 작업을 지원하기 위해 HyperDX와 ClickStack 테마 전반에서 데이터 시각화 색상 팔레트를 통합하는 작업을 진행했습니다. 두 테마는 각각 별도의 팔레트와 예외 규칙을 사용하고 있었기 때문에 색상 체계를 파악하기가 불필요하게 복잡했습니다. 목표는 두 테마 모두에서 사용할 수 있는 단일 팔레트를 만드는 것이었습니다.
+
+대비와 접근성을 확인하기 위해 Elizabet는 색각 시뮬레이션 도구를 사용하여 업계 표준 팔레트(Tableau, Observable, IBM)를 테스트했습니다. ClickHouse 팔레트는 성능이 좋지 않았습니다. 녹색이 흰색 배경에서 충분한 대비를 제공하지 못했습니다. Tableau와 Observable은 각각 최소 1개의 검사에서 실패했고, IBM 팔레트는 모든 검사를 통과했지만 색상이 5개뿐이라 충분하지 않았습니다. 전체적으로는 Observable의 팔레트가 가장 적합했고, 파란색을 약간 조정한 뒤 이제 두 테마에서 공통으로 사용됩니다.
+
+**관련 PR:** [#2362](https://github.com/hyperdxio/hyperdx/pull/2362) refactor(theme): chart 팔레트 토큰 이름을 hue 이름으로 변경하고 테마 전반에서 통합
+
+
+ ## 고정 헤더를 지원하는 새로운 페이지 레이아웃
+
+
+*데모: [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+새로운 PageHeader와 PageLayout 컴포넌트 조합이 대시보드, 서비스 맵, 클라이언트 세션, Kubernetes, ClickHouse 대시보드 등 모든 주요 페이지에 적용되었습니다. 이제 모든 페이지에서 동일한 패딩, 헤더 아래 구분선, 제목 구조를 사용합니다. 이전에는 페이지마다 구성이 일관되지 않았습니다. 일부는 왼쪽에 제목이 있고 오른쪽에 컨트롤이 있었지만, 일부는 제목이 아예 없었습니다.
+
+고정 동작은 prop으로 선택적으로 활성화할 수 있습니다. sticky 슬롯에 전달한 내용은 스크롤해도 헤더 아래에 계속 고정되며, 나머지 요소는 일반적으로 스크롤됩니다. 아무것도 전달하지 않으면 breadcrumbs 또는 페이지 옵션만 자동으로 고정됩니다.
+
+**관련 PR:** [#2282](https://github.com/hyperdxio/hyperdx/pull/2282) PageHeader/PageLayout 추가 및 Sessions 마이그레이션, [#2345](https://github.com/hyperdxio/hyperdx/pull/2345) 목록 페이지에서 PageHeader 제목 사용, [#2346](https://github.com/hyperdxio/hyperdx/pull/2346) Service Map을 PageLayout으로 마이그레이션, [#2347](https://github.com/hyperdxio/hyperdx/pull/2347) Kubernetes 대시보드를 PageLayout으로 마이그레이션, [#2348](https://github.com/hyperdxio/hyperdx/pull/2348) ClickHouse 대시보드를 PageLayout으로 마이그레이션, [#2364](https://github.com/hyperdxio/hyperdx/pull/2364) feat(dashboard): sticky 쿼리 toolbar와 함께 PageLayout으로 마이그레이션, [#2394](https://github.com/hyperdxio/hyperdx/pull/2394) fix(PageHeader): sticky header가 drawer overlay 아래에 유지되도록 수정
+
+
+ ## 새 데이터 소스 셀렉터와 시리즈용 색상 선택기
+
+
+*시연: [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Alex가 소개한 2가지 UI 개선 사항입니다. 데이터 소스 셀렉터가 더 깔끔하게 정리되었습니다. 이제 이를 클릭하면 선택할 수 있는 데이터 소스만 표시됩니다. 스키마 보기나 새 source 생성 같은 관리 작업은 별도의 케밥 메뉴로 이동했습니다. 이렇게 선택과 구성을 분리해, 오랫동안 할 일 목록에 있던 항목을 반영하고 팀의 피드백에도 대응했습니다.
+
+이제 Number 타일에도 정적 색상 선택기가 추가되어 메트릭에 특정 색상을 지정할 수 있습니다. 임계값이나 컬럼 값을 기준으로 빨간색, 초록색, 노란색으로 바뀌는 조건부 색상 규칙도 현재 작업 중입니다. Elizabet의 통합 팔레트가 적용되면 두 기능 모두 현재의 "color 1, 2, 3" 레이블 대신 적절한 이름이 붙은 색상을 사용하게 되며, 이는 Grafana 같은 도구에서 넘어오는 사용자에게도 의미 있는 개선이 될 것입니다.
+
+**관련 PR:** [#2365](https://github.com/hyperdxio/hyperdx/pull/2365) feat(source-picker): chip + kebab menu UX, [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): number tile static color picker
+
+
+ ## 대시보드 작업에 대한 더 나은 힌트
+
+
+*[@alex-fedotyev](https://github.com/alex-fedotyev)의 데모*
+
+
+
+
+
+이제 대시보드 테이블 타일의 행에 더 유용한 hover 상태가 표시됩니다. 마우스를 올리면 커서와 아이콘이 바뀌어, 클릭 시 어떤 동작이 수행되는지 알 수 있습니다. 연결된 대시보드를 열거나 data source로 드릴다운하는 동작입니다. 이 변경 전에는 행을 클릭할 수 있다는 점조차 분명하지 않았고, 클릭하면 무엇이 일어나는지도 알기 어려웠습니다.
+
+**관련 PR:** [#2321](https://github.com/hyperdxio/hyperdx/pull/2321) feat(app): 대시보드 table tile row click에 대한 hover 힌트 및 네이티브 링크 affordance
\ No newline at end of file
diff --git a/ko/clickstack/demo-days/2026/2026-06-05.mdx b/ko/clickstack/demo-days/2026/2026-06-05.mdx
new file mode 100644
index 000000000..974bdf096
--- /dev/null
+++ b/ko/clickstack/demo-days/2026/2026-06-05.mdx
@@ -0,0 +1,142 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-06-05
+title: '데모 데이 - 2026-06-05'
+sidebarTitle: '2026-06-05'
+description: '2026-06-05의 ClickStack 데모 데이'
+doc_type: 'guide'
+keywords: ['ClickStack', '데모 데이']
+---
+
+
+ ## 분할 트레이스 보기와 확장 트레이스 보기
+
+
+*시연: [@karl-power](https://github.com/karl-power)*
+
+
+
+
+
+이제 트레이스 패널에 분할 보기 모드가 추가되었습니다. 타임라인에서 스팬을 클릭하면, 이전처럼 선택한 스팬 아래에 세부 정보 패널이 열리는 대신 오른쪽 패널의 내용이 그 자리에서 업데이트됩니다. 따라서 개별 스팬을 자세히 살펴보는 동안에도 전체 타임라인을 계속 볼 수 있습니다.
+
+또한 스크롤과 확대/축소를 지원하는 전체 너비 타임라인의 확장 트레이스 보기로 펼칠 수도 있습니다. 두 패널은 각각 독립적으로 열고 닫을 수 있으므로, 현재 위치를 잃지 않고 전체적인 개요와 세부 스팬 검토 사이를 더 쉽게 전환할 수 있습니다.
+
+**관련 PR:** [#2402](https://github.com/hyperdxio/hyperdx/pull/2402) feat: trace panel inline split detail
+
+
+ ## 소스 수준 필수 필터
+
+
+*시연: [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+이제 소스에서 필수 필터를 선언할 수 있으며, 해당 소스를 사용하는 모든 대시보드에 자동으로 노출됩니다. 소스를 참조하는 모든 대시보드에 동일한 필터를 일일이 수동으로 추가하는 대신, ClickStack이 이 요구 사항을 감지해 필터를 대시보드 수준으로 올리고, 실제로 해당 소스를 사용하는 타일에만 적용합니다.
+
+개별 타일은 서로 다른 필터 값이 필요하면 대시보드 수준의 값을 재정의할 수 있으며, 필수 필터는 차트 편집기 미리보기에도 전달되므로 이를 제거하지 않고도 쿼리를 검증할 수 있습니다. 또한 필수 소스 필터는 SQL 기반 차트의 SQL filters macro와도 통합되며, 대시보드 간 링크를 설정할 때 ClickStack이 이를 링크 매개변수 후보에 자동으로 포함합니다.
+
+
+ ## Y축을 데이터에 맞추기
+
+
+*시연: [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+라인 차트에 새로운 "Y축을 데이터에 맞추기" 표시 설정이 추가되었습니다. 기본적으로 Y축은 0을 기준으로 고정되므로, 값이 크지만 변동 폭이 작으면 표시 범위가 압축되어 추세를 한눈에 파악하기 어려워집니다.
+
+이 옵션을 활성화하면 Y축 범위가 실제 데이터 범위에 따라 동적으로 계산되므로, 축 경계를 수동으로 설정하지 않아도 값이 큰 계열의 변동을 확인할 수 있습니다.
+
+**관련 PR:** [#2417](https://github.com/hyperdxio/hyperdx/pull/2417) feat(charts): add 'Fit Y-Axis to Data' display setting for line charts
+
+
+ ## 이상 탐지 알림
+
+
+*[@fleon](https://github.com/fleon)의 데모*
+
+
+
+
+
+Himanshu는 Z-score 감지를 활용한 이상 탐지 기반 알림 기능을 어떻게 개발하고 있는지 소개했습니다. 고정된 임계값 대신, 예상 평균에서 몇 표준편차 벗어났을 때 알림이 발생할지 설정합니다. 계절성 윈도우(시간별 또는 일별)는 기준선이 계산되는 방식을 제어하며, 알림 편집기에서는 실제로 알림이 발생했을 윈도우를 강조 표시하므로 저장하기 전에 민감도를 조정할 수 있습니다.
+
+이 기능은 임계값 알림에서 흔히 겪는 문제를 해결합니다. 즉, 어떤 수치를 설정해야 할지 판단하기 어려운 경우가 많습니다. Z-score를 조정할 때 잠재적인 알림 윈도우가 실시간으로 업데이트되므로, 과도한 노이즈 없이 실제 급증만 포착하는 임계값을 보다 실용적으로 찾을 수 있습니다. 또한 알림은 값이 예상 범위를 초과할 때만 발생하도록 범위를 지정할 수 있으며(그보다 낮아질 때는 제외), 발생 설정을 통해 알림이 실행되기 전에 해당 조건이 여러 개의 연속된 데이터 포인트에서 유지되도록 요구할 수도 있습니다. 이 기능은 아직 개발 진행 중이며, 현재는 기준선을 이동 평균으로 계산하고 있고 지수 이동 평균 지원도 계획되어 있습니다.
+
+
+ ## API 및 AI 에이전트를 위한 더 명확한 구성
+
+
+*[@alex-fedotyev](https://github.com/alex-fedotyev)의 데모*
+
+
+
+
+
+이제 ClickStack 설정에는 API Key와 MCP 연결 설정을 한곳에서 관리할 수 있는 전용 API 및 Agents 탭이 있습니다. Claude, Cursor, OpenCode용 원클릭 버튼으로 연결 명령을 수동으로 만들 필요가 없어졌습니다. 예를 들어 Cursor 버튼을 클릭하면 올바른 설치 명령이 미리 입력된 터미널이 열립니다. OpenCode 사용자는 바로 붙여 넣을 수 있는 시스템 프롬프트 스니펫을 복사할 수 있습니다. 다른 MCP 클라이언트용으로는 일반적인 JSON 구성 옵션도 제공합니다.
+
+**관련 PR:** [#2407](https://github.com/hyperdxio/hyperdx/pull/2407) feat(team-settings): AI 어시스턴트 연결
+
+
+ ## 숫자 차트의 색상 선택
+
+
+*시연: [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+이제 숫자 타일은 정적 색상 선택기와 조건부 색상 규칙을 모두 지원합니다. 차트 팔레트도 사람이 읽기 쉬운 색상 이름으로 업데이트되어, "color-1"과 "color-10" 대신 "blue"와 "gray"를 사용하므로 어떤 색상을 선택하는지 훨씬 직관적으로 파악할 수 있습니다.
+
+조건부 색상 지정을 사용하면 대상 값 아래에서는 녹색, 경고 범위에서는 주황색, 심각 수준의 임계값 위에서는 빨간색과 같이 순차적인 임계값 규칙을 정의할 수 있습니다. 덕분에 숫자 타일은 대시보드에서 상태 표시기로 더욱 유용해지며, 특히 오류율이나 P99 지연 시간 같은 메트릭에서는 숫자를 직접 읽지 않고도 즉각적인 시각적 피드백을 얻을 수 있습니다.
+
+**관련 PR:** [#2386](https://github.com/hyperdxio/hyperdx/pull/2386) 숫자 타일 조건부 색상 규칙(순차적 임계값), [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): 숫자 타일 정적 색상 선택기
+
+
+ ## 스키마 마이그레이션
+
+
+*시연: [@wrn14897](https://github.com/wrn14897)*
+
+
+
+
+
+이제 ClickStack에는 설정(enterprise)에 `Schema Migrations` 탭이 추가되어, 데이터 schema에 대해 통제된 방식으로 버전 관리되는 DDL 변경을 수행할 수 있습니다. 마이그레이션을 작성하고 버전 번호를 지정하면, 백그라운드 job이 이를 감지해 재시도 로직과 엄격한 순서에 따라 실행합니다. 마이그레이션 하나가 실패하면, 이에 의존하는 이후 마이그레이션은 문제가 해결되거나 삭제될 때까지 실행되지 않습니다.
+
+이 버전 관리 모델을 통해 ClickHouse는 수동 `ALTER TABLE` 작업 없이도 ClickStack Cloud 팀에 관리형 schema 최적화를 적용할 수 있습니다. 팀은 대기 중인 마이그레이션을 검토하고 자체 일정에 맞춰 진행을 재개할 수 있습니다. 1단계에서는 추가형 변경을 지원하며, 프라이머리 키 수정은 2단계에 지원할 예정입니다.
+
+
+ ## 기본 제공 Browser RUM 대시보드
+
+
+*[@teeohhem](https://github.com/teeohhem)의 데모*
+
+
+
+
+
+이제 ClickStack은 전체 웹 성능 메트릭을 포괄하는 사전 구축된 Browser RUM 대시보드를 제공합니다. 이 대시보드에는 페이지 조회수와 P90 로드 시간을 포함한 성능 개요와 함께, 단계별 임계값이 적용된 웹 바이탈인 LCP, INP, CLS가 포함되어 있어 각 메트릭이 양호한지, 개선이 필요한지, 또는 상태가 좋지 않은지를 즉시 확인할 수 있습니다.
+
+추가 섹션에서는 시간에 따른 페이지 조회수, long task, 디바이스 분류, 가장 느린 페이지, 오류가 가장 많이 발생한 상위 세션, JavaScript 오류율, API 실패를 다룹니다. 사용자 지정 행 작업을 사용하면 테이블의 아무 행이나 클릭해 관련 세션 또는 트레이스 데이터로 드릴다운할 수 있습니다. 페이지 상단 필터를 사용하면 서비스, 환경, 서비스 버전, 페이지별로 데이터를 세분화할 수 있습니다. 국가별 필터링은 Geo 데이터를 내보내도록 Browser SDK를 개선하는 작업이 진행 중이므로 아직 제공되지 않습니다.
+
+**관련 PR:** [#2413](https://github.com/hyperdxio/hyperdx/pull/2413) feat: Browser RUM dashboard template 추가
+
+
+ ## 종속 대시보드 필터
+
+
+*시연: [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+이제 대시보드 필터를 서로 종속되게 구성할 수 있으므로, 한 필터에서 값을 선택하면 그다음 필터들에서 선택할 수 있는 옵션이 자동으로 제한됩니다. 이를 처음 적용한 것은 Kubernetes 대시보드입니다. 이제 파드를 선택하면 클러스터 전체의 모든 옵션을 표시하는 대신, 해당 파드와 관련된 값만 배포 및 노드 드롭다운에 표시됩니다.
+
+즉, 결과가 비어 있는 데이터를 반환하는 필터 조합은 더 이상 제시되지 않습니다. 이 기능은 현재 Kubernetes 대시보드 템플릿에 포함되어 있습니다.
\ No newline at end of file
diff --git a/ko/clickstack/features/dashboards/row-click-drilldowns.mdx b/ko/clickstack/features/dashboards/row-click-drilldowns.mdx
new file mode 100644
index 000000000..212b2ef5c
--- /dev/null
+++ b/ko/clickstack/features/dashboards/row-click-drilldowns.mdx
@@ -0,0 +1,160 @@
+---
+slug: /use-cases/observability/clickstack/dashboards/row-click-drilldowns
+title: '테이블 행 클릭 드릴다운'
+sidebarTitle: '행 클릭 드릴다운'
+description: '테이블 타일을 조사 워크플로로 바꿉니다. 행을 클릭하면 클릭한 행을 기준으로 범위가 지정된 대시보드나 해당 로그 및 트레이스로 드릴다운할 수 있습니다'
+doc_type: 'guide'
+keywords: ['ClickStack', '대시보드', '드릴다운', '테이블', '행 클릭', '조사', '관측성']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+테이블 타일은 흔히 **카탈로그** 역할을 합니다. 즉, 서비스, host, endpoint 또는 오류 그룹마다 1개의 행이 있고, 각 항목을 평가하는 몇 개의 컬럼이 포함됩니다. 행 클릭 동작을 사용하면 이 카탈로그를 조사 워크플로로 전환할 수 있습니다. 카탈로그를 훑어보다가 중요한 행을 찾은 다음 클릭하면, ClickStack이 클릭한 행의 값을 필터로 그대로 전달합니다. 그러면 대상이 해당 항목 하나로 이미 범위가 좁혀진 상태로 열리므로, 쿼리를 수동으로 다시 작성할 필요가 없습니다.
+
+클릭하면 다음 두 위치 중 하나로 이동할 수 있습니다:
+
+* **다른 대시보드**: 서비스별 상세 대시보드처럼 해당 항목 하나에 집중해서 볼 수 있는 화면이거나,
+* 행의 기반이 되는 로그 또는 트레이스를 보기 위한 [검색](/ko/clickstack/features/search)의 **원본 이벤트**입니다.
+
+아래의 두 사용 사례는 모두 동일한 카탈로그(서비스 인벤토리)에서 시작해 각 대상으로 드릴다운합니다. 행 클릭 동작은 테이블 타일에만 적용됩니다. 이는 선 차트나 막대 차트의 한 점을 클릭할 때 컨텍스트 메뉴를 여는 차트 [검색으로 드릴다운](/ko/clickstack/features/dashboards/overview#drilldown-to-search)과는 별개입니다.
+
+
+ ## 자체 대시보드에서 서비스 검사
+
+
+서비스별로 한 행이 있는 개요 테이블은 "어떤 서비스가 비정상인가?"라는 질문에 답합니다. 행을 클릭하면 클릭한 서비스 범위로 한정된 서비스별 대시보드가 열리고, 여기서 "내부에서 무슨 일이 일어나고 있는가?"라는 질문에 답할 수 있습니다. 아래 패턴은 서비스 인벤토리 테이블과 `Service Detail` 대시보드를 짝지어 구성합니다.
+
+
+
+ ### 상세 대시보드 만들기
+
+ `Service Detail`이라는 이름의 대시보드를 만들고 트레이스 소스에 `ServiceName` 표현식으로 [custom filter](/ko/clickstack/features/dashboards/overview#custom-filters)를 추가합니다. 대시보드 수준 필터는 모든 타일의 범위를 단일 서비스로 다시 한정하므로, 타일 자체의 쿼리에 특정 서비스를 하드코딩할 필요가 없습니다. 원하는 서비스별 보기를 추가합니다. 예를 들면 RED 핵심 지표(requests, errors, P95 duration), 지연 시간 백분위수 chart(P50, P95, P99), 시간에 따른 request rate, `SpanName`으로 그룹화한 endpoint별 분석이 있습니다.
+
+ 다음 단계에서 대상으로 선택할 수 있도록 먼저 이 대시보드를 저장합니다.
+
+
+
+ ### 서비스 인벤토리 만들기
+
+ 개요 대시보드에서 트레이스 소스에 `ServiceName`으로 그룹화된 **Table** 타일을 추가합니다. 각 서비스를 평가하는 RED 컬럼을 추가하고, 각각은 alias가 지정된 series여야 합니다.
+
+ * `Requests`: 스팬 수(rate)입니다.
+ * `Errors`: 오류 status가 있는 스팬 수입니다.
+ * `P95 Duration`: `Duration`의 95백분위수입니다. 컬럼의 숫자 포맷을 duration으로 설정하여 원시 나노초가 아니라 `288ms`처럼 표시되도록 합니다.
+
+ `Requests`를 기준으로 내림차순 정렬하여 가장 바쁜 서비스가 상단에 오도록 합니다. 이 테이블이 카탈로그 역할을 합니다. 즉, 서비스별로 한 행씩 있으며 RED 기준으로 평가됩니다.
+
+
+
+
+ **group-by 컬럼을 앞에 배치하십시오**
+
+ 기본적으로 테이블은 group-by 컬럼(여기서는 `ServiceName`)을 series 뒤인 오른쪽에 렌더링합니다. 카탈로그는 각 행의 아이덴티티가 먼저 올 때 더 읽기 쉽습니다. 타일의 **Display Settings**를 열고 **Display Group By Columns on Left**를 켜서 group-by 컬럼을 앞으로 이동하십시오.
+
+
+
+
+ ### 행 클릭 연결 설정
+
+ 인벤토리 테이블에서 **Row Click Action**을 열고 **Dashboard**를 선택한 다음 대시보드 목록에서 `Service Detail`을 고릅니다. 대시보드를 직접 선택하면 ID로 고정됩니다. 나중에 대시보드 이름이 바뀌어도 link는 계속 작동하며, 대시보드 내보내기와 가져오기 후에도 유지됩니다. (**Template** 옵션은 행마다 다른 대시보드를 선택할 때만 사용하십시오. [Set up a row-click action](#set-up)을 참조하십시오.)
+
+ `Service Detail`이 `ServiceName` custom filter를 선언하므로, 드로어에는 해당 표현식에 대한 빈 필터가 미리 채워집니다. 여기에 template을 입력합니다.
+
+ * **Expression**: `ServiceName` (이미 입력됨)
+ * **Template**: `{{ServiceName}}`
+
+ **Apply**를 클릭하고 저장합니다. 이제 클릭한 행의 서비스가 대시보드의 `ServiceName` 필터로 전달됩니다.
+
+
+
+ ### 행 클릭
+
+ 행 위에 마우스를 올리면 테이블 오른쪽 가장자리에 link 동작 표시가 나타나고, 작업을 설명하는 힌트(`Open dashboard "Service Detail"`)가 함께 표시됩니다. 행을 클릭하면 `Service` 필터가 클릭한 값으로 설정된 상태로 `Service Detail` 대시보드가 열리므로, 모든 타일(RED 핵심 지표, 지연 시간 백분위수, endpoint별 분석)의 범위가 한 번의 클릭으로 해당 서비스 하나로 다시 한정됩니다.
+
+
+
+
+
+
+ ## 서비스에서 해당 트레이스로 이동
+
+
+때로는 다른 집계 뷰보다 원시 이벤트 자체를 확인해야 할 때가 있습니다. **검색** 작업은 클릭 시 대시보드 대신 [검색](/ko/clickstack/features/search) 페이지를 열고, 해당 행에 해당하는 로그 또는 트레이스를 이미 필터링된 상태로 표시합니다.
+
+동일한 서비스 인벤토리 테이블에서, 행 클릭 시 상세 대시보드가 아니라 트레이스 자체가 열리도록 설정해 보겠습니다.
+
+
+
+ ### 행 클릭 시 검색이 열리도록 설정
+
+ 인벤토리 테이블에서 **Row Click Action**을 열고 **검색**을 선택합니다. 트레이스 source를 선택하십시오(로그 및 트레이스 source만 표시됩니다). 필터를 하나 추가합니다.
+
+ * **Expression**: `ServiceName`
+ * **Template**: `{{ServiceName}}`
+
+ **Apply**를 클릭한 다음 저장합니다.
+
+
+
+ ### 행 클릭
+
+ 이제 서비스 행을 클릭하면 해당 트레이스 source의 검색 페이지가 열리고, `ServiceName = `로 필터링되므로 동일한 시간 범위에서 해당 서비스의 스팬만 바로 확인할 수 있습니다.
+
+
+
+
+
+이 방식은 어떤 항목 catalog에도 동일하게 적용할 수 있습니다. 테이블을 `ServiceName` 대신 작업(`SpanName`) 또는 endpoint 속성으로 그룹화한 뒤, 해당 컬럼을 기준으로 필터 템플릿을 설정하면 각 행을 클릭할 때마다 해당 작업 또는 endpoint의 이벤트가 열립니다. 맵 속성에 대한 group-by는 [Validation and limitations](#validation)의 alias 참고 사항을 확인하십시오.
+
+
+ ## 행 클릭 작업 설정
+
+
+행 클릭 작업은 별도 페이지가 아니라 테이블 타일 자체에서 구성합니다. 타일을 추가하거나 편집한 다음 시각화 유형을 **Table**로 설정하십시오. 그러면 편집기 도구 모음에서 **Display Settings** 옆에 **Row Click Action** 버튼이 표시됩니다. 이 버튼은 테이블 타일에만 표시되며, 레이블에는 현재 작업이 반영됩니다: `Row Click Action: Default`, `Row Click Action: 검색`, 또는 `Row Click Action: Dashboard`. 이 버튼을 클릭하면 드로어가 열립니다.
+
+
+
+이 드로어에서는 3가지 작업을 제공합니다:
+
+* **Default**: 기본 제공 동작입니다. 행을 클릭하면 해당 행의 group-by 컬럼 값과 선택한 시간 범위로 필터링된 검색 페이지가 열립니다. 사용자 지정 작업을 설정하지 않았을 때 적용되는 동작입니다.
+* **검색**: 클릭을 선택한 source의 검색 페이지로 보냅니다.
+* **Dashboard**: 클릭을 팀이 소유한 다른 대시보드로 보냅니다.
+
+**검색**와 **Dashboard**에서는 클릭이 이동할 위치를 선택하고, 함께 전달할 필터를 템플릿으로 지정합니다:
+
+* **Destination**: 특정 source 또는 대시보드를 선택하거나, **Template**를 선택한 뒤 [Handlebars](https://handlebarsjs.com/) 템플릿을 입력해 사용 가능한 source 또는 대시보드 이름에 맞추십시오. 특정 대상을 선택하면 해당 대상이 ID로 고정됩니다. 단일 고정 대상에는 이 방법을 권장합니다. 이름이 바뀌어도 유지되고, 대시보드를 내보내거나 가져온 뒤에도 유지되며, 대시보드의 경우 대상에 선언된 필터도 미리 채워집니다. 행마다 대상이 달라져야 한다면 **Template**를 사용하고, 행 컬럼을 참조해 대상을 선택하십시오(예: `Errors-{{ServiceName}}`).
+* **Filters**: **Add filter**를 클릭한 다음 **Expression**(대상의 컬럼 또는 표현식, 예: `ServiceName`)과 해당 값에 대한 **Template**(예: `{{ServiceName}}`)를 입력하십시오. 템플릿은 `{{columnName}}` 형식으로 클릭한 행의 컬럼을 참조합니다(사용 가능한 컬럼은 아래 참고). 각 필터는 대상에서 `expression IN (value)` 조건으로 렌더링되며, 같은 표현식을 공유하는 필터는 머지됩니다. 대상이 대시보드인 경우, 해당 대시보드에 이미 선언된 각 필터마다 비어 있는 필터 1개가 드로어에 미리 채워지므로 템플릿만 입력하면 됩니다.
+* **WHERE** (선택 사항): 위의 개별 필터 조건에 더해 대상의 전역 필터로 렌더링되는 Handlebars 템플릿입니다. 대상이 이를 구문 분석할 수 있도록 쿼리 언어를 SQL 또는 Lucene으로 설정하십시오. 예를 들어 SQL 템플릿 `ServiceName = '{{ServiceName}}'`은 대상을 클릭한 행의 서비스로 범위를 제한합니다.
+
+
+ **템플릿은 테이블의 컬럼을 참조합니다**
+
+ `{{...}}` 템플릿은 테이블 타일 자체의 컬럼, 즉 group-by 컬럼과 각 series를 이름 또는 alias 기준으로, 테이블에 표시된 그대로 해석합니다. 테이블이 선택하지 않은 기본 source의 컬럼은 참조할 수 없습니다. 클릭을 통해 값을 전달하려면 그 값이 테이블의 컬럼이어야 하므로, `{{ServiceName}}`은 `ServiceName`이 테이블의 group-by 컬럼이기 때문에 동작하며, alias가 지정된 컬럼은 해당 alias로 참조합니다. 테이블에 없는 이름을 참조하면 클릭이 실패하고 `Row has no column ''`가 표시됩니다.
+
+
+**Apply**를 클릭해 템플릿을 검증하십시오(ClickStack은 구문이 잘못된 템플릿을 보고합니다). 그런 다음 작업을 유지하려면 대시보드를 저장하십시오.
+
+
+ ## 대상과 필터가 결정되는 방식
+
+
+뷰어가 행을 클릭하면 ClickStack은 해당 행을 기준으로 작업 대상을 결정합니다.
+
+* **대상.** 특정 source 또는 대시보드를 선택하면 ID로 고정됩니다. **Template** 대상은 클릭한 행을 기준으로 렌더링된 후, 팀의 source 또는 대시보드와 이름으로 매칭됩니다. 정상적으로 결정되려면 이름이 고유해야 합니다. 두 개의 source 또는 두 개의 대시보드가 동일한 렌더링 이름을 공유하면 링크를 그중 하나로 결정할 수 없습니다. 렌더링된 이름이 비어 있거나 일치하는 이름이 없는 경우에도 결정에 실패합니다.
+* **필터.** 각 필터 템플릿은 행을 기준으로 렌더링되어 대상에서 `expression IN (value)` 조건이 됩니다. `검색` 작업은 선택한 source 범위로 한정된 `/search`를 열고, `Dashboard` 작업은 해당 대시보드를 엽니다. 클릭한 행의 시간 범위는 두 경우 모두 그대로 유지됩니다.
+
+
+ **대시보드 대상에는 일치하는 필터 선언이 필요합니다**
+
+ 대시보드로 전달된 필터는 대상 대시보드에 필터의 **Expression**과 일치하는 표현식을 가진 최상위 [custom filter](/ko/clickstack/features/dashboards/overview#custom-filters)가 선언되어 있을 때만 적용됩니다. 선언된 필터와 일치하지 않으면 해당 값은 클릭 시점에 삭제되며, 대상은 그 표현식에 대해 필터링되지 않은 상태로 열립니다. 이것이 대시보드 모드에서 대상의 선언된 필터를 미리 채워 넣는 이유입니다. 표현식이 일치하면 대상 드롭다운이 클릭한 행의 값으로 자동 채워집니다.
+
+
+
+ ## 검증 및 제한 사항
+
+
+* **테이블 타일에만 적용됩니다.** **Row Click Action** 버튼은 chart-builder 테이블과 [SQL 기반](/ko/clickstack/features/dashboards/sql-visualizations) 테이블을 포함한 테이블 타일에만 표시됩니다. 다른 타일 유형에는 행 클릭 작업이 없습니다.
+* **검색 대상은 log 또는 trace source여야 합니다.** 메트릭 및 session source는 검색 페이지에서 볼 수 없으므로 제공되지 않습니다.
+* **Template 이름은 고유해야 합니다.** template target은 이름으로 확인되므로, 이름이 같은 두 source 또는 두 dashboard는 template target으로 사용할 수 없습니다.
+* **Dashboard 대상에는 일치하는 선언된 filter가 필요합니다.** 그래야 전달된 값이 적용됩니다(위의 참고 사항 참조).
+* **표현식 group-by 컬럼에는 alias가 필요합니다.** `SpanAttributes['http.route']`와 같은 맵 속성에 대해 표현식으로 group-by를 수행하면 결과 컬럼의 이름이 원시 표현식 그대로 생성되므로 template에서 참조하기가 불편합니다. chart builder에서 컬럼에 alias를 지정하십시오. **Group By** 입력에서 표현식 뒤에 `AS `를 추가하고(예: `SpanAttributes['http.route'] AS Route`), template에서 `{{Route}}`를 참조하십시오. 집계된 series도 같은 방식으로 **Alias** 필드의 alias를 사용합니다. `ServiceName`과 같은 일반 컬럼에 대한 group-by는 이미 이름이 명확하므로 alias가 필요하지 않습니다.
\ No newline at end of file
diff --git a/ko/clickstack/navigation.json b/ko/clickstack/navigation.json
index 19c9574d0..2f4770be5 100644
--- a/ko/clickstack/navigation.json
+++ b/ko/clickstack/navigation.json
@@ -85,7 +85,8 @@
"group": "Dashboards",
"pages": [
"ko/clickstack/features/dashboards/dashboard-templates",
- "ko/clickstack/features/dashboards/sql-visualizations"
+ "ko/clickstack/features/dashboards/sql-visualizations",
+ "ko/clickstack/features/dashboards/row-click-drilldowns"
],
"root": "ko/clickstack/features/dashboards/overview"
},
@@ -103,6 +104,8 @@
{
"group": "2026",
"pages": [
+ "ko/clickstack/demo-days/2026/2026-06-05",
+ "ko/clickstack/demo-days/2026/2026-05-29",
"ko/clickstack/demo-days/2026/2026-05-22",
"ko/clickstack/demo-days/2026/2026-05-15",
"ko/clickstack/demo-days/2026/2026-05-08",
diff --git a/ko/concepts/navigation.json b/ko/concepts/navigation.json
index e451c42e4..b8ee7d7f7 100644
--- a/ko/concepts/navigation.json
+++ b/ko/concepts/navigation.json
@@ -33,9 +33,9 @@
{
"group": "Dictionaries",
"pages": [
- "ko/concepts/features/dictionaries/index",
"ko/concepts/features/dictionaries/best-practices"
- ]
+ ],
+ "root": "ko/concepts/features/dictionaries/index"
},
{
"group": "Projections",
diff --git a/ko/docs.json b/ko/docs.json
index 438032c76..ca8d5bb88 100644
--- a/ko/docs.json
+++ b/ko/docs.json
@@ -1,10 +1,10 @@
{
"tabs": [
{
- "tab": "Home",
"pages": [
"ko/index"
- ]
+ ],
+ "tab": "Home"
},
{
"menu": [
diff --git a/ko/get-started/index.mdx b/ko/get-started/index.mdx
new file mode 100644
index 000000000..1346bc9ee
--- /dev/null
+++ b/ko/get-started/index.mdx
@@ -0,0 +1,39 @@
+---
+title: 'ClickHouse 시작하기'
+sidebarTitle: '개요'
+description: 'ClickHouse가 처음이신가요? 여기서 시작하세요 — ClickHouse가 무엇인지 알아보고, 사용 사례를 살펴보고, 설치하고, 데이터를 마이그레이션하고, 샘플 데이터셋으로 직접 실습해 보세요.'
+keywords: ['clickhouse', '시작하기', '개요', '설치', '마이그레이션', '빠른 시작']
+doc_type: 'landing-page'
+---
+
+ClickHouse가 처음이신가요? 아래에서 시작할 항목을 선택하세요.
+
+
+
+ ClickHouse가 무엇인지, 왜 이렇게 빠른지, 무엇이 차별화 요소인지 알아보세요.
+
+
+
+ ClickHouse가 실시간 분석, 관측성, 데이터 웨어하우징, 에이전트형 분석을 어떻게 지원하는지 살펴보세요.
+
+
+
+ ClickHouse Cloud, 자가 관리형, 내장 배포 옵션을 비교해 보세요.
+
+
+
+ Cloud 및 오픈소스 ClickHouse를 빠르게 시작할 수 있도록 단계별 가이드를 제공합니다.
+
+
+
+ Cloud에서, 패키지 관리자를 사용해, Docker에서 또는 소스 코드에서 직접 ClickHouse를 설치하세요.
+
+
+
+ PostgreSQL, BigQuery, Snowflake, Redshift, Elasticsearch 등에서 데이터를 옮기세요.
+
+
+
+ 예시 데이터셋과 튜토리얼을 살펴보며 ClickHouse를 직접 익혀 보세요.
+
+
\ No newline at end of file
diff --git a/ko/get-started/navigation.json b/ko/get-started/navigation.json
index 5592340c3..0da208b24 100644
--- a/ko/get-started/navigation.json
+++ b/ko/get-started/navigation.json
@@ -2,7 +2,6 @@
"icon": "/images/icons/icon-get-started.svg",
"item": "Get started",
"pages": [
- "ko/index",
{
"group": "Get started",
"icon": "/images/menu-icon-lightning.svg",
@@ -10,7 +9,7 @@
{
"expandable": true,
"expanded": true,
- "group": "FAQ",
+ "group": "Introduction",
"pages": [
"ko/get-started/about/intro",
"ko/get-started/about/why-clickhouse-is-so-fast",
@@ -30,7 +29,8 @@
},
"ko/get-started/about/deployment-modes",
"ko/get-started/quickstarts/home"
- ]
+ ],
+ "root": "ko/get-started/index"
},
{
"expanded": true,
diff --git a/ko/guides/navigation.json b/ko/guides/navigation.json
index 1a6d59c93..a44c27f8e 100644
--- a/ko/guides/navigation.json
+++ b/ko/guides/navigation.json
@@ -112,9 +112,9 @@
"expanded": false,
"group": "Keeper",
"pages": [
- "ko/guides/oss/deployment-and-scaling/keeper/index",
"ko/guides/oss/deployment-and-scaling/keeper/ssl-zookeeper"
- ]
+ ],
+ "root": "ko/guides/oss/deployment-and-scaling/keeper/index"
},
{
"expanded": false,
@@ -150,7 +150,6 @@
"expanded": false,
"group": "Time series",
"pages": [
- "ko/guides/use-cases/real-time-analytics/time-series/index",
"ko/guides/use-cases/real-time-analytics/time-series/date-time-data-types",
"ko/guides/use-cases/real-time-analytics/time-series/basic-operations",
"ko/guides/use-cases/real-time-analytics/time-series/analysis-functions",
@@ -158,7 +157,8 @@
"ko/guides/use-cases/real-time-analytics/time-series/query-performance",
"ko/guides/use-cases/real-time-analytics/time-series/materialized-view-rollup",
"ko/guides/use-cases/real-time-analytics/time-series/time-series-filling-gaps"
- ]
+ ],
+ "root": "ko/guides/use-cases/real-time-analytics/time-series/index"
}
]
},
@@ -170,14 +170,14 @@
{
"group": "Build your own",
"pages": [
- "ko/guides/use-cases/observability/build-your-own/index",
"ko/guides/use-cases/observability/build-your-own/introduction",
"ko/guides/use-cases/observability/build-your-own/schema-design",
"ko/guides/use-cases/observability/build-your-own/integrating-opentelemetry",
"ko/guides/use-cases/observability/build-your-own/managing-data",
"ko/guides/use-cases/observability/build-your-own/grafana",
"ko/guides/use-cases/observability/build-your-own/demo-application"
- ]
+ ],
+ "root": "ko/guides/use-cases/observability/build-your-own/index"
}
],
"root": "ko/guides/use-cases/observability/index"
@@ -228,7 +228,6 @@
{
"group": "MCP",
"pages": [
- "ko/guides/use-cases/ai-ml/MCP/index",
"ko/guides/use-cases/ai-ml/MCP/claude-desktop",
"ko/guides/use-cases/ai-ml/MCP/librechat",
"ko/guides/use-cases/ai-ml/MCP/anythingllm",
@@ -238,7 +237,6 @@
{
"group": "AI agent libraries",
"pages": [
- "ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/index",
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/streamlit",
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/langchain",
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/llamaindex",
@@ -254,9 +252,11 @@
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/microsoft-agent-framework",
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/upsonic",
"ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/openai-agents"
- ]
+ ],
+ "root": "ko/guides/use-cases/ai-ml/MCP/ai-agent-libraries/index"
}
- ]
+ ],
+ "root": "ko/guides/use-cases/ai-ml/MCP/index"
}
],
"root": "ko/guides/use-cases/ai-ml/index"
diff --git a/ko/index.mdx b/ko/index.mdx
index 278ab675e..d720e2891 100644
--- a/ko/index.mdx
+++ b/ko/index.mdx
@@ -33,29 +33,42 @@ export const FullWidthDivider = ({ style }) => {
return ;
};
-export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle }) => {
+export const HeroCard = ({ filename, darkFilename: darkFilenameProp, title, description, body, href, links, icon, showArrow, arrowBottom, extraStyle, logo, logoInvert, overlayImg, fullWidthImage, imageHeight = 'h-48' }) => {
const darkFilename = darkFilenameProp || (filename ? filename.replace('-light.', '-dark.') : null);
- const cardClassName = `ch-hero-card ${arrowBottom ? 'flex flex-col' : 'block'} p-4 rounded-lg no-underline bg-[#f9f9f9] border border-[#e5e7eb] text-inherit`;
+ const cardClassName = `ch-hero-card relative ${arrowBottom ? 'flex flex-col' : 'block'} p-4 rounded-lg no-underline bg-[#f9f9f9] border border-[#e5e7eb] text-inherit${fullWidthImage ? ' overflow-hidden' : ''}`;
const content = (
<>
+ {logo && (
+
+
+
+ )}
{icon ? (
{icon}
) : filename ? (
- <>
+
- >
+ {overlayImg && (
+
+ )}
+
) : null}
{title}
@@ -117,11 +130,22 @@ export const McpLink = () => {
onClick={handleClick}
className="inline-flex items-center gap-1.5 text-xs text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors no-underline"
>
-
- 문서 MCP Server 설정
+
+ 문서용 MCP 서버 설정
);
};
@@ -159,9 +183,20 @@ export const McpSetup = () => {
+
+다음이 필요합니다.
+
+* ClickHouse Cloud 조직에서 **관리자** 역할이 있어야 합니다.
+* IdP와 ClickHouse Cloud 간에 [SAML SSO](/ko/cloud/security/saml-setup)가 이미 구성되어 있어야 합니다. SCIM이 사용자 계정을 생성하고, 해당 계정은 SAML을 통해 로그인하므로 SSO가 먼저 정상적으로 작동해야 합니다.
+* 애플리케이션 설치 및 Provisioning 구성 권한이 있는 Okta 테넌트의 super-admin 액세스
+* SCIM을 통해 할당할 역할 목록(예: Admins, Developers, 읽기 전용). 이 목록은 미리 정해 두십시오. Okta에서 이에 맞는 그룹을 생성하게 됩니다.
+
+
+ ## SCIM이 ClickHouse Cloud에서 작동하는 방식
+
+
+1. Okta의 관리자가 사용자를 직접 또는 그룹을 통해 ClickHouse Cloud 애플리케이션에 할당합니다.
+2. Okta는 생성한 토큰으로 인증한 후 HTTPS를 통해 ClickHouse Cloud SCIM 엔드포인트를 호출합니다.
+3. ClickHouse Cloud는 조직에 사용자를 생성하고 Okta 그룹 멤버십에 따라 역할을 할당합니다.
+4. 사용자는 기존 SAML SSO 흐름을 통해 ClickHouse Cloud에 로그인합니다.
+5. Okta에서의 프로필 변경, 그룹 변경, 비활성화는 ClickHouse Cloud에 자동으로 반영됩니다.
+
+
+ ## ClickHouse Cloud 조직에서 SCIM 구성하기
+
+
+
+
+ ### SCIM 활성화
+
+ 조직 관리자로 **ClickHouse Cloud 콘솔**에 로그인한 후 **조직 설정 → SAML 및 SCIM 설정 → SCIM 구성**을 엽니다.
+
+
+
+ `Enable SCIM`을 클릭합니다. SAML SSO가 연결되면 SCIM이 활성화됩니다. 옵션이 회색으로 비활성화되어 있으면 먼저 SAML 설정을 완료하십시오.
+
+
+
+ 다음 형식의 **SCIM endpoint URL**이 생성됩니다.
+
+ ```plaintext
+ https://api.clickhouse.cloud/v1/organizations//scim
+ ```
+
+ 복사해 두십시오. 나중에 Okta에 붙여 넣어야 합니다.
+
+
+
+ ### SCIM 액세스 토큰 생성
+
+ `Create an API key` 섹션을 찾아 만료 날짜를 선택합니다.
+
+
+ **토큰 교체를 미리 계획하십시오.** 만료 기간은 12개월로 설정하고 캘린더 알림을 추가하는 것이 좋습니다. ClickHouse Cloud는 동시에 최대 2개의 활성 SCIM 토큰을 지원하므로 중단 없이 교체할 수 있습니다. 새 토큰을 생성하고, Okta를 새 토큰으로 전환하고, 프로비저닝이 계속 작동하는지 확인한 다음, 기존 토큰을 철회하십시오.
+
+
+ `Generate key`를 클릭합니다. 토큰은 키(`scim_` 접두사 포함)와 시크릿 형태로 **한 번만** 표시됩니다. 둘 다 즉시 복사하여 안전한 시크릿 관리자에 저장하십시오. 나중에 다시 확인할 수 없습니다. 분실한 경우 해당 토큰을 철회하고 새로 생성하십시오.
+
+
+
+
+
+ ### 역할 매핑 정의
+
+ SCIM 구성 패널에서 **역할 매핑**을 클릭합니다(또는 **Users and roles → Roles**로 직접 이동합니다).
+
+ SCIM 그룹은 이름을 기준으로 ClickHouse Cloud 역할에 연결되며, 다음 규칙을 염두에 두어야 합니다.
+
+ * **SCIM 그룹은 미리 정의된 시스템 역할에 매핑할 수 없습니다.** SCIM 매핑은 사용자 지정 역할에만 적용됩니다. SCIM을 통해 시스템 수준 기능을 노출해야 한다면, 필요한 권한을 포함하는 사용자 지정 역할을 생성하십시오.
+ * **이름이 일치하면 자동으로 연결됩니다.** 사용자 지정 역할의 이름이 들어오는 SCIM 그룹 이름과 같으면 ClickHouse Cloud가 자동으로 연결하므로 수동 매핑이 필요하지 않습니다.
+ * **그룹 이름과 다른 역할 이름을 사용하려면** 원하는 역할 이름으로 사용자 지정 역할을 생성한 다음, 해당 역할의 **SCIM group** 필드를 연결할 SCIM 그룹 이름으로 설정하십시오.
+ * **매핑되지 않은 그룹은 새 역할을 생성합니다.** Okta가 기존 역할 이름과 일치하지 않고 어떤 역할의 `SCIM group` 필드에서도 참조되지 않는 그룹을 푸시하면, ClickHouse Cloud는 해당 그룹 이름으로 새 사용자 지정 역할을 생성합니다. 그런 다음 원하는 권한을 부여할 수 있습니다.
+
+
+
+
+ ## Okta에서 ClickHouse Cloud 애플리케이션 구성하기
+
+
+
+
+ ### Okta에서 ClickHouse Cloud 애플리케이션 열기
+
+ **Okta Admin Console**에서 **Applications → Applications**로 이동한 후, ClickHouse Cloud용 SAML SSO를 설정할 때 생성한 애플리케이션을 검색합니다. 해당 애플리케이션을 엽니다.
+
+ 아직 SAML 애플리케이션을 만들지 않았다면 먼저 [SAML SSO 설정 가이드](/ko/cloud/security/saml-setup)를 따르십시오. SCIM 프로비저닝은 동일한 애플리케이션에서 구성합니다.
+
+ **General** 탭에서 **App Settings** 섹션을 찾아 `Edit`를 클릭하십시오. **Provisioning** 아래에서 `SCIM`을 선택한 다음 `Save`를 클릭하십시오.
+
+
+
+ 이제 애플리케이션에 **Provisioning** 탭이 표시됩니다.
+
+
+
+
+
+ ### SCIM 엔드포인트에 Okta 연결
+
+ 애플리케이션의 **Provisioning** 탭을 열고 `Edit`를 클릭합니다. 양식을 다음과 같이 입력합니다.
+
+ * **SCIM connector base URL** — 앞서 확인한 SCIM 엔드포인트 URL입니다.
+ * **사용자용 고유 식별자 필드** — `userName`.
+ * **지원되는 프로비저닝 작업** — 다음 항목을 모두 선택합니다.
+ * 새 사용자 가져오기 및 프로필 업데이트
+ * 새 사용자 Push
+ * 프로필 업데이트 Push
+ * 그룹 Push
+ * 그룹 가져오기
+ * **인증 모드** — `Basic Auth`.
+ * **Username** — SCIM 토큰 **key**입니다(`scim_`로 시작).
+ * **Password** — SCIM 토큰 **secret**입니다.
+
+
+
+
+
+ `Test Connector Configuration`을 클릭합니다. 녹색 확인 표시가 나타나야 합니다. 실패하면 [문제 해결](#troubleshooting)로 이동하십시오.
+
+
+
+ `Save`를 클릭합니다.
+
+
+
+ ### Provisioning 동작 구성
+
+ 계속해서 **Provisioning** 탭에서 왼쪽 사이드바의 `To App`을 클릭합니다. `Edit`를 클릭한 후 다음 항목을 활성화합니다:
+
+ | 설정 | 작업 | 설명 |
+ | ---------------------- | ------- | ----------------------------------------------------- |
+ | Create Users | Enable | Okta에서 할당되면 ClickHouse Cloud에 새 사용자를 생성합니다 |
+ | Update User Attributes | Enable | 프로필 변경 사항(이름, 이메일 등)을 자동으로 푸시합니다 |
+ | Deactivate Users | Enable | Okta에서 할당이 해제되거나 비활성화되면 ClickHouse Cloud에서 사용자를 제거합니다 |
+ | Sync Password | Disable | 사용되지 않습니다 — 로그인은 비밀번호가 아니라 SAML을 통해 처리됩니다 |
+
+
+
+ `Save`를 클릭한 다음 애플리케이션의 **Sign On** / **Provisioning** 탭으로 돌아가 설정이 적용되었는지 확인합니다.
+
+
+
+
+
+ ### 사용자 속성 매핑
+
+ Okta와 ClickHouse Cloud는 사용자 필드의 매핑 방식에 대해 동일하게 설정되어 있어야 합니다. **Provisioning** 탭에서 `To App`을 클릭하고 애플리케이션의 **Attribute Mappings**를 검토하십시오. Okta SAML 애플리케이션의 기본값은 보통 그대로 사용해도 되지만, 아래 표를 확인하십시오.
+
+ | Okta 속성 | ClickHouse Cloud (SCIM) 속성 | 필수 |
+ | ----------------- | -------------------------- | ------------------------------- |
+ | `userName` | `userName` | **예** — 고유 식별자이자 기본 이메일로 사용됩니다 |
+ | `email` (primary) | `emails[primary].value` | **예** — `userName`와 일치해야 합니다 |
+ | `firstName` | `name.givenName` | 권장 |
+ | `lastName` | `name.familyName` | 권장 |
+ | `displayName` | `displayName` | 권장 — ClickHouse Cloud UI에 표시됩니다 |
+ | `externalId` | `externalId` | 권장 — 대조 시 정확도를 높여 줍니다 |
+
+ 부서, 관리자, 위치와 같은 선택적 속성도 추가할 수 있습니다. ClickHouse Cloud는 이를 사용자 프로필에 저장하지만 현재는 권한에 사용하지 않습니다. SCIM 표준 항목에 포함되지 않은 값은 ClickHouse Cloud 측에서 무시됩니다.
+
+
+ **이메일의 대소문자는 중요합니다.** Okta `userName`과 `email`이 동일한 대소문자를 사용하도록 하십시오. ClickHouse Cloud는 이메일을 소문자로 정규화하므로, 두 필드의 대소문자가 일치하지 않으면 테스트가 실패할 수 있습니다.
+
+
+
+
+ ### 그룹 푸시 및 사용자 할당
+
+ 이 단계에서 역할이 자동으로 적용됩니다.
+
+ **Okta에서 그룹을 생성합니다.** 앞서 설정한 각 역할 매핑마다 **정확히 동일한 표시 이름**을 사용하는 Okta 그룹을 생성하거나 기존 그룹을 확인합니다. 예를 들어 매핑이 `ClickHouse-Admins → Admin`이라면, Okta에서 `ClickHouse-Admins`라는 그룹을 생성합니다.
+
+
+
+ 방금 생성한 그룹을 열고 `Assign people`을 클릭해 구성원을 추가합니다.
+
+
+
+
+
+ 그런 다음 동일한 그룹에 SCIM 애플리케이션도 연결하여 역할 멤버십과 애플리케이션 액세스가 동기화된 상태로 유지되도록 합니다.
+
+
+
+ **그룹을 Push합니다.** 애플리케이션의 **Provisioning** 탭에서 `Push Groups → Find groups by name`을 클릭하고 그룹을 검색한 다음 `Save`를 클릭합니다. 각 역할 그룹에 대해 이 과정을 반복합니다. Provisioning이 완료되면 각 그룹의 **Push Status**가 **Active (Pushed)**로 표시되어야 합니다.
+
+
+
+ **사용자를 할당합니다.** 두 가지 방법이 있습니다.
+
+ * **그룹을 통해(권장).** 방금 Push한 Okta 그룹에 사용자를 추가합니다. 그러면 ClickHouse Cloud에 프로비저닝되고, 해당 역할이 자동으로 할당됩니다.
+ * **직접 할당.** 애플리케이션의 **Assignments** 탭에서 `Assign → Assign to People`을 클릭하고 개별 사용자를 선택합니다. Push된 그룹에도 속해 있지 않다면 **Default role**로 프로비저닝됩니다.
+
+ 그룹 기반 할당 방식이 지속적인 관리에 더 깔끔합니다. 사용자의 역할이 바뀌면 그룹 멤버십만 업데이트하면 됩니다.
+
+
+
+
+ ## 통합 테스트
+
+
+Provisioning 구성을 마치면 ClickHouse Cloud 콘솔의 **Settings → Users and roles**로 돌아가 동기화된 사용자가 예상한 역할로 표시되는지 확인합니다.
+
+
+
+전체 팀을 할당하기 **전**에 테스트 사용자 1~2명으로 이 간단한 테스트 계획을 진행하십시오. 각 단계는 몇 초 안에 성공해야 합니다. 그렇지 않다면 Okta Tasks 큐와 [Troubleshooting](#troubleshooting) 섹션을 확인하십시오.
+
+| # | Okta에서 수행할 작업 | ClickHouse Cloud에서의 예상 결과 |
+| - | ----------------------------------------------------- | -------------------------------------------- |
+| 1 | 테스트 사용자를 `ClickHouse-Admins` Okta 그룹에 추가 | 사용자가 **Settings → Members**에 역할 **관리자**로 표시됨 |
+| 2 | 테스트 사용자가 SSO를 통해 ClickHouse Cloud에 로그인 | 관리자 권한으로 dashboard에 접속함 |
+| 3 | Okta에서 사용자의 이름을 업데이트 | 몇 초 안에 업데이트된 이름이 **Members**에 표시됨 |
+| 4 | 사용자를 `ClickHouse-Admins`에서 `ClickHouse-Read-only`로 이동 | 역할이 **읽기 전용**으로 변경됨 |
+| 5 | 애플리케이션에서 사용자 할당을 해제(또는 Okta에서 비활성화) | 사용자가 조직에서 제거되며, 이후 로그인 시도는 실패함 |
+
+어느 단계에서든 실패하면 계속 진행하기 전에 근본 원인을 해결하십시오. 증상은 대개 연쇄적으로 악화됩니다.
+
+
+ **Okta에서 SCIM 오류를 확인할 위치.** SCIM 오류는 애플리케이션으로 필터링한 **Reports → System Log**와 애플리케이션의 **Provisioning → View Logs** 화면에 표시됩니다. ClickHouse Cloud가 반환한 오류 메시지가 그대로 표시되므로, 먼저 그 내용을 확인하십시오.
+
+
+
+ ## 운영 환경을 위한 모범 사례
+
+
+**토큰을 정기적으로 교체하세요.** SCIM 토큰 교체를 위한 캘린더 알림을 설정하십시오. 권장 주기는 12개월마다 1회이며, 토큰을 알고 있던 관리자가 회사를 떠나는 경우에는 즉시 교체하는 것이 좋습니다. ClickHouse Cloud는 조직마다 활성 토큰 2개를 허용하므로 Provisioning을 중단하지 않고 토큰을 교체할 수 있습니다.
+
+**직접 할당 대신 그룹을 사용하세요.** 사용자를 애플리케이션에 직접 할당해도 동작하지만, 금방 감사하기 어려워집니다. Okta 그룹을 통해 할당을 관리하면 액세스 검토와 역할 변경을 한곳에서 처리할 수 있습니다.
+
+**감사 로그를 검토하세요.** 사용자 생성, 사용자 비활성화, 프로필 업데이트 등 모든 SCIM 작업은 ClickHouse Cloud 감사 로그에 기록됩니다. [감사 로깅](/ko/cloud/security/audit-logging)을 참조하십시오. 특히 대규모 Provisioning이 한꺼번에 수행된 후에는 로그를 주기적으로 확인하십시오.
+
+**적절한 기본 역할을 설정하세요.** Okta 사용자가 애플리케이션에 할당되었지만 푸시된 어떤 그룹에도 속하지 않으면 **기본 역할**로 생성됩니다. 잘못된 구성에도 안전하게 대응할 수 있도록, 사용자가 *최소한의 작업은* 수행할 수 있으면서도 가장 제한적인 역할을 선택하십시오.
+
+**SCIM과 수동 초대를 동시에 사용하지 마세요.** SCIM을 활성화한 후에는 Okta를 통해 멤버십을 관리하고, 동일한 사용자에게 수동 초대를 함께 보내지 마십시오. 두 방식을 혼용하면 어느 쪽이 기준 정보인지 혼란이 생기고 중복이 발생할 수 있습니다.
+
+**실패한 Provisioning 작업을 모니터링하세요.** Okta는 실패한 Provisioning 호출을 재시도하지만, 결국 이를 **Tasks** 큐에 보류합니다. IT 팀이 이미 모니터링하는 대시보드에 이 큐를 추가하거나, Okta의 웹훅 또는 이메일 알림을 사용해 지속적인 실패를 감지하십시오.
+
+
+ ## 문제 해결
+
+
+
+ ### Okta에서 "커넥터 구성 테스트"가 실패합니다
+
+
+* ClickHouse Cloud 콘솔에서 SCIM이 **활성화**되어 있는지 확인하세요.
+* Okta의 **기준 URL**이 Cloud Console에 표시된 SCIM 엔드포인트 URL과 정확히 일치하는지 확인하세요 — 조직 ID가 정확해야 합니다.
+* **토큰 키와 시크릿**을 앞뒤 공백 없이 붙여넣었는지 확인하세요.
+* 토큰을 교체했다면 이전 쌍이 아니라 **새** 키와 시크릿을 사용하고 있는지 확인하세요.
+
+
+ ### 사용자가 생성되지만 권한이 없습니다
+
+
+* 예상한 역할에 대해 **"Users and roles"의 역할 매핑** 아래에 행이 추가되어 있는지 확인하세요.
+* Okta 그룹 이름이 대소문자와 하이픈까지 포함해 매핑에 있는 SCIM 그룹 이름과 **정확히** 일치하는지 확인하세요.
+* 설계상 일부 사용자를 그룹 없이 의도적으로 프로비저닝하는 경우 **기본 역할**이 설정되어 있는지 확인하세요.
+
+
+ ### 멤버 목록에 중복 사용자 표시
+
+
+일반적으로 Okta와 이전에 수동으로 보낸 초대 간 이메일 대소문자 표기가 일치하지 않을 때 발생합니다. Members 목록에서 중복 항목을 제거한 다음, Okta에서 해당 사용자 할당을 해제했다가 다시 할당하여 새로 프로비저닝하십시오.
+
+
+ ### 그룹 푸시가 "displayName not recognised" 오류로 실패합니다
+
+
+Okta의 그룹 이름이 ClickHouse Cloud에 구성된 매핑과 일치하지 않습니다. Okta 그룹 이름을 변경하거나 SCIM 구성 패널의 **역할 매핑**에서 매핑을 추가하십시오(또는 **Users and roles → Roles**를 통해 추가할 수 있습니다).
+
+
+ ### 비활성화된 사용자가 여전히 구성원으로 표시됩니다
+
+
+Okta에서 비활성화 상태가 반영되기까지 최대 1분이 걸릴 수 있습니다. 몇 분이 지나도 사용자가 여전히 구성원으로 남아 있으면, 비활성화 작업에서 오류가 발생했는지 Okta의 **Provisioning → View Logs**에서 확인하십시오.
+
+
+ ### SCIM 토큰을 교체한 후 Okta가 작동하지 않습니다
+
+
+Okta에서 **동일한 SCIM 애플리케이션**의 자격 증명을 업데이트했는지 확인하세요. 업데이트한 후 `Test Connector Configuration`을 클릭해 확인하십시오. Provisioning 상태가 다시 녹색으로 돌아오면 ClickHouse Cloud 콘솔에서 이전 토큰을 무효화하십시오.
+
+
+ ### SCIM 토큰을 분실했습니다
+
+
+토큰은 복구할 수 없습니다. ClickHouse Cloud 콘솔의 **조직 설정 → SAML 및 SCIM 설정 → SCIM 구성**에서 분실한 토큰을 해지하고 새 토큰을 생성한 다음, Okta의 자격 증명을 업데이트하십시오.
+
+
+ ## 자주 묻는 질문
+
+
+**SCIM을 사용하려면 먼저 SAML SSO를 설정해야 합니까?**
+예. SCIM은 사용자 계정을 생성하지만, ClickHouse Cloud는 SAML을 통해 이를 인증합니다. 먼저 [SAML SSO](/ko/cloud/security/saml-setup)를 설정하십시오.
+
+**SCIM은 Microsoft Entra ID, OneLogin 또는 다른 SCIM 2.0 IdP에서 작동합니까?**
+공식적으로는 그렇지 않습니다 — 현재 테스트를 거쳐 지원하는 유일한 IdP는 Okta입니다. endpoint는 SCIM 2.0(RFC 7644)을 따르지만, 인증 방식이 Basic Auth로 제한되므로 Basic Auth로 인증할 수 없는 IdP는 사용할 수 없습니다. Basic Auth를 지원하는 다른 SCIM 2.0 IdP도 실제로는 작동할 수 있지만, 이를 보장하지는 않습니다.
+
+**Okta의 변경 사항은 얼마나 빨리 ClickHouse Cloud에 반영됩니까?**
+대부분의 작업은 몇 초 내에 반영됩니다. 대량 변경(대규모 그룹 푸시)은 규모에 따라 더 오래 걸릴 수 있지만, 일시적인 오류가 발생하면 Okta가 자동으로 재시도합니다.
+
+**하나의 Okta 테넌트에서 여러 ClickHouse Cloud 조직을 Provisioning할 수 있습니까?**
+예 — 조직마다 고유한 SCIM endpoint URL과 token을 사용해 애플리케이션을 각각 한 번씩 설치하십시오. 필요에 따라 동일한 Okta 그룹을 각 애플리케이션에 푸시하면 됩니다.
+
+**진행이 막혔을 때는 어디에서 도움을 받을 수 있습니까?**
+ClickHouse Cloud 콘솔에서 지원 티켓을 여십시오(**Help → Contact support**). 다음 내용을 포함해야 합니다:
+
+* 조직 ID,
+* Okta 애플리케이션 ID,
+* Okta 로그에서 실패한 작업 또는 테스트의 스크린샷.
\ No newline at end of file
diff --git a/ko/products/cloud/navigation.json b/ko/products/cloud/navigation.json
index 14571bef6..5e7b62479 100644
--- a/ko/products/cloud/navigation.json
+++ b/ko/products/cloud/navigation.json
@@ -98,7 +98,6 @@
"expanded": false,
"group": "AI/ML",
"pages": [
- "ko/products/cloud/features/ai-ml/index",
"ko/products/cloud/features/ai-ml/ask-ai",
"ko/products/cloud/features/ai-ml/aichat/using-ai-chat",
"ko/products/cloud/features/ai-ml/aichat/customizing-semantic-layer",
@@ -108,13 +107,11 @@
{
"group": "ClickHouse Agents",
"pages": [
- "ko/products/cloud/features/ai-ml/agents/index",
"ko/products/cloud/features/ai-ml/agents/quickstart",
"ko/products/cloud/features/ai-ml/agents/chat",
{
"group": "Agent Builder",
"pages": [
- "ko/products/cloud/features/ai-ml/agents/builder/index",
"ko/products/cloud/features/ai-ml/agents/builder/model-parameters",
"ko/products/cloud/features/ai-ml/agents/builder/code-interpreter",
"ko/products/cloud/features/ai-ml/agents/builder/web-search",
@@ -123,16 +120,19 @@
"ko/products/cloud/features/ai-ml/agents/builder/mcp-servers",
"ko/products/cloud/features/ai-ml/agents/builder/skills",
"ko/products/cloud/features/ai-ml/agents/builder/subagents"
- ]
+ ],
+ "root": "ko/products/cloud/features/ai-ml/agents/builder/index"
},
"ko/products/cloud/features/ai-ml/agents/prompts",
"ko/products/cloud/features/ai-ml/agents/memory",
"ko/products/cloud/features/ai-ml/agents/marketplace",
"ko/products/cloud/features/ai-ml/agents/sharing-and-access"
- ]
+ ],
+ "root": "ko/products/cloud/features/ai-ml/agents/index"
},
"ko/products/cloud/features/ai-ml/model-developer-terms"
- ]
+ ],
+ "root": "ko/products/cloud/features/ai-ml/index"
}
]
},
@@ -281,6 +281,7 @@
"ko/products/cloud/guides/security/cloud-access-management/manage-sql-console-role-assignments",
"ko/products/cloud/guides/security/cloud-access-management/manage-database-users",
"ko/products/cloud/guides/security/cloud-access-management/saml-sso-setup",
+ "ko/products/cloud/guides/security/cloud-access-management/scim-setup",
"ko/products/cloud/guides/security/cloud-access-management/common-access-management-queries",
"ko/products/cloud/guides/security/cloud-access-management/manage-database-service-accounts",
"ko/products/cloud/guides/security/saml-sso-removal"
diff --git a/ko/reference/navigation.json b/ko/reference/navigation.json
index cb0d963ca..bea20e1da 100644
--- a/ko/reference/navigation.json
+++ b/ko/reference/navigation.json
@@ -53,7 +53,6 @@
"expanded": false,
"group": "CREATE",
"pages": [
- "ko/reference/statements/create/index",
"ko/reference/statements/create/database",
{
"expanded": false,
@@ -114,7 +113,8 @@
"ko/reference/statements/create/table",
"ko/reference/statements/create/user",
"ko/reference/statements/create/view"
- ]
+ ],
+ "root": "ko/reference/statements/create/index"
},
"ko/reference/statements/delete",
"ko/reference/statements/describe-table",
@@ -138,7 +138,6 @@
"expanded": false,
"group": "SELECT",
"pages": [
- "ko/reference/statements/select/index",
"ko/reference/statements/select/all",
"ko/reference/statements/select/apply_modifier",
"ko/reference/statements/select/array-join",
@@ -163,7 +162,8 @@
"ko/reference/statements/select/union",
"ko/reference/statements/select/where",
"ko/reference/statements/select/with"
- ]
+ ],
+ "root": "ko/reference/statements/select/index"
},
"ko/reference/statements/set-role",
"ko/reference/statements/set",
@@ -307,7 +307,6 @@
"expanded": false,
"group": "Table Engines",
"pages": [
- "ko/reference/engines/table-engines/index",
{
"expanded": false,
"group": "Integrations",
@@ -395,7 +394,8 @@
],
"root": "ko/reference/engines/table-engines/special/index"
}
- ]
+ ],
+ "root": "ko/reference/engines/table-engines/index"
},
{
"expanded": false,
diff --git a/ko/resources/develop-contribute/navigation.json b/ko/resources/develop-contribute/navigation.json
index 9f3e6f9f2..a0bdc5046 100644
--- a/ko/resources/develop-contribute/navigation.json
+++ b/ko/resources/develop-contribute/navigation.json
@@ -46,11 +46,11 @@
{
"group": "Integration development",
"pages": [
- "ko/resources/develop-contribute/integrations/index",
"ko/resources/develop-contribute/integrations/building-integrations",
"ko/resources/develop-contribute/integrations/testing-your-integration",
"ko/resources/develop-contribute/integrations/documenting-your-integration"
- ]
+ ],
+ "root": "ko/resources/develop-contribute/integrations/index"
},
{
"group": "Roadmap",
diff --git a/pt-BR/clickstack/demo-days/2026/2026-05-29.mdx b/pt-BR/clickstack/demo-days/2026/2026-05-29.mdx
new file mode 100644
index 000000000..dfda3c31f
--- /dev/null
+++ b/pt-BR/clickstack/demo-days/2026/2026-05-29.mdx
@@ -0,0 +1,116 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-05-29
+title: 'Demo days - 2026-05-29'
+sidebarTitle: '2026-05-29'
+description: 'Demo days do ClickStack em 2026-05-29'
+doc_type: 'guide'
+keywords: ['ClickStack', 'Demo days']
+---
+
+
+ ## Filtragem aprimorada de esquemas com reconhecimento de versão
+
+
+*Demo de [@knudtty](https://github.com/knudtty)*
+
+
+
+
+
+O ClickStack agora aplica a otimização `direct_read` apenas nas versões 26.2 ou superiores do ClickHouse, nas quais o índice de busca textual oferece suporte adequado às colunas de alias adicionadas aos esquemas de código aberto. Antes, essa otimização podia ser tentada em versões mais antigas, nas quais não funcionava corretamente. A verificação da versão acontece em tempo de consulta, inspecionando o esquema, e as próprias colunas de alias agora já vêm incluídas por padrão nos esquemas de código aberto.
+
+Também foi mostrado um trabalho em andamento para substituir a visão materializada de autocompletar por consultas diretas ao índice de texto. No momento, ambos fazem trabalho sobreposto, aumentando a pressão sobre a ingestão. Se os benchmarks confirmarem que as consultas ao índice de texto se mantêm em termos de desempenho, a visão materializada poderá ser simplificada ou removida. Aaron também respondeu a perguntas da equipe sobre como a codificação posicional em futuras versões do índice de texto do ClickHouse pode tornar os lookups de filtros key-value ainda mais precisos.
+
+**PRs relacionadas:** [#2341](https://github.com/hyperdxio/hyperdx/pull/2341) feat: adiciona a otimização `direct_read` por padrão para logs e traces, [#2405](https://github.com/hyperdxio/hyperdx/pull/2405) feat(common-utils): aplica a otimização de itens KV com `direct_read` a filtros SQL, [#2376](https://github.com/hyperdxio/hyperdx/pull/2376) feat: usa o índice de texto para alimentar filtros e autocompletar
+
+
+ ## Melhor parsing de logs
+
+
+*Demo de [@dhable](https://github.com/dhable)*
+
+
+
+
+
+Um cliente tinha logs em que o corpo do evento era um objeto JSON contendo um campo `level`. A lógica de inferência de severidade fazia duas coisas: analisava o corpo como JSON para extrair atributos e, se nenhuma severidade estivesse definida no nível do OTel, recorria à correspondência por string. Essa correspondência por string estava capturando a palavra "alert" do nome de um gerenciador de alertas dentro do corpo, classificando incorretamente o nível do log.
+
+A correção adiciona uma condição de guarda: se o corpo for analisado como JSON e já contiver um campo `level`, a etapa de inferência por string será totalmente ignorada. Uma suíte de testes de sanidade criada há cerca de um ano facilitou a validação da correção e a identificação de casos-limite relacionados apenas com a adição de novos casos de teste — exatamente para isso que ela foi projetada.
+
+**PRs relacionadas:** [#2363](https://github.com/hyperdxio/hyperdx/pull/2363) fix(log-parser): skip string inference when body parses as JSON with a level field
+
+
+ ## Melhorias no servidor MCP
+
+
+*Demo de [@brandon-pereira](https://github.com/brandon-pereira)*
+
+
+
+
+
+Várias melhorias no MCP foram lançadas esta semana: melhor categorização e pontuação de padrões de eventos, dicas de erro aprimoradas e limpeza dos helpers compartilhados. Os prefixos das ferramentas também foram renomeados de `hyperdx_` para `clickstack_` para corresponder ao nome do produto.
+
+**PRs relacionadas:** [#2337](https://github.com/hyperdxio/hyperdx/pull/2337) feat(mcp): melhorar a qualidade das ferramentas MCP — dicas de erro, helpers compartilhados, mensagens melhores, [#2396](https://github.com/hyperdxio/hyperdx/pull/2396) refactor(mcp): renomear os prefixos das ferramentas de hyperdx_ para clickstack_, [#2343](https://github.com/hyperdxio/hyperdx/pull/2343) feat(mcp): adicionar as ferramentas patch_dashboard, get_dashboard_tile e search_dashboards, [#2418](https://github.com/hyperdxio/hyperdx/pull/2418) fix(mcp): melhorar descrições de alias e exemplos para legendas de gráfico mais legíveis, [#2412](https://github.com/hyperdxio/hyperdx/pull/2412) refactor: simplificar a validação de ObjectId do MCP com helpers compartilhados e verificações em nível de schema
+
+
+ ## Nova paleta de cores para séries
+
+
+*Demo de [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Elizabet trabalhou na unificação da paleta de cores das visualizações de dados entre os temas do HyperDX e do ClickStack, em apoio ao trabalho de Alex no seletor de cores. Os dois temas tinham paletas separadas, com regras de exceção para cada um, o que tornava desnecessariamente complexa a definição do uso das cores. O objetivo era ter uma única paleta que funcionasse para ambos.
+
+Ela testou paletas padrão do setor (Tableau, Observable, IBM) usando uma ferramenta de simulação de visão de cores para verificar contraste e acessibilidade. A paleta do ClickHouse teve um desempenho ruim — o verde não tem contraste suficiente sobre fundo branco. Tanto a Tableau quanto a Observable falham em pelo menos uma verificação; a paleta da IBM passa em todas, mas tem apenas cinco cores, o que não é suficiente. A paleta da Observable foi a que chegou mais perto do ideal no geral, com um pequeno ajuste no azul, e agora será compartilhada entre os dois temas.
+
+**PRs relacionadas:** [#2362](https://github.com/hyperdxio/hyperdx/pull/2362) refactor(theme): rename chart palette tokens to hue names + unify across themes
+
+
+ ## Novo layout de página com cabeçalho fixo
+
+
+*Demo de [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Um novo par de componentes, PageHeader e PageLayout, foi adotado em todas as principais páginas: painéis, mapa de serviços, sessões do cliente, Kubernetes e o painel do ClickHouse. Agora, todas as páginas compartilham o mesmo espaçamento interno, a mesma linha divisória abaixo do cabeçalho e a mesma estrutura de título. Antes disso, as páginas eram inconsistentes — algumas tinham um título à esquerda com controles à direita, enquanto outras não tinham título algum.
+
+O comportamento fixo é ativado de forma opt-in por meio de uma prop. Tudo o que você passar para o slot sticky permanece fixo abaixo do cabeçalho enquanto a página é rolada; todo o restante rola normalmente. Se nada for passado, apenas os breadcrumbs ou as opções da página ficarão fixos automaticamente.
+
+**PRs relacionadas:** [#2282](https://github.com/hyperdxio/hyperdx/pull/2282) Adicionar PageHeader/PageLayout e migrar Sessions, [#2345](https://github.com/hyperdxio/hyperdx/pull/2345) Usar o título do PageHeader nas páginas de lista, [#2346](https://github.com/hyperdxio/hyperdx/pull/2346) Migrar Service Map para PageLayout, [#2347](https://github.com/hyperdxio/hyperdx/pull/2347) Migrar o painel do Kubernetes para PageLayout, [#2348](https://github.com/hyperdxio/hyperdx/pull/2348) Migrar o painel do ClickHouse para PageLayout, [#2364](https://github.com/hyperdxio/hyperdx/pull/2364) feat(dashboard): migrar para PageLayout com barra de ferramentas de consulta fixa, [#2394](https://github.com/hyperdxio/hyperdx/pull/2394) fix(PageHeader): manter o cabeçalho fixo abaixo das sobreposições do drawer
+
+
+ ## Novo seletor de fonte de dados e seleção de cores para séries
+
+
+*Demonstração de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Duas melhorias na UI feitas por Alex. O seletor de fonte de dados foi simplificado: agora, ao clicar nele, são exibidas apenas as fontes de dados disponíveis para seleção. Ações de gerenciamento, como visualizar o esquema ou criar uma nova fonte, foram movidas para um menu kebab separado. Isso separa a seleção da configuração — algo que já estava na lista de pendências havia algum tempo e que responde ao feedback da equipe.
+
+Os tiles de Number agora também têm um seletor de cores estático para que você possa atribuir uma cor específica a uma métrica. As regras de cores condicionais (ficar vermelho, verde ou amarelo com base em um valor de limiar ou em uma coluna) também estão em andamento. Quando a paleta unificada da Elizabet estiver pronta, ambos passarão a usar cores com nomes apropriados em vez dos rótulos atuais "cor 1, 2, 3", o que deve representar uma melhoria significativa para usuários que vêm de ferramentas como Grafana.
+
+**PRs relacionadas:** [#2365](https://github.com/hyperdxio/hyperdx/pull/2365) feat(source-picker): chip + UX do menu kebab, [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): seletor de cores estático do tile de Number
+
+
+ ## Indicações mais claras para ações do painel
+
+
+*Demonstração de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+As linhas do bloco de tabela do painel agora exibem um estado de hover mais útil. O cursor e o ícone mudam ao passar o mouse para indicar o que acontecerá ao clicar — seja abrir um painel vinculado ou detalhar uma fonte de dados. Antes dessa mudança, não era óbvio que as linhas eram clicáveis, muito menos o que aconteceria ao clicar nelas.
+
+**PRs relacionadas:** [#2321](https://github.com/hyperdxio/hyperdx/pull/2321) feat(app): indicação de hover e sinalização nativa de link para clique em linha do bloco de tabela do painel
\ No newline at end of file
diff --git a/pt-BR/clickstack/demo-days/2026/2026-06-05.mdx b/pt-BR/clickstack/demo-days/2026/2026-06-05.mdx
new file mode 100644
index 000000000..eb4b6ebce
--- /dev/null
+++ b/pt-BR/clickstack/demo-days/2026/2026-06-05.mdx
@@ -0,0 +1,142 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-06-05
+title: 'Demo days - 2026-06-05'
+sidebarTitle: '2026-06-05'
+description: 'ClickStack demo days de 2026-06-05'
+doc_type: 'guide'
+keywords: ['ClickStack', 'Demo days']
+---
+
+
+ ## Visualização dividida e visualização estendida do trace
+
+
+*Demo de [@karl-power](https://github.com/karl-power)*
+
+
+
+
+
+O painel de trace agora tem um modo de visualização dividida: à medida que você clica nos spans na linha do tempo, o painel de detalhes é atualizado diretamente à direita, em vez de ser aberto abaixo do span selecionado, como acontecia antes. Isso mantém toda a linha do tempo visível enquanto você analisa spans individuais.
+
+Você também pode expandir para uma visualização estendida do trace, com uma linha do tempo ocupando toda a largura e suporte a rolagem e zoom. Ambos os painéis podem ser abertos e fechados de forma independente, facilitando alternar entre uma visão geral de alto nível e uma inspeção detalhada de spans sem perder o contexto.
+
+**PRs relacionadas:** [#2402](https://github.com/hyperdxio/hyperdx/pull/2402) feat: trace panel inline split detail
+
+
+ ## Filtros obrigatórios no nível do source
+
+
+*Demo de [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+Agora, os sources podem declarar filtros obrigatórios que são exibidos automaticamente em qualquer dashboard que os utilize. Em vez de adicionar manualmente o mesmo filtro a cada dashboard que faz referência a um source, o ClickStack detecta essa exigência e promove o filtro para o nível do dashboard — com escopo apenas para os tiles que realmente usam esse source.
+
+Tiles individuais podem substituir o valor no nível do dashboard se precisarem de valores de filtro diferentes, e os filtros obrigatórios também aparecem na prévia do editor de gráficos para que você possa validar consultas sem precisar removê-los. Os filtros obrigatórios do source também se integram à macro de filtros SQL para gráficos baseados em SQL e, ao configurar links de dashboard para dashboard, o ClickStack os inclui automaticamente como candidatos para os parâmetros do link.
+
+
+ ## Ajustar o eixo Y aos dados
+
+
+*Demo de [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+Os gráficos de linhas contam com uma nova configuração de exibição: "Ajustar o eixo Y aos dados". Por padrão, o eixo Y fica ancorado em zero, o que comprime o intervalo visível quando os valores são altos, mas variam pouco — fazendo com que as tendências não fiquem perceptíveis de imediato.
+
+Com essa opção habilitada, o intervalo do eixo Y é calculado dinamicamente com base no intervalo real dos dados, para que as variações em séries com valores altos fiquem visíveis sem a necessidade de configurar manualmente os limites do eixo.
+
+**PRs relacionadas:** [#2417](https://github.com/hyperdxio/hyperdx/pull/2417) feat(charts): add 'Fit Y-Axis to Data' display setting for line charts
+
+
+ ## Alertas de anomalia
+
+
+*Demo com [@fleon](https://github.com/fleon)*
+
+
+
+
+
+Himanshu mostrou como estamos trabalhando em alertas baseados em anomalias usando detecção por Z-score. Em vez de um limiar fixo, você define quantos desvios padrão em relação à média esperada devem disparar um alerta. A janela de sazonalidade (por hora ou por dia) controla como a linha de base é calculada, e o editor de alertas destaca as janelas que teriam disparado para que você possa ajustar a sensibilidade antes de salvar.
+
+Isso resolve um problema comum com alertas por limiar: muitas vezes, os usuários não sabem qual valor numérico definir. Ver as possíveis janelas de alerta sendo atualizadas em tempo real à medida que você ajusta o Z-score torna prático encontrar um limiar que capture picos reais sem gerar ruído excessivo. Os alertas podem ser configurados para disparar apenas quando os valores excederem o intervalo esperado (e não quando ficarem abaixo dele), e uma configuração de ocorrências permite exigir que a condição se mantenha por vários pontos de dados consecutivos antes de disparar. Este é um trabalho em andamento; no momento, a linha de base é calculada como uma média móvel, e há suporte planejado para média móvel exponencial.
+
+
+ ## Configuração mais clara para API e agentes de IA
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+As configurações do ClickStack agora têm uma aba dedicada a API e agentes que centraliza as chaves de API e a configuração da conexão MCP. Botões com um clique para Claude, Cursor e OpenCode eliminam a necessidade de montar manualmente os comandos de conexão — o botão do Cursor, por exemplo, abre um terminal com o comando de instalação correto já preenchido. Usuários do OpenCode recebem um trecho de system prompt que pode ser copiado e colado diretamente. Uma opção genérica de configuração em JSON cobre outros clientes MCP.
+
+**PRs relacionados:** [#2407](https://github.com/hyperdxio/hyperdx/pull/2407) feat(team-settings): conecte seu assistente de IA
+
+
+ ## Seleção de cores para gráficos Number
+
+
+*Demo de [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Os tiles Number agora oferecem suporte tanto a um seletor de cores estático quanto a regras condicionais de cor. A paleta de gráficos foi atualizada com nomes de cores de fácil leitura — "azul" e "cinza" em vez de "color-1" e "color-10" —, facilitando muito entender o que está sendo selecionado.
+
+A coloração condicional permite definir regras de limiar ordenadas, como verde abaixo de um valor-alvo, âmbar em uma faixa de alerta e vermelho acima de um limiar crítico. Isso torna os tiles Number realmente úteis como indicadores de status em dashboards, especialmente para métricas como taxas de erro ou latência P99, quando você quer um retorno visual imediato sem precisar ler o número.
+
+**PRs relacionadas:** [#2386](https://github.com/hyperdxio/hyperdx/pull/2386) Regras condicionais de cor para tiles Number (limiares ordenados), [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): seletor de cor estático para tile Number
+
+
+ ## Migrações de esquema
+
+
+*Demonstração de [@wrn14897](https://github.com/wrn14897)*
+
+
+
+
+
+O ClickStack agora tem uma aba Schema Migrations nas configurações (enterprise) para fazer alterações DDL controladas e versionadas nos seus esquemas de dados. Você escreve uma migration, atribui um número de versão a ela, e um job em segundo plano a executa com lógica de retry e ordenação rigorosa — se uma migration falhar, migrations posteriores que dependem dela não serão executadas até que ela seja resolvida ou excluída.
+
+Esse modelo versionado também permite que o ClickHouse envie otimizações de esquema gerenciadas para equipes do ClickStack Cloud sem exigir trabalho manual com ALTER TABLE. As equipes podem revisar migrations pendentes e liberá-las no seu próprio ritmo. A fase um cobre mudanças aditivas; modificações de primary key estão planejadas para a fase dois.
+
+
+ ## Dashboards de RUM do navegador prontos para uso
+
+
+*Demo de [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+O ClickStack agora inclui um dashboard pré-configurado de RUM do navegador que cobre todo o conjunto de métricas de desempenho web. O dashboard inclui uma visão geral de desempenho com visualizações de página e tempo de carregamento P90, além de Web Vitals — LCP, INP e CLS — com limiares por faixa, para que você possa ver imediatamente se cada métrica está boa, precisa de melhorias ou está ruim.
+
+As seções adicionais cobrem visualizações de página ao longo do tempo, tarefas longas, detalhamento por dispositivo, páginas mais lentas, sessões com mais erros, taxas de erro de JavaScript e falhas de API. Ações personalizadas por linha permitem clicar em qualquer linha da tabela para detalhar os dados da sessão ou do trace correspondente. Os filtros no topo da página permitem segmentar por serviço, ambiente, versão do serviço e página. A filtragem por país está em andamento, aguardando melhorias no SDK do navegador para emitir dados geográficos.
+
+**PRs relacionadas:** [#2413](https://github.com/hyperdxio/hyperdx/pull/2413) feat: add Browser RUM template do dashboard
+
+
+ ## Filtros dependentes do dashboard
+
+
+*Demonstração por [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+Os filtros do dashboard agora podem depender uns dos outros, de modo que selecionar um valor em um filtro restringe automaticamente as opções disponíveis nos filtros seguintes. O dashboard do Kubernetes é o primeiro a usar isso: selecionar um pod do Kubernetes agora restringe as listas suspensas de implantação e nó apenas aos valores relevantes para esse pod do Kubernetes, em vez de mostrar todas as opções de todo o cluster.
+
+Isso significa que nunca será oferecida uma combinação de filtros que não retorne nenhum dado. O recurso já está disponível no Template do dashboard do Kubernetes.
\ No newline at end of file
diff --git a/pt-BR/clickstack/features/dashboards/row-click-drilldowns.mdx b/pt-BR/clickstack/features/dashboards/row-click-drilldowns.mdx
new file mode 100644
index 000000000..6370f56c2
--- /dev/null
+++ b/pt-BR/clickstack/features/dashboards/row-click-drilldowns.mdx
@@ -0,0 +1,160 @@
+---
+slug: /use-cases/observability/clickstack/dashboards/row-click-drilldowns
+title: 'Detalhamento ao clicar em uma linha da tabela'
+sidebarTitle: 'Detalhamento por clique na linha'
+description: 'Transforme um tile de tabela em um fluxo de inspeção: clique em uma linha para abrir um dashboard focado ou os logs e traces subjacentes, filtrados pela linha clicada'
+doc_type: 'guide'
+keywords: ['clickstack', 'dashboards', 'drilldown', 'table', 'row click', 'inspection', 'observability']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+Um tile de tabela costuma funcionar como um **catálogo**: uma linha por serviço, host, endpoint ou grupo de erro, com algumas colunas que atribuem uma pontuação a cada um. As ações de clique na linha transformam esse catálogo em um fluxo de inspeção. Você percorre o catálogo para encontrar a linha que importa, clica nela, e o ClickStack usa os valores da linha clicada como filtros. O destino então já é aberto com o escopo definido para aquele item, sem precisar recriar manualmente nenhuma consulta.
+
+Um clique pode levar a um de dois lugares:
+
+* **outro dashboard**, para uma visualização focada de um único item, como um dashboard de detalhes por serviço, ou
+* **os eventos subjacentes** em [Busca](/pt-BR/clickstack/features/search), para ver os logs ou traces por trás da linha.
+
+Ambos os casos de uso abaixo partem do mesmo catálogo (um inventário de serviços) e, a partir dele, aprofundam a análise em cada destino. As ações de clique na linha se aplicam apenas a tiles de tabela. Elas são diferentes do [drilldown para busca](/pt-BR/clickstack/features/dashboards/overview#drilldown-to-search) de um gráfico, que abre um menu de contexto quando você clica em um ponto de um gráfico de linha ou de barras.
+
+
+ ## Inspecione um serviço no seu próprio dashboard
+
+
+Uma tabela de visão geral com uma linha por serviço responde à pergunta "qual serviço está com problemas?". Clicar em uma linha pode abrir um dashboard específico do serviço que responde à pergunta "o que está acontecendo dentro dele?", restrito ao serviço em que você clicou. O padrão abaixo combina uma tabela de inventário de serviços com um dashboard `Service Detail`.
+
+
+
+ ### Crie o dashboard de detalhes
+
+ Crie um dashboard chamado `Service Detail` e adicione um [filtro personalizado](/pt-BR/clickstack/features/dashboards/overview#custom-filters) com a expressão `ServiceName` na sua source de traces. O filtro no nível do dashboard redefine o escopo de cada tile para um único serviço, para que os próprios tiles não fixem um serviço nas consultas. Adicione as visualizações por serviço que você quiser: indicadores RED principais (requisições, erros, duração P95), um gráfico de percentis de latência (P50, P95, P99), taxa de requisições ao longo do tempo e um detalhamento por endpoint agrupado por `SpanName`.
+
+ Salve esse dashboard primeiro para poder selecioná-lo como destino na próxima etapa.
+
+
+
+ ### Crie o inventário de serviços
+
+ Em um dashboard de visão geral, adicione um tile de **Table** na sua source de traces agrupado por `ServiceName`. Dê a ele as colunas RED que avaliam cada serviço, cada uma como uma série com alias:
+
+ * `Requests`: contagem de spans (taxa).
+ * `Errors`: contagem de spans com status de erro.
+ * `P95 Duration`: o percentil 95 de `Duration`. Defina o formato numérico da coluna como duração para que ela seja exibida como `288ms`, e não como nanossegundos brutos.
+
+ Ordene por `Requests` em ordem decrescente para que os serviços com mais tráfego apareçam no topo. Esta tabela é o catálogo: uma linha por serviço, avaliado por RED.
+
+
+
+
+ **Coloque a coluna de agrupamento primeiro**
+
+ Por padrão, uma tabela renderiza sua coluna de agrupamento (aqui `ServiceName`) à direita, depois da série. Um catálogo fica melhor quando a identidade de cada linha aparece primeiro. Abra as **Display Settings** do tile e ative **Display Group By Columns on Left** para mover a coluna de agrupamento para o início.
+
+
+
+
+ ### Configure o clique na linha
+
+ Na tabela de inventário, abra **Row Click Action**, selecione **Dashboard** e escolha `Service Detail` na lista de dashboards. Selecionar o dashboard diretamente o fixa pelo ID. O link continua funcionando se o dashboard for renomeado depois e continua válido após a exportação e importação do dashboard. (Reserve a opção **Template** para escolher um dashboard diferente por linha; veja [Configurar uma ação de clique na linha](#set-up).)
+
+ Como `Service Detail` declara um filtro personalizado `ServiceName`, o painel lateral pré-preenche um filtro vazio para essa expressão. Preencha o template:
+
+ * **Expression**: `ServiceName` (já preenchido)
+ * **Template**: `{{ServiceName}}`
+
+ Clique em **Apply** e salve. O serviço da linha clicada agora é passado para o filtro `ServiceName` do dashboard.
+
+
+
+ ### Clique em uma linha
+
+ Ao passar o mouse sobre uma linha, aparece um link na borda direita da tabela, com uma dica descrevendo a ação (`Open dashboard "Service Detail"`). Clicar na linha abre o dashboard `Service Detail` com o filtro `Service` definido com o valor clicado, para que cada tile (os indicadores RED principais, os percentis de latência, o detalhamento por endpoint) seja reescopado para aquele único serviço com um único clique.
+
+
+
+
+
+
+ ## Ir de um serviço para seus traces
+
+
+Às vezes, você não quer outra visão agregada; quer os eventos brutos. Uma ação de **Busca** envia o clique para a página [Busca](/pt-BR/clickstack/features/search) em vez de um dashboard, abrindo os logs ou traces por trás da linha, já filtrados para ela.
+
+Partindo da mesma tabela de inventário de serviços, direcione o clique da linha para os próprios traces em vez do dashboard de detalhes.
+
+
+
+ ### Direcione o clique da linha para a Busca
+
+ Na tabela de inventário, abra **Row Click Action** e selecione **Busca**. Escolha sua fonte de traces (apenas fontes de log e trace são listadas). Adicione um filtro:
+
+ * **Expressão**: `ServiceName`
+ * **Template**: `{{ServiceName}}`
+
+ Clique em **Aplicar** e salve.
+
+
+
+ ### Clique em uma linha
+
+ Ao clicar em uma linha de serviço, a página Busca agora é aberta nessa fonte de traces, filtrada por `ServiceName = `, para que você veja os spans apenas desse serviço no mesmo intervalo de tempo.
+
+
+
+
+
+A mesma estrutura funciona para qualquer catálogo de itens. Agrupe a tabela por uma operação (`SpanName`) ou por um atributo de endpoint em vez de `ServiceName`, use o filtro dessa coluna como template, e cada clique na linha abrirá os eventos daquela operação ou endpoint. Para um group-by em um atributo de map, veja a observação sobre alias em [Validação e limitações](#validation).
+
+
+ ## Configurar uma ação de clique na linha
+
+
+As ações de clique na linha são configuradas no próprio tile de tabela; não há uma página separada para isso. Adicione ou edite um tile e defina seu tipo de visualização como **Table**. Um botão **Row Click Action** aparecerá na barra de ferramentas do editor, ao lado de **Display Settings**. O botão é exibido apenas em tiles de tabela, e seu rótulo reflete a ação atual: `Row Click Action: Default`, `Row Click Action: Busca` ou `Row Click Action: Dashboard`. Clique nele para abrir o painel lateral.
+
+
+
+O painel lateral oferece três ações:
+
+* **Default**: o comportamento padrão integrado. Clicar em uma linha abre a página de Busca, filtrada pelos valores das colunas de group-by da linha e pelo intervalo de tempo selecionado. É isso que acontece quando nenhuma ação personalizada é definida.
+* **Busca**: envia o clique para a página de Busca de uma fonte à sua escolha.
+* **Dashboard**: envia o clique para outro dashboard da sua equipe.
+
+Para **Busca** e **Dashboard**, você escolhe para onde o clique vai e define os filtros levados com ele:
+
+* **Destination**: escolha uma fonte ou dashboard específico, ou escolha **Template** e insira um template [Handlebars](https://handlebarsjs.com/) cujo nome corresponda a uma fonte ou dashboard disponível. Escolher um destino específico o fixa por ID. Prefira isso para um único destino fixo: ele continua funcionando após renomeações e após exportar e importar dashboards e, no caso de um dashboard, preenche automaticamente os filtros declarados no destino. Use **Template** quando o destino precisar variar por linha, referenciando uma coluna da linha para defini-lo (por exemplo, `Errors-{{ServiceName}}`).
+* **Filters**: clique em **Add filter** e forneça uma **Expression** (uma coluna ou expressão no destino, por exemplo `ServiceName`) e um **Template** para o valor (por exemplo `{{ServiceName}}`). Os templates referenciam as colunas da linha clicada com `{{columnName}}` (veja a observação abaixo sobre quais colunas estão disponíveis). Cada filtro é renderizado como uma condição `expression IN (value)` no destino, e os filtros que compartilham uma mesma expressão são mesclados. Quando o destino é um dashboard, o painel lateral preenche automaticamente um filtro vazio para cada filtro já declarado nesse dashboard, então você só precisa preencher os templates.
+* **WHERE** (opcional): um template Handlebars renderizado no filtro global do destino, além das condições por filtro acima. Defina a linguagem de consulta dele como SQL ou Lucene para que o destino consiga analisá-lo. Por exemplo, o template SQL `ServiceName = '{{ServiceName}}'` restringe o destino ao serviço da linha clicada.
+
+
+ **Os templates referenciam as colunas da tabela**
+
+ Um template `{{...}}` é resolvido com base nas próprias colunas do tile de tabela: as colunas de group-by e cada série pelo nome ou alias, exatamente como aparecem na tabela. Ele não enxerga colunas da fonte subjacente que a tabela não seleciona. Para ser transportado no clique, um valor precisa ser uma coluna da tabela; portanto, `{{ServiceName}}` funciona porque `ServiceName` é a coluna de group-by da tabela, e uma coluna com alias é referenciada pelo próprio alias. Referenciar um nome que a tabela não possui faz o clique falhar com `Row has no column ''`.
+
+
+Clique em **Apply** para validar os templates (o ClickStack informará qualquer um deles com sintaxe inválida) e, em seguida, salve o dashboard para persistir a ação.
+
+
+ ## Como o destino e os filtros são resolvidos
+
+
+Quando um visualizador clica em uma linha, o ClickStack resolve a ação com base nessa linha:
+
+* **Destino.** Ao escolher uma fonte ou dashboard específico, ele é fixado pelo ID. Um destino **Template** é renderizado com base na linha clicada e depois comparado por nome com as fontes ou dashboards da sua equipe. O nome precisa ser único para que a resolução funcione: se duas fontes ou dois dashboards tiverem o mesmo nome renderizado, não será possível resolver o link para apenas um deles. Um nome renderizado vazio, ou um nome sem correspondência, também faz a resolução falhar.
+* **Filtros.** Cada template de filtro é renderizado com base na linha e se torna uma condição `expression IN (value)` no destino. Uma ação `Busca` abre `/search` no escopo da fonte escolhida; uma ação `Dashboard` abre esse dashboard. O intervalo de tempo da linha clicada é preservado em ambos os casos.
+
+
+ **Destinos de dashboard precisam de um filtro correspondente declarado**
+
+ Um filtro levado para um dashboard só entra em vigor se o dashboard de destino declarar um [filtro personalizado](/pt-BR/clickstack/features/dashboards/overview#custom-filters) de nível superior cuja expressão corresponda à **Expression** do filtro. Se nenhum filtro declarado corresponder, esse valor será descartado no momento do clique e o destino será aberto sem filtro para essa expressão. É por isso que o modo dashboard preenche previamente os filtros declarados do destino: faça a expressão corresponder, e o menu suspenso do destino será preenchido automaticamente com o valor da linha clicada.
+
+
+
diff --git a/pt-BR/integrations/clickpipes/navigation.json b/pt-BR/integrations/clickpipes/navigation.json
index 3d64542ee..487ed0b94 100644
--- a/pt-BR/integrations/clickpipes/navigation.json
+++ b/pt-BR/integrations/clickpipes/navigation.json
@@ -32,7 +32,6 @@
{
"group": "ClickPipes for Postgres",
"pages": [
- "pt-BR/integrations/clickpipes/postgres/index",
"pt-BR/integrations/clickpipes/postgres/deduplication",
"pt-BR/integrations/clickpipes/postgres/ordering-keys",
"pt-BR/integrations/clickpipes/postgres/toast",
@@ -72,7 +71,8 @@
"pt-BR/integrations/clickpipes/postgres/source/planetscale"
]
}
- ]
+ ],
+ "root": "pt-BR/integrations/clickpipes/postgres/index"
},
{
"group": "ClickPipes for Kafka",
@@ -89,22 +89,21 @@
"group": "ClickPipes for Kinesis",
"pages": [
"pt-BR/integrations/clickpipes/kinesis/overview",
- "pt-BR/integrations/clickpipes/kinesis/index",
"pt-BR/integrations/clickpipes/kinesis/auth"
- ]
+ ],
+ "root": "pt-BR/integrations/clickpipes/kinesis/index"
},
{
"group": "ClickPipes for GCP Pub/Sub",
"pages": [
"pt-BR/integrations/clickpipes/pubsub/overview",
- "pt-BR/integrations/clickpipes/pubsub/index",
"pt-BR/integrations/clickpipes/pubsub/auth"
- ]
+ ],
+ "root": "pt-BR/integrations/clickpipes/pubsub/index"
},
{
"group": "ClickPipes for MySQL",
"pages": [
- "pt-BR/integrations/clickpipes/mysql/index",
"pt-BR/integrations/clickpipes/mysql/faq",
"pt-BR/integrations/clickpipes/mysql/datatypes",
"pt-BR/integrations/clickpipes/mysql/parallel-initial-load",
@@ -134,12 +133,12 @@
"pt-BR/integrations/clickpipes/mysql/source/generic-maria"
]
}
- ]
+ ],
+ "root": "pt-BR/integrations/clickpipes/mysql/index"
},
{
"group": "ClickPipes for MongoDB",
"pages": [
- "pt-BR/integrations/clickpipes/mongodb/index",
"pt-BR/integrations/clickpipes/mongodb/datatypes",
"pt-BR/integrations/clickpipes/mongodb/quickstart",
"pt-BR/integrations/clickpipes/mongodb/lifecycle",
@@ -164,7 +163,8 @@
"pt-BR/integrations/clickpipes/mongodb/source/documentdb"
]
}
- ]
+ ],
+ "root": "pt-BR/integrations/clickpipes/mongodb/index"
},
{
"group": "ClickPipes for BigQuery",
diff --git a/pt-BR/integrations/connectors/navigation.json b/pt-BR/integrations/connectors/navigation.json
index f476eae79..4e19bc740 100644
--- a/pt-BR/integrations/connectors/navigation.json
+++ b/pt-BR/integrations/connectors/navigation.json
@@ -17,7 +17,6 @@
"expanded": false,
"group": "Kafka",
"pages": [
- "pt-BR/integrations/connectors/data-ingestion/kafka/index",
"pt-BR/integrations/connectors/data-ingestion/kafka/kafka-clickhouse-connect-sink",
"pt-BR/integrations/connectors/data-ingestion/kafka/confluent/confluent-cloud",
"pt-BR/integrations/connectors/data-ingestion/kafka/confluent/custom-connector",
@@ -28,7 +27,8 @@
"pt-BR/integrations/connectors/data-ingestion/kafka/confluent/kafka-connect-http",
"pt-BR/integrations/connectors/data-ingestion/kafka/kafka-connect-jdbc",
"pt-BR/integrations/connectors/data-ingestion/kafka/kafka-table-engine-named-collections"
- ]
+ ],
+ "root": "pt-BR/integrations/connectors/data-ingestion/kafka/index"
},
"pt-BR/integrations/connectors/data-sources/mysql",
"pt-BR/integrations/connectors/data-sources/cassandra",
@@ -49,10 +49,10 @@
"expanded": false,
"group": "Grafana",
"pages": [
- "pt-BR/integrations/connectors/data-visualization/grafana/index",
"pt-BR/integrations/connectors/data-visualization/grafana/query-builder",
"pt-BR/integrations/connectors/data-visualization/grafana/config"
- ]
+ ],
+ "root": "pt-BR/integrations/connectors/data-visualization/grafana/index"
},
"pt-BR/integrations/connectors/data-visualization/lightdash-and-clickhouse",
"pt-BR/integrations/connectors/data-visualization/looker-and-clickhouse",
@@ -108,11 +108,11 @@
"expanded": false,
"group": "Apache Spark",
"pages": [
- "pt-BR/integrations/connectors/data-ingestion/apache-spark/index",
"pt-BR/integrations/connectors/data-ingestion/apache-spark/spark-native-connector",
"pt-BR/integrations/connectors/data-ingestion/apache-spark/databricks",
"pt-BR/integrations/connectors/data-ingestion/apache-spark/spark-jdbc"
- ]
+ ],
+ "root": "pt-BR/integrations/connectors/data-ingestion/apache-spark/index"
},
"pt-BR/integrations/connectors/data-ingestion/apache-flink",
"pt-BR/integrations/connectors/data-ingestion/AWS/glue",
@@ -120,11 +120,11 @@
"expanded": false,
"group": "Azure Data Factory",
"pages": [
- "pt-BR/integrations/connectors/data-ingestion/azure/azure-data-factory/index",
"pt-BR/integrations/connectors/data-ingestion/azure/azure-data-factory/overview",
"pt-BR/integrations/connectors/data-ingestion/azure/azure-data-factory/using-azureblobstorage",
"pt-BR/integrations/connectors/data-ingestion/azure/azure-data-factory/using-http-interface"
- ]
+ ],
+ "root": "pt-BR/integrations/connectors/data-ingestion/azure/azure-data-factory/index"
},
"pt-BR/integrations/connectors/data-ingestion/azure/azure-synapse",
"pt-BR/integrations/connectors/data-ingestion/etl-tools/apache-beam",
@@ -150,12 +150,12 @@
"expanded": false,
"group": "dbt",
"pages": [
- "pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/index",
"pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/features-and-configurations",
"pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/materializations",
"pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/materialization-materialized-view",
"pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/guides"
- ]
+ ],
+ "root": "pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/index"
},
"pt-BR/integrations/connectors/data-ingestion/etl-tools/dlt-and-clickhouse",
{
diff --git a/pt-BR/integrations/language-clients/navigation.json b/pt-BR/integrations/language-clients/navigation.json
index 9b8423f2e..281b57114 100644
--- a/pt-BR/integrations/language-clients/navigation.json
+++ b/pt-BR/integrations/language-clients/navigation.json
@@ -40,7 +40,7 @@
"group": "C",
"icon": "/images/integrations/logos/logo_c.svg",
"pages": [],
- "root": "pt-BR/integrations/language-clients/c.mdx"
+ "root": "pt-BR/integrations/language-clients/c"
},
{
"group": "Third-party clients",
diff --git a/pt-BR/integrations/language-clients/python/navigation.json b/pt-BR/integrations/language-clients/python/navigation.json
index e7f85b35d..fffc1d11a 100644
--- a/pt-BR/integrations/language-clients/python/navigation.json
+++ b/pt-BR/integrations/language-clients/python/navigation.json
@@ -3,12 +3,12 @@
"group": "Python",
"icon": "/images/integrations/logos/notext-python.svg",
"pages": [
- "pt-BR/integrations/language-clients/python/index",
"pt-BR/integrations/language-clients/python/driver-api",
"pt-BR/integrations/language-clients/python/additional-options",
"pt-BR/integrations/language-clients/python/advanced-querying",
"pt-BR/integrations/language-clients/python/advanced-inserting",
"pt-BR/integrations/language-clients/python/advanced-usage",
"pt-BR/integrations/language-clients/python/sqlalchemy"
- ]
+ ],
+ "root": "pt-BR/integrations/language-clients/python/index"
}
\ No newline at end of file
diff --git a/pt-BR/products/chdb/navigation.json b/pt-BR/products/chdb/navigation.json
index 15fc97e05..7b3163720 100644
--- a/pt-BR/products/chdb/navigation.json
+++ b/pt-BR/products/chdb/navigation.json
@@ -3,9 +3,9 @@
{
"group": "Get started",
"pages": [
- "pt-BR/products/chdb/index",
"pt-BR/products/chdb/getting-started"
- ]
+ ],
+ "root": "pt-BR/products/chdb/index"
},
{
"group": "Language integrations",
@@ -22,7 +22,6 @@
{
"group": "DataStore",
"pages": [
- "pt-BR/products/chdb/datastore/index",
"pt-BR/products/chdb/datastore/quickstart",
"pt-BR/products/chdb/datastore/factory-methods",
"pt-BR/products/chdb/datastore/query-building",
@@ -32,25 +31,26 @@
"pt-BR/products/chdb/datastore/execution-model",
"pt-BR/products/chdb/datastore/pandas-compat",
"pt-BR/products/chdb/datastore/class-reference"
- ]
+ ],
+ "root": "pt-BR/products/chdb/datastore/index"
},
{
"group": "Configuration",
"pages": [
- "pt-BR/products/chdb/configuration/index",
"pt-BR/products/chdb/configuration/execution-engine",
"pt-BR/products/chdb/configuration/function-config",
"pt-BR/products/chdb/configuration/performance-mode"
- ]
+ ],
+ "root": "pt-BR/products/chdb/configuration/index"
},
{
"group": "Debugging",
"pages": [
- "pt-BR/products/chdb/debugging/index",
"pt-BR/products/chdb/debugging/explain",
"pt-BR/products/chdb/debugging/logging",
"pt-BR/products/chdb/debugging/profiling"
- ]
+ ],
+ "root": "pt-BR/products/chdb/debugging/index"
},
{
"group": "Developer guides",
diff --git a/pt-BR/products/cloud/guides/security/cloud-access-management/scim-setup.mdx b/pt-BR/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
new file mode 100644
index 000000000..5a720260e
--- /dev/null
+++ b/pt-BR/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
@@ -0,0 +1,334 @@
+---
+sidebarTitle: 'Provisionamento SCIM com Okta'
+slug: /cloud/security/scim-setup
+title: 'Provisionamento SCIM com Okta'
+description: 'Como configurar o provisionamento SCIM entre Okta e ClickHouse Cloud'
+doc_type: 'guide'
+keywords: ['ClickHouse Cloud', 'SCIM', 'provisionamento', 'Okta', 'SSO', 'SAML', 'provedor de identidade', 'IdP', 'gerenciamento de usuários']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+import EnterprisePlanFeatureBadge from "/snippets/components/EnterprisePlanFeatureBadge/EnterprisePlanFeatureBadge.jsx";
+import PrivatePreviewBadge from "/snippets/components/PrivatePreviewBadge/PrivatePreviewBadge.jsx";
+
+
+
+
+ O provisionamento SCIM está em prévia privada.
+
+
+
+
+O ClickHouse Cloud oferece suporte a SCIM 2.0 (System for Cross-domain Identity Management) para automatizar o gerenciamento do ciclo de vida de usuários e grupos. Depois de se conectar ao seu provedor de identidade, cada usuário que você atribuir ao aplicativo ClickHouse Cloud é criado automaticamente na sua organização com a função correta, as atualizações de perfil são propagadas automaticamente e, ao remover um usuário do seu IdP, o acesso dele é revogado — sem convites manuais, sem contas órfãs.
+
+Este guia mostra como configurar o provisionamento SCIM de ponta a ponta com o **Okta**. O endpoint SCIM do ClickHouse Cloud segue o SCIM 2.0 (RFC 7644), mas a autenticação só tem suporte via Basic Auth, e o Okta é o único provedor de identidade com o qual testamos. Outros IdPs SCIM 2.0 podem funcionar se conseguirem se autenticar usando Basic Auth, mas no momento não têm suporte oficial.
+
+
+ ## Antes de começar
+
+
+Você precisará de:
+
+* A função **Admin** na sua organização do ClickHouse Cloud.
+* [SAML SSO](/pt-BR/cloud/security/saml-setup) já configurado entre seu IdP e o ClickHouse Cloud. O SCIM cria as contas de usuário; essas contas fazem login por SAML, então o SSO precisa estar funcionando antes.
+* Acesso de superadministrador ao seu tenant do Okta, com permissão para instalar aplicativos e configurar o provisionamento.
+* Uma lista das funções que você quer atribuir por meio do SCIM (por exemplo: Admins, Developers, Read-only). Defina isso com antecedência — você criará grupos correspondentes no Okta.
+
+
+ ## Como o SCIM funciona com o ClickHouse Cloud
+
+
+1. Um administrador no Okta atribui um usuário — diretamente ou por meio de um grupo — ao aplicativo ClickHouse Cloud.
+2. O Okta faz uma chamada ao endpoint SCIM do ClickHouse Cloud via HTTPS, autenticada com um token gerado por você.
+3. O ClickHouse Cloud cria o usuário na sua organização e atribui roles com base na associação a grupos no Okta.
+4. O usuário acessa o ClickHouse Cloud por meio do seu fluxo SAML SSO existente.
+5. Alterações de profile, mudanças de grupo e desativação no Okta são propagadas automaticamente para o ClickHouse Cloud.
+
+
+ ## Configure o SCIM na sua organização do ClickHouse Cloud
+
+
+
+
+ ### Ative o SCIM
+
+ Faça login no **ClickHouse Cloud Console** como administrador da organização e abra **Organization settings → SAML and SCIM settings → SCIM Configuration**.
+
+
+
+ Clique em `Enable SCIM`. O SCIM é liberado assim que o SAML SSO é conectado — se a opção estiver desabilitada, conclua primeiro a configuração do SAML.
+
+
+
+ Uma **URL do endpoint do SCIM** é gerada, no formato:
+
+ ```plaintext
+ https://api.clickhouse.cloud/v1/organizations//scim
+ ```
+
+ Copie-a — você vai colá-la no Okta depois.
+
+
+
+ ### Gere um token de acesso do SCIM
+
+ Localize a seção `Create an API key` e escolha uma data de expiração.
+
+
+ **Planeje a rotação.** Recomendamos definir uma expiração de 12 meses e adicionar um lembrete no calendário. O ClickHouse Cloud oferece suporte a até dois tokens SCIM ativos ao mesmo tempo, para que você possa fazer a rotação sem interrupção: gere o novo token, atualize o Okta para usá-lo, confirme que o provisionamento continua funcionando e então revogue o token antigo.
+
+
+ Clique em `Generate key`. O token é exibido **uma única vez**, como uma chave (com prefixo `scim_`) e um segredo. Copie ambos imediatamente e armazene-os em um gerenciador de segredos seguro — eles não poderão ser recuperados depois. Se você os perder, revogue o token e gere um novo.
+
+
+
+
+
+ ### Defina o mapeamento de função
+
+ No painel SCIM Configuration, clique em **Map roles in "Users and roles"** (ou navegue diretamente por **Users and roles → Roles**).
+
+ Os grupos do SCIM são associados às funções do ClickHouse Cloud pelo nome, com algumas regras importantes:
+
+ * **Você não pode mapear um grupo SCIM para uma função predefinida do sistema.** Os mapeamentos do SCIM se aplicam apenas a funções personalizadas. Se você precisar expor uma capacidade em nível de sistema por meio do SCIM, crie uma função personalizada que reúna as permissões desejadas.
+ * **Nomes correspondentes são vinculados automaticamente.** Se uma função personalizada tiver o mesmo nome do grupo SCIM recebido, o ClickHouse Cloud fará a vinculação automaticamente — não é necessário mapeamento manual.
+ * **Para usar um nome de função diferente do nome do grupo**, crie a função personalizada com o nome desejado e, em seguida, defina o campo **SCIM group** com o nome do grupo SCIM ao qual ela deve se associar.
+ * **Grupos não mapeados criam novas funções.** Se o Okta enviar um grupo que não corresponda ao nome de uma função existente e não seja referenciado pelo campo `SCIM group` de nenhuma função, o ClickHouse Cloud criará uma nova função personalizada com o nome desse grupo. Depois, você poderá conceder a ela as permissões desejadas.
+
+
+
+
+ ## Configure o aplicativo ClickHouse Cloud no Okta
+
+
+
+
+ ### Abra o aplicativo do ClickHouse Cloud no Okta
+
+ No **Okta Admin Console**, vá para **Applications → Applications** e procure o aplicativo que você criou ao configurar o SAML SSO para o ClickHouse Cloud. Abra-o.
+
+ Se você ainda não criou o aplicativo SAML, siga primeiro o [guia de configuração do SAML SSO](/pt-BR/cloud/security/saml-setup) — o provisionamento SCIM é configurado no mesmo aplicativo.
+
+ Na guia **General**, localize a seção **App Settings** e clique em `Edit`. Em **Provisioning**, selecione `SCIM` e clique em `Save`.
+
+
+
+ O aplicativo agora exibe uma guia **Provisioning**.
+
+
+
+
+
+ ### Conecte o Okta ao endpoint SCIM
+
+ Abra a aba **Provisioning** do aplicativo e clique em `Edit`. Preencha o formulário:
+
+ * **URL base do conector SCIM** — a URL do endpoint SCIM mencionada anteriormente.
+ * **Campo de identificador exclusivo para usuários** — `userName`.
+ * **Ações de provisionamento compatíveis** — selecione todas as opções a seguir:
+ * Importar novos usuários e atualizações de perfil
+ * Enviar novos usuários
+ * Enviar atualizações de perfil
+ * Enviar grupos
+ * Importar grupos
+ * **Modo de autenticação** — `Basic Auth`.
+ * **Nome de usuário** — a **chave** do token SCIM (ela começa com `scim_`).
+ * **Senha** — o **segredo** do token SCIM.
+
+
+
+
+
+ Clique em `Test Connector Configuration`. Você deverá ver uma confirmação em verde. Se falhar, vá para [Solução de problemas](#troubleshooting).
+
+
+
+ Clique em `Save`.
+
+
+
+ ### Configurar o comportamento do Provisioning
+
+ Ainda na aba **Provisioning**, clique em `To App` na barra lateral esquerda. Clique em `Edit` e ative:
+
+ | Configuração | Ação | O que faz |
+ | ------------------------------ | --------- | -------------------------------------------------------------------------------------------------- |
+ | Criar usuários | Ativar | Cria novos usuários no ClickHouse Cloud quando eles são atribuídos no Okta |
+ | Atualizar atributos do usuário | Ativar | Envia automaticamente alterações de perfil (nome, e-mail etc.) |
+ | Desativar usuários | Ativar | Remove um usuário do ClickHouse Cloud quando sua atribuição é removida ou ele é desativado no Okta |
+ | Sincronizar senha | Desativar | Não é usado — o login é feito via SAML, não por senha |
+
+
+
+ Clique em `Save` e, em seguida, volte para as abas **Sign On** / **Provisioning** do aplicativo para confirmar que as configurações foram aplicadas.
+
+
+
+
+
+ ### Mapear atributos do usuário
+
+ O Okta e o ClickHouse Cloud precisam estar alinhados sobre como os campos do usuário são mapeados. Na aba **Provisioning**, clique em `To App` e revise os **Attribute Mappings** da sua aplicação. Os padrões da aplicação SAML do Okta geralmente são suficientes — confira a tabela abaixo:
+
+ | atributo do Okta | atributo do ClickHouse Cloud (SCIM) | Obrigatório |
+ | ----------------- | ----------------------------------- | ----------------------------------------------------------- |
+ | `userName` | `userName` | **Sim** — usado como identificador único e e-mail principal |
+ | `email` (primary) | `emails[primary].value` | **Sim** — deve corresponder a `userName` |
+ | `firstName` | `name.givenName` | Recomendado |
+ | `lastName` | `name.familyName` | Recomendado |
+ | `displayName` | `displayName` | Recomendado — exibido na UI do ClickHouse Cloud |
+ | `externalId` | `externalId` | Recomendado — melhora a precisão durante a reconciliação |
+
+ Você pode adicionar atributos opcionais, como departamento, gerente e localidade — o ClickHouse Cloud os armazena no perfil do usuário, mas atualmente não os usa para permissões. Tudo o que estiver fora do conjunto padrão do SCIM é ignorado pelo ClickHouse Cloud.
+
+
+ **Maiúsculas e minúsculas no e-mail importam.** Certifique-se de que `userName` e `email` no Okta usem a mesma capitalização. O ClickHouse Cloud normaliza os e-mails para minúsculas; divergências entre os dois campos podem causar falhas nos testes.
+
+
+
+
+ ### Enviar grupos e atribuir usuários
+
+ É aqui que as funções são aplicadas automaticamente.
+
+ **Crie grupos no Okta.** Para cada mapeamento de função que você configurou anteriormente, crie ou identifique um grupo no Okta com o **mesmo nome de exibição exato**. Por exemplo, se o seu mapeamento diz `ClickHouse-Admins → Admin`, crie um grupo chamado `ClickHouse-Admins` no Okta.
+
+
+
+ Abra o grupo que você acabou de criar e clique em `Assign people` para adicionar um membro.
+
+
+
+
+
+ Em seguida, associe o aplicativo SCIM ao mesmo grupo para que a associação à função e o acesso ao aplicativo permaneçam sincronizados.
+
+
+
+ **Envie os grupos.** Na guia **Provisioning** do aplicativo, clique em `Push Groups → Find groups by name`, procure seu grupo e clique em `Save`. Repita o processo para cada grupo de função. Cada um deverá exibir **Push Status** como **Active (Pushed)** depois de provisionado.
+
+
+
+ **Atribua usuários.** Você tem duas opções:
+
+ * **Via grupos (recomendado).** Adicione usuários aos grupos do Okta que você acabou de enviar. Eles serão provisionados no ClickHouse Cloud e receberão automaticamente a função correspondente.
+ * **Diretamente.** Na guia **Assignments** do aplicativo, clique em `Assign → Assign to People` e selecione usuários individuais. Eles serão provisionados com a **função padrão**, a menos que também estejam em um grupo enviado.
+
+ A atribuição baseada em grupos é mais adequada para o gerenciamento contínuo — quando a função de alguém muda, basta atualizar a associação ao grupo.
+
+
+
+
+ ## Teste a integração
+
+
+Depois que o Provisioning estiver configurado, volte para **Configurações → Usuários e funções** no Console do ClickHouse Cloud para confirmar que os usuários sincronizados apareceram com as funções esperadas.
+
+
+
+Siga este breve plano de teste com um ou dois usuários de teste **antes** de atribuir o acesso à equipe inteira. Cada etapa deve ser concluída em poucos segundos; se isso não acontecer, verifique a fila de tarefas do Okta e a seção de [Solução de problemas](#troubleshooting).
+
+| # | Ação no Okta | Resultado esperado no ClickHouse Cloud |
+| - | -------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| 1 | Adicione um usuário de teste ao grupo do Okta `ClickHouse-Admins` | O usuário aparece em **Configurações → Membros** com a função **Admin** |
+| 2 | O usuário de teste faz login no ClickHouse Cloud via SSO | Ele acessa o dashboard com acesso de administrador |
+| 3 | Atualize o primeiro nome do usuário no Okta | O nome atualizado aparece em **Membros** em segundos |
+| 4 | Mova o usuário de `ClickHouse-Admins` para `ClickHouse-Read-only` | A função dele muda para **Somente leitura** |
+| 5 | Remova a atribuição do usuário ao aplicativo (ou desative-o no Okta) | O usuário é removido da organização; novas tentativas de login falham |
+
+Se alguma etapa falhar, corrija o problema subjacente antes de continuar — os sintomas normalmente se acumulam.
+
+
+ **Onde procurar erros de SCIM no Okta.** Os erros de SCIM aparecem em **Relatórios → Log do sistema**, filtrados pelo seu aplicativo, e na tela **Provisioning → View Logs** do aplicativo. A mensagem de erro retornada pelo ClickHouse Cloud é exibida exatamente como foi retornada — comece por ela.
+
+
+
+ ## Boas práticas para produção
+
+
+**Faça a rotação dos tokens regularmente.** Defina um lembrete no calendário para a rotação do token SCIM. Cadência recomendada: a cada 12 meses ou imediatamente sempre que um administrador que conhecia o token sair da empresa. O ClickHouse Cloud permite dois tokens ativos por organização justamente para que você possa fazer a rotação sem interromper o provisionamento.
+
+**Use grupos, não atribuições diretas.** A atribuição direta de usuários ao aplicativo funciona, mas rapidamente fica difícil de auditar. Fazer a atribuição por meio de grupos do Okta significa que as revisões de acesso e as mudanças de função acontecem em um só lugar.
+
+**Revise o log de auditoria.** Toda ação do SCIM — usuário criado, usuário desativado, perfil atualizado — é registrada no log de auditoria do ClickHouse Cloud. Consulte [Audit logging](/pt-BR/cloud/security/audit-logging). Verifique o log periodicamente, especialmente após grandes ondas de provisionamento.
+
+**Defina uma função padrão adequada.** Se um usuário do Okta for atribuído ao aplicativo, mas não estiver em nenhum grupo sincronizado, ele será criado com a **Função padrão**. Escolha a função mais restritiva que ainda permita que o usuário faça *alguma coisa*, para que erros de configuração falhem de forma segura.
+
+**Evite usar SCIM e convites manuais ao mesmo tempo.** Depois que o SCIM estiver ativado, gerencie a associação pelo Okta — não envie também convites manuais para os mesmos usuários. Misturar os dois caminhos gera confusão sobre qual é a fonte oficial e pode produzir duplicatas.
+
+**Monitore tarefas de provisionamento com falha.** O Okta tenta novamente chamadas de provisionamento com falha, mas acaba movendo-as para a fila **Tasks**. Adicione essa fila aos dashboards que sua equipe de TI já monitora ou use o webhook do Okta ou alertas por e-mail para sinalizar falhas persistentes.
+
+
+ ## Solução de problemas
+
+
+
+ ### "Test connector configuration" falha no Okta
+
+
+* Confirme se o SCIM está **habilitado** no Console do ClickHouse Cloud.
+* Confirme se a **URL base** no Okta corresponde exatamente ao URL do endpoint SCIM exibido no Console do ClickHouse Cloud — o ID da organização deve estar correto.
+* Confirme se a **chave e o segredo do token** foram colados sem espaços em branco no início ou no fim.
+* Se você rotacionou os tokens, certifique-se de que está usando a **nova** chave e o novo segredo, não o par anterior.
+
+
+ ### Os usuários são criados, mas não têm permissões
+
+
+* Verifique se você adicionou uma linha em **Map roles in "Users and roles"** para a role esperada.
+* Verifique se o nome do grupo no Okta corresponde **exatamente** ao nome do grupo SCIM no mapeamento, incluindo maiúsculas/minúsculas e hífens.
+* Se a sua configuração provisiona intencionalmente alguns usuários sem grupo, confirme se a **Default role** está definida.
+
+
+ ### Usuário duplicado na lista de membros
+
+
+Geralmente isso é causado por inconsistência no uso de maiúsculas e minúsculas no e-mail entre o Okta e um convite manual anterior. Remova o usuário duplicado da lista de Membros e, em seguida, cancele a atribuição e atribua novamente o usuário no Okta para provisioná-lo do zero.
+
+
+ ### O envio do grupo falha com "displayName not recognised"
+
+
+O nome do grupo no Okta não corresponde a um mapeamento configurado no ClickHouse Cloud. Renomeie o grupo no Okta ou adicione um mapeamento em **Mapear funções em "Users and roles"** no painel de Configuração SCIM (ou em **Users and roles → Roles**).
+
+
+ ### Usuários desativados ainda aparecem como membros
+
+
+O Okta pode levar até um minuto para processar a desativação. Se o usuário ainda aparecer como membro após vários minutos, verifique em **Provisioning → View Logs** no Okta se há algum erro na tarefa de desativação.
+
+
+ ### Fiz a rotação do token SCIM e agora o Okta está falhando
+
+
+Verifique se você atualizou as credenciais no **mesmo aplicativo SCIM** no Okta. Após a atualização, clique em `Test Connector Configuration` para confirmar. Quando o Provisioning voltar a ficar verde, revogue o token antigo no ClickHouse Cloud Console.
+
+
+ ### Perdi o token do SCIM
+
+
+Não é possível recuperar tokens. No ClickHouse Cloud Console, em **Configurações da organização → Configurações de SAML e SCIM → Configuração do SCIM**, revogue o token perdido e gere um novo. Em seguida, atualize as credenciais no Okta.
+
+
+ ## Perguntas frequentes
+
+
+**Preciso de SAML SSO para poder usar o SCIM?**
+Sim. O SCIM cria as contas de usuário, mas o ClickHouse Cloud faz a autenticação delas por meio do SAML. Configure primeiro o [SAML SSO](/pt-BR/cloud/security/saml-setup).
+
+**O SCIM funciona com Microsoft Entra ID, OneLogin ou outros IdPs SCIM 2.0?**
+Oficialmente, não — o Okta é o único IdP que testamos e ao qual damos suporte hoje. O endpoint segue o SCIM 2.0 (RFC 7644), mas a autenticação é restrita a Basic Auth, então qualquer IdP que não consiga se autenticar via Basic Auth não funcionará. Outros IdPs SCIM 2.0 compatíveis com Basic Auth podem funcionar na prática, mas não oferecemos nenhuma garantia.
+
+**Em quanto tempo as alterações no Okta aparecem no ClickHouse Cloud?**
+A maioria das operações é propagada em poucos segundos. Alterações em massa (envio de grupos grandes) podem levar mais tempo, dependendo do tamanho, mas o Okta tenta novamente automaticamente em caso de erros transitórios.
+
+**Posso provisionar várias organizações do ClickHouse Cloud a partir de um único tenant do Okta?**
+Sim — instale o aplicativo uma vez por organização, cada uma com seu próprio endpoint URL do SCIM e token. Envie os mesmos grupos do Okta para cada aplicativo, conforme necessário.
+
+**Onde obtenho ajuda se não conseguir avançar?**
+Abra um ticket de suporte no ClickHouse Cloud Console (**Help → Contact support**) e inclua:
+
+* o ID da sua organização,
+* o ID do seu aplicativo no Okta, e
+* uma captura de tela da task ou do teste que falhou nos logs do Okta.
\ No newline at end of file
diff --git a/pt-BR/products/cloud/navigation.json b/pt-BR/products/cloud/navigation.json
index 34d2e137a..0e9211b82 100644
--- a/pt-BR/products/cloud/navigation.json
+++ b/pt-BR/products/cloud/navigation.json
@@ -98,7 +98,6 @@
"expanded": false,
"group": "AI/ML",
"pages": [
- "pt-BR/products/cloud/features/ai-ml/index",
"pt-BR/products/cloud/features/ai-ml/ask-ai",
"pt-BR/products/cloud/features/ai-ml/aichat/using-ai-chat",
"pt-BR/products/cloud/features/ai-ml/aichat/customizing-semantic-layer",
@@ -108,13 +107,11 @@
{
"group": "ClickHouse Agents",
"pages": [
- "pt-BR/products/cloud/features/ai-ml/agents/index",
"pt-BR/products/cloud/features/ai-ml/agents/quickstart",
"pt-BR/products/cloud/features/ai-ml/agents/chat",
{
"group": "Agent Builder",
"pages": [
- "pt-BR/products/cloud/features/ai-ml/agents/builder/index",
"pt-BR/products/cloud/features/ai-ml/agents/builder/model-parameters",
"pt-BR/products/cloud/features/ai-ml/agents/builder/code-interpreter",
"pt-BR/products/cloud/features/ai-ml/agents/builder/web-search",
@@ -123,16 +120,19 @@
"pt-BR/products/cloud/features/ai-ml/agents/builder/mcp-servers",
"pt-BR/products/cloud/features/ai-ml/agents/builder/skills",
"pt-BR/products/cloud/features/ai-ml/agents/builder/subagents"
- ]
+ ],
+ "root": "pt-BR/products/cloud/features/ai-ml/agents/builder/index"
},
"pt-BR/products/cloud/features/ai-ml/agents/prompts",
"pt-BR/products/cloud/features/ai-ml/agents/memory",
"pt-BR/products/cloud/features/ai-ml/agents/marketplace",
"pt-BR/products/cloud/features/ai-ml/agents/sharing-and-access"
- ]
+ ],
+ "root": "pt-BR/products/cloud/features/ai-ml/agents/index"
},
"pt-BR/products/cloud/features/ai-ml/model-developer-terms"
- ]
+ ],
+ "root": "pt-BR/products/cloud/features/ai-ml/index"
}
]
},
@@ -281,6 +281,7 @@
"pt-BR/products/cloud/guides/security/cloud-access-management/manage-sql-console-role-assignments",
"pt-BR/products/cloud/guides/security/cloud-access-management/manage-database-users",
"pt-BR/products/cloud/guides/security/cloud-access-management/saml-sso-setup",
+ "pt-BR/products/cloud/guides/security/cloud-access-management/scim-setup",
"pt-BR/products/cloud/guides/security/cloud-access-management/common-access-management-queries",
"pt-BR/products/cloud/guides/security/cloud-access-management/manage-database-service-accounts",
"pt-BR/products/cloud/guides/security/saml-sso-removal"
diff --git a/pt-BR/reference/navigation.json b/pt-BR/reference/navigation.json
index 87764b8bd..f1cc67b5c 100644
--- a/pt-BR/reference/navigation.json
+++ b/pt-BR/reference/navigation.json
@@ -53,7 +53,6 @@
"expanded": false,
"group": "CREATE",
"pages": [
- "pt-BR/reference/statements/create/index",
"pt-BR/reference/statements/create/database",
{
"expanded": false,
@@ -114,7 +113,8 @@
"pt-BR/reference/statements/create/table",
"pt-BR/reference/statements/create/user",
"pt-BR/reference/statements/create/view"
- ]
+ ],
+ "root": "pt-BR/reference/statements/create/index"
},
"pt-BR/reference/statements/delete",
"pt-BR/reference/statements/describe-table",
@@ -138,7 +138,6 @@
"expanded": false,
"group": "SELECT",
"pages": [
- "pt-BR/reference/statements/select/index",
"pt-BR/reference/statements/select/all",
"pt-BR/reference/statements/select/apply_modifier",
"pt-BR/reference/statements/select/array-join",
@@ -163,7 +162,8 @@
"pt-BR/reference/statements/select/union",
"pt-BR/reference/statements/select/where",
"pt-BR/reference/statements/select/with"
- ]
+ ],
+ "root": "pt-BR/reference/statements/select/index"
},
"pt-BR/reference/statements/set-role",
"pt-BR/reference/statements/set",
@@ -307,7 +307,6 @@
"expanded": false,
"group": "Table Engines",
"pages": [
- "pt-BR/reference/engines/table-engines/index",
{
"expanded": false,
"group": "Integrations",
@@ -395,7 +394,8 @@
],
"root": "pt-BR/reference/engines/table-engines/special/index"
}
- ]
+ ],
+ "root": "pt-BR/reference/engines/table-engines/index"
},
{
"expanded": false,
diff --git a/pt-BR/resources/develop-contribute/navigation.json b/pt-BR/resources/develop-contribute/navigation.json
index 773ee80e0..3bf9a8b07 100644
--- a/pt-BR/resources/develop-contribute/navigation.json
+++ b/pt-BR/resources/develop-contribute/navigation.json
@@ -46,11 +46,11 @@
{
"group": "Integration development",
"pages": [
- "pt-BR/resources/develop-contribute/integrations/index",
"pt-BR/resources/develop-contribute/integrations/building-integrations",
"pt-BR/resources/develop-contribute/integrations/testing-your-integration",
"pt-BR/resources/develop-contribute/integrations/documenting-your-integration"
- ]
+ ],
+ "root": "pt-BR/resources/develop-contribute/integrations/index"
},
{
"group": "Roadmap",
diff --git a/ru/clickstack/demo-days/2026/2026-05-29.mdx b/ru/clickstack/demo-days/2026/2026-05-29.mdx
new file mode 100644
index 000000000..9a5110035
--- /dev/null
+++ b/ru/clickstack/demo-days/2026/2026-05-29.mdx
@@ -0,0 +1,116 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-05-29
+title: 'Демо-дни — 2026-05-29'
+sidebarTitle: '2026-05-29'
+description: 'Демо-дни ClickStack на 2026-05-29'
+doc_type: 'guide'
+keywords: ['ClickStack', 'Демо-дни']
+---
+
+
+ ## Улучшенная фильтрация схем с учётом версии
+
+
+*Демо от [@knudtty](https://github.com/knudtty)*
+
+
+
+
+
+Теперь ClickStack применяет оптимизацию direct_read только для версий ClickHouse 26.2 и выше, где индекс полнотекстового поиска корректно поддерживает столбцы-алиасы, добавленные в схемы с открытым исходным кодом. Раньше эту оптимизацию могли пытаться использовать на более старых версиях, где она работала некорректно. Проверка версии выполняется во время выполнения запроса путём анализа схемы, а сами столбцы-алиасы теперь по умолчанию включены в схемы с открытым исходным кодом.
+
+Также было показано, что ведётся работа по замене materialized view для автодополнения прямыми запросами к text index. Сейчас оба механизма частично дублируют друг друга, создавая дополнительную нагрузку на приём данных. Если бенчмарки подтвердят, что запросы к text index не уступают по производительности, materialized view можно будет упростить или убрать. Аарон также ответил на вопросы команды о том, как позиционное кодирование в будущих версиях ClickHouse text index может сделать операции lookup в фильтрах ключ-значение ещё точнее.
+
+**Связанные PR:** [#2341](https://github.com/hyperdxio/hyperdx/pull/2341) feat: по умолчанию добавляет оптимизацию direct_read для журналов и трасс, [#2405](https://github.com/hyperdxio/hyperdx/pull/2405) feat(common-utils): применяет оптимизацию direct_read для элементов KV к SQL-фильтрам, [#2376](https://github.com/hyperdxio/hyperdx/pull/2376) feat: использует text index для фильтров и автодополнения
+
+
+ ## Более качественный разбор журналов
+
+
+*Демо от [@dhable](https://github.com/dhable)*
+
+
+
+
+
+У одного клиента были журналы, в которых тело события представляло собой объект JSON с полем `level`. Логика определения уровня серьезности делала две вещи: разбирала тело как JSON, чтобы извлечь атрибуты, а затем, если уровень серьезности не был задан на уровне OTel, переходила к сопоставлению со строками. При этом сопоставление со строками подхватывало слово "alert" из имени alert manager внутри тела, из-за чего уровень журнала определялся неверно.
+
+Исправление добавляет защитное условие: если тело разбирается как JSON и уже содержит поле `level`, шаг строкового определения полностью пропускается. Набор smoke-тестов, созданный около года назад, позволил легко проверить исправление и выявить связанные пограничные случаи, просто добавив новые тест-кейсы, — именно для этого он и был задуман.
+
+**Связанные PR:** [#2363](https://github.com/hyperdxio/hyperdx/pull/2363) fix(log-parser): пропускать строковое определение, если тело разбирается как JSON с полем level
+
+
+ ## Улучшения MCP Server
+
+
+*Демо от [@brandon-pereira](https://github.com/brandon-pereira)*
+
+
+
+
+
+На этой неделе вышло несколько улучшений для MCP: улучшены бакетизация и оценка шаблонов событий, подсказки об ошибках и очистка общих вспомогательных функций. Префиксы инструментов также были переименованы с `hyperdx_` на `clickstack_`, чтобы соответствовать названию продукта.
+
+**Связанные PR:** [#2337](https://github.com/hyperdxio/hyperdx/pull/2337) feat(mcp): улучшение качества инструментов MCP — подсказки об ошибках, общие вспомогательные функции, более понятные сообщения, [#2396](https://github.com/hyperdxio/hyperdx/pull/2396) refactor(mcp): переименование префиксов инструментов с hyperdx_ на clickstack_, [#2343](https://github.com/hyperdxio/hyperdx/pull/2343) feat(mcp): добавление инструментов patch_dashboard, get_dashboard_tile, search_dashboards, [#2418](https://github.com/hyperdxio/hyperdx/pull/2418) fix(mcp): улучшение описаний alias и примеров для более читаемых легенд диаграмм, [#2412](https://github.com/hyperdxio/hyperdx/pull/2412) refactor: упрощение проверки ObjectId в MCP с помощью общих вспомогательных функций и проверок на уровне схемы
+
+
+ ## Новая цветовая палитра серий
+
+
+*Демо от [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Елизабет работала над унификацией цветовой палитры визуализации данных в темах HyperDX и ClickStack, дополняя работу Alex над компонентом выбора цвета. У этих двух тем были разные палитры и отдельные правила-исключения для каждой, из-за чего работа с цветами становилась неоправданно сложной. Цель состояла в том, чтобы создать единую палитру, подходящую для обеих тем.
+
+Она протестировала распространённые в индустрии палитры (Tableau, Observable, IBM) с помощью инструмента симуляции цветового зрения, чтобы проверить контрастность и доступность. Палитра ClickHouse показала плохие результаты — зелёный цвет недостаточно контрастен на белом фоне. И Tableau, и Observable не проходят как минимум одну из проверок; палитра IBM проходит их все, но в ней всего пять цветов, а этого недостаточно. В целом ближе всего подошла палитра Observable с небольшой корректировкой синего, и теперь она будет использоваться в обеих темах.
+
+**Связанные PR:** [#2362](https://github.com/hyperdxio/hyperdx/pull/2362) refactor(theme): переименовать токены палитры графиков в названия цветовых тонов + унифицировать для всех тем
+
+
+ ## Новый макет страницы с закреплённым заголовком
+
+
+*Демо от [@elizabetdev](https://github.com/elizabetdev)*
+
+
+
+
+
+Новая пара компонентов PageHeader и PageLayout была внедрена на всех основных страницах: панели мониторинга, service map, Client Sessions, Kubernetes и панели мониторинга ClickHouse. Теперь у всех страниц одинаковые отступы, линия-разделитель под заголовком и единая структура заголовка. Раньше страницы были оформлены по-разному: где-то заголовок располагался слева, а элементы управления справа, а где-то заголовка не было вовсе.
+
+Закреплённое поведение включается через prop. Всё, что вы передаёте в sticky slot, остаётся закреплённым под заголовком при прокрутке; всё остальное прокручивается как обычно. Если ничего не передано, автоматически закрепляются только breadcrumbs или параметры страницы.
+
+**Связанные PR:** [#2282](https://github.com/hyperdxio/hyperdx/pull/2282) Добавление PageHeader/PageLayout и миграция Sessions, [#2345](https://github.com/hyperdxio/hyperdx/pull/2345) Использование заголовка PageHeader на страницах списков, [#2346](https://github.com/hyperdxio/hyperdx/pull/2346) Миграция Service Map на PageLayout, [#2347](https://github.com/hyperdxio/hyperdx/pull/2347) Миграция панели мониторинга Kubernetes на PageLayout, [#2348](https://github.com/hyperdxio/hyperdx/pull/2348) Миграция панели мониторинга ClickHouse на PageLayout, [#2364](https://github.com/hyperdxio/hyperdx/pull/2364) feat(dashboard): миграция на PageLayout с закреплённой панелью инструментов запросов, [#2394](https://github.com/hyperdxio/hyperdx/pull/2394) fix(PageHeader): сохранение закреплённого заголовка под оверлеями drawer
+
+
+ ## Новый селектор источника данных и выбор цвета для серий
+
+
+*Демо от [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Два улучшения интерфейса от Алекса. Селектор источника данных стал проще: теперь по нажатию показываются только источники данных для выбора. Управляющие действия, такие как просмотр схемы или создание нового источника, вынесены в отдельное меню с тремя точками. Это отделяет выбор от конфигурации — то, что давно было в списке задач и что учитывает отзывы команды.
+
+У плиток Number теперь тоже есть статический выбор цвета, так что для метрики можно задать конкретный цвет. Правила условной раскраски (переключение на красный, зелёный или жёлтый в зависимости от порогового значения или столбца) тоже в работе. Когда появится унифицированная палитра Элизабет, в обоих случаях будут использоваться нормально именованные цвета вместо нынешних меток вроде "color 1, 2, 3", что должно стать заметным улучшением для пользователей, переходящих из таких инструментов, как Grafana.
+
+**Связанные PR:** [#2365](https://github.com/hyperdxio/hyperdx/pull/2365) feat(source-picker): chip + kebab menu UX, [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): number tile static color picker
+
+
+ ## Более наглядные подсказки для действий на панели мониторинга
+
+
+*Демо от [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Строки в табличных плитках на панели мониторинга теперь дают более понятную подсказку при наведении. При наведении меняются курсор и значок, показывая, что произойдет при щелчке: либо откроется связанная панель мониторинга, либо будет выполнен переход к детализации в источнике данных. Раньше было неочевидно даже то, что строки вообще кликабельны, не говоря уже о том, что именно произойдет по щелчку.
+
+**Связанные PR:** [#2321](https://github.com/hyperdxio/hyperdx/pull/2321) feat(app): подсказка при наведении и нативный индикатор ссылки для щелчка по строке в табличной плитке панели мониторинга
\ No newline at end of file
diff --git a/ru/clickstack/demo-days/2026/2026-06-05.mdx b/ru/clickstack/demo-days/2026/2026-06-05.mdx
new file mode 100644
index 000000000..3adf05f3a
--- /dev/null
+++ b/ru/clickstack/demo-days/2026/2026-06-05.mdx
@@ -0,0 +1,142 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-06-05
+title: 'Демо-дни - 2026-06-05'
+sidebarTitle: '2026-06-05'
+description: 'Демо-дни ClickStack от 2026-06-05'
+doc_type: 'guide'
+keywords: ['ClickStack', 'Демо-дни']
+---
+
+
+ ## Разделённый и расширенный вид трассировки
+
+
+*Демо от [@karl-power](https://github.com/karl-power)*
+
+
+
+
+
+Панель трассировки теперь поддерживает режим разделённого просмотра: когда вы переходите между спанами на временной шкале, панель сведений обновляется справа, а не открывается под выбранным спаном, как раньше. Это позволяет держать всю временную шкалу в поле зрения, пока вы изучаете отдельные спаны.
+
+Вы также можете развернуть расширенный вид трассировки, чтобы открыть временную шкалу во всю ширину с поддержкой прокрутки и масштабирования. Обе панели можно открывать и закрывать независимо друг от друга, поэтому переключаться между общим обзором и подробным просмотром спанов стало проще, не теряя текущий контекст.
+
+**Связанные PR:** [#2402](https://github.com/hyperdxio/hyperdx/pull/2402) feat: trace panel inline split detail
+
+
+ ## Обязательные фильтры на уровне source
+
+
+*Демо от [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+Теперь в source можно задавать обязательные фильтры, которые автоматически отображаются на любой панели мониторинга, где они используются. Вместо того чтобы вручную добавлять один и тот же фильтр на каждую панель мониторинга, связанную с source, ClickStack определяет это требование и поднимает фильтр на уровень панели мониторинга — только для тех плиток, которые действительно используют этот source.
+
+При необходимости отдельные плитки могут переопределять значение, заданное на уровне панели мониторинга, а обязательные фильтры также передаются в предпросмотр редактора графиков, чтобы вы могли проверять запросы, не убирая их. Обязательные фильтры source также интегрируются с макросом SQL filters для SQL-графиков, а при настройке ссылок между панелями мониторинга ClickStack автоматически добавляет их в список кандидатов для параметров ссылки.
+
+
+ ## Подгонка оси Y под данные
+
+
+*Демо от [@pulpdrew](https://github.com/pulpdrew)*
+
+
+
+
+
+В линейных графиках появился новый параметр отображения — "Подгонка оси Y под данные". По умолчанию ось Y привязана к нулю, из-за чего видимый диапазон сжимается, когда значения большие, но меняются незначительно, — и тренд сложно заметить с первого взгляда.
+
+Когда этот параметр включен, диапазон оси Y динамически вычисляется по фактическому диапазону данных, поэтому колебания в сериях с высокими значениями становятся видны без ручной настройки границ оси.
+
+**Связанные PR:** [#2417](https://github.com/hyperdxio/hyperdx/pull/2417) feat(charts): add 'Fit Y-Axis to Data' display setting for line charts
+
+
+ ## Оповещения об аномалиях
+
+
+*Демо от [@fleon](https://github.com/fleon)*
+
+
+
+
+
+Химаншу показал, как мы работаем над оповещениями на основе обнаружения аномалий с помощью Z-score. Вместо фиксированного порога вы задаете, сколько стандартных отклонений от ожидаемого среднего должно вызывать оповещение. Окно сезонности (почасовое или посуточное) определяет, как вычисляется базовый уровень, а редактор оповещений подсвечивает окна, которые сработали бы, чтобы вы могли настроить чувствительность перед сохранением.
+
+Это решает распространенную проблему пороговых оповещений: пользователи часто не знают, какое именно числовое значение задать. Возможность в реальном времени видеть, как обновляются потенциальные окна срабатывания при изменении Z-score, позволяет на практике подобрать порог, который улавливает реальные всплески без лишнего шума. Оповещения можно настроить так, чтобы они срабатывали только тогда, когда значения превышают ожидаемый диапазон, а не опускаются ниже него; кроме того, параметр occurrence позволяет потребовать, чтобы условие выполнялось для нескольких последовательных точек данных перед срабатыванием. Это пока в процессе разработки: сейчас базовый уровень вычисляется как скользящее среднее, а поддержка экспоненциального скользящего среднего запланирована.
+
+
+ ## Более наглядная конфигурация для API и AI-агентов
+
+
+*Демо от [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+В настройках ClickStack теперь есть отдельная вкладка API и Agents, где в одном месте собраны ключи API и настройка MCP-подключения. Кнопки для Claude, Cursor и OpenCode в один клик избавляют от необходимости вручную составлять команды подключения — например, кнопка Cursor открывает терминал с уже подставленной командой установки. Пользователи OpenCode получают фрагмент системного промпта, который можно скопировать и сразу вставить. Для других MCP-клиентов предусмотрен универсальный вариант JSON-конфигурации.
+
+**Связанные PR:** [#2407](https://github.com/hyperdxio/hyperdx/pull/2407) feat(team-settings): подключение AI-помощника
+
+
+ ## Выбор цвета для числовых диаграмм
+
+
+*Демо от [@alex-fedotyev](https://github.com/alex-fedotyev)*
+
+
+
+
+
+Числовые плитки теперь поддерживают как статический выбор цвета, так и условные правила окрашивания. Палитра диаграмм была обновлена и теперь использует понятные названия цветов — «синий» и «серый» вместо «color-1» и «color-10», — поэтому стало гораздо проще понимать, что именно вы выбираете.
+
+Условное окрашивание позволяет задавать упорядоченные пороговые правила, например: зелёный ниже целевого значения, жёлтый в диапазоне предупреждения и красный выше критического порога. Благодаря этому числовые плитки становятся действительно полезными индикаторами состояния на панелях мониторинга, особенно для таких метрик, как частота ошибок или задержка P99, когда нужен мгновенный визуальный сигнал без необходимости вчитываться в само число.
+
+**Связанные PR:** [#2386](https://github.com/hyperdxio/hyperdx/pull/2386) Условные правила цвета для числовых плиток (упорядоченные пороги), [#2265](https://github.com/hyperdxio/hyperdx/pull/2265) feat(app): статический выбор цвета для числовых плиток
+
+
+ ## Миграции схем
+
+
+*Демо от [@wrn14897](https://github.com/wrn14897)*
+
+
+
+
+
+В ClickStack теперь есть вкладка Schema Migrations в настройках (Enterprise), которая позволяет вносить контролируемые, версионируемые DDL-изменения в схемы данных. Вы создаёте миграцию, присваиваете ей номер версии, а затем фоновая задача подхватывает её и выполняет с логикой повторных попыток и строгим порядком — если одна миграция завершается с ошибкой, зависящие от неё более поздние миграции не будут выполняться, пока проблема не будет устранена или миграция не будет удалена.
+
+Версионируемая модель также позволяет ClickHouse отправлять управляемые оптимизации схем командам ClickStack Cloud без необходимости вручную выполнять ALTER TABLE. Команды могут просматривать ожидающие миграции и разблокировать их в удобном для себя темпе. Первый этап охватывает только добавляющие изменения; изменения primary key запланированы на второй этап.
+
+
+ ## Готовые панели мониторинга Browser RUM
+
+
+*Демо от [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+ClickStack теперь включает готовую панель мониторинга Browser RUM, охватывающую полный набор метрик веб-производительности. Панель мониторинга содержит обзор производительности с просмотрами страниц и временем загрузки на уровне P90, а также web vitals — LCP, INP и CLS — с пороговыми уровнями, чтобы вы могли сразу увидеть, какая метрика в норме, какая требует улучшения, а какая находится на низком уровне.
+
+Дополнительные разделы охватывают просмотры страниц во времени, длительные задачи, разбивку по устройствам, самые медленные страницы, сеансы с наибольшим числом ошибок, частоту JavaScript-ошибок и сбои API. Настраиваемые действия для строк позволяют нажать на любую строку таблицы и перейти к соответствующим данным сеанса или трассировки. Фильтры в верхней части страницы позволяют отфильтровать данные по сервису, окружению, версии сервиса и странице. Фильтрация по странам пока находится в разработке и зависит от улучшений Browser SDK, чтобы он мог отправлять геоданные.
+
+**Связанные PR:** [#2413](https://github.com/hyperdxio/hyperdx/pull/2413) feat: add Browser RUM dashboard template
+
+
+ ## Зависимые фильтры панели мониторинга
+
+
+*Демо от [@teeohhem](https://github.com/teeohhem)*
+
+
+
+
+
+Фильтры панели мониторинга теперь можно делать зависимыми друг от друга, так что выбор значения в одном фильтре автоматически ограничивает доступные варианты в последующих фильтрах. Панель мониторинга Kubernetes первой использует эту возможность: выбор пода теперь сужает раскрывающиеся списки развертываний и узлов только до значений, относящихся к этому поду, вместо того чтобы показывать все варианты по всему кластеру.
+
+Это означает, что вам больше не будут предлагаться сочетания фильтров, которые возвращают пустой результат. Эта возможность уже доступна в шаблоне панели мониторинга Kubernetes.
\ No newline at end of file
diff --git a/ru/clickstack/features/dashboards/row-click-drilldowns.mdx b/ru/clickstack/features/dashboards/row-click-drilldowns.mdx
new file mode 100644
index 000000000..448dd6cac
--- /dev/null
+++ b/ru/clickstack/features/dashboards/row-click-drilldowns.mdx
@@ -0,0 +1,160 @@
+---
+slug: /use-cases/observability/clickstack/dashboards/row-click-drilldowns
+title: 'Детализация по щелчку по строке таблицы'
+sidebarTitle: 'Детализация по щелчку по строке'
+description: 'Превратите плитку таблицы в сценарий исследования: щёлкните по строке, чтобы открыть целевую панель мониторинга или связанные журналы и трассировки в контексте выбранной строки'
+doc_type: 'guide'
+keywords: ['clickstack', 'панели мониторинга', 'детализация', 'таблица', 'щелчок по строке', 'исследование', 'обсервабилити']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+Табличная плитка часто представляет собой **каталог**: одна строка на каждый сервис, хост, конечную точку или группу ошибок, с несколькими столбцами, которые дают оценку каждому из них. Действия при щелчке по строке превращают этот каталог в сценарий исследования. Вы просматриваете каталог, чтобы найти нужную строку, щёлкаете по ней, и ClickStack подставляет значения выбранной строки в качестве фильтров. После этого пункт назначения открывается уже с фильтрацией по этому элементу — без необходимости вручную заново собирать запрос.
+
+Щелчок может привести в одно из двух мест:
+
+* **другую панель мониторинга** — для сфокусированного представления одного элемента, например панель мониторинга с деталями по сервису, или
+* **к исходным событиям** в [Search](/ru/clickstack/features/search) — к журналам или трассировкам, стоящим за этой строкой.
+
+Оба приведённых ниже сценария начинаются с одного и того же каталога (инвентаря сервисов) и позволяют перейти из него в каждый пункт назначения. Действия при щелчке по строке применяются только к табличным плиткам. Они отличаются от [перехода из диаграммы в поиск](/ru/clickstack/features/dashboards/overview#drilldown-to-search), при котором при щелчке по точке на линейной или столбчатой диаграмме открывается контекстное меню.
+
+
+ ## Изучение сервиса на отдельной панели мониторинга
+
+
+Сводная таблица, где каждому сервису соответствует одна строка, отвечает на вопрос «какой сервис работает нездорово?». Щелчок по строке может открыть панель мониторинга этого сервиса, которая отвечает на вопрос «что происходит внутри него?» в контексте выбранного сервиса. Шаблон ниже сочетает таблицу инвентаризации сервисов с панелью мониторинга `Service Detail`.
+
+
+
+ ### Создайте детальную панель мониторинга
+
+ Создайте панель мониторинга с именем `Service Detail` и добавьте [пользовательский фильтр](/ru/clickstack/features/dashboards/overview#custom-filters) с выражением `ServiceName` для вашего источника трасс. Фильтр на уровне панели мониторинга ограничивает каждую плитку одним сервисом, поэтому в запросах самих плиток не нужно жёстко указывать сервис. Добавьте нужные представления по сервису: ключевые показатели RED (requests, errors, P95 duration), график процентилей latency (P50, P95, P99), частоту запросов во времени и разбивку по конечным точкам с группировкой по `SpanName`.
+
+ Сначала сохраните эту панель мониторинга, чтобы на следующем шаге можно было выбрать её как целевую.
+
+
+
+ ### Создайте инвентаризацию сервисов
+
+ На обзорной панели мониторинга добавьте плитку **Table** для вашего источника трасс с группировкой по `ServiceName`. Добавьте в него столбцы RED для оценки каждого сервиса; каждый столбец должен быть серией с псевдонимом:
+
+ * `Requests`: количество спанов (rate).
+ * `Errors`: количество спанов со статусом ошибки.
+ * `P95 Duration`: 95-й процентиль `Duration`. Установите для числового формата этого столбца отображение длительности, чтобы значение выглядело как `288ms`, а не как необработанные наносекунды.
+
+ Упорядочьте по `Requests` по убыванию, чтобы самые загруженные сервисы были вверху. Эта таблица — каталог: одна строка на сервис с оценкой по RED.
+
+
+
+
+ **Ставьте столбец группировки первым**
+
+ По умолчанию таблица отображает столбец группировки (здесь `ServiceName`) справа, после серий. Каталог читается лучше, когда идентификатор строки идёт первым. Откройте **Display Settings** плитки и включите **Display Group By Columns on Left**, чтобы переместить столбец группировки в начало.
+
+
+
+
+ ### Настройте действие по щелчку на строке
+
+ В таблице инвентаризации откройте **Row Click Action**, выберите **Dashboard** и укажите `Service Detail` в списке панелей мониторинга. Если выбрать панель мониторинга напрямую, она будет привязана по ID. Ссылка продолжит работать, даже если панель мониторинга позже будет переименована, и сохранится при экспорте и импорте панели мониторинга. (Вариант **Template** используйте, если для каждой строки нужно выбирать отдельную панель мониторинга; см. [Настройка действия по щелчку строки](#set-up).)
+
+ Поскольку в `Service Detail` объявлен пользовательский фильтр `ServiceName`, в выдвижной панели автоматически появляется пустой фильтр для этого выражения. Заполните его шаблон:
+
+ * **Expression**: `ServiceName` (уже заполнено)
+ * **Template**: `{{ServiceName}}`
+
+ Нажмите **Apply** и сохраните. Теперь сервис из выбранной строки будет передаваться в фильтр `ServiceName` этой панели мониторинга.
+
+
+
+ ### Щёлкните по строке
+
+ При наведении на строку у правого края таблицы появляется ссылка с подсказкой, описывающей действие (`Open dashboard "Service Detail"`). Щелчок по строке открывает панель мониторинга `Service Detail`, где фильтр `Service` установлен в значение выбранной строки, поэтому все плитки (ключевые показатели RED, процентиль latency, разбивка по конечным точкам) сразу ограничиваются этим сервисом.
+
+
+
+
+
+
+ ## Переход от сервиса к его трассировкам
+
+
+Иногда нужен не очередной агрегированный вид, а сами исходные события. Действие **Search** направляет переход на страницу [Search](/ru/clickstack/features/search) вместо панели мониторинга и открывает журналы или трассировки, связанные с этой строкой, уже с применённым к ней фильтром.
+
+В той же таблице инвентаризации сервисов настройте переход по строке так, чтобы он вел сразу к трассировкам, а не на панель мониторинга с подробностями.
+
+
+
+ ### Направьте переход по строке в Search
+
+ В таблице инвентаризации откройте **Row Click Action** и выберите **Search**. Выберите источник трассировок (в списке отображаются только источники журналов и трассировок). Добавьте один фильтр:
+
+ * **Expression**: `ServiceName`
+ * **Template**: `{{ServiceName}}`
+
+ Нажмите **Apply** и сохраните изменения.
+
+
+
+ ### Нажмите на строку
+
+ Теперь при нажатии на строку сервиса открывается страница Search для этого источника трассировок, отфильтрованная по `ServiceName = `, и вы сразу попадаете на спаны только этого сервиса в том же временном диапазоне.
+
+
+
+
+
+Та же схема работает для любого каталога объектов. Сгруппируйте таблицу по операции (`SpanName`) или по атрибуту конечной точки вместо `ServiceName`, подставьте фильтр из этого столбца — и каждый переход по строке будет открывать события для этой конкретной операции или конечной точки. Для group-by по map-атрибуту см. примечание об alias в разделе [Проверка и ограничения](#validation).
+
+
+ ## Настройка действия по щелчку на строке
+
+
+Действия по щелчку на строке настраиваются прямо в плитке таблицы; отдельной страницы для них нет. Добавьте плитку или измените существующую и задайте для нее тип визуализации **Table**. После этого на панели инструментов редактора рядом с **Display Settings** появится кнопка **Row Click Action**. Она показывается только для плиток таблиц, а ее метка отражает текущее действие: `Row Click Action: Default`, `Row Click Action: Search` или `Row Click Action: Dashboard`. Нажмите ее, чтобы открыть выдвижную панель.
+
+
+
+Выдвижная панель предлагает три действия:
+
+* **Default**: встроенное поведение. Щелчок по строке открывает страницу Search с фильтрацией по значениям столбцов группировки этой строки и выбранному временному диапазону. Именно это поведение используется, если пользовательское действие не задано.
+* **Search**: переход на страницу Search для выбранного вами источника.
+* **Dashboard**: переход на другую панель мониторинга вашей команды.
+
+Для **Search** и **Dashboard** вы выбираете, куда ведет щелчок, и задаете шаблоны фильтров, которые передаются вместе с ним:
+
+* **Destination**: выберите конкретный источник или панель мониторинга либо выберите **Template** и введите шаблон [Handlebars](https://handlebarsjs.com/), который будет сопоставлен по имени с доступным источником или панелью мониторинга. При выборе конкретной цели она закрепляется по ID. Этот вариант предпочтителен для одного фиксированного пункта назначения: он сохраняет привязку после переименования, а также после экспорта и импорта панели мониторинга; кроме того, для панели мониторинга он заранее заполняет объявленные фильтры пункта назначения. Используйте **Template**, если цель должна различаться для каждой строки: в этом случае для выбора можно ссылаться на столбец строки (например, `Errors-{{ServiceName}}`).
+* **Filters**: нажмите **Add filter** и укажите **Expression** (столбец или выражение в пункте назначения, например `ServiceName`) и **Template** для его значения (например `{{ServiceName}}`). Шаблоны ссылаются на столбцы строки, по которой щелкнули, через `{{columnName}}` (см. примечание ниже о том, какие столбцы доступны). Каждый фильтр преобразуется в условие `expression IN (value)` в пункте назначения, а фильтры с одинаковым выражением объединяются. Если пунктом назначения является панель мониторинга, выдвижная панель заранее добавляет по одному пустому фильтру для каждого фильтра, уже объявленного в этой панели мониторинга, так что вам остается только заполнить шаблоны.
+* **WHERE** (необязательно): шаблон Handlebars, который преобразуется в глобальный фильтр пункта назначения в дополнение к условиям отдельных фильтров выше. Задайте для него язык запросов SQL или Lucene, чтобы пункт назначения мог его разобрать. Например, SQL-шаблон `ServiceName = '{{ServiceName}}'` ограничивает пункт назначения сервисом из строки, по которой щелкнули.
+
+
+ **Шаблоны ссылаются на столбцы таблицы**
+
+ Шаблон `{{...}}` разрешается по собственным столбцам плитки таблицы: столбцам группировки и каждой серии по ее имени или псевдониму — ровно в том виде, в каком они показаны в таблице. Он не видит столбцы базового источника, которые таблица не выбирает. Чтобы значение передавалось по щелчку, оно должно быть столбцом в таблице, поэтому `{{ServiceName}}` работает, потому что `ServiceName` — это столбец группировки таблицы, а для столбца с псевдонимом используется его псевдоним. Если сослаться на имя, которого нет в таблице, щелчок завершится ошибкой `Row has no column ''`.
+
+
+Нажмите **Apply**, чтобы проверить шаблоны (ClickStack сообщит о шаблонах с недопустимым синтаксисом), затем сохраните панель мониторинга, чтобы сохранить это действие.
+
+
+ ## Как определяются пункт назначения и фильтры
+
+
+Когда пользователь нажимает на строку, ClickStack определяет действие для этой строки:
+
+* **Пункт назначения.** При выборе конкретного источника или панели мониторинга он фиксируется по ID. Цель **Template** формируется на основе выбранной строки, а затем сопоставляется по имени с источниками или панелями мониторинга вашей команды. Чтобы сопоставление сработало, имя должно быть уникальным: если у двух источников или двух панелей мониторинга получается одно и то же имя, link нельзя будет однозначно сопоставить с одним из них. Если сформированное имя пустое или для него нет совпадения, сопоставление также не выполняется.
+* **Фильтры.** Каждый шаблон фильтра формируется на основе строки и превращается в условие `expression IN (value)` в пункте назначения. Действие `Search` открывает `/search` в контексте выбранного источника, а действие `Dashboard` открывает соответствующую панель мониторинга. В обоих случаях сохраняется временной диапазон выбранной строки.
+
+
+ **Для целей панели мониторинга нужен объявленный соответствующий фильтр**
+
+ Фильтр, переданный в панель мониторинга, применяется только в том случае, если в панели мониторинга пункта назначения объявлен верхнеуровневый [пользовательский фильтр](/ru/clickstack/features/dashboards/overview#custom-filters), выражение которого совпадает с **Expression** фильтра. Если ни один из объявленных фильтров не совпадает, это значение отбрасывается в момент нажатия, и пункт назначения открывается без фильтрации по этому выражению. Поэтому в режиме панели мониторинга заранее подставляются объявленные фильтры пункта назначения: если выражение совпадает, раскрывающийся список пункта назначения автоматически заполняется значением из выбранной строки.
+
+
+
diff --git a/ru/integrations/clickpipes/navigation.json b/ru/integrations/clickpipes/navigation.json
index 629d47225..4de64e7c5 100644
--- a/ru/integrations/clickpipes/navigation.json
+++ b/ru/integrations/clickpipes/navigation.json
@@ -32,7 +32,6 @@
{
"group": "ClickPipes for Postgres",
"pages": [
- "ru/integrations/clickpipes/postgres/index",
"ru/integrations/clickpipes/postgres/deduplication",
"ru/integrations/clickpipes/postgres/ordering-keys",
"ru/integrations/clickpipes/postgres/toast",
@@ -72,7 +71,8 @@
"ru/integrations/clickpipes/postgres/source/planetscale"
]
}
- ]
+ ],
+ "root": "ru/integrations/clickpipes/postgres/index"
},
{
"group": "ClickPipes for Kafka",
@@ -89,22 +89,21 @@
"group": "ClickPipes for Kinesis",
"pages": [
"ru/integrations/clickpipes/kinesis/overview",
- "ru/integrations/clickpipes/kinesis/index",
"ru/integrations/clickpipes/kinesis/auth"
- ]
+ ],
+ "root": "ru/integrations/clickpipes/kinesis/index"
},
{
"group": "ClickPipes for GCP Pub/Sub",
"pages": [
"ru/integrations/clickpipes/pubsub/overview",
- "ru/integrations/clickpipes/pubsub/index",
"ru/integrations/clickpipes/pubsub/auth"
- ]
+ ],
+ "root": "ru/integrations/clickpipes/pubsub/index"
},
{
"group": "ClickPipes for MySQL",
"pages": [
- "ru/integrations/clickpipes/mysql/index",
"ru/integrations/clickpipes/mysql/faq",
"ru/integrations/clickpipes/mysql/datatypes",
"ru/integrations/clickpipes/mysql/parallel-initial-load",
@@ -134,12 +133,12 @@
"ru/integrations/clickpipes/mysql/source/generic-maria"
]
}
- ]
+ ],
+ "root": "ru/integrations/clickpipes/mysql/index"
},
{
"group": "ClickPipes for MongoDB",
"pages": [
- "ru/integrations/clickpipes/mongodb/index",
"ru/integrations/clickpipes/mongodb/datatypes",
"ru/integrations/clickpipes/mongodb/quickstart",
"ru/integrations/clickpipes/mongodb/lifecycle",
@@ -164,7 +163,8 @@
"ru/integrations/clickpipes/mongodb/source/documentdb"
]
}
- ]
+ ],
+ "root": "ru/integrations/clickpipes/mongodb/index"
},
{
"group": "ClickPipes for BigQuery",
diff --git a/ru/integrations/connectors/navigation.json b/ru/integrations/connectors/navigation.json
index f1a942bfe..7e9a89c95 100644
--- a/ru/integrations/connectors/navigation.json
+++ b/ru/integrations/connectors/navigation.json
@@ -17,7 +17,6 @@
"expanded": false,
"group": "Kafka",
"pages": [
- "ru/integrations/connectors/data-ingestion/kafka/index",
"ru/integrations/connectors/data-ingestion/kafka/kafka-clickhouse-connect-sink",
"ru/integrations/connectors/data-ingestion/kafka/confluent/confluent-cloud",
"ru/integrations/connectors/data-ingestion/kafka/confluent/custom-connector",
@@ -28,7 +27,8 @@
"ru/integrations/connectors/data-ingestion/kafka/confluent/kafka-connect-http",
"ru/integrations/connectors/data-ingestion/kafka/kafka-connect-jdbc",
"ru/integrations/connectors/data-ingestion/kafka/kafka-table-engine-named-collections"
- ]
+ ],
+ "root": "ru/integrations/connectors/data-ingestion/kafka/index"
},
"ru/integrations/connectors/data-sources/mysql",
"ru/integrations/connectors/data-sources/cassandra",
@@ -49,10 +49,10 @@
"expanded": false,
"group": "Grafana",
"pages": [
- "ru/integrations/connectors/data-visualization/grafana/index",
"ru/integrations/connectors/data-visualization/grafana/query-builder",
"ru/integrations/connectors/data-visualization/grafana/config"
- ]
+ ],
+ "root": "ru/integrations/connectors/data-visualization/grafana/index"
},
"ru/integrations/connectors/data-visualization/lightdash-and-clickhouse",
"ru/integrations/connectors/data-visualization/looker-and-clickhouse",
@@ -108,11 +108,11 @@
"expanded": false,
"group": "Apache Spark",
"pages": [
- "ru/integrations/connectors/data-ingestion/apache-spark/index",
"ru/integrations/connectors/data-ingestion/apache-spark/spark-native-connector",
"ru/integrations/connectors/data-ingestion/apache-spark/databricks",
"ru/integrations/connectors/data-ingestion/apache-spark/spark-jdbc"
- ]
+ ],
+ "root": "ru/integrations/connectors/data-ingestion/apache-spark/index"
},
"ru/integrations/connectors/data-ingestion/apache-flink",
"ru/integrations/connectors/data-ingestion/AWS/glue",
@@ -120,11 +120,11 @@
"expanded": false,
"group": "Azure Data Factory",
"pages": [
- "ru/integrations/connectors/data-ingestion/azure/azure-data-factory/index",
"ru/integrations/connectors/data-ingestion/azure/azure-data-factory/overview",
"ru/integrations/connectors/data-ingestion/azure/azure-data-factory/using-azureblobstorage",
"ru/integrations/connectors/data-ingestion/azure/azure-data-factory/using-http-interface"
- ]
+ ],
+ "root": "ru/integrations/connectors/data-ingestion/azure/azure-data-factory/index"
},
"ru/integrations/connectors/data-ingestion/azure/azure-synapse",
"ru/integrations/connectors/data-ingestion/etl-tools/apache-beam",
@@ -150,12 +150,12 @@
"expanded": false,
"group": "dbt",
"pages": [
- "ru/integrations/connectors/data-ingestion/etl-tools/dbt/index",
"ru/integrations/connectors/data-ingestion/etl-tools/dbt/features-and-configurations",
"ru/integrations/connectors/data-ingestion/etl-tools/dbt/materializations",
"ru/integrations/connectors/data-ingestion/etl-tools/dbt/materialization-materialized-view",
"ru/integrations/connectors/data-ingestion/etl-tools/dbt/guides"
- ]
+ ],
+ "root": "ru/integrations/connectors/data-ingestion/etl-tools/dbt/index"
},
"ru/integrations/connectors/data-ingestion/etl-tools/dlt-and-clickhouse",
{
diff --git a/ru/integrations/language-clients/navigation.json b/ru/integrations/language-clients/navigation.json
index 742834f65..63432e2fe 100644
--- a/ru/integrations/language-clients/navigation.json
+++ b/ru/integrations/language-clients/navigation.json
@@ -40,7 +40,7 @@
"group": "C",
"icon": "/images/integrations/logos/logo_c.svg",
"pages": [],
- "root": "ru/integrations/language-clients/c.mdx"
+ "root": "ru/integrations/language-clients/c"
},
{
"group": "Third-party clients",
diff --git a/ru/integrations/language-clients/python/navigation.json b/ru/integrations/language-clients/python/navigation.json
index 5a65821b0..63d62860b 100644
--- a/ru/integrations/language-clients/python/navigation.json
+++ b/ru/integrations/language-clients/python/navigation.json
@@ -3,12 +3,12 @@
"group": "Python",
"icon": "/images/integrations/logos/notext-python.svg",
"pages": [
- "ru/integrations/language-clients/python/index",
"ru/integrations/language-clients/python/driver-api",
"ru/integrations/language-clients/python/additional-options",
"ru/integrations/language-clients/python/advanced-querying",
"ru/integrations/language-clients/python/advanced-inserting",
"ru/integrations/language-clients/python/advanced-usage",
"ru/integrations/language-clients/python/sqlalchemy"
- ]
+ ],
+ "root": "ru/integrations/language-clients/python/index"
}
\ No newline at end of file
diff --git a/ru/products/chdb/navigation.json b/ru/products/chdb/navigation.json
index 579fb9b2d..d17477b9b 100644
--- a/ru/products/chdb/navigation.json
+++ b/ru/products/chdb/navigation.json
@@ -3,9 +3,9 @@
{
"group": "Get started",
"pages": [
- "ru/products/chdb/index",
"ru/products/chdb/getting-started"
- ]
+ ],
+ "root": "ru/products/chdb/index"
},
{
"group": "Language integrations",
@@ -22,7 +22,6 @@
{
"group": "DataStore",
"pages": [
- "ru/products/chdb/datastore/index",
"ru/products/chdb/datastore/quickstart",
"ru/products/chdb/datastore/factory-methods",
"ru/products/chdb/datastore/query-building",
@@ -32,25 +31,26 @@
"ru/products/chdb/datastore/execution-model",
"ru/products/chdb/datastore/pandas-compat",
"ru/products/chdb/datastore/class-reference"
- ]
+ ],
+ "root": "ru/products/chdb/datastore/index"
},
{
"group": "Configuration",
"pages": [
- "ru/products/chdb/configuration/index",
"ru/products/chdb/configuration/execution-engine",
"ru/products/chdb/configuration/function-config",
"ru/products/chdb/configuration/performance-mode"
- ]
+ ],
+ "root": "ru/products/chdb/configuration/index"
},
{
"group": "Debugging",
"pages": [
- "ru/products/chdb/debugging/index",
"ru/products/chdb/debugging/explain",
"ru/products/chdb/debugging/logging",
"ru/products/chdb/debugging/profiling"
- ]
+ ],
+ "root": "ru/products/chdb/debugging/index"
},
{
"group": "Developer guides",
diff --git a/ru/products/cloud/guides/security/cloud-access-management/scim-setup.mdx b/ru/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
new file mode 100644
index 000000000..9015e390f
--- /dev/null
+++ b/ru/products/cloud/guides/security/cloud-access-management/scim-setup.mdx
@@ -0,0 +1,334 @@
+---
+sidebarTitle: 'SCIM-провижининг с Okta'
+slug: /cloud/security/scim-setup
+title: 'SCIM-провижининг с Okta'
+description: 'Как настроить SCIM-провижининг между Okta и ClickHouse Cloud'
+doc_type: 'guide'
+keywords: ['ClickHouse Cloud', 'SCIM', 'провижининг', 'Okta', 'SSO', 'SAML', 'провайдер идентификации', 'IdP', 'управление пользователями']
+---
+
+import { Image } from "/snippets/components/Image.jsx";
+
+import EnterprisePlanFeatureBadge from "/snippets/components/EnterprisePlanFeatureBadge/EnterprisePlanFeatureBadge.jsx";
+import PrivatePreviewBadge from "/snippets/components/PrivatePreviewBadge/PrivatePreviewBadge.jsx";
+
+
+
+
+ Поддержка SCIM-провижининга доступна в рамках закрытой предварительной версии.
+
+
+
+
+ClickHouse Cloud поддерживает SCIM 2.0 (System for Cross-domain Identity Management) для автоматизированного управления жизненным циклом пользователей и групп. После подключения к вашему провайдеру идентификации каждый пользователь, которому вы назначаете приложение ClickHouse Cloud, автоматически создаётся в вашей организации с нужной ролью, обновления профиля синхронизируются автоматически, а удаление пользователя из вашего IdP лишает его доступа — никаких ручных приглашений и никаких бесхозных аккаунтов.
+
+В этом руководстве показано, как выполнить полную настройку SCIM-провижининга с **Okta**. Конечная точка SCIM в ClickHouse Cloud соответствует SCIM 2.0 (RFC 7644), но поддерживает только аутентификацию по Basic Auth, а **Okta** — единственный провайдер идентификации, с которым мы тестировали эту интеграцию. Другие IdP с поддержкой SCIM 2.0 тоже могут работать, если они поддерживают аутентификацию по Basic Auth, но на данный момент официально не поддерживаются.
+
+
+ ## Перед началом
+
+
+Вам потребуется:
+
+* Роль **Admin** в вашей организации ClickHouse Cloud.
+* Уже настроенный [SAML SSO](/ru/cloud/security/saml-setup) между вашим IdP и ClickHouse Cloud. SCIM создаёт учётные записи пользователей; эти учётные записи выполняют вход через SAML, поэтому сначала должен работать SSO.
+* Доступ super-admin к вашему тенанту Okta с разрешением устанавливать приложения и настраивать провижининг.
+* Список ролей, которые вы хотите назначать через SCIM (например: Admins, Developers, Read-only). Определите это заранее — затем вы создадите соответствующие группы в Okta.
+
+
+ ## Как работает SCIM в ClickHouse Cloud
+
+
+1. Администратор в Okta назначает пользователя приложению ClickHouse Cloud — напрямую или через группу.
+2. Okta обращается к конечной точке SCIM ClickHouse Cloud по HTTPS, используя для аутентификации созданный вами токен.
+3. ClickHouse Cloud создает пользователя в вашей организации и назначает роли на основе членства в группах Okta.
+4. Пользователь входит в ClickHouse Cloud через уже настроенный у вас вход по SAML SSO.
+5. Изменения профиля, состава групп и деактивация в Okta автоматически передаются в ClickHouse Cloud.
+
+
+ ## Настройка SCIM для вашей организации ClickHouse Cloud
+
+
+
+
+ ### Включите SCIM
+
+ Войдите в **консоль ClickHouse Cloud** с правами администратора организации и откройте **Organization settings → SAML and SCIM settings → SCIM Configuration**.
+
+
+
+ Нажмите `Enable SCIM`. SCIM становится доступен после подключения SAML SSO — если опция неактивна, сначала завершите настройку SAML.
+
+
+
+ Будет сгенерирован **URL конечной точки SCIM** в формате:
+
+ ```plaintext
+ https://api.clickhouse.cloud/v1/organizations//scim
+ ```
+
+ Скопируйте его — позже вы вставите этот URL в Okta.
+
+
+
+ ### Сгенерируйте токен доступа SCIM
+
+ Найдите раздел `Create an API key` и выберите дату истечения срока действия.
+
+
+ **Запланируйте ротацию.** Рекомендуем установить срок действия 12 месяцев и добавить напоминание в календарь. ClickHouse Cloud поддерживает до двух активных токенов SCIM одновременно, поэтому ротацию можно выполнить без простоя: сгенерируйте новый токен, переключите на него Okta, убедитесь, что провижининг по-прежнему работает, затем отзовите старый токен.
+
+
+ Нажмите `Generate key`. Токен отображается **один раз** в виде key (с префиксом `scim_`) и secret. Сразу скопируйте оба значения и сохраните их в защищённом менеджере secrets — позже получить их снова не получится. Если вы их потеряете, отзовите токен и сгенерируйте новый.
+
+
+
+
+
+ ### Настройте сопоставление ролей
+
+ В панели SCIM Configuration нажмите **Map roles in "Users and roles"** (или перейдите напрямую через **Users and roles → Roles**).
+
+ Группы SCIM связываются с ролями ClickHouse Cloud по имени, при этом важно учитывать несколько правил:
+
+ * **Нельзя сопоставить группу SCIM с предопределённой системной ролью.** Сопоставления SCIM применяются только к пользовательским ролям. Если вам нужно предоставить через SCIM возможность системного уровня, создайте пользовательскую роль с нужными разрешениями.
+ * **При совпадении имён связь создаётся автоматически.** Если пользовательская роль имеет то же имя, что и входящая группа SCIM, ClickHouse Cloud свяжет их автоматически — ручное сопоставление не требуется.
+ * **Если имя роли должно отличаться от имени группы**, создайте пользовательскую роль с нужным именем, а затем укажите в её поле **SCIM group** имя группы SCIM, с которой она должна связываться.
+ * **Для несопоставленных групп создаются новые роли.** Если Okta отправляет группу, имя которой не совпадает с именем существующей роли и не указано ни в одном поле `SCIM group`, ClickHouse Cloud создаст новую пользовательскую роль с именем этой группы. После этого вы сможете выдать ей нужные разрешения.
+
+
+
+
+ ## Настройка приложения ClickHouse Cloud в Okta
+
+
+
+
+ ### Откройте приложение ClickHouse Cloud в Okta
+
+ В **консоли администратора Okta** перейдите в **Applications → Applications** и найдите приложение, которое вы создали при настройке SAML SSO для ClickHouse Cloud. Откройте его.
+
+ Если вы еще не создали SAML-приложение, сначала воспользуйтесь [руководством по настройке SAML SSO](/ru/cloud/security/saml-setup) — SCIM-провизионинг настраивается в том же приложении.
+
+ На вкладке **General** найдите раздел **App Settings** и нажмите `Edit`. В разделе **Provisioning** выберите `SCIM`, затем нажмите `Save`.
+
+
+
+ Теперь в приложении отображается вкладка **Provisioning**.
+
+
+
+
+
+ ### Подключите Okta к конечной точке SCIM
+
+ Откройте вкладку **Provisioning** приложения и нажмите `Edit`. Заполните форму:
+
+ * **SCIM connector base URL** — URL конечной точки SCIM, который вы получили ранее.
+ * **Unique identifier field for users** — `userName`.
+ * **Supported provisioning actions** — выберите все перечисленные ниже пункты:
+ * Import New Users and Profile Updates
+ * Push New Users
+ * Push Profile Updates
+ * Push Groups
+ * Import Groups
+ * **Authentication Mode** — `Basic Auth`.
+ * **Username** — **ключ** токена SCIM (начинается с `scim_`).
+ * **Password** — **секрет** токена SCIM.
+
+
+
+
+
+ Нажмите `Test Connector Configuration`. Вы должны увидеть зеленое подтверждение. Если проверка не пройдет, перейдите к разделу [Troubleshooting](#troubleshooting).
+
+
+
+ Нажмите `Save`.
+
+
+
+ ### Настройте поведение Provisioning
+
+ Находясь на вкладке **Provisioning**, нажмите `To App` на левой боковой панели. Нажмите `Edit` и включите:
+
+ | Параметр | Действие | Что делает |
+ | --------------------------------- | --------- | ------------------------------------------------------------------------------------- |
+ | Создание пользователей | Включить | Создаёт новых пользователей в ClickHouse Cloud при назначении в Okta |
+ | Обновление атрибутов пользователя | Включить | Автоматически передаёт изменения профиля (имя, email и т. д.) |
+ | Деактивация пользователей | Включить | Удаляет пользователя из ClickHouse Cloud при снятии назначения или деактивации в Okta |
+ | Синхронизация пароля | Отключить | Не используется — вход выполняется через SAML, а не по паролю |
+
+
+
+ Нажмите `Save`, затем вернитесь на вкладки **Sign On** / **Provisioning** приложения, чтобы убедиться, что настройки сохранены.
+
+
+
+
+
+ ### Настройте сопоставление атрибутов пользователей
+
+ Okta и ClickHouse Cloud должны одинаково сопоставлять пользовательские поля. На вкладке **Provisioning** нажмите `To App` и проверьте **Attribute Mappings** для вашего приложения. Значения по умолчанию в приложении Okta SAML обычно подходят — сверьтесь с таблицей ниже:
+
+ | Атрибут Okta | Атрибут ClickHouse Cloud (SCIM) | Обязательно |
+ | ----------------- | ------------------------------- | ------------------------------------------------------------------------------------- |
+ | `userName` | `userName` | **Да** — используется как уникальный идентификатор и основной адрес электронной почты |
+ | `email` (primary) | `emails[primary].value` | **Да** — должен совпадать с `userName` |
+ | `firstName` | `name.givenName` | Рекомендуется |
+ | `lastName` | `name.familyName` | Рекомендуется |
+ | `displayName` | `displayName` | Рекомендуется — отображается в интерфейсе ClickHouse Cloud |
+ | `externalId` | `externalId` | Рекомендуется — повышает точность при сопоставлении |
+
+ Вы можете добавить необязательные атрибуты, такие как department, manager и location — ClickHouse Cloud сохраняет их в профиле пользователя, но пока не использует для разрешений. Всё, что выходит за рамки стандартного набора SCIM, на стороне ClickHouse Cloud игнорируется.
+
+
+ **Регистр в email важен.** Убедитесь, что `userName` и `email` в Okta используют одинаковый регистр. ClickHouse Cloud приводит email к нижнему регистру; расхождения между этими двумя полями могут вызывать сбои при тестировании.
+
+
+
+
+ ### Отправка групп и назначение пользователей
+
+ Здесь роли назначаются автоматически.
+
+ **Создайте группы в Okta.** Для каждого сопоставления ролей, которое вы настроили ранее, создайте или найдите в Okta группу с **точно таким же отображаемым именем**. Например, если в сопоставлении указано `ClickHouse-Admins → Admin`, создайте в Okta группу с именем `ClickHouse-Admins`.
+
+
+
+ Откройте только что созданную группу и нажмите `Assign people`, чтобы добавить в нее пользователя.
+
+
+
+
+
+ Затем назначьте приложение SCIM той же группе, чтобы назначение ролей и доступ к приложению оставались синхронизированы.
+
+
+
+ **Отправьте группы.** На вкладке **Provisioning** приложения нажмите `Push Groups → Find groups by name`, найдите нужную группу и нажмите `Save`. Повторите это для каждой ролевой группы. После Provisioning у каждой из них должен отображаться **Push Status** со значением **Active (Pushed)**.
+
+
+
+ **Назначьте пользователей.** У вас есть два варианта:
+
+ * **Через группы (рекомендуется).** Добавьте пользователей в группы Okta, которые вы только что отправили. Они будут автоматически добавлены в ClickHouse Cloud и получат соответствующую роль.
+ * **Напрямую.** На вкладке **Assignments** приложения нажмите `Assign → Assign to People` и выберите отдельных пользователей. Им будет назначена роль **Default role**, если только они также не входят в отправленную группу.
+
+ Назначение через группы удобнее для постоянного администрирования: если у пользователя меняется роль, достаточно обновить его членство в группе.
+
+
+
+
+ ## Протестируйте интеграцию
+
+
+После настройки провижининга вернитесь в **Settings → Users and roles** в консоли ClickHouse Cloud, чтобы убедиться, что синхронизированные пользователи появились с ожидаемыми ролями.
+
+
+
+Выполните эту короткую проверку с одним или двумя тестовыми пользователями **до** назначения всей команды. Каждый шаг должен выполняться в течение нескольких секунд; если это не так, проверьте очередь задач Okta и раздел [Устранение неполадок](#troubleshooting).
+
+| # | Действие в Okta | Ожидаемый результат в ClickHouse Cloud |
+| - | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
+| 1 | Добавьте тестового пользователя в группу Okta `ClickHouse-Admins` | Пользователь появится в **Settings → Members** с ролью **Admin** |
+| 2 | Тестовый пользователь входит в ClickHouse Cloud через SSO | Он попадет на панель мониторинга с правами администратора |
+| 3 | Обновите имя пользователя в Okta | Обновленное имя появится в **Members** в течение нескольких секунд |
+| 4 | Переместите пользователя из `ClickHouse-Admins` в `ClickHouse-Read-only` | Его роль изменится на **Read-only** |
+| 5 | Отзовите назначение пользователя для приложения (или деактивируйте его в Okta) | Пользователь будет удален из организации; дальнейшие попытки входа завершатся ошибкой |
+
+Если какой-либо шаг не выполняется, устраните основную проблему, прежде чем продолжать — обычно такие проблемы усугубляются.
+
+
+ **Где искать ошибки SCIM в Okta.** Ошибки SCIM отображаются в **Reports → System Log**, отфильтрованном по вашему приложению, а также на экране **Provisioning → View Logs** приложения. Сообщение об ошибке, возвращаемое ClickHouse Cloud, показывается дословно — начните с него.
+
+
+
+ ## Рекомендации для продакшна
+
+
+**Регулярно ротируйте токены.** Установите напоминание в календаре о ротации SCIM-токена. Рекомендуемая периодичность: каждые 12 месяцев или сразу, если администратор, знавший токен, покидает компанию. ClickHouse Cloud позволяет иметь два активных токена на организацию именно для того, чтобы вы могли выполнять ротацию, не нарушая работу провижининга.
+
+**Используйте группы, а не прямые назначения.** Прямое назначение пользователей приложению работает, но быстро становится неудобным для аудита. Если управлять назначениями через группы Okta, проверки доступа и изменения ролей будут происходить в одном месте.
+
+**Проверяйте журнал аудита.** Каждое действие SCIM — пользователь создан, пользователь деактивирован, профиль обновлён — записывается в журнал аудита ClickHouse Cloud. См. [Audit logging](/ru/cloud/security/audit-logging). Периодически проверяйте журнал, особенно после крупных волн провижининга.
+
+**Задайте разумную роль по умолчанию.** Если пользователь Okta назначен приложению, но не входит ни в одну синхронизируемую группу, он создаётся с **ролью по умолчанию**. Выберите максимально ограниченную роль, которая всё же позволяет пользователю *что-то* делать, чтобы ошибки конфигурации не приводили к опасным последствиям.
+
+**Не используйте SCIM и ручные приглашения одновременно.** После включения SCIM управляйте членством через Okta — не отправляйте тем же пользователям ручные приглашения. Смешивание этих двух способов приводит к путанице в том, какая система является источником истины, и может создавать дубликаты.
+
+**Отслеживайте сбои в задачах провижининга.** Okta повторяет неудачные вызовы провижининга, но в итоге перемещает их в очередь **Tasks**. Добавьте эту очередь на панели мониторинга, за которыми уже следит ваша IT-команда, или используйте вебхук или оповещения по электронной почте в Okta, чтобы выявлять повторяющиеся сбои.
+
+
+ ## Устранение неполадок
+
+
+
+ ### Сбой при выполнении команды "Проверить конфигурацию коннектора" в Okta
+
+
+* Убедитесь, что SCIM **включен** в консоли ClickHouse Cloud.
+* Убедитесь, что **базовый URL** в Okta в точности совпадает с URL конечной точки SCIM, показанным в консоли Cloud, — идентификатор организации должен быть указан верно.
+* Убедитесь, что **ключ токена и секрет** вставлены без пробелов в начале и конце.
+* Если вы ротировали токены, убедитесь, что используете **новый** ключ и секрет, а не предыдущую пару.
+
+
+ ### Пользователи создаются, но не получают разрешений
+
+
+* Проверьте, что в разделе **Сопоставление ролей в "Users and roles"** добавлена строка для нужной роли.
+* Проверьте, что имя группы Okta **точно** совпадает с именем группы SCIM в сопоставлении, включая регистр и дефисы.
+* Если в вашей конфигурации часть пользователей намеренно создаётся без группы, убедитесь, что задана **Роль по умолчанию**.
+
+
+ ### Дубликат пользователя в списке участников
+
+
+Обычно это происходит из-за различий в регистре адреса электронной почты в Okta и в более раннем приглашении, отправленном вручную. Удалите дубликат из списка участников, затем снимите назначение пользователя в Okta и назначьте его заново, чтобы повторно создать учетную запись.
+
+
+ ### Ошибка при отправке группы: "displayName not recognised"
+
+
+Имя группы в Okta не совпадает с настроенным сопоставлением в ClickHouse Cloud. Переименуйте группу в Okta или добавьте сопоставление в разделе **Сопоставить роли в "Users and roles"** на панели конфигурации SCIM (или через **Users and roles → Roles**).
+
+
+ ### Деактивированные пользователи по-прежнему отображаются как участники
+
+
+На распространение информации о деактивации в Okta может уйти до минуты. Если через несколько минут пользователь всё ещё числится участником, проверьте в Okta раздел **Provisioning → View Logs** на наличие ошибки в задаче деактивации.
+
+
+ ### Я сменил токен SCIM, и теперь Okta не работает
+
+
+Проверьте, что вы обновили учетные данные в **том же приложении SCIM** в Okta. После обновления нажмите `Test Connector Configuration`, чтобы проверить конфигурацию. Когда провижининг снова станет зеленым, отзовите старый токен в консоли ClickHouse Cloud.
+
+
+ ### Я потерял токен SCIM
+
+
+Токены нельзя восстановить. В **настройках организации → настройках SAML и SCIM → SCIM Configuration** в консоли ClickHouse Cloud отзовите утерянный токен и сгенерируйте новый, а затем обновите учетные данные в Okta.
+
+
+ ## Часто задаваемые вопросы
+
+
+**Нужен ли SAML SSO для использования SCIM?**
+Да. SCIM создаёт учётные записи пользователей, но ClickHouse Cloud аутентифицирует их через SAML. Сначала настройте [SAML SSO](/ru/cloud/security/saml-setup).
+
+**Работает ли SCIM с Microsoft Entra ID, OneLogin или другими SCIM 2.0 IdP?**
+Официально нет — на данный момент мы тестировали и поддерживаем только Okta. Конечная точка соответствует SCIM 2.0 (RFC 7644), но аутентификация ограничена Basic Auth, поэтому любой IdP, который не поддерживает аутентификацию через Basic Auth, работать не будет. Другие SCIM 2.0 IdP с поддержкой Basic Auth могут работать на практике, но мы этого не гарантируем.
+
+**Как быстро изменения в Okta появляются в ClickHouse Cloud?**
+Большинство операций применяется в течение нескольких секунд. Массовые изменения (крупная push-операция для группы) могут занимать больше времени в зависимости от объёма, но Okta автоматически выполняет повторные попытки при временных ошибках.
+
+**Можно ли подключить несколько организаций ClickHouse Cloud к одному тенанту Okta?**
+Да — установите приложение отдельно для каждой организации, с собственными URL конечной точки SCIM и токеном. При необходимости отправляйте одни и те же группы Okta в каждое приложение.
+
+**Где получить помощь, если что-то не получается?**
+Откройте обращение в службу поддержки из консоли ClickHouse Cloud (**Help → Contact support**) и приложите:
+
+* идентификатор вашей организации,
+* идентификатор вашего приложения Okta и
+* скриншот неудачной задачи или теста из журналов Okta.
\ No newline at end of file
diff --git a/ru/products/cloud/navigation.json b/ru/products/cloud/navigation.json
index fccbe9b6f..98516e987 100644
--- a/ru/products/cloud/navigation.json
+++ b/ru/products/cloud/navigation.json
@@ -98,7 +98,6 @@
"expanded": false,
"group": "AI/ML",
"pages": [
- "ru/products/cloud/features/ai-ml/index",
"ru/products/cloud/features/ai-ml/ask-ai",
"ru/products/cloud/features/ai-ml/aichat/using-ai-chat",
"ru/products/cloud/features/ai-ml/aichat/customizing-semantic-layer",
@@ -108,13 +107,11 @@
{
"group": "ClickHouse Agents",
"pages": [
- "ru/products/cloud/features/ai-ml/agents/index",
"ru/products/cloud/features/ai-ml/agents/quickstart",
"ru/products/cloud/features/ai-ml/agents/chat",
{
"group": "Agent Builder",
"pages": [
- "ru/products/cloud/features/ai-ml/agents/builder/index",
"ru/products/cloud/features/ai-ml/agents/builder/model-parameters",
"ru/products/cloud/features/ai-ml/agents/builder/code-interpreter",
"ru/products/cloud/features/ai-ml/agents/builder/web-search",
@@ -123,16 +120,19 @@
"ru/products/cloud/features/ai-ml/agents/builder/mcp-servers",
"ru/products/cloud/features/ai-ml/agents/builder/skills",
"ru/products/cloud/features/ai-ml/agents/builder/subagents"
- ]
+ ],
+ "root": "ru/products/cloud/features/ai-ml/agents/builder/index"
},
"ru/products/cloud/features/ai-ml/agents/prompts",
"ru/products/cloud/features/ai-ml/agents/memory",
"ru/products/cloud/features/ai-ml/agents/marketplace",
"ru/products/cloud/features/ai-ml/agents/sharing-and-access"
- ]
+ ],
+ "root": "ru/products/cloud/features/ai-ml/agents/index"
},
"ru/products/cloud/features/ai-ml/model-developer-terms"
- ]
+ ],
+ "root": "ru/products/cloud/features/ai-ml/index"
}
]
},
@@ -281,6 +281,7 @@
"ru/products/cloud/guides/security/cloud-access-management/manage-sql-console-role-assignments",
"ru/products/cloud/guides/security/cloud-access-management/manage-database-users",
"ru/products/cloud/guides/security/cloud-access-management/saml-sso-setup",
+ "ru/products/cloud/guides/security/cloud-access-management/scim-setup",
"ru/products/cloud/guides/security/cloud-access-management/common-access-management-queries",
"ru/products/cloud/guides/security/cloud-access-management/manage-database-service-accounts",
"ru/products/cloud/guides/security/saml-sso-removal"
diff --git a/ru/reference/navigation.json b/ru/reference/navigation.json
index de2c26472..55f816b12 100644
--- a/ru/reference/navigation.json
+++ b/ru/reference/navigation.json
@@ -53,7 +53,6 @@
"expanded": false,
"group": "CREATE",
"pages": [
- "ru/reference/statements/create/index",
"ru/reference/statements/create/database",
{
"expanded": false,
@@ -114,7 +113,8 @@
"ru/reference/statements/create/table",
"ru/reference/statements/create/user",
"ru/reference/statements/create/view"
- ]
+ ],
+ "root": "ru/reference/statements/create/index"
},
"ru/reference/statements/delete",
"ru/reference/statements/describe-table",
@@ -138,7 +138,6 @@
"expanded": false,
"group": "SELECT",
"pages": [
- "ru/reference/statements/select/index",
"ru/reference/statements/select/all",
"ru/reference/statements/select/apply_modifier",
"ru/reference/statements/select/array-join",
@@ -163,7 +162,8 @@
"ru/reference/statements/select/union",
"ru/reference/statements/select/where",
"ru/reference/statements/select/with"
- ]
+ ],
+ "root": "ru/reference/statements/select/index"
},
"ru/reference/statements/set-role",
"ru/reference/statements/set",
@@ -307,7 +307,6 @@
"expanded": false,
"group": "Table Engines",
"pages": [
- "ru/reference/engines/table-engines/index",
{
"expanded": false,
"group": "Integrations",
@@ -395,7 +394,8 @@
],
"root": "ru/reference/engines/table-engines/special/index"
}
- ]
+ ],
+ "root": "ru/reference/engines/table-engines/index"
},
{
"expanded": false,
diff --git a/ru/resources/develop-contribute/navigation.json b/ru/resources/develop-contribute/navigation.json
index 257b8e0e5..6c5835ae6 100644
--- a/ru/resources/develop-contribute/navigation.json
+++ b/ru/resources/develop-contribute/navigation.json
@@ -46,11 +46,11 @@
{
"group": "Integration development",
"pages": [
- "ru/resources/develop-contribute/integrations/index",
"ru/resources/develop-contribute/integrations/building-integrations",
"ru/resources/develop-contribute/integrations/testing-your-integration",
"ru/resources/develop-contribute/integrations/documenting-your-integration"
- ]
+ ],
+ "root": "ru/resources/develop-contribute/integrations/index"
},
{
"group": "Roadmap",
diff --git a/zh/clickstack/demo-days/2026/2026-05-29.mdx b/zh/clickstack/demo-days/2026/2026-05-29.mdx
new file mode 100644
index 000000000..6cbf45b5f
--- /dev/null
+++ b/zh/clickstack/demo-days/2026/2026-05-29.mdx
@@ -0,0 +1,116 @@
+---
+slug: /use-cases/observability/clickstack/demo-days/2026/2026-05-29
+title: '演示日 - 2026-05-29'
+sidebarTitle: '2026-05-29'
+description: 'ClickStack 2026-05-29 演示日'
+doc_type: 'guide'
+keywords: ['ClickStack', '演示日']
+---
+
+