Elastic

كيفية دمج Elasticsearch مع OpenReplay ورؤية أخطاء الواجهة الخلفية إلى جانب تسجيلات الجلسات.

Elastic

تعرّف على كيفية دمج سجلات الواجهة الخلفية الخاصة بـ Elastic مع تسجيلات الجلسات في OpenReplay لتوسيع قدرات المراقبة وتصحيح الأخطاء لديك.

1. إنشاء مفتاح API جديد

Section titled 1. إنشاء مفتاح API جديد

اعتمادًا على إعداداتك، يمكنك إنشاء مفتاح API باستخدام لوحة تحكم Kibana أو عبر أوامر cURL.

باستخدام لوحة تحكم Kibana

  1. سجّل الدخول إلى لوحة تحكم Kibana الخاصة بك.

  2. الوصول إلى Dev Tools: انتقل إلى Dev Tools > Console.

  3. إنشاء API Key: انسخ الكود التالي إلى وحدة التحكم وقم بتشغيله:

    POST /_security/api_key
    {
      "name": "openreplay-api-key",
      "role_descriptors": {
        "openreplay-role": {
          "cluster": ["all"],
          "index": [
            {
              "names": ["*log*"],
              "privileges": ["read"]
            }
          ]
        }
      }
    }

باستخدام أوامر cURL

Section titled باستخدام أوامر cURL
  1. تنفيذ أمر cURL: قم بتشغيل الأمر التالي في الطرفية لديك:

    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'

    استبدل https://your-elasticsearch-host:port بمضيف ومنفذ Elasticsearch الخاص بك، و username:password ببيانات اعتمادك.

ملاحظة:

  • بشكل افتراضي، سيبحث هذا التكامل عن السجلات داخل أي فهرس يطابق *log*. إذا كان لديك فهرس محدد للسجلات لا يطابق هذا النمط، فيرجى تغيير حقل names في طلب إنشاء مفتاح API.
  • لتحديد عدة فهارس، افصل بين الأسماء بفواصل، على سبيل المثال، "names": ["index1", "index2"].

بعد تشغيل الأمر، ستتلقى استجابة مثل:

{
  "id": "eQWAIG0Bo0VqB8HXFH9-",
  "name": "openreplay-api-key",
  "api_key": "dZ5ycVRJTU-5UW_RYfi1_w"
}

مهم: تأكد من نسخ id و api_key لأنك ستحتاج إليهما من أجل التكامل.

المرجع: Elasticsearch - Create API Key

2. تكوين تكامل Elasticsearch في OpenReplay

Section titled 2. تكوين تكامل Elasticsearch في OpenReplay

في حساب OpenReplay الخاص بك، اتبع هذه الخطوات الثلاث لإكمال ربط تسجيلات الجلسات بسجلات الواجهة الخلفية الخاصة بـ Elasticsearch.

تمكين تكامل Elasticsearch

Section titled تمكين تكامل Elasticsearch
  1. انتقل إلى Preferences > Integrations في OpenReplay.
  2. حدد علامة التبويب Backend Logging.
  3. حدد المشروع الذي تريد تمكين تكامل Elasticsearch له: حدد بطاقة تكامل Elasticsearch > انقر عليها.

إدخال بيانات اعتماد Elasticsearch

Section titled إدخال بيانات اعتماد Elasticsearch

في الشريط الجانبي لتكامل Elasticsearch، أدخل:

  • API KEY ID: قيمة id من مفتاح API الذي أنشأته.
  • API Key: قيمة api_key من مفتاح API الذي أنشأته.
  • Indexes: إذا قمت بتغيير الفهرس عند إنشاء مفتاح API، فحدد الاسم (الأسماء) هنا.

التحقق من الاتصال:

Section titled التحقق من الاتصال:
  • انقر على Add لاختبار الاتصال.

3. نشر openReplaySession.id

Section titled 3. نشر openReplaySession.id

لربط حدث Elasticsearch بجلسة المستخدم المسجَّلة، يلزم نشر معرّف جلسة فريد (openReplaySession.id) من الواجهة الأمامية إلى الواجهة الخلفية في كل طلب تريد تتبّعه.

a. تضمين openReplaySession.id في طلبات API الخاصة بالواجهة الأمامية

Section titled a. تضمين openReplaySession.id في طلبات API الخاصة بالواجهة الأمامية

ملاحظة: tracker.start() غير متزامن ويُرجع Promise. تحتاج إلى انتظار اكتماله قبل استدعاء tracker.getSessionID() لضمان توفّر معرّف الجلسة.

// 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. تضمين openReplaySession.id في سجلات الواجهة الخلفية

Section titled b. تضمين openReplaySession.id في سجلات الواجهة الخلفية

لكي يربط OpenReplay إدخال سجل Elasticsearch بجلسة المستخدم المسجَّلة، يجب تضمين openReplaySession.id في كل خطأ من أخطاء الواجهة الخلفية التي تريد تتبّعها.

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()

بشكل افتراضي، يبحث OpenReplay عن كل سجل مرتبط بجلسة OpenReplay باستخدام السمتين message و utc_time. ويركّز على سجلات الأخطاء، التي يتم تحديدها عن طريق التحقق مما إذا كانت السمة tags تحتوي على القيمة error.

ملاحظة:

  • بنية سجلات مخصصة: إذا كانت سجلاتك ذات بنية مختلفة، فقد تحتاج إلى ضبط تكوين التسجيل لديك أو إبلاغ دعم OpenReplay لاستيعاب إعداداتك.
  • تحديد الأخطاء: تأكد من أن سجلات الأخطاء موسومة بشكل مناسب حتى يتمكن OpenReplay من تحديدها.

إذا واجهت أي مشكلات، تواصل معنا عبر Slack أو اطّلع على المنتدى الخاص بنا واحصل على المساعدة من مجتمعنا.