Elastic
تعرّف على كيفية دمج سجلات الواجهة الخلفية الخاصة بـ Elastic مع تسجيلات الجلسات في OpenReplay لتوسيع قدرات المراقبة وتصحيح الأخطاء لديك.
1. إنشاء مفتاح API جديد
Section titled 1. إنشاء مفتاح API جديداعتمادًا على إعداداتك، يمكنك إنشاء مفتاح API باستخدام لوحة تحكم Kibana أو عبر أوامر cURL.
باستخدام لوحة تحكم Kibana
-
سجّل الدخول إلى لوحة تحكم Kibana الخاصة بك.
-
الوصول إلى Dev Tools: انتقل إلى Dev Tools > Console.
-
إنشاء 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-
تنفيذ أمر 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 لأنك ستحتاج إليهما من أجل التكامل.
المرجع: Elasticsearch - Create 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 { 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()
4. اعتبارات خاصة
Section titled 4. اعتبارات خاصةبشكل افتراضي، يبحث OpenReplay عن كل سجل مرتبط بجلسة OpenReplay باستخدام السمتين message و utc_time. ويركّز على سجلات الأخطاء، التي يتم تحديدها عن طريق التحقق مما إذا كانت السمة tags تحتوي على القيمة error.
ملاحظة:
- بنية سجلات مخصصة: إذا كانت سجلاتك ذات بنية مختلفة، فقد تحتاج إلى ضبط تكوين التسجيل لديك أو إبلاغ دعم OpenReplay لاستيعاب إعداداتك.
- تحديد الأخطاء: تأكد من أن سجلات الأخطاء موسومة بشكل مناسب حتى يتمكن OpenReplay من تحديدها.
هل لديك أسئلة؟
Section titled هل لديك أسئلة؟إذا واجهت أي مشكلات، تواصل معنا عبر Slack أو اطّلع على المنتدى الخاص بنا واحصل على المساعدة من مجتمعنا.