تحليل الاستخدام في مساحة عمل Log Analytics
تختلف تكاليف Azure Monitor بشكل كبير حسب حجم البيانات التي يتم جمعها في مساحة عمل تحليلات السجل. يتأثر هذا الحجم بمجموعة الحلول التي تستخدم مساحة العمل ومقدار البيانات التي يجمعها كل حل. توفر هذه المقالة إرشادات حول تحليل البيانات التي تم جمعها للمساعدة في التحكم في تكاليف استيعاب البيانات. يساعدك على تحديد سبب الاستخدام الأعلى من المتوقع. كما يساعدك على التنبؤ بتكاليفك أثناء مراقبة المزيد من الموارد وتكوين ميزات Azure Monitor المختلفة.
تلميح
للحصول على استراتيجيات لتقليل تكاليف Azure Monitor، راجع تحسين التكلفة وAzure Monitor.
أسباب الاستخدام الأعلى من المتوقع
يتم احتساب تكلفة كل مساحة عمل من مساحات عمل تحليل السجل كخدمة منفصلة، كما أنها تساهم في دفع فاتورة اشتراك Azure. يمكن أن يكون مقدار استيعاب البيانات كبيرا، اعتمادا على:
- مجموعة من الرؤى والخدمات الممكنة وتكوينها.
- عدد ونوع الموارد المراقبة.
- حجم البيانات التي تم جمعها من كل مورد مراقب.
يمكن أن تؤدي الزيادة غير المتوقعة في أي من هذه العوامل إلى زيادة رسوم الاحتفاظ بالبيانات. تستكمل هذه المقالة طرق الكشف عن مثل هذا الموقف ثم تحليل البيانات المجمعة لتحديد مصدر الاستخدام المتزايد والحد منه.
إرسال تنبيه عندما يكون جمع البيانات مرتفعًا
يجب، لتجنب الفواتير غير المتوقعة، إعلامك مُسبقًا وفي أي وقت تواجه فيه استخدامًا مفرطًا. يسمح لك الإخطار بمعالجة أي حالات غير طبيعية محتملة قبل نهاية فترة الفوترة.
المثال التالي هو قاعدة تنبيه بحث السجل التي ترسل تنبيها إذا كان حجم البيانات القابلة للفوترة الذي تم استيعابه في آخر 24 ساعة أكبر من 50 غيغابايت. يمكنك تعديل إعداد «منطق التنبيه» لاستخدام حدّ مختلف استنادًا إلى الاستخدام المتوقع في بيئتك. يمكنك أيضًا زيادة التردد للتحقق من الاستخدام عدة مرات يوميًا، لكن سيؤدي هذا الخيار إلى فرض رسوم أعلى على قاعدة التنبيه.
الإعداد | القيمة |
---|---|
النطاق | |
نطاق الهدف | حدد مساحة عمل تحليلات السجل الخاصة بك. |
الشرط | |
الاستعلام | Usage | where IsBillable | summarize DataGB = sum(Quantity / 1000) |
القياس | مقياس: DataGB نوع التجميع: إجمالي نقاوة التجميع: 1 يوم |
منطق التنبيه | عامل التشغيل: أكبر من قيمة الحد: 50 تكرار التقييم: 1 يوم |
الإجراءات | يوصى بتحديد أو إضافة مجموعة إجراءات لإعلامك عند تجاوز الحد. |
التفاصيل | |
الأهمية | تحذير |
اسم قاعدة التنبيه | حجم البيانات القابل للفوترة أكبر من 50 غيغابايت في 24 ساعة. |
تحليل الاستخدام في Azure Monitor
ابدأ التحليل باستخدام الأدوات الموجودة في Azure Monitor. لا تتطلب هذه الأدوات أي تكوين ويمكن أن توفر في كثير من الأحيان المعلومات التي تحتاجها بأقل جهد ممكن. إذا كنت بحاجة إلى تحليل أعمق للبيانات التي تم جمعها من ميزات Azure Monitor الحالية، فاستخدم أي من استعلامات السجل التالية في Log Analytics.
تفاصيل سجل تحليلات مساحة العمل
توفر لك Log Analytics Workspace Insights فهما سريعا للبيانات في مساحة العمل الخاصة بك. على سبيل المثال، يمكنك تحديد:
- جداول البيانات التي استيعاب أكبر قدر من حجم البيانات في الجدول الرئيسي.
- أهم الموارد المساهمة بالبيانات.
- اتجاه استيعاب البيانات.
راجع علامة التبويب استخدام للحصول على تصنيف تفصيلي للاستيعاب حسب الحل والجدول. يمكن أن تساعدك هذه المعلومات في التعرف بسرعة على الجداول التي تساهم في الجزء الأكبر من حجم البيانات. تعرض علامة التبويب أيضا اتجاه جمع البيانات بمرور الوقت. يمكنك تحديد ما إذا كان جمع البيانات قد زاد بشكل مطرد بمرور الوقت أو زاد فجأة استجابة لتغيير التكوين.
حدد استعلامات إضافية للاستعلامات التي تم إنشاؤها مسبقا والتي تساعدك على فهم أنماط البيانات بشكل أكبر.
الاستخدام والتكاليف المتوقعة
يعرض مخطط استيعاب البيانات لكل حل في صفحة الاستخدام والتكاليف المقدرة لكل مساحة عمل إجمالي حجم البيانات المرسلة ومقدار ما يتم إرساله من قبل كل حل خلال ال 31 يوما السابقة. تساعدك هذه المعلومات على تحديد اتجاهات مثل ما إذا كانت أي زيادة من الاستخدام العام للبيانات أو الاستخدام بواسطة حل معين.
الاستعلام عن وحدات تخزين البيانات من جدول الاستخدام
تحليل كمية البيانات القابلة للفوترة التي جمعتها خدمة أو حل معين. تستخدم هذه الاستعلامات جدول الاستخدام الذي يجمع بيانات الاستخدام لكل جدول في مساحة العمل.
إشعار
العبارة TimeGenerated
هدفها فقط التأكد من أن تجربة الاستعلام في مدخل Microsoft Azure تبحث إلى ما بعد 24 ساعة الافتراضية. عند استخدام نوع بيانات الاستخدام ، StartTime
وتمثيل EndTime
مستودعات الوقت التي يتم تقديم النتائج لها.
حجم البيانات القابلة للفوترة حسب النوع خلال الشهر الماضي
Usage
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000. by bin(StartTime, 1d), DataType
| render columnchart
حجم البيانات القابلة للفوترة حسب الحل والنوع خلال الشهر الماضي
Usage
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000 by Solution, DataType
| sort by Solution asc, DataType asc
الاستعلام عن حجم البيانات من الأحداث مباشرة
يمكنك استخدام استعلامات السجل في تحليلات السجل إذا كنت بحاجة إلى تحليل أعمق للبيانات التي جمعتها. يحتوي كل جدول في مساحة عمل Log Analytics على الأعمدة القياسية التالية التي يمكن أن تساعدك في تحليل البيانات القابلة للفوترة:
- يحدد _IsBillable السجلات التي توجد رسوم استيعاب لها. استخدم هذا العمود لتصفية البيانات غير القابلة للفوترة.
- يوفر _BilledSize حجم السجل بالبايت.
حجم البيانات القابلة للفوترة لأحداث معينة
إذا وجدت أن نوعا معينا من البيانات يجمع بيانات زائدة، فقد تحتاج إلى تحليل البيانات الموجودة في هذا الجدول لتحديد سجلات معينة متزايدة. يقوم هذا المثال بتصفية معرفات أحداث معينة في Event
الجدول ثم يوفر عددا لكل معرف. يمكنك تعديل هذا الاستعلام باستخدام الأعمدة من جداول أخرى.
Event
| where TimeGenerated > startofday(ago(31d)) and TimeGenerated < startofday(now())
| where EventID == 5145 or EventID == 5156
| where _IsBillable == true
| summarize count(), Bytes=sum(_BilledSize) by EventID, bin(TimeGenerated, 1d)
حجم البيانات حسب مورد Azure أو مجموعة الموارد أو الاشتراك
يمكنك تحليل كمية البيانات القابلة للفوترة التي تم جمعها من مورد معين أو مجموعة من الموارد. تستخدم هذه الاستعلامات أعمدة _ResourceId و _SubscriptionId للبيانات من الموارد المستضافة في Azure.
تحذير
استخدم استعلامات find على فترات متباعدة لأن عمليات الفحص عبر أنواع البيانات هي موارد كثيفة وصعبة التنفيذ. إذا لم تكن بحاجة إلى نتائج لكل اشتراك أو مجموعة موارد أو اسم مورد، فاستخدم جدول الاستخدام كما في الاستعلامات السابقة.
حجم البيانات القابلة للفوترة بواسطة معرّف المورد لآخر يوم كامل
find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId
| sort by BillableDataBytes nulls last
حجم البيانات القابلة للفوترة بواسطة مجموعة الموارد لآخر يوم كامل
find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId
| extend resourceGroup = tostring(split(_ResourceId, "/")[4] )
| summarize BillableDataBytes = sum(BillableDataBytes) by resourceGroup
| sort by BillableDataBytes nulls last
قد يكون من المفيد تحليل _ResourceId
:
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
حجم البيانات القابلة للفوترة بواسطة الاشتراك لآخر يوم كامل
find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, _SubscriptionId
| where _IsBillable == true
| summarize BillableDataBytes = sum(_BilledSize) by _SubscriptionId
| sort by BillableDataBytes nulls last
تلميح
بالنسبة لمساحات العمل ذات وحدات تخزين البيانات الكبيرة، قد يلزم تقييد إجراء استعلامات مثل تلك المعروضة في هذا القسم، والتي تستعلم عن كميات كبيرة من البيانات الأولية، إلى يوم واحد. لتعقب الاتجاهات بمرور الوقت، ضع في اعتبارك إعداد تقرير Power BI واستخدام التحديث التزايدي لجمع وحدات تخزين البيانات لكل مورد مرة واحدة في اليوم.
حجم البيانات حسب الكمبيوتر
يمكنك تحليل كمية البيانات القابلة للفوترة التي تم جمعها من جهاز ظاهري أو مجموعة من الأجهزة الظاهرية. لا يحتوي جدول الاستخدام على التفاصيل لإظهار وحدات تخزين البيانات لأجهزة ظاهرية معينة، لذلك تستخدم هذه الاستعلامات عامل البحث للبحث في جميع الجداول التي تتضمن اسم كمبيوتر. يتم حذف نوع الاستخدام لأن هذا الاستعلام مخصص فقط لتحليل اتجاهات البيانات.
تحذير
استخدم استعلامات find على فترات متباعدة لأن عمليات الفحص عبر أنواع البيانات هي موارد كثيفة وصعبة التنفيذ. إذا لم تكن بحاجة إلى نتائج لكل اشتراك أو مجموعة موارد أو اسم مورد، فاستخدم جدول الاستخدام كما في الاستعلامات السابقة.
حجم البيانات القابلة للفوترة بواسطة الكمبيوتر لآخر يوم كامل
find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize BillableDataBytes = sum(_BilledSize) by computerName
| sort by BillableDataBytes desc nulls last
عدد الأحداث القابلة للفوترة بواسطة الكمبيوتر لآخر يوم كامل
find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize eventCount = count() by computerName
| sort by eventCount desc nulls last
الاستعلام عن أنواع البيانات الشائعة
إذا وجدت أن لديك بيانات زائدة قابلة للفوترة لنوع بيانات معين، فقد تحتاج إلى إجراء استعلام لتحليل البيانات في هذا الجدول. توفر الاستعلامات التالية عينات لبعض أنواع البيانات الشائعة:
الحل الأمني
SecurityEvent
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last
حل إدارة السجل
Usage
| where Solution == "LogManagement" and iff(isnotnull(toint(IsBillable)), IsBillable == true, IsBillable == "true") == true
| summarize AggregatedValue = count() by DataType
| order by AggregatedValue desc nulls last
نوع بيانات Perf
Perf
| summarize AggregatedValue = count() by CounterPath
Perf
| summarize AggregatedValue = count() by CounterName
نوع بيانات Event
Event
| summarize AggregatedValue = count() by EventID
Event
| summarize AggregatedValue = count() by EventLog, EventLevelName
نوع بيانات Syslog
Syslog
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog
| summarize AggregatedValue = count() by ProcessName
نوع بيانات AzureDiagnostics
AzureDiagnostics
| summarize AggregatedValue = count() by ResourceProvider, ResourceId
بيانات Application Insights
هناك نهجان للتحقيق في كمية البيانات التي تم جمعها لـ Application insights، اعتمادا على نوع التطبيق سواء كان كلاسيكي أو مستند إلى مساحة العمل. استخدم الخاصية _BilledSize
المتوفرة في كل حدث تم استيعابه لكل من الموارد المستندة إلى مساحة العمل والموارد الكلاسيكية. يمكنك أيضا استخدام المعلومات المجمعة في جدول systemEvents للموارد الكلاسيكية.
إشعار
ستعمل الاستعلامات مقابل جداول Application Insights، باستثناء SystemEvents
، لكل من مورد Application Insights المستند إلى مساحة العمل والكلاسيكي. يسمح لك التوافق مع الإصدارات السابقة بالاستمرار في استخدام أسماء الجداول القديمة. بالنسبة إلى مورد يستند إلى مساحة العمل، افتح Logs في قائمة مساحة عمل Log Analytics. بالنسبة لمورد كلاسيكي، افتح السجلات في قائمة Application Insights .
تنشئ عمليات التبعيات أكبر حجم للبيانات في آخر 30 يومًا (مستندة إلى مساحة العمل أو كلاسيكية)
dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart
حجم البيانات اليومي حسب النوع لمورد Application Insights هذا لآخر 7 أيام (كلاسيكي فقط)
systemEvents
| where timestamp >= startofday(ago(7d)) and timestamp < startofday(now())
| where type == "Billing"
| extend BillingTelemetryType = tostring(dimensions["BillingTelemetryType"])
| extend BillingTelemetrySizeInBytes = todouble(measurements["BillingTelemetrySize"])
| summarize sum(BillingTelemetrySizeInBytes) by BillingTelemetryType, bin(timestamp, 1d)
اتجاهات حجم البيانات للموارد المستندة إلى مساحة عمل
لإلقاء نظرة على اتجاهات حجم البيانات لموارد Application Insights المستندة إلى مساحة العمل، استخدم استعلاما يتضمن جميع جداول Application Insights. تستخدم الاستعلامات التالية أسماء الجداول الخاصة بالموارد المستندة إلى مساحة العمل.
حجم البيانات اليومي حسب النوع لكافة موارد Application Insights في مساحة عمل لمدة 7 أيام
union AppAvailabilityResults,
AppBrowserTimings,
AppDependencies,
AppExceptions,
AppEvents,
AppMetrics,
AppPageViews,
AppPerformanceCounters,
AppRequests,
AppSystemEvents,
AppTraces
| where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now())
| summarize sum(_BilledSize) by _ResourceId, bin(TimeGenerated, 1d)
لإلقاء نظرة على اتجاهات حجم البيانات لمورد Application Insights واحد فقط، أضف السطر التالي من قبل summarize
في الاستعلام السابق:
| where _ResourceId contains "<myAppInsightsResourceName>"
تلميح
بالنسبة لمساحات العمل ذات وحدات تخزين البيانات الكبيرة، قد يلزم تقييد إجراء استعلامات مثل الاستعلامات السابقة، التي تستعلم عن كميات كبيرة من البيانات الأولية، إلى يوم واحد. لتعقب الاتجاهات بمرور الوقت، ضع في اعتبارك إعداد تقرير Power BI واستخدام التحديث التزايدي لجمع وحدات تخزين البيانات لكل مورد مرة واحدة في اليوم.
فهم العقد التي ترسل البيانات
إذا لم يكن لديك بيانات زائدة من أي مصدر معين، فقد يكون لديك عدد كبير من العوامل التي ترسل البيانات.
عدد عقد العامل التي ترسل رسالة كشف أخطاء الاتصال كل يوم في الشهر الماضي
Heartbeat
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)
| render timechart
تحذير
استخدم استعلامات find على فترات متباعدة لأن عمليات الفحص عبر أنواع البيانات هي موارد كثيفة وصعبة التنفيذ. إذا لم تكن بحاجة إلى نتائج لكل اشتراك أو مجموعة موارد أو اسم مورد، فاستخدم جدول الاستخدام كما في الاستعلامات السابقة.
عدد العقد التي ترسل أي بيانات في آخر 24 ساعة
find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)
حجم البيانات التي أرسلتها كل عقدة في آخر 24 ساعة
find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName
العقد التي تمت فوترتها من قبل مستوى الأسعار القديمة لكل عقدة
فواتير مستوى التسعير القديم لكل عقدة للعقد ذات نقاوة كل ساعة. كما أنه لا يحسب العقد التي ترسل مجموعة من أنواع بيانات الأمان فقط. للحصول على قائمة بأجهزة الكمبيوتر التي سيتم فوترتها كعقد إذا كانت مساحة العمل في مستوى التسعير القديم لكل عقدة، ابحث عن العقد التي ترسل أنواع البيانات المفوترة لأن بعض أنواع البيانات مجانية. في هذه الحالة، استخدم الحقل الموجود أقصى يسار اسم المجال المؤهل بالكامل.
ترجع الاستعلامات التالية عدد أجهزة الكمبيوتر التي تحتوي على بيانات فوترة لكل ساعة. عدد الوحدات الموجودة في الفاتورة في وحدات أشهر العقدة، والتي يمثلها billableNodeMonthsPerDay
في الاستعلام. إذا كان حل إدارة التحديث مثبتا في مساحة العمل، قم بإضافة أنواع البيانات تحديث و ملخص التحديث إلى القائمة في عبارة where
.
find where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now()) project Computer, _IsBillable, Type, TimeGenerated
| where Type !in ("SecurityAlert", "SecurityBaseline", "SecurityBaselineSummary", "SecurityDetection", "SecurityEvent", "WindowsFirewall", "MaliciousIPCommunication", "LinuxAuditLog", "SysmonEvent", "ProtectionStatus", "WindowsEvent")
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| where _IsBillable == true
| summarize billableNodesPerHour=dcount(computerName) by bin(TimeGenerated, 1h)
| summarize billableNodesPerDay = sum(billableNodesPerHour)/24., billableNodeMonthsPerDay = sum(billableNodesPerHour)/24./31. by day=bin(TimeGenerated, 1d)
| sort by day asc
إشعار
لا يتم تمثيل بعض التعقيد في خوارزمية الفوترة الفعلية عند استخدام استهداف الحل في الاستعلام السابق.
عدد عقد الأمان والأتمتة
عدد عقد الأمان المميزة
union
(
Heartbeat
| where (Solutions has 'security' or Solutions has 'antimalware' or Solutions has 'securitycenter')
| project Computer
),
(
ProtectionStatus
| where Computer !in (Heartbeat | project Computer)
| project Computer
)
| distinct Computer
| project lowComputer = tolower(Computer)
| distinct lowComputer
| count
عدد عقد الأتمتة المميزة
ConfigurationData
| where (ConfigDataType == "WindowsServices" or ConfigDataType == "Software" or ConfigDataType =="Daemons")
| extend lowComputer = tolower(Computer) | summarize by lowComputer
| join (
Heartbeat
| where SCAgentChannel == "Direct"
| extend lowComputer = tolower(Computer) | summarize by lowComputer, ComputerEnvironment
) on lowComputer
| summarize count() by ComputerEnvironment | sort by ComputerEnvironment asc
البيانات المتأخرة
إذا لاحظت ارتفاع البيانات التي تم الإبلاغ عنها باستخدام Usage
السجلات، ولكنك لم تلاحظ نفس النتائج التي تجمع _BilledSize
مباشرة على نوع البيانات، فمن المحتمل أن يكون لديك بيانات متأخرة الوصول. يحدث هذا الموقف عند استيعاب البيانات بالطوابع الزمنية القديمة.
على سبيل المثال، قد يكون لدى العامل مشكلة في الاتصال ويرسل البيانات المتراكمة عند إعادة الاتصال. أو قد يكون لدى المضيف وقت غير صحيح. يمكن أن يؤدي أي من المثالين إلى تعارض واضح بين البيانات التي تم تناولها التي تم الإبلاغ عنها بواسطة نوع بيانات الاستخدام واستعلام يجمع _BilledSize عبر البيانات الأولية ليوم معين محدد بواسطة TimeGenerated، الطابع الزمني عند إنشاء الحدث.
لتشخيص مشكلات البيانات المتأخرة، استخدم العمود _TimeReceived والعمود TimeGenerated . _TimeReceived
الخاصية هي الوقت الذي تم فيه تلقي السجل بواسطة نقطة استيعاب Azure Monitor في سحابة Azure.
المثال التالي هو استجابة لأحجام البيانات التي تم استيعابها بشكل كبير من بيانات W3CIISLog في 2 مايو 2021، لتحديد الطوابع الزمنية على هذه البيانات التي تم استيعابها. الكشفwhere TimeGenerated > datetime(1970-01-01)
موجود فقط لتقديم دليل على واجهة مستخدم سجل التحليلات للنظر في جميع البيانات.
W3CIISLog
| where TimeGenerated > datetime(1970-01-01)
| where _TimeReceived >= datetime(2021-05-02) and _TimeReceived < datetime(2021-05-03)
| where _IsBillable == true
| summarize BillableDataMB = sum(_BilledSize)/1.E6 by bin(TimeGenerated, 1d)
| sort by TimeGenerated asc
الخطوات التالية
- راجع تفاصيل أسعار سجلات Azure Monitor للحصول على معلومات حول كيفية حساب رسوم البيانات في مساحة عمل Log Analytics وخيارات التكوين المختلفة لتقليل الرسوم.
- انظر التكلفة والاستخدام من Azure Monitor للحصول على وصف للأنواع المختلفة من رسوم Azure Monitor وكيفية تحليلها على فاتورة Azure الخاصة بك.
- للحصول على أفضل الممارسات حول كيفية تكوين مراقبة Azure وإدارة Azure Monitor لتقليل التكلفة، راجع أفضل ممارسة لمراقبة Azure - إدارة التكلفة.
- راجع تحويلات جمع البيانات في Azure Monitor (معاينة) للحصول على معلومات حول استخدام التحويلات لتقليل كمية البيانات التي جمعتها في مساحة عمل Log Analytics عن طريق تصفية السجلات والأعمدة غير المرغوب فيها.