Elastic
Aprende a integrar los registros del backend de Elastic con las repeticiones de sesión de OpenReplay para ampliar tus capacidades de monitoreo y depuración.
1. Crear una nueva clave de API
Section titled 1. Crear una nueva clave de APISegún tu configuración, puedes crear una clave de API mediante el panel de Kibana o a través de comandos cURL.
Usando el panel de Kibana
-
Inicia sesión en tu panel de Kibana.
-
Accede a Dev Tools: Navega a Dev Tools > Console.
-
Crea la clave de API: Copia el siguiente código en la consola y ejecútalo:
POST /_security/api_key { "name": "openreplay-api-key", "role_descriptors": { "openreplay-role": { "cluster": ["all"], "index": [ { "names": ["*log*"], "privileges": ["read"] } ] } } }
Usando comandos cURL
Section titled Usando comandos cURL-
Ejecuta el comando cURL: Ejecuta el siguiente comando en tu terminal:
curl -X POST "https://your-elasticsearch-host:port/_security/api_key" \ -H 'Content-Type: application/json' \ -d' { "name": "openreplay-api-key", "role_descriptors": { "openreplay-role": { "cluster": ["all"], "index": [ { "names": ["*log*"], "privileges": ["read"] } ] } } }' \ -u 'username:password'Reemplaza
https://your-elasticsearch-host:portcon el host y el puerto de tu Elasticsearch, yusername:passwordcon tus credenciales.
Nota:
- De forma predeterminada, esta integración buscará registros dentro de cualquier índice que coincida con
*log*. Si tienes un índice específico para los registros que no coincide con este patrón, cambia el camponamesen la solicitud de creación de la clave de API. - Para especificar varios índices, separa los nombres con comas, por ejemplo,
"names": ["index1", "index2"].
Resultado de la clave de API
Section titled Resultado de la clave de APIDespués de ejecutar el comando, recibirás una respuesta como esta:
{
"id": "eQWAIG0Bo0VqB8HXFH9-",
"name": "openreplay-api-key",
"api_key": "dZ5ycVRJTU-5UW_RYfi1_w"
}
Importante: Asegúrate de copiar el id y la api_key, ya que los necesitarás para la integración.
Referencia: Elasticsearch - Create API Key
2. Configurar la integración de Elasticsearch en OpenReplay
Section titled 2. Configurar la integración de Elasticsearch en OpenReplayEn tu cuenta de OpenReplay, sigue estos 3 pasos para completar las correlaciones de las repeticiones de sesión con los registros del backend de Elasticsearch.
Habilitar la integración de Elasticsearch
Section titled Habilitar la integración de Elasticsearch- Ve a Preferences > Integrations en OpenReplay.
- Selecciona la pestaña Backend Logging.
- Selecciona el proyecto en el que quieres habilitar la integración de Elasticsearch: Localiza la tarjeta de integración de Elasticsearch > Haz clic en ella.
Introducir las credenciales de Elasticsearch
Section titled Introducir las credenciales de ElasticsearchEn la barra lateral de la integración de Elasticsearch, introduce:
- API KEY ID: El
idde la clave de API que generaste. - API Key: La
api_keyde la clave de API que generaste. - Indexes: Si cambiaste el índice al generar la clave de API, especifica aquí el nombre o los nombres.
Verificar la conexión:
Section titled Verificar la conexión:- Haz clic en Add para probar la conexión.
3. Propagar openReplaySession.id
Section titled 3. Propagar openReplaySession.idPara vincular un evento de Elasticsearch con la sesión de usuario grabada, es necesario propagar un ID de sesión único (openReplaySession.id) desde tu frontend hacia tu backend en cada solicitud que quieras rastrear.
a. Incluir openReplaySession.id en las solicitudes de API del frontend
Section titled a. Incluir openReplaySession.id en las solicitudes de API del frontendNota: tracker.start() es asíncrono y devuelve una promesa. Debes esperar a que se resuelva antes de llamar a tracker.getSessionID() para garantizar que el ID de sesión esté disponible.
// JavaScript Example for for Single Page Applications (SPA):
// Import OpenReplay
import OpenReplay from '@openreplay/tracker';
// Initialize the tracker
const tracker = new OpenReplay({
projectKey: 'YOUR_PROJECT_KEY',
});
// Start the tracker and wait for it to resolve
tracker.start().then(() => {
// Get the session ID after the tracker has started
const sessionId = tracker.getSessionID();
const headers = {
'Content-Type': 'application/json',
};
if (sessionId) {
headers['openReplaySession.id'] = sessionId;
}
// Make the API request
fetch('https://www.your-backend.com/api/endpoint', {
method: 'GET', // or 'POST', 'PUT', etc.
headers,
// ...other options
})
.then(response => {
// Handle response
})
.catch(error => {
// Handle error
});
});
b. Incluir openReplaySession.id en los registros del backend
Section titled b. Incluir openReplaySession.id en los registros del backendPara que OpenReplay pueda asociar una entrada de registro de Elasticsearch con la sesión de usuario grabada, el openReplaySession.id debe incluirse en cada error del backend que desees rastrear.
import logging
from flask import Flask, request, g
app = Flask(__name__)
# Configure the root logger
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
# Create a custom logging filter
class OpenReplayFilter(logging.Filter):
def filter(self, record):
session_id = getattr(g, 'openreplay_session_id', None)
if session_id:
record.msg = f"[openReplaySession.id={session_id}] {record.msg}"
return True
# Add the filter to the logger
logger.addFilter(OpenReplayFilter())
@app.before_request
def before_request():
# Extract the session ID from headers and store it in the Flask `g` object
g.openreplay_session_id = request.headers.get('openReplaySession.id')
@app.route('/api/endpoint')
def api_endpoint():
# Your logic here
# Log an event with the session ID automatically included
logger.info("Endpoint accessed")
return 'Success', 200
@app.errorhandler(Exception)
def handle_exception(e):
# Log the error with the session ID automatically included
logger.error(f"Error: {str(e)}")
return 'Internal Server Error', 500
if __name__ == '__main__':
app.run()
4. Consideraciones especiales
Section titled 4. Consideraciones especialesDe forma predeterminada, OpenReplay busca cada registro asociado a una sesión de OpenReplay usando los atributos message y utc_time. Se centra en los registros de errores, identificados al comprobar si el atributo tags contiene el valor error.
Nota:
- Estructura de registro personalizada: Si tus registros tienen una estructura diferente, es posible que necesites ajustar tu configuración de registro o informar al soporte de OpenReplay para adaptarse a tu configuración.
- Identificación de errores: Asegúrate de que los registros de errores estén etiquetados adecuadamente para que OpenReplay pueda identificarlos.
¿Tienes preguntas?
Section titled ¿Tienes preguntas?Si encuentras algún problema, conéctate a nuestro Slack o consulta nuestro Foro y obtén ayuda de nuestra comunidad.