Elastic
Saiba como integrar os logs de backend do Elastic com os session replays do OpenReplay para ampliar seus recursos de monitoramento e depuração.
1. Crie uma nova chave de API
Section titled 1. Crie uma nova chave de APIDependendo da sua configuração, você pode criar uma chave de API usando o dashboard do Kibana ou por meio de comandos cURL.
Usando o dashboard do Kibana
-
Faça login no seu dashboard do Kibana.
-
Acesse Dev Tools: navegue até Dev Tools > Console.
-
Crie a API Key: copie o código a seguir para o console e execute-o:
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-
Execute o comando cURL: rode o comando a seguir no seu 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'Substitua
https://your-elasticsearch-host:portpelo host e pela porta do seu Elasticsearch, eusername:passwordpelas suas credenciais.
Nota:
- Por padrão, esta integração busca logs em qualquer índice que corresponda a
*log*. Se você tiver um índice específico para logs que não corresponda a esse padrão, altere o camponamesna requisição de criação da chave de API. - Para especificar vários índices, separe os nomes com vírgulas, por exemplo:
"names": ["index1", "index2"].
Resultado da chave de API
Section titled Resultado da chave de APIDepois de executar o comando, você receberá uma resposta como esta:
{
"id": "eQWAIG0Bo0VqB8HXFH9-",
"name": "openreplay-api-key",
"api_key": "dZ5ycVRJTU-5UW_RYfi1_w"
}
Importante: copie o id e o api_key, pois você precisará deles para a integração.
Referência: Elasticsearch - Create API Key
2. Configure a integração do Elasticsearch no OpenReplay
Section titled 2. Configure a integração do Elasticsearch no OpenReplayNa sua conta do OpenReplay, siga estas 3 etapas para concluir a correlação entre os session replays e os logs de backend do Elasticsearch.
Ative a integração do Elasticsearch
Section titled Ative a integração do Elasticsearch- Vá para Preferences > Integrations no OpenReplay.
- Selecione a aba Backend Logging.
- Selecione o projeto no qual você deseja ativar a integração do Elasticsearch: localize o card da integração do Elasticsearch e clique nele.
Insira as credenciais do Elasticsearch
Section titled Insira as credenciais do ElasticsearchNa barra lateral da integração do Elasticsearch, insira:
- API KEY ID: o
idda chave de API que você gerou. - API Key: o
api_keyda chave de API que você gerou. - Indexes: se você alterou o índice ao gerar a chave de API, informe aqui o(s) nome(s).
Verifique a conexão:
Section titled Verifique a conexão:- Clique em Add para testar a conexão.
3. Propague o openReplaySession.id
Section titled 3. Propague o openReplaySession.idPara vincular um evento do Elasticsearch à sessão de usuário gravada, é necessário propagar um ID de sessão exclusivo (openReplaySession.id) do seu frontend para o seu backend em cada requisição que você deseja rastrear.
a. Inclua o openReplaySession.id nas requisições de API do frontend
Section titled a. Inclua o openReplaySession.id nas requisições de API do frontendNota: tracker.start() é assíncrono e retorna uma Promise. Você precisa esperar que ela seja resolvida antes de chamar tracker.getSessionID() para garantir que o ID da sessão esteja disponível.
// JavaScript Example for for Single Page Applications (SPA):
// Import OpenReplay
import { tracker } from '@openreplay/tracker';
// Initialize the tracker
tracker.configure({
projectKey: 'YOUR_PROJECT_KEY',
ingestPoint: "https://openreplay.mydomain.com/ingest", // when dealing with the self-hosted version of OpenReplay
});
// 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. Inclua o openReplaySession.id nos logs do backend
Section titled b. Inclua o openReplaySession.id nos logs do backendPara que o OpenReplay associe uma entrada de log do Elasticsearch à sessão de usuário gravada, o openReplaySession.id deve ser incluído em cada erro de backend que você deseja 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. Considerações especiais
Section titled 4. Considerações especiaisPor padrão, o OpenReplay procura cada log associado a uma sessão do OpenReplay usando os atributos message e utc_time. Ele se concentra em logs de erro, identificados verificando se o atributo tags contém o valor error.
Nota:
- Estrutura de log personalizada: se os seus logs tiverem uma estrutura diferente, talvez seja necessário ajustar a configuração de logging ou avisar o suporte do OpenReplay para que ele acomode a sua configuração.
- Identificação de erros: certifique-se de que os logs de erro estejam marcados adequadamente com tags para que o OpenReplay consiga identificá-los.
Tem dúvidas?
Section titled Tem dúvidas?Se você encontrar algum problema, conecte-se ao nosso Slack e peça ajuda à nossa comunidade.