تثبيت وتشغيل Grafana على Ubuntu: دليل شامل

استيعاب إعداد Grafana للمراقبة والتصور

Page content

جرافانا هي منصة مفتوحة المصدر الرائدة لمراقبة وقابلية الملاحظة، والتي تحول المعايير والسجلات والمسارات إلى رؤى قابلة للتنفيذ من خلال تصورات مذهلة.

جرافانا هذا لقطة شاشة من موقع جرافانا.

ما هي جرافانا؟

جرافانا هي تطبيق ويب تحليلي وتفاعلية متعدد المنصات. تقدم رسومًا بيانية ورسومًا بيانية وتحذيرات للويب عند الاتصال بمصادر البيانات المدعومة. تُستخدم جرافانا على نطاق واسع في DevOps لمراقبة البنية التحتية والتطبيقات والخدمات.

الميزات الرئيسية:

  • لوحة تحكم عالمية إنشاء لوحات تحكم جميلة وديناميكية مع تقويم مرن
  • مصادر بيانات متعددة الاتصال بـ 150+ مصدر بيانات بما في ذلك Prometheus، InfluxDB، Elasticsearch، MySQL، PostgreSQL، وغيرها
  • التحذيرات نظام تحذير موحد مع قنوات الإخطار (Slack، PagerDuty، البريد الإلكتروني، ويب هوك)
  • التعاون داخل الفريق مشاركة اللوحات، إنشاء الفرق، وإدارة أذونات المستخدمين
  • بيئة إضافات توسيع الوظائف مع لوحات، مصادر بيانات، وتطبيقات
  • السحابة الأصلية مثالية لـ Kubernetes، Docker، وبيئات السحابة

لماذا جرافانا على Ubuntu؟

توفير إصدارات Ubuntu LTS أساسًا مستقرًا وآمنًا لاستضافة جرافانا. إذا كنت تبدأ من الصفر أو تحتاج إلى إعداد بيئة Ubuntu جديدة لمراقبة البنية التحتية الخاصة بك، فراجع دليلنا الشامل حول كيفية تثبيت Ubuntu 24.04 مع أدوات مفيدة لتجهيز نظامك.

الفوائد تشمل:

  • الدعم طويل الأمد وإصلاحات الأمان
  • مجتمع كبير وتوثيق واسع
  • دعم مستودع APT الأصلي من Grafana Labs
  • توافق ممتاز مع Docker
  • مثالية للبيئات التطويرية والتشغيلية

طرق التثبيت

الطريقة 1: التثبيت عبر مستودع APT (الموصى بها)

هذا هو الأسلوب الأسهل، ويقدم تحديثات تلقائية عبر مدير حزم Ubuntu. إذا كنت جديدًا في استخدام واجهة Ubuntu أو ترغب في زيادة إنتاجيتك، فراجع قائمة اختصارات لوحة المفاتيح لـ Ubuntu لمساعدتك في التنقل داخل النظام بكفاءة.

الخطوة 1: تثبيت المتطلبات الأساسية

sudo apt-get install -y apt-transport-https software-properties-common wget

الخطوة 2: إضافة مفتاح GPG لجرافانا

sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

الخطوة 3: إضافة مستودع APT لجرافانا

للمستويات المستقرة:

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

الخطوة 4: تحديث وتركيب جرافانا

sudo apt-get update
sudo apt-get install grafana

الخطوة 5: بدء وتمكين خدمة جرافانا

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server.service

الخطوة 6: التحقق من التثبيت

sudo systemctl status grafana-server

ستبدأ جرافانا الآن على http://localhost:3000

الطريقة 2: التثبيت باستخدام Docker

يوفر Docker العزلة وإدارة أسهل للنشر المبني على الحاويات.

الخطوة 1: تثبيت Docker (إذا لم يتم تثبيته بالفعل)

sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

الخطوة 2: تشغيل حاوية جرافانا

docker run -d \
  --name=grafana \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  grafana/grafana-oss

للحفاظ على البيانات عند التكوين:

docker run -d \
  --name=grafana \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  -v $(pwd)/grafana.ini:/etc/grafana/grafana.ini \
  -e "GF_SERVER_ROOT_URL=http://your-domain.com" \
  -e "GF_SECURITY_ADMIN_PASSWORD=your-secure-password" \
  grafana/grafana-oss

الطريقة 3: التثبيت باستخدام Docker Compose

أنشئ ملف docker-compose.yml:

version: '3.8'

services:
  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=your-secure-password
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_SERVER_ROOT_URL=http://your-domain.com

volumes:
  grafana-storage:

ابدأ باستخدام:

docker-compose up -d

التكوين الأولي

تسجيل الدخول الأول

  1. انتقل إلى http://your-server-ip:3000
  2. بيانات الاعتماد الافتراضية:
    • اسم المستخدم: admin
    • كلمة المرور: admin
  3. سيتم طلب تغيير كلمة المرور فورًا (مُوصى به بشدة!)

تكوين مصدر البيانات الأول

مثال: إضافة Prometheus

  1. اضغط على التكوين (أيقونة التروس) → مصادر البيانات
  2. اضغط على إضافة مصدر بيانات
  3. اختر Prometheus
  4. اضبط:
    • الاسم: Prometheus
    • العنوان: http://localhost:9090 (تعديل حسب خادم Prometheus الخاص بك)
    • الوصول: الخادم (الافتراضي)
  5. اضغط على حفظ والاختبار

مثال: إضافة InfluxDB

  1. اختر InfluxDB كمصدر بيانات
  2. اضبط:
    • لغة الاستعلام: Flux أو InfluxQL
    • العنوان: http://localhost:8086
    • القاعدة: اسم قاعدة البيانات الخاصة بك
    • المستخدم/كلمة المرور: بيانات الاعتماد الخاصة بك
  3. اضغط على حفظ والاختبار

إنشاء أول لوحة تحكم

  1. اضغط على إنشاء (+) → لوحة تحكم
  2. اضغط على إضافة لوحة جديدة
  3. اختر مصدر البيانات
  4. اكتب استعلامك (مثال لـ Prometheus):
rate(http_requests_total[5m])
  1. تخصيص التصور:
    • اختر نوع اللوحة (الرسوم البيانية، المقياس، الإحصائيات، الجداول، إلخ)
    • اضبط الأسطورة، المحاور، الحدود
    • أضف تحويلات إذا لزم الأمر
  2. اضغط على تطبيق لحفظ اللوحة
  3. اضغط على حفظ لوحة التحكم (أيقونة القرص)

التكوين المتقدم

تكوين إعدادات جرافانا

حرّر ملف التكوين الرئيسي:

sudo nano /etc/grafana/grafana.ini

الإعدادات المهمة:

[server]
# البروتوكول (http، https، h2، socket)
protocol = http
http_port = 3000
domain = your-domain.com
root_url = http://your-domain.com

[security]
admin_user = admin
admin_password = your-secure-password
secret_key = your-secret-key

[users]
# تعطيل تسجيل المستخدم
allow_sign_up = false
allow_org_create = false

[auth.anonymous]
enabled = false

[smtp]
enabled = true
host = smtp.gmail.com:587
user = your-email@gmail.com
password = your-app-password
from_address = your-email@gmail.com
from_name = Grafana

إعادة التشغيل بعد التغييرات:

sudo systemctl restart grafana-server

إعداد وكيل عكسي (Nginx)

تثبيت Nginx:

sudo apt install nginx

إنشاء تكوين Nginx:

sudo nano /etc/nginx/sites-available/grafana
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

تفعيل وإعادة التشغيل:

sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

تمكين HTTPS مع Let’s Encrypt

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

تكوين التحذيرات

الخطوة 1: تكوين قناة الإخطار

  1. انتقل إلى التحذيراتنقاط الاتصال
  2. اضغط على نقطة اتصال جديدة
  3. اختر النوع (البريد الإلكتروني، Slack، PagerDuty، Webhook، إلخ)
  4. اضبط الإعدادات (مثل عنوان URL لـ Slack webhook)
  5. اختبر واحفظ

الخطوة 2: إنشاء قاعدة تحذير

  1. تحرير لوحة في لوحة التحكم الخاصة بك
  2. اضغط على علامة التحذير
  3. اضبط الظروف:
    • عندما: avg()
    • من: query(A, 5m, now)
    • أعلى من: 80
  4. اضبط فترة تقييم
  5. أضف قناة إخطار
  6. احفظ

استخدامات شائعة

مراقبة البنية التحتية

المجموعة: Prometheus + Node Exporter + Grafana

مراقبة مؤشرات الأداء:

  • المعالج، الذاكرة، استخدام القرص
  • حركة المرور الشبكية
  • حمل النظام
  • إدخال/إخراج القرص

للمراقبة الخاصة بالبطاقات الرسومية NVIDIA، قد ترغب في استكشاف تطبيقات مراقبة البطاقات الرسومية لـ Linux/Ubuntu التي تتكامل جيدًا مع جرافانا.

استيراد لوحة تحكم ID: 1860 (Node Exporter Full)

مراقبة Kubernetes

المجموعة: Prometheus + kube-state-metrics + Grafana

مراقبة تجميع K8s:

  • مؤشرات الحاويات والمستويات
  • استخدام موارد التجميع
  • حالة التوزيع
  • مراقبة الإدخال/الإخراج والخدمات

استيراد لوحة تحكم ID: 15757 (مراقبة تجميع Kubernetes)

مراقبة أداء التطبيق

المجموعة: Loki + Promtail + Grafana

مراقبة سجلات التطبيق ومراقبة الأداء:

  • معدلات الطلبات والتأخيرات
  • معدلات الأخطاء
  • تجميع السجلات وفلترةها
  • تتبع التوزيع

مراقبة قواعد البيانات

مراقبة MySQL، PostgreSQL، MongoDB:

  • أداء الاستعلامات
  • مجموعات الاتصال
  • الاستعلامات البطيئة
  • حالة التكرار

أفضل الممارسات للوحات التحكم

  1. تنظيم حسب الغرض: إنشاء لوحات تحكم منفصلة للفرق/الخدمات المختلفة
  2. استخدام المتغيرات: إنشاء لوحات تحكم ديناميكية مع متغيرات القوالب
  3. تحديد فترات زمنية مناسبة: الافتراضي إلى فترات زمنية ذات معنى
  4. إضافة ملاحظات: علامات على الإطلاقات والحوادث
  5. استخدام المجلدات: تنظيم لوحات التحكم بشكل منطقي
  6. تفعيل الإصدار: تتبع تغييرات لوحة التحكم
  7. تحديد فترات تحديث: توازن بين الحاجة إلى الوقت الفعلي والأداء
  8. إضافة وثائق: استخدام لوحات النصوص لشرح المؤشرات

حل مشاكل شائعة

لا يمكن بدء خدمة جرافانا

# تحقق من السجلات
sudo journalctl -u grafana-server -f

# تحقق من التكوين
sudo grafana-cli admin reset-admin-password newpassword

مشاكل الاتصال بمصدر البيانات

  • تحقق من الاتصال الشبكي: telnet datasource-host port
  • تحقق من قواعد الحماية النارية
  • تحقق من بيانات الاعتماد
  • تحقق من سجلات خدمة مصدر البيانات

مشاكل الأداء

  • تقليل فترات الاستعلام الزمنية
  • تحسين استعلامات مصدر البيانات
  • زيادة موارد الخادم
  • استخدام التخزين المؤقت عند الضرورة
  • فك تحليل التخزين المؤقت لنتائج الاستعلام

لا تُحمَّل لوحة التحكم

  • مسح ذاكرة التخزين المؤقت للمتصفح
  • تحقق من وحدة تحكم المتصفح للحصول على أخطاء
  • تحقق من أن ملف لوحة التحكم JSON غير تالف
  • تحقق من سجلات خادم جرافانا

النسخ الاحتياطي والصيانة

نسخ احتياطي لقاعدة بيانات جرافانا

# توقف جرافانا
sudo systemctl stop grafana-server

# نسخ احتياطي قاعدة بيانات SQLite
sudo cp /var/lib/grafana/grafana.db /backup/grafana-$(date +%Y%m%d).db

# نسخ احتياطي التكوين
sudo cp /etc/grafana/grafana.ini /backup/grafana-ini-$(date +%Y%m%d).bak

# بدء جرافانا
sudo systemctl start grafana-server

نسخ احتياطي تلقائي

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

#!/bin/bash
BACKUP_DIR="/backup/grafana"
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d_%H%M%S)

# نسخ احتياطي قاعدة البيانات
sudo cp /var/lib/grafana/grafana.db $BACKUP_DIR/grafana-$DATE.db

# نسخ احتياطي لوحات التحكم عبر API
curl -H "Authorization: Bearer YOUR_API_KEY" \
  http://localhost:3000/api/search?type=dash-db | \
  jq -r '.[] | .uid' | \
  xargs -I{} curl -H "Authorization: Bearer YOUR_API_KEY" \
  http://localhost:3000/api/dashboards/uid/{} > $BACKUP_DIR/dashboards-$DATE.json

# احتفظ فقط بنسخ احتياطية من 30 يومًا
find $BACKUP_DIR -mtime +30 -delete

تحديث جرافانا

# طريقة APT
sudo apt update
sudo apt upgrade grafana

# طريقة Docker
docker pull grafana/grafana-oss:latest
docker-compose down
docker-compose up -d

تقوية الأمان

  1. تغيير بيانات الاعتماد الافتراضية فورًا
  2. استخدام HTTPS مع شهادات صالحة
  3. تكوين جدار الحماية:
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    
  4. تعطيل الوصول المجهول
  5. استخدام مصادقة قوية (LDAP، OAuth، SAML)
  6. التحديثات الدورية حافظ على تحديث جرافانا
  7. تقييد أذونات المستخدمين استخدم التحكم في الوصول بناءً على الأدوار
  8. تفعيل سجلات المراجعة
  9. استخدام مصادر بيانات قراءة فقط عند الضرورة
  10. تطبيق تحديد الحد الأقصى للطلبات

مراقبة جرافانا نفسها

مراقبة خادم جرافانا:

  1. تفعيل نقطة النهاية الخاصة بالمؤشرات في grafana.ini:
    [metrics]
    enabled = true
    
  2. أضف جرافانا كهدف لـ Prometheus
  3. استورد لوحة مؤشرات جرافانا

المكونات المفيدة

تثبيت المكونات عبر CLI:

sudo grafana-cli plugins install <plugin-id>
sudo systemctl restart grafana-server

المكونات الموصى بها:

  • grafana-piechart-panel: رسوم مقطعية محسنة
  • grafana-worldmap-panel: تصور بيانات جغرافية
  • grafana-clock-panel: عرض الوقت والتاريخ
  • grafana-simple-json-datasource: الاتصال بـ APIs JSON المخصصة
  • alexanderzobnin-zabbix-app: تكامل Zabbix

أمثلة للتكامل

جرافانا + Prometheus + Node Exporter

إعداد مكدس مراقبة كامل:

# تثبيت Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter

# إنشاء خدمة systemd
sudo tee /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl start node_exporter
sudo systemctl enable node_exporter

جرافانا مع InfluxDB و Telegraf

إعداد مراقبة سلسلة زمنية:

# تثبيت InfluxDB
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update && sudo apt install influxdb
sudo systemctl start influxdb
sudo systemctl enable influxdb

# تثبيت Telegraf
sudo apt install telegraf
sudo systemctl start telegraf
sudo systemctl enable telegraf

تحسين الأداء

تحسين الاستعلامات

  • استخدم فترات زمنية مناسبة
  • قلل عدد نقاط البيانات المُعاددة
  • استخدم استراتيجيات التخزين المؤقت
  • اجمِع البيانات عند المصدر عند الضرورة
  • استخدم قواعد تسجيل في Prometheus

تحسين الخادم

[database]
# زيادة عدد الاتصالات القصوى
max_open_conn = 300
max_idle_conn = 100

[dataproxy]
# إعدادات المهلة
timeout = 30
keep_alive_seconds = 30

[rendering]
# تفعيل حد إرسال متوازي
concurrent_render_limit = 10

روابط مفيدة

الخاتمة

جرافانا على Ubuntu توفر منصة قوية ومرونة لمراقبة وقابلية الملاحظة. سواء كنت تراقب خادمًا واحدًا أو تجميعًا كبيرًا لـ Kubernetes، فإن قدرات التصور الغنية لجرافانا، ودعم مصادر البيانات الواسع، والمجتمع النشط يجعلها خيارًا ممتازًا لفرق DevOps.

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

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