در این آموزش، نحوه نصب ابزار Grafana را در کلاستر Kubernetes نشان می‌دهیم. همچنین چگونگی ارتباط آن با Prometheus و سازماندهی داده‌ها در داشبورد را بررسی خواهیم کرد.

Prometheus یک نرم‌افزار متن‌باز مانیتورینگ برای اپلیکیشن‌های گسترده با حجم بالا محسوب می‌شود. این ابزار شامل ویژگی‌ای چون هشدار و آمار لحظه‌ای، کوئری‌های انعطاف‌پذیر، یک مدل دریافت HTTP و همچنین انتخابی مناسب برای مانیتورینگ کلاسترهای Kubernetes است.

در حالی که Prometheus یک نرم‌افزار مستقل به شمار می‌رود، امّا استفاده از آن به همراه یک داشبورد مجازی به درک کلی بهتر از یک کلاستر Kubernetes کمک می‌کند. یکی از گزینه‌های محبوب برای این سناریو، ابزار Grafana است. Grafana یک نرم‌افزار شبیه‌سازی متن‌باز است که از Prometheus به عنوان یک منبع داده خارجی پشتیبانی می‌کند.

پیش‌نیازها

  • کلاستر Kubernetes
  • نصب ابزار خط فرمان kubectl
  • نصب و تنظیم Prometheus

نصب ابزار Grafana

به منظور نصب ابزار Grafana در یک کلاستر Kubernetes، یک سری فایل yaml می‌بایست ایجاد و در تنظیمات اِعمال شوند.

۱) کار را با ایجاد ConfigMap در یک فایل با عنوان grafana-datasource-config.yaml شروع می‌کنیم.


nano grafana-datasource-config.yaml

این فایل شامل موارد زیر خواهد بود.


apiVersion: v1

kind: ConfigMap

metadata:

name: grafana-datasources

namespace: default

data:

prometheus.yaml: |-

{

"apiVersion": 1,

"datasources": [

{

"access":"proxy",

"editable": true,

"name": "prometheus",

"orgId": 1,

"type": "prometheus",

"url": "http://prometheus-service.monitoring.svc:9090",

"version": 1

}

]

}

۲) محتوای این فایل را مطابق با نیازهای خود تغییر دهید. برای این منظور عنوان جایی را که می‌خواهید ابزار Grafana را در آن نصب کنید، وارد کنید.

۳) فایل را ذخیره کرده و از آن خارج شوید.

۴) با استفاده از فرمان kubectl، این تغییرات را در کلاستر اِعمال کنید.


kubectl create -f grafana-datasource-config.yaml

نتیجه خروجی، تأیید کننده ایجاد ConfigMap خواهد بود.

کاربرد kubectl برای ساخت grafana-datasources configmap

کاربرد kubectl برای ساخت grafana-datasources configmap

۵) سپس، یک فایل yaml برای بکارگیری ابزار Grafana بسازید.


nano deployment.yaml

این فایل حاوی تنظیمات بکارگیری Grafana خواهد بود.


apiVersion: apps/v1

kind: Deployment

metadata:

name: grafana

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: grafana

template:

metadata:

name: grafana

labels:

app: grafana

spec:

containers:

- name: grafana

image: grafana/grafana:latest

ports:

- name: grafana

containerPort: 3000

resources:

limits:

memory: "1Gi"

cpu: "1000m"

requests:

memory: 500M

cpu: "500m"

volumeMounts:

- mountPath: /var/lib/grafana

name: grafana-storage

- mountPath: /etc/grafana/provisioning/datasources

name: grafana-datasources

readOnly: false

volumes:

- name: grafana-storage

emptyDir: {}

- name: grafana-datasources

configMap:

defaultMode: 420

name: grafana-datasources

۶) فایل را ذخیره کرده و آن را برای کلاستر اجرا کنید.


kubectl create -f deployment.yaml

نتیجه حاکی از ساخت این فایل خواهد بود.

کاربرد kubectl برای ساخت فایل تنظیمات بکارگیری ابزار Grafana

کاربرد kubectl برای ساخت فایل تنظیمات بکارگیری ابزار Grafana

۷) نهایتاً فایل service.yaml را برای تنظیم سرویس Grafana ایجاد می‌کنیم.


nano service.yaml

این حاوی موارد زیر خواهد بود.


apiVersion: v1

kind: Service

metadata:

name: grafana

namespace: default

annotations:

prometheus.io/scrape: 'true'

prometheus.io/port:   '3000'

spec:

selector:

app: grafana

type: NodePort

ports:

- port: 3000

targetPort: 3000

nodePort: 32000

۸) فایل را مطابق مشخصات کلاستر خودتان تغییر دهید. سپس نوبت به ذخیره و اِعمال تغییرات می‌رسد.


kubectl create -f service.yaml

نتیجه نشان می‌دهد که فایل سرویس با موفقیت ایجاد شده است.

استفاده از kubectl برای ایجاد سرویس Grafana

استفاده از kubectl برای ایجاد سرویس Grafana

۹) از فرمان kubectl port-forward برای هدایت سرویس ابزار Grafana به پورت 3000 استفاده می‌کنیم.


kubectl port-forward svc/grafana 3000

هدایت Grafana به پورت 3000 با استفاده از kubectl

هدایت Grafana به پورت 3000 با استفاده از kubectl

۱۰) حالا یک مرورگر باز کنید و آدرس http://localhost:3000/ را در آن وارد نمایید.

۱۱) در نتیجه، صفحه ورودی ابزار Grafana برایتان باز می‌شود که باید در آن کلمه کاربری و رمز عبور را وارد کنید. در هر دو فیلد کلمه admin را تایپ نموده و روی Log in کلیک نمایید.

صفحه ورودی Grafana

صفحه ورودی Grafana

۱۲) ابزار Grafana از شما خواهد خواست که یک کلمه عبور جدید تنظیم کنید. بعد از این مرحله است که صفحه خانگی برایتان نمایش داده می‌شود.

اضافه‌کردن Prometheus به عنوان منبع داده Grafana

برای شروع کار با Prometheus در Grafana، باید Prometheus را به عنوان یک منبع داده اضافه کنید.

۱) در نوار سمت چپ، روی آیکون چرغ دنده بروید تا زیرمنوی configuration ظاهر شود.

۲) حالا روی گزینه Data Sources کلیک کنید.

دسترسی به مدیریت منابع داده ابزار Grafana از منوی تنظیمات

دسترسی به مدیریت منابع داده ابزار Grafana از منوی تنظیمات

۳) در نتیجه، یک صفحه تنظیمات برایتان باز می‌شود. در این صفحه روی دکمه Add data source کلیک کنید.

اضافه‌کردن یک منبع داده در Grafana

اضافه‌کردن یک منبع داده در Grafana

۴) Prometheus را به عنوان یک نوع منبع داده انتخاب کنید. این کار از طریق دکمه Select در سمت راست انجام می‌گیرد.

انتخاب Prometheus به عنوان یک منبع داده در Grafana

انتخاب Prometheus به عنوان یک منبع داده در Grafana

۵) اکنون صفحه تنظیمات برای Prometheus باز می‌شود.  در اینجا می‌توانید عنوان منبع، آدرس اینترنتی و پورت سرویس Prometheus و نوع دسترسی (دسترسی سرور به صورت پیش‌فرض) را انتخاب نمایید.

تنظیمات Prometheus به عنوان یک منبع داده در ابزار Grafana

تنظیمات Prometheus به عنوان یک منبع داده در ابزار Grafana

۶) وقتی کارتان در اینجا انجام شده، به سراغ پایین صفحه بروید و روی دکمه Save & Test کلیک کنید.

ذخیره و تست Prometheus به عنوان یک منبع داده در Grafana

ذخیره و تست Prometheus به عنوان یک منبع داده در Grafana

در اینجا Grafana ارتباط با Prometheus را آزمایش کرده و فرآیند اضافه‌کردن منبع داده را تکمیل می‌کند.

نکته: در صورتی که با پیغام خطای “Error Bad Gateway” روبرو شدید، می‌توانید دسترسی HTTP را از “Server” به “Browser” تغییر دهید.

وارد کردن ابزار آماری Prometheus به عنوان یک داشبورد در Grafana

امکان استفاده از داشبورد پیش‌ساخته Prometheus در ابزار Grafana وجود دارد و برای این منظور می‌توانید مراحل زیر را دنبال کنید.

۱) به سراغ بخش Data Sources رفته و گزینه Prometheus را انتخاب نمایید.

۲) منوی کرکره‌ای Settings را باز کنید.

۳) حالا روی Dashboards کلیک کنید.

دسترسی به بخش dashboard در منابع داده Grafana

دسترسی به بخش dashboard در منابع داده Grafana

۴) در نتیجه، لیستی از داشبوردهای در دسترس برایتان نمایش داده می‌شود. با کلیک بر روی دکمه Import در سمت راست عنوان، داشبورد موردنظرتان را وارد کنید.

انتخاب داشبورد در بخش منابع داده Prometheus در ابزار Grafana

انتخاب داشبورد در بخش منابع داده Prometheus در ابزار Grafana

۵) به منظور دسترسی به داشبورد، روی آیکون به شکل چهار مربع در نوار سمت چپ بروید تا منوی Dashboards برایتان باز شود.

۶) روی Manage کلیک کنید.

دسترسی به داشبورد Prometheus در Grafana

دسترسی به داشبورد Prometheus در Grafana

۷) داشبورد Prometheus را می‌خواهید آن را مدیریت کنید، از لیست انتخاب نمایید.

انتخاب داشبورد Prometheus Stats در Grafana

انتخاب داشبورد Prometheus Stats در Grafana

آمار سرور Prometheus

داشبورد Prometheus شامل نمودارهای مختلفی است که در زیر آنها را بررسی می‌کنیم.

نمودار‌های تک‌متغیره

بعد از انتخاب داشبورد Prometheus Stats در صفحه Dashboard Management، آمارها به صورت سازماندهی‌شده در پنل‌ها ظاهر می‌شوند.

ظاهر داشبورد Prometheus در ابزار Grafana

ظاهر داشبورد Prometheus در ابزار Grafana

اولین ردیف شامل پنل‌های زیر است:

  • Uptime: زمان گذشته از شروع به کار سرور Prometheus
  • Local Storage Memory Series: تعداد سری‌های Prometheus که در حال حاضر در حافظه نگهداری می‌شوند.
  • Internal Storage Queue Length: هر چه این عدد کوچکتر باشد، وضعیت بهتر خواهد بود. پیام “Empty” نشان می‌دهد که عدد صف برابر صفر است.

پنل Samples ingested اطلاعاتی در مورد تعداد پیام‌های نمونه Prometheus در بازه‌های ۵ دقیقه‌ای ارائه می‌دهد.

معیارهای Prometheus Scrape

پنل‌های Scrape metrics درست در پایین پنل Samples ingested قرار گرفته‌اند.

  • پنل Target Scrapes نشان‌دهنده فرکانس اسکریپنگ هدف (یا به عبارتی Prometheus است در طول ۵ دقیقه گذشته است. این آمار برای سری زمانی در بازه موردنظر محاسبه می شود.
  • پنل Scrape Duration طول زمان اسکریپینگ را نشان می‌‌دهد که در همان بازه ۵ دقیقه‌ای محاسبه شده است.
بخش Prometheus scrape metrics در داشبورد Grafana Prometheus

بخش Prometheus scrape metrics در داشبورد Grafana Prometheus

مدت‌زمان ارزیابی‌ها

پنل Rule Evaluation Duration که در زیر پنل‌های Scrape metrics قرار می‌گیرد، اطلاعاتی را در مورد طول ارزیابی‌ها ارائه می‌دهد.

ایجاد یک داشبورد جدید

برای ایجاد یک داشبورد جدید در ابزار Grafana داریم:

۱) در صفحه Dashboards، روی دکمه New Dashboard کلیک کنید.

ایجاد یک داشبورد جدید در Grafana

ایجاد یک داشبورد جدید در Grafana

۲) در نتیجه، یک صفحه برایتان ظاهر می‌شود که می‌توانید در آن پنل‌ها و ردیف‌های خالی اضافه کنید.

راه اندازی یک داشبورد جدید Grafana

راه اندازی یک داشبورد جدید Grafana

۳) در نتیجه، یک صفحه جدید با یک پنل ساده نمایش داده می‌شود.

یک داشبورد جدید Grafana با یک پنل خالی

یک داشبورد جدید Grafana با یک پنل خالی

سفارشی‌سازی داشبورد با استفاده از Prometheus Query Editor

به منظور ویرایش یک پنل Grafana خاص داریم:

۱) روی عنوان پنل کلیک کنید تا یک منوی کرکره‌ای برایتان باز شود.

۲) در این منو روی Edit کلیک کنید.

دسترسی به بخش edit برای ویرایش نمودار در query editor

دسترسی به بخش edit برای ویرایش نمودار در query editor

۳) در نتیجه، پنجره edit ظاهر می‌شود. پنل‌ها را با معرفی کوئری‌های جدید یا اصلاح کوئری‌های کنونی سفارشی‌سازی کنید. رسیدگی به کوئری‌ها  از طریق زبان کوئری Prometheus صورت خواهد گرفت.

ویرایش یک نمودار در query editor

ویرایش یک نمودار در query editor

۴) پارامترهای زیر در داشبورد پیش‌ساخته Prometheus در Grafana وجود ندارند، ولی برای مانیتورینگ بسیار مفید خواهند بود.

  • prometheus_local_storage_memory_chunks برای پایش بخش‌هایی که Prometheus در حافظه ذخیره می‌کند.
  • prometheus_local_storage_memory_series برای پایش «سری‌های حافظه‌ای» که Prometheus در حافظه ذخیره می‌کند.
  • prometheus_local_storage_ingested_samples_total برای پایش میزان نرخ دریافت نمونه‌ها
  • prometheus_target_interval_length_seconds برای پایش مدت‌زمان بین اسکرپینگ‌های هدف.
  • prometheus_local_storage_chunk_ops_total برای پایش نرخ ثانیه‌ای عملیات ذخیره‌سازی Prometheus

کاربرد داشبوردهای پیش‌ساخته و پلاگین‌ها

Grafana در وب‌سایتش مجموعه متنوعی از داشبوردهای پیش‌ساخته و پلاگین‌ها را در اختیار قرار می‌دهد. برای نصب یک داشبورد پیش‌ساخته مراحل زیر را دنبال کنید.

۱) دریافت فایل json مربوط به پلاگین

۲) کلیک بر روی دکمه Import و دنبال‌کردن دستورالعمل‌ها برای ارسال فایل به Grafana

وارد کردن یک داشبورد جدید در ابزار Grafana با استفاده از یک فایل JSON

وارد کردن یک داشبورد جدید در ابزار Grafana با استفاده از یک فایل JSON

۳) برای نصب پلاگین‌ها، در کلاستر با استفاده از فرمان kubectl به Grafana pod وارد شوید.


kubectl exec -it [grafana-pod] -- [shell]

استفاده از فرمان kubectl برای ورود به Grafana pod

استفاده از فرمان kubectl برای ورود به Grafana pod

۴) حالا از ابزار خط فرمان grafana-cli برای نصب پلاگین استفاده کنید.


grafana-cli plugins install grafana-worldmap-panel

نصب پلاگین با استفاده از ابزار grafana-cli

نصب پلاگین با استفاده از ابزار grafana-cli

در نتیجه، پلاگین درون دایرکتوری پلاگین‌های Grafana نصب خواهد شد که به صورت پیش‌فرض به آدرس /var/lib/grafana/plugins است. این پلاگین پس از نصب، از طریق ابزار Grafana در دسترس خواهد بود.

جمع‌بندی

پس از مطالعه این مطلب آموزشی، می‌توانید به‌راحتی نصب و تنظیمات Grafana را برای استفاده در کنار Prometheus که یکی از ابزارهای مهم توسعه‌دهندگان است، انجام دهید. امیدواریم که از این مطلب وبلاگ آریانت نیز نهایت استفاده را برده باشید.