Skip to content

Latest commit

 

History

History
732 lines (497 loc) · 28.4 KB

README.ar.md

File metadata and controls

732 lines (497 loc) · 28.4 KB

Create ReleaseGenerate HTMLSlack Notification

ContributorsForksStargazersIssuesMIT LicenseLinkedIn


observability

Learning Observability

Project for learning about Learning Observability.
Explore the docs »

Project Page - Report Bug - Request Feature


Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

حول المشروع

هذا المشروع مخصص للتعرف على إمكانية الملاحظة.

(back to top)


بنيت مع

  • Github
  • GNULinux
  • Windows
  • Bash
  • Powershell
  • Kubernetes

(back to top)


ابدء

يهدف هذا المشروع إلى البدء باستخدام أدوات إمكانية ملاحظة التعلم وأفضل الممارسات.

بعض أدوات التعلم:

  • بروميثيوس
  • مدير التنبيه
  • جرافانا
  • جرافانا لوكي
  • توقيت غرافانا

المتطلبات الأساسية

  • رفع نظام لينكس
  • مجموعة Kubernetes لأعلى
  • شخص سخيف

تثبيت

استنساخ الريبو

git clone https://github.com/marcossilvestrini/learning-observability.git
cd learning-observability || exit

(back to top)


الاستخدام

أنشر بعض الأمثلة لاستخدامها في هذا المستودع.

(back to top)


خريطة الطريق

  • إنشاء مستودع
  • بروميثيوس
  • مدير التنبيه
  • جرافانا
  • جرافانا لوكي
  • توقيت غرافانا
  • سبائك جرافانا
  • أدوات أخرى

انظرالقضايا المفتوحةللحصول على قائمة كاملة بالميزات المقترحة (والمشكلات المعروفة).

(back to top)


بروميثيوس

prometheus

Prometheus عبارة عن مجموعة أدوات مراقبة وتنبيه للأنظمة مفتوحة المصدر تم إنشاؤها في الأصل على SoundCloud.

منذ إنشائه في عام 2012، اعتمدت العديد من الشركات والمنظمات بروميثيوس، ويمتلك المشروع مجتمع مطورين ومستخدمين نشطين للغاية.

يتكون نظام بروميثيوس البيئي من مكونات متعددة، الكثير منها اختياري:

  • خادم بروميثيوس الرئيسي الذي يقوم بجمع وتخزين بيانات السلاسل الزمنية
  • مكتبات العملاء لأدوات رمز التطبيق
  • بوابة دفع لدعم الوظائف قصيرة الأجل
  • المصدرون لأغراض خاصة لخدمات مثل HAProxy وStatsD وGraphite وما إلى ذلك.
  • مدير التنبيهات للتعامل مع التنبيهات
  • أدوات الدعم المختلفة

لمزيد من المعلومات حول الوصول إلى الوثائق الرسمية لبروميثيوس:
هتبص://بروميثيوس.إيه/دكس/انطردكت/فرفو/

أسماء المقاييس والتسميات

مثال لاسم المقياس:

<metric name>{<label name>=<label value>, ...}

مثال لاسم المقياس مع التصنيفات:

api_http_requests_total{method="POST", handler="/messages"}

أنواع المقاييس

Metrics Type

عداد- يقبل ويخزن فقط تلك القيم التي ستزداد مع مرور الوقت.
كَيّل- يخزن القيم التي يمكن أن تأخذ قيمًا مختلفة، والتي يمكن أن تزيد أو تنقص.
الرسم البياني- عينات من الملاحظات (عادةً أشياء مثل فترات الطلب أو أحجام الاستجابة) واحتسابها في مجموعات قابلة للتكوين. كما يوفر أيضًا مجموعًا لجميع القيم التي تمت ملاحظتها، مما يسمح لك بحساب المتوسطات.
ملخص– رسم بياني مع تمثيل بيانات أكثر تفصيلاً باستخدام إحصائيات إضافية (كميات).

الوظائف والمثيلات

Jobs

في مصطلحات بروميثيوس، تسمى نقطة النهاية التي يمكنك استخلاصها بمثيل، وعادةً ما تتوافق مع عملية واحدة.
مجموعة من الحالات التي لها نفس الغرض، وهي عملية يتم تكرارها من أجل قابلية التوسع أو الموثوقية على سبيل المثال، تسمى وظيفة.

مواصفات بروميثيوس للكتابة عن بعد

تم تصميم بروتوكول الكتابة عن بعد لتمكين نشر العينات بشكل موثوق في الوقت الفعلي من المرسل إلى المتلقي، دون خسارة.

  • "المرسل" هو الشيء الذي يرسل بيانات Prometheus Remote Write.
  • "المستقبل" هو شيء يستقبل بيانات الكتابة عن بعد من Prometheus.
  • "العينة" هي زوج من (الطابع الزمني، القيمة).
  • "التسمية" هي زوج من (المفتاح، القيمة).
  • "السلسلة" هي قائمة بالعينات، يتم تحديدها بواسطة مجموعة فريدة من التصنيفات.

المرسلون والمستقبلون المتوافقون

تهدف المواصفات إلى وصف كيفية تفاعل المكونات التالية:

  • بروميثيوس (كالمرسل والمستقبل)
  • الانهيار الجليدي (بصفته "المرسل") - أداة اختبار الحمل بمقاييس بروميثيوس.
  • القشرة (بوصفها "المتلقي")
  • العامل المرن (بوصفه "المستقبل")
  • وكيل Grafana (بوصفه "مرسلًا" و"مستقبلًا")
  • GreptimeDB (بوصفه "المتلقي")
  • وكيل Telegraf الخاص بـ InfluxData. (كمرسل وكمستقبل)
  • M3 (بوصفه "المتلقي")
  • ميمير (بوصفه "المتلقي")
  • OpenTelemetry Collector (بوصفه "مرسلًا" وفي النهاية "كمستقبلًا")
  • ثانوس (بوصفه "المتلقي")
  • المتجه (بوصفه "المرسل" و"المتلقي")
  • VictoriaMetrics (بوصفها "المتلقي")

promql

توفر Prometheus لغة استعلام وظيفية تسمى PromQL (لغة استعلام Prometheus) التي تتيح للمستخدم تحديد وتجميع بيانات السلاسل الزمنية في الوقت الفعلي.
يمكن عرض نتيجة التعبير إما على شكل رسم بياني، أو عرضها كبيانات جدولية في متصفح تعبيرات Prometheus، أو استهلاكها بواسطة أنظمة خارجية عبر HTTP API.

أمثلة الاستعلام

federation

يسمح الاتحاد لخادم Prometheus باستخلاص السلاسل الزمنية المحددة من خادم Prometheus آخر.

الاتحاد الهرمي

يسمح الاتحاد الهرمي لشركة Prometheus بالتوسع في البيئات التي تحتوي على عشرات مراكز البيانات وملايين العقد.

في حالة الاستخدام هذه، تشبه طوبولوجيا الاتحاد شجرة، حيث تقوم خوادم Prometheus ذات المستوى الأعلى بجمع بيانات السلاسل الزمنية المجمعة من عدد أكبر من الخوادم الثانوية.

وهذا يعني أن لدينا خوادم Prometheus أكبر حجمًا تقوم بجمع بيانات السلاسل الزمنية من الخوادم الأصغر حجمًا. لدينا نهج من أعلى إلى أسفل حيث يتم جمع البيانات من مستويات مختلفة.

federation-hierarchical

الاتحاد عبر الخدمات

تتضمن هذه الطريقة خادم Prometheus الذي يراقب خدمة معينة أو مجموعة من الخدمات، ويجمع بيانات سلاسل زمنية محددة من خادم آخر يراقب مجموعة مختلفة من الخدمات.

على سبيل المثال، قد يعرض برنامج جدولة نظام المجموعة الذي يقوم بتشغيل خدمات متعددة معلومات استخدام الموارد (مثل الذاكرة واستخدام وحدة المعالجة المركزية) حول مثيلات الخدمة التي تعمل على نظام المجموعة.

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

في كثير من الأحيان، يتم جمع هاتين المجموعتين من المقاييس بواسطة خوادم Prometheus منفصلة. باستخدام الاتحاد، قد يقوم خادم Prometheus الذي يحتوي على مقاييس مستوى الخدمة بسحب مقاييس استخدام موارد المجموعة حول خدمته المحددة من مجموعة Prometheus، بحيث يمكن استخدام مجموعتي المقاييس داخل ذلك الخادم.

ومن خلال القيام بذلك، يمكننا تشغيل الاستعلامات والتنبيهات على البيانات المدمجة من كلا الخادمين.

cross-service-federation

اكتشاف خدمة HTTP

http_sd

يوفر Prometheus اكتشافًا عامًا لخدمة HTTP، والذي يمكّنه من اكتشاف الأهداف عبر نقطة نهاية HTTP.

يعد اكتشاف خدمة HTTP مكملاً لآليات اكتشاف الخدمة المدعومة، وهو بديل لاكتشاف الخدمة المستند إلى الملف.

  • لا يتم توسيع نطاق static_configs إلى بيئات أكثر ديناميكية حيث تتم إضافة/إزالة المثيلات بشكل متكرر
  • يمكن أن يتكامل Prometheus مع آليات اكتشاف الخدمة لتحديث عرضه للمثيلات قيد التشغيل تلقائيًا
    • عند إضافة مثيلات جديدة، سيبدأ Prometheus في الحذف، وعند فقده من الاكتشاف، ستتم أيضًا إزالة السلسلة الزمنية
    • عمليات التكامل المضمنة مع Consul أو Azure أو AWS أو الملف بناءً على الحاجة إلى آلية مخصصة
  • يمكن نشر ملف JSON/YAML بواسطة النظام الأساسي مع تحديد جميع الأهداف التي سيتم التخلص منها. يستخدمه بروميثيوس لتحديث الأهداف تلقائيًا

مثال باستخدام http sd_file

http_file_sd

prometheus.yaml لإلغاء الخدمات الموجودة في الهدف http_sd.json

global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:  
  # Service Discovery with file_sd  
  - job_name: 'http_sd'
    basic_auth:
      username: "skynet"
      password: "prometheus"
    file_sd_configs:
      - files:
        - /home/vagrant/prometheus-server/http_sd.json

http_sd.json

[
    {
        "targets": ["192.168.0.130:9100", "192.168.0.131:9100"],
        "labels": {            
            "__meta_prometheus_job": "node"
        }
    },
    {
        "targets": ["192.168.0.130:9091"],
        "labels": {            
            "__meta_prometheus_job": "pushgateway"
        }
    }    
]

تثبيت بروميثيوس

# Download files - https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.51.2/prometheus-2.51.2.linux-amd64.tar.gz

# Extract files
tar xvfz prometheus-*.tar.gz
rm  prometheus-*.tar.gz
cd prometheus-*

# Check version
./prometheus --version

تكوين بروميثيوس

انظر ملف التكوين الخاص بيprometheus.yaml

vim prometheus.yaml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

ابدأ بروميثيوس

# Start
./prometheus --config.file=prometheus.yml

# Start with PM2 - npm install pm2@latest -g
pm2 start prometheus --name prometheus-server -- --config.file=prometheus.yml

نقاط النهاية الهامة

http://localhost:9090 # all endpoints
http://localhost:9090/graph # PromQL expressions
http://localhost:9090/metrics # metrics
http://localhost:9090/targets # scrape_configs jobs

باستخدام متصفح التعبير

يمكنك استخدام التعبير في وضع الجدول أو الرسم البياني.

افتح الصفحة http://localhost:9090

# Check all http metrics
promhttp_metric_handler_requests_total

# Check http metrics with http status code 200
promhttp_metric_handler_requests_total{code="200"}

# Count http metrics
count(promhttp_metric_handler_requests_total)

# Rate function
rate(promhttp_metric_handler_requests_total{code="200"}[1m])

المصدرين بروميثيوس

المُصدِّر هو برنامج ثنائي يعمل جنبًا إلى جنب مع التطبيق الذي تريد الحصول على المقاييس منه.
يعرض المصدر مقاييس Prometheus، عادةً عن طريق تحويل المقاييس التي يتم عرضها بتنسيق غير Prometheus إلى تنسيق يدعمه Prometheus.

مصدر العقدة

يعرض Prometheus Node Exporter مجموعة واسعة من المقاييس المتعلقة بالأجهزة والنواة.

تثبيت مصدر العقدة
# Download - https://prometheus.io/download#node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# Extract
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
بدء تشغيل مُصدِّر العقدة
# Start
./node_exporter

# Start with PM2 - npm install pm2@latest -g
pm2 start node_exporter --name node_exporter
مصدر عقدة نقاط النهاية
# Access metrics
http://localhost:9100/metrics
تكوين مصدر العقدة

لتمكين الخردة لمصدر العقدة، يمكنك تكوين بروميثيوس.

# Edit prometheus file and add job node
vim prometheus.yaml
...
scrape_configs:
- job_name: node
  static_configs:
  - targets: ['localhost:9100']
...

أعد تشغيل خدمة بروميثيوس لتطبيق وظيفة جديدة.


بوابة الدفع

Prometheus Pushgateway هي خدمة وسيطة تسمح للمهام المؤقتة والدفعية بعرض مقاييسها إلى Prometheus.
نظرًا لأن هذه الأنواع من الوظائف قد لا تكون موجودة لفترة كافية ليتم التخلص منها، فيمكنها بدلاً من ذلك دفع مقاييسها إلى Pushgateway.
يعمل Pushgateway بعد ذلك كمخزن مؤقت للقياسات يقوم بروميثيوس بمسحه.

يعد هذا الإعداد مفيدًا بشكل خاص لالتقاط نتائج المهمة التي لا يتم تشغيلها بشكل مستمر، مثل مهمة مجمعة في نظام CI، أو برنامج نصي احتياطي يعمل في وقت محدد.
إنه يبسط مراقبة هذه الأنواع من الوظائف دون الحاجة إلى تشغيل مثيل Prometheus طويل الأمد والذي قد يستمر لفترة أطول من الوظائف نفسها.

تثبيت PushGateway

# Download 
wget -q https://github.com/prometheus/pushgateway/releases/download/v1.8.0/pushgateway-1.8.0.linux-amd64.tar.gz

# Extract
tar xvfz pushgateway-*.*-amd64.tar.gz
cd pushgateway-*.*-amd64

# Start 
# Start with PM2 - npm install pm2@latest -g
pm2 start pushgateway --name pushgateway -- --web.listen-address "192.168.0.130:9091"

تكوين PushGateway

# Edit prometheus file and add job pushgateway
vim prometheus.yaml
scrape_configs:
  - job_name: 'pushgateway'
    honor_labels: true
    static_configs:
      - targets: ['192.168.0.130:9091'] # prometheus server for scraping
# Restart prometheus

# restart with pm2
pm2 restart prometheus-server

إنشاء مقاييس لبوابة الدفع للاختبار

echo 'training_completion{course="CKA", status="complete"} 1' > metrics.txt
echo 'training_completion{course="CKS", status="in_progress"} 0.5' >> metrics.txt
echo 'training_completion{course="LPIC2", status="not_started"} 0' >> metrics.txt
curl --data-binary @metrics.txt http://192.168.0.130:9091/metrics/job/training_metrics
نقاط النهاية PushGateway
# Access metrics
http://localhost:9091

استخدم PromQL للعثور على هدف بوابة الدفع للمقاييس

promql-pushgateway

بروملينز

قم بتثبيت بروملينز

العمل فقط دون المصادقة الأساسية

echo "Downloading Promlens..."
wget -q https://github.com/prometheus/promlens/releases/download/v0.3.0/promlens-0.3.0.linux-amd64.tar.gz

echo "Extracting Promlens..."
tar xvfz promlens-*.*-amd64.tar.gz
rm promlens-*.*-amd64.tar.gz
cd promlens-*.*-amd64 || exit

echo "Starting Promlens..."
pm2 start promlens --name promlens -- --web.listen-address "192.168.0.130:8081"
cd || exit

نقاط النهاية بروملينس

# Access query builder
http://192.168.0.130:8081

promlens


مدير التنبيه

alertmanager

لمزيد من المعلومات حول الوثائق الرسمية للوصول إلى Alertmanager:
هتبص://جذب.كوم/بروميثيوس/الارتمانجر

(back to top)


جرافانا


جرافانا لوكي


توقيت غرافانا


سبائك جرافانا

(back to top)


المساهمة

المساهمات هي ما يجعل مجتمع المصادر المفتوحة مكانًا رائعًا للتعلم والإلهام والإبداع. أي مساهمات تقدمها هياقدر هذا جدا.

إذا كان لديك اقتراح من شأنه أن يجعل هذا الأمر أفضل، فيرجى شوكة الريبو وإنشاء طلب سحب. يمكنك أيضًا ببساطة فتح مشكلة بالعلامة "التحسين". لا تنس أن تعطي المشروع نجمة! شكرًا لك مرة أخرى!

  1. شوكة المشروع
  2. قم بإنشاء فرع الميزات الخاص بك (git checkout -b feature/AmazingFeature)
  3. تنفيذ التغييرات (git commit -m 'Add some AmazingFeature')
  4. ادفع إلى الفرع (git push origin feature/AmazingFeature)
  5. افتح طلب السحب

(back to top)


رخصة

وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. يرىLICENSEللمزيد من المعلومات.

(back to top)


اتصال

رابط المشروع:هتبص://جذب.كوم/ماركسيلفصترن/ليرننجبسرفبلت

(back to top)


شكر وتقدير

(back to top)