Elastic
تعرّف على كيفية دمج سجلات الواجهة الخلفية الخاصة بـ Elastic مع إعادة تشغيل الجلسات في OpenReplay لتوسيع قدرات المراقبة وتصحيح الأخطاء لديك.
1. إنشاء مفتاح API جديد
Section titled 1. إنشاء مفتاح API جديداعتمادًا على إعداداتك، يمكنك إنشاء مفتاح API باستخدام لوحة تحكم Kibana أو عبر أوامر cURL.
باستخدام لوحة تحكم Kibana
-
سجّل الدخول إلى لوحة تحكم Kibana الخاصة بك.
-
انتقل إلى Dev Tools: توجّه إلى Dev Tools > Console.
-
أنشئ مفتاح API: انسخ الكود التالي إلى وحدة التحكم وقم بتشغيله:
POST /_security/api_key { "name": "openreplay-api-key", "role_descriptors": { "openreplay-role": { "cluster": ["all"], "index": [ { "names": ["*log*"], "privileges": ["read"] } ] } } }
باستخدام أوامر cURL
Section titled باستخدام أوامر cURL-
نفّذ أمر 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"].
نتيجة مفتاح API
Section titled نتيجة مفتاح APIبعد تشغيل الأمر، ستتلقى استجابة مثل:
{
"id": "eQWAIG0Bo0VqB8HXFH9-",
"name": "openreplay-api-key",
"api_key": "dZ5ycVRJTU-5UW_RYfi1_w"
}
هام: تأكد من نسخ id و api_key لأنك ستحتاج إليهما للتكامل.
2. تكوين تكامل Elasticsearch في OpenReplay
Section titled 2. تكوين تكامل Elasticsearch في OpenReplayفي حساب OpenReplay الخاص بك، اتبع هذه الخطوات الثلاث لإكمال ربط إعادة تشغيل الجلسات بسجلات الواجهة الخلفية الخاصة بـ Elasticsearch.
تفعيل تكامل Elasticsearch
Section titled تفعيل تكامل Elasticsearch- انتقل إلى Preferences > Integrations في OpenReplay.
- حدّد علامة التبويب Backend Logging.
- حدّد المشروع الذي تريد تفعيل تكامل 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 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. تضمين 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()
4. اعتبارات خاصة
Section titled 4. اعتبارات خاصةافتراضيًا، يبحث OpenReplay عن كل سجل مرتبط بجلسة OpenReplay باستخدام السمتين message و utc_time. وهو يركّز على سجلات الأخطاء، التي يتم تحديدها بالتحقق مما إذا كانت السمة tags تحتوي على القيمة error.
ملاحظة:
- بنية سجل مخصصة: إذا كانت سجلاتك ذات بنية مختلفة، فقد تحتاج إلى تعديل تكوين التسجيل لديك أو إبلاغ فريق دعم OpenReplay لاستيعاب إعداداتك.
- تحديد الأخطاء: تأكد من أن سجلات الأخطاء موسومة بشكل مناسب حتى يتمكّن OpenReplay من تحديدها.
هل لديك أسئلة؟
Section titled هل لديك أسئلة؟إذا واجهت أي مشكلات، فتواصل معنا عبر Slack أو اطّلع على المنتدى الخاص بنا واحصل على المساعدة من مجتمعنا.