مراقبة حالة GitOps (Flux v2) ونشاطه
لمراقبة الحالة والنشاط المتعلقين ب GitOps باستخدام Flux v2 في مجموعات Kubernetes الممكنة في Azure Arc أو مجموعات Azure Kubernetes Service (AKS)، لديك العديد من الخيارات:
- استخدم مدخل Microsoft Azure لمراقبة تكوينات Flux والموارد على مجموعات فردية.
- استخدم لوحة معلومات Grafana لمراقبة حالة التوزيع والتوافق.
- استخدم لوحات معلومات Flux Control Plane و Flux Cluster Stats لمراقبة استهلاك الموارد والتسويات.
- تمكين استخراج Prometheus من المجموعات وإنشاء لوحات المعلومات الخاصة بك باستخدام البيانات في مساحة عمل Azure Monitor.
- إنشاء تنبيهات على Azure Monitor باستخدام البيانات المتوفرة من خلال استخراج Prometheus.
يصف هذا الموضوع بعض الطرق التي يمكنك من خلالها مراقبة نشاط Flux وحالتك.
مراقبة تكوينات Flux في مدخل Microsoft Azure
بعد إنشاء تكوينات Flux على مجموعتك، يمكنك عرض معلومات الحالة في مدخل Microsoft Azure عن طريق الانتقال إلى مجموعة وتحديد GitOps.
عرض التفاصيل حول توافق المجموعة والكائنات
توضح حالة التوافق ما إذا كانت الحالة الحالية لنظام المجموعة تطابق الحالة المطلوبة. القيم الممكنة:
- متوافق: تطابق حالة نظام المجموعة الحالة المطلوبة.
- معلق: تم الكشف عن حالة مطلوبة محدثة، ولكن لم تتم تسوية هذه الحالة بعد على نظام المجموعة.
- غير متوافق: الحالة الحالية لا تتطابق مع الحالة المطلوبة.
للمساعدة في تصحيح مشكلات التسوية لنظام مجموعة، حدد كائنات التكوين. هنا، يمكنك عرض سجلات كل عنصر من عناصر التكوين التي ينشئها Flux لكل تكوين Flux. حدد اسم كائن لعرض سجلاته.
لعرض كائنات Kubernetes التي تم إنشاؤها نتيجة لتطبيق تكوينات Flux، حدد Workloads في قسم موارد Kubernetes في جزء التنقل الأيسر للمجموعة. هنا، يمكنك عرض جميع تفاصيل أي موارد تم إنشاؤها على نظام المجموعة.
بشكل افتراضي، يمكنك التصفية حسب مساحة الاسم واسم الخدمة. يمكنك أيضا إضافة أي عامل تصفية تسمية قد تستخدمه في تطبيقاتك للمساعدة في تضييق نطاق البحث.
عرض حالة تكوين Flux وتفاصيله
لكل تكوين Flux، يشير عمود الحالة إلى ما إذا كان كائن تكوين Flux قد تم إنشاؤه بنجاح على نظام المجموعة.
حدد أي تكوين Flux لمشاهدة صفحة Overview الخاصة به، بما في ذلك المعلومات التالية:
- معرف الالتزام بالمصدر لآخر مزامنة
- الطابع الزمني لآخر تحديث مصدر
- الطابع الزمني لتحديث الحالة (يشير إلى وقت الحصول على أحدث الإحصائيات)
- عنوان URL للربيع والفرع
- ارتباطات لعرض kustomizations مختلفة
استخدام لوحات المعلومات لمراقبة حالة GitOps ونشاطه
نحن نقدم لوحات معلومات لمساعدتك في مراقبة الحالة والامتثال واستهلاك الموارد ونشاط التسوية ل GitOps مع Flux v2. يمكن استيراد لوحات معلومات JSON هذه إلى Grafana لمساعدتك في عرض بياناتك وتحليلها في الوقت الفعلي. يمكنك أيضا إعداد تنبيهات لهذه المعلومات.
لاستيراد لوحات المعلومات هذه واستخدامها، تحتاج إلى:
- مجموعة Kubernetes واحدة أو أكثر من مجموعات Kubernetes الممكنة بواسطة Arc أو مجموعات AKS.
- ملحق microsoft.flux المثبت على المجموعات.
- تم إنشاء تكوين Flux واحد على الأقل على المجموعات.
مراقبة حالة التوزيع والتوافق
اتبع هذه الخطوات لاستيراد لوحات المعلومات التي تتيح لك مراقبة نشر ملحق Flux وحالته عبر المجموعات وحالة التوافق لتكوين Flux على تلك المجموعات.
إشعار
تصف هذه الخطوات عملية استيراد لوحة المعلومات إلى Azure Managed Grafana. يمكنك أيضا استيراد لوحة المعلومات هذه إلى أي مثيل Grafana. مع هذا الخيار، يجب استخدام كيان الخدمة؛ الهوية المدارة غير مدعومة لاتصال البيانات خارج Azure Managed Grafana.
إنشاء مثيل Azure Managed Grafana باستخدام مدخل Azure أو Azure CLI. تأكد من قدرتك على الوصول إلى Grafana عن طريق تحديد نقطة النهاية الخاصة بها في صفحة نظرة عامة. تحتاج على الأقل إلى أذونات على مستوى محرر Grafana لعرض لوحات المعلومات وتحريرها. يمكنك التحقق من وصولك بالانتقال إلى التحكم في الوصول (IAM) على مثيل Grafana.
إذا كنت تستخدم هوية مدارة لمثيل Azure Managed Grafana، فاتبع هذه الخطوات لتعيين دور قارئ المراقبة على الاشتراك (الاشتراكات):
- في مدخل Microsoft Azure، انتقل إلى الاشتراك الذي تريد إضافته.
- حدد Access control (IAM).
- حدد Add role assignment.
- حدد دور قارئ المراقبة، ثم حدد التالي.
- في علامة التبويب الأعضاء ، حدد الهوية المدارة، ثم اختر تحديد أعضاء.
- من قائمة الهوية المدارة، حدد الاشتراك الذي أنشأت فيه مثيل Azure Managed Grafana. ثم حدد Azure Managed Grafana واسم مثيل Azure Managed Grafana.
- حدد Review + Assign.
إذا كنت تستخدم كيان خدمة، فامنح دور قارئ المراقبة إلى كيان الخدمة الذي ستستخدمه لاتصال مصدر البيانات. اتبع هذه الخطوات نفسها، ولكن حدد المستخدم أو المجموعة أو كيان الخدمة في علامة التبويب الأعضاء ، ثم حدد كيان الخدمة. (إذا كنت لا تستخدم Azure Managed Grafana، فيجب عليك استخدام كيان خدمة للوصول إلى اتصال البيانات.)
إنشاء اتصال مصدر بيانات Azure Monitor في مثيل Azure Managed Grafana. يتيح هذا الاتصال للوحة المعلومات الوصول إلى بيانات Azure Resource Graph.
قم بتنزيل لوحة معلومات GitOps Flux - Application Deployments.
اتبع الخطوات لاستيراد لوحة معلومات JSON إلى Grafana.
بعد استيراد لوحة المعلومات، ستعرض معلومات من المجموعات التي تراقبها، مع العديد من اللوحات التي توفر التفاصيل. لمزيد من التفاصيل حول عنصر ما، حدد الارتباط لزيارة مدخل Microsoft Azure، حيث يمكنك العثور على مزيد من المعلومات حول التكوينات والأخطاء والسجلات.
يسرد جدول Flux Extension Deployment Status جميع المجموعات حيث يتم نشر ملحق Flux، جنبا إلى جنب مع حالة النشر الحالية.
يسرد جدول Flux Configuration Compliance Status جميع تكوينات Flux التي تم إنشاؤها على المجموعات، جنبا إلى جنب مع حالة التوافق الخاصة بها. لمشاهدة سجلات الحالة والخطأ لكائنات التكوين مثل إصدارات Helm وkustomizations، حدد الارتباط غير المتوافق من العمود ComplianceState .
يعرض مخطط عدد عمليات نشر امتداد Flux حسب الحالة عدد المجموعات، استنادا إلى حالة التزويد الخاصة بها.
يعرض مخطط عدد تكوينات Flux حسب حالة التوافق عدد تكوينات Flux، استنادا إلى حالة التوافق الخاصة بها فيما يتعلق بالمستودع المصدر.
تصفية بيانات لوحة المعلومات لتعقب عمليات نشر التطبيق
يمكنك تصفية البيانات في GitOps Flux - Application Deployments Dashboard لتغيير المعلومات المعروضة. على سبيل المثال، يمكنك إظهار البيانات لاشتراكات أو مجموعات موارد معينة فقط، أو تقييد البيانات بمجموعة معينة. للقيام بذلك، حدد خيار التصفية إما من القوائم المنسدلة للمستوى الأعلى أو من أي رأس عمود في الجداول.
على سبيل المثال، في جدول حالة توافق تكوين Flux، يمكنك تحديد تثبيت معين من العمود SourceLastSyncCommit . من خلال القيام بذلك، يمكنك تتبع حالة نشر التكوين إلى جميع المجموعات المتأثرة بهذا التثبيت.
إنشاء تنبيهات لفشل الامتداد والتكوين
بعد استيراد لوحة المعلومات كما هو موضح في القسم السابق، يمكنك إعداد التنبيهات. تعلمك هذه التنبيهات عندما تواجه ملحقات Flux أو تكوينات Flux فشلا.
اتبع الخطوات أدناه لإنشاء تنبيه. يتم توفير أمثلة للاستعلامات للكشف عن توفير الملحق أو فشل ترقية الملحق، أو للكشف عن فشل حالة التوافق.
في قائمة التنقل اليسرى من لوحة المعلومات، حدد Alerting.
حدد قواعد التنبيه.
حدد + Create alert rule. تفتح صفحة قاعدة التنبيه الجديدة، مع تحديد خيار التنبيهات المدارة من Grafana بشكل افتراضي.
في اسم القاعدة، أضف اسما وصفيا. يتم عرض هذا الاسم في قائمة قواعد التنبيه، وسيكون المستخدم كتسمية
alertname
لكل مثيل تنبيه تم إنشاؤه من هذه القاعدة.ضمن تعيين استعلام وحالة تنبيه:
تحديد مصدر بيانات. يمكن استخدام نفس مصدر البيانات المستخدم للوحة المعلومات هنا.
بالنسبة للخدمة، حدد Azure Resource Graph.
حدد الاشتراكات من القائمة المنسدلة.
أدخل الاستعلام الذي تريد استخدامه. على سبيل المثال، بالنسبة إلى فشل توفير الملحق أو الترقية، يمكنك إدخال هذا الاستعلام:
kubernetesconfigurationresources | where type == "microsoft.kubernetesconfiguration/extensions" | extend provisioningState = tostring(properties.ProvisioningState) | where provisioningState == "Failed" | summarize count() by provisioningState
أو بالنسبة لفشل حالة التوافق، يمكنك إدخال هذا الاستعلام:
kubernetesconfigurationresources | where type == "microsoft.kubernetesconfiguration/fluxconfigurations" | extend complianceState=tostring(properties.complianceState) | where complianceState == "Non-Compliant" | summarize count() by complianceState
بالنسبة إلى المربع Threshold، حدد A لنوع الإدخال وقم بتعيين الحد إلى 0 لتلقي التنبيهات حتى إذا فشل ملحق واحد فقط على نظام المجموعة. ضع علامة على هذا كشرط التنبيه.
حدد الفاصل الزمني لتقييم التنبيه:
- بالنسبة إلى Condition، حدد الاستعلام أو التعبير لتشغيل قاعدة التنبيه.
- بالنسبة إلى Evaluate every، أدخل تكرار التقييم كمضاعف 10 ثوان.
- بالنسبة إلى Evaluate for، حدد المدة التي يجب أن يكون فيها الشرط صحيحا قبل إنشاء التنبيه.
- في Configure no data and error handling، قم بالإشارة إلى ما يجب أن يحدث عندما لا ترجع قاعدة التنبيه أي بيانات أو ترجع خطأ.
- للتحقق من النتائج من تشغيل الاستعلام، حدد معاينة.
أضف موقع التخزين ومجموعة القواعد وأي بيانات تعريف إضافية تريد إقرانها بالقاعدة.
- بالنسبة إلى المجلد، حدد المجلد الذي يجب تخزين القاعدة فيه.
- بالنسبة للمجموعة، حدد مجموعة معرفة مسبقا.
- إذا رغبت في ذلك، أضف وصفا وملخصا لتخصيص رسائل التنبيه.
- أضف عنوان URL لدفتر التشغيل واللوحة ولوحة المعلومات ومعرفات التنبيه حسب الحاجة.
إذا رغبت في ذلك، أضف أي تسميات مخصصة. ثم حدد حفظ.
يمكنك أيضا تكوين نقاط الاتصال وتكوين نهج الإعلامات للتنبيهات الخاصة بك.
مراقبة استهلاك الموارد والتسويات
اتبع هذه الخطوات لاستيراد لوحات المعلومات التي تتيح لك مراقبة استهلاك موارد Flux، والتسويات، وطلبات واجهة برمجة التطبيقات، وحالة التسوية.
اتبع الخطوات لإنشاء مساحة عمل Azure Monitor.
إنشاء مثيل Azure Managed Grafana باستخدام مدخل Azure أو Azure CLI.
قم بتمكين مجموعة مقاييس Prometheus على مجموعات AKS و/أو مجموعات Kubernetes الممكنة بواسطة Arc التي تريد مراقبتها.
تكوين عامل Azure Monitor لاستخراج مقاييس Azure Managed Flux عن طريق إنشاء configmap:
kind: ConfigMap apiVersion: v1 data: schema-version: #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent. v1 config-version: #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated) ver1 default-scrape-settings-enabled: |- kubelet = true coredns = false cadvisor = true kubeproxy = false apiserver = false kubestate = true nodeexporter = true windowsexporter = false windowskubeproxy = false kappiebasic = true prometheuscollectorhealth = false # Regex for which namespaces to scrape through pod annotation based scraping. # This is none by default. Use '.*' to scrape all namespaces of annotated pods. pod-annotation-based-scraping: |- podannotationnamespaceregex = "flux-system" default-targets-scrape-interval-settings: |- kubelet = "30s" coredns = "30s" cadvisor = "30s" kubeproxy = "30s" apiserver = "30s" kubestate = "30s" nodeexporter = "30s" windowsexporter = "30s" windowskubeproxy = "30s" kappiebasic = "30s" prometheuscollectorhealth = "30s" podannotations = "30s" metadata: name: ama-metrics-settings-configmap namespace: kube-system
قم بتنزيل لوحات معلومات Flux Control Plane و Flux Cluster Stats .
ربط مساحة عمل Prometheus المدارة بمثيل Grafana المدار. يستغرق هذا بضع دقائق حتى يكتمل.
اتبع الخطوات لاستيراد لوحات معلومات JSON هذه إلى Grafana.
بعد استيراد لوحات المعلومات، ستعرض معلومات من المجموعات التي تراقبها. لإظهار المعلومات فقط لمجموعة معينة أو مساحة اسم معينة، استخدم عوامل التصفية بالقرب من أعلى كل لوحة معلومات.
تعرض لوحة معلومات Flux Control Plane تفاصيل حول استهلاك موارد الحالة، والتسويات على مستوى نظام المجموعة، وطلبات واجهة برمجة تطبيقات Kubernetes.
تعرض لوحة معلومات Flux Cluster Stats تفاصيل حول عدد المصلحين، بالإضافة إلى حالة كل مطابق ومدة تنفيذه.
إنشاء تنبيهات لاستهلاك الموارد ومشكلات التسوية
بعد استيراد لوحة المعلومات كما هو موضح في القسم السابق، يمكنك إعداد التنبيهات. تعلمك هذه التنبيهات بمشكلات استهلاك الموارد والمصالحة التي قد تتطلب الانتباه.
لتمكين هذه التنبيهات، يمكنك نشر قالب Bicep مشابه للقالب الموضح هنا. قواعد التنبيه في هذا القالب هي نماذج يمكن تعديلها حسب الحاجة.
بمجرد تنزيل قالب Bicep والتغييرات التي أجريتها، اتبع هذه الخطوات لنشر القالب.
param azureMonitorWorkspaceName string
param alertReceiverEmailAddress string
param kustomizationLookbackPeriodInMinutes int = 5
param helmReleaseLookbackPeriodInMinutes int = 5
param gitRepositoryLookbackPeriodInMinutes int = 5
param bucketLookbackPeriodInMinutes int = 5
param helmRepoLookbackPeriodInMinutes int = 5
param timeToResolveAlerts string = 'PT10M'
param location string = resourceGroup().location
resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
name: azureMonitorWorkspaceName
location: location
}
resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
name: 'fluxRuleActionGroup'
location: 'global'
properties: {
enabled: true
groupShortName: 'fluxGroup'
emailReceivers: [
{
name: 'emailReceiver'
emailAddress: alertReceiverEmailAddress
}
]
}
}
resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
name: 'fluxRuleGroup'
location: location
properties: {
description: 'Flux Prometheus Rule Group'
scopes: [
azureMonitorWorkspace.id
]
enabled: true
interval: 'PT1M'
rules: [
{
alert: 'KustomizationNotReady'
expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
for: 'PT${kustomizationLookbackPeriodInMinutes}M'
labels: {
description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
}
annotations: {
description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
}
enabled: true
severity: 3
resolveConfiguration: {
autoResolved: true
timeToResolve: timeToResolveAlerts
}
actions: [
{
actionGroupId: fluxRuleActionGroup.id
}
]
}
{
alert: 'HelmReleaseNotReady'
expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
labels: {
description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
}
annotations: {
description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
}
enabled: true
severity: 3
resolveConfiguration: {
autoResolved: true
timeToResolve: timeToResolveAlerts
}
actions: [
{
actionGroupId: fluxRuleActionGroup.id
}
]
}
{
alert: 'GitRepositoryNotReady'
expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
labels: {
description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
}
annotations: {
description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
}
enabled: true
severity: 3
resolveConfiguration: {
autoResolved: true
timeToResolve: timeToResolveAlerts
}
actions: [
{
actionGroupId: fluxRuleActionGroup.id
}
]
}
{
alert: 'BucketNotReady'
expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
for: 'PT${bucketLookbackPeriodInMinutes}M'
labels: {
description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
}
annotations: {
description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
}
enabled: true
severity: 3
resolveConfiguration: {
autoResolved: true
timeToResolve: timeToResolveAlerts
}
actions: [
{
actionGroupId: fluxRuleActionGroup.id
}
]
}
{
alert: 'HelmRepositoryNotReady'
expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
for: 'PT${helmRepoLookbackPeriodInMinutes}M'
labels: {
description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
}
annotations: {
description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
}
enabled: true
severity: 3
resolveConfiguration: {
autoResolved: true
timeToResolve: timeToResolveAlerts
}
actions: [
{
actionGroupId: fluxRuleActionGroup.id
}
]
}
]
}
}
الخطوات التالية
- راجع البرنامج التعليمي الخاص بنا حول استخدام GitOps مع Flux v2 لإدارة التكوين ونشر التطبيق.
- تعرف على Azure Monitor Container Insights.