مشاهدهپذیری (Observability) با Prometheus
میتوانید متریکها را از متابیس خود در قالب Prometheus صادر (export) کنید.
اجرای متابیس و Prometheus بهصورت محلی
برای اینکه تصور دقیقی از نحوهٔ کار متابیس و Prometheus در محیط تولید داشته باشید، در این راهنما نشان میدهیم چطور هر دو را بهصورت محلی روی سیستم خود راهاندازی کنید.
راهاندازی متابیس با متغیر MB_PROMETHEUS_SERVER_PORT
آخرین نسخهٔ فایل JAR متابیس را دانلود کنید و متابیس را با استفاده از یک متغیر محیطی که پورت سرور Prometheus را مشخص میکند اجرا کنید:
MB_PROMETHEUS_SERVER_PORT=9191 java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
تنظیم MB_PROMETHEUS_SERVER_PORT=9191 مشخص میکند که متابیس برای در دسترسگذاشتن متریکها برای Prometheus از پورت 9191 استفاده کند. برای شفافیت دربارهٔ پورتهای درگیر:
- پورت
3000پورتی است که متابیس از آن برای سروکردن رابط وب استفاده میکند. میتوانید باMB_JETTY_PORTاین مقدار را تغییر دهید (مثلاًMB_JETTY_PORT=3001). - پورت
9191(یا هر پورتی که با متغیر محیطیMB_PROMETHEUS_SERVER_PORTتعیین کردهاید) پورتی است که Prometheus از آن متریکها را از متابیس اسکرپ (scrape) میکند. - پورت
9090پورتی است که خود Prometheus برای رابط وب و API خود استفاده میکند.
وقتی متابیس را با این تنظیمات راهاندازی کنید، در لاگها میبینید که متابیس prometheus metrics collector و prometheus metrics web-server را شروع میکند:
(truncated logs)
2022-09-01 17:47:38,808 INFO metabase.util :: Database setup took 3.4 s
2022-09-01 17:47:38,826 INFO metabase.core :: Setting up prometheus metrics
2022-09-01 17:47:38,827 INFO metabase.prometheus :: Starting prometheus metrics collector
2022-09-01 17:47:38,839 INFO metabase.prometheus :: Starting prometheus metrics web-server on port 9,191
(truncated logs)
میتوانید متابیس در حال اجرای خود را در نشانی http://localhost:3000 ببینید.
دانلود و پیکربندی Prometheus
Prometheus را دانلود و فایلها را استخراج کنید.
به دایرکتوری Prometheus بروید و برای پیکربندی آن، یک فایل YAML مانند نمونهٔ زیر ایجاد کنید:
نمونهٔ فایل پیکربندی Prometheus
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: "codelab-monitor"
# 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"
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
# use whatever port here that you set for MB_PROMETHEUS_SERVER_PORT
static_configs:
- targets: ["localhost:9191"]
باید مقدار targets را مطابق جایی که متابیس اجرا میشود تنظیم کنید. در این مثال، متابیس و Prometheus هر دو روی همان میزبان (localhost) اجرا میشوند.
اجرای Prometheus بهصورت محلی
در یک ترمینال جدید و در دایرکتوری Prometheus، دستور زیر را اجرا کنید:
./prometheus --config.file=prometheus.yml
سپس به نشانی http://localhost:9090 سر بزنید. باید رابط وب Prometheus را ببینید و بتوانید متریکهای مختلفی را که متابیس منتشر کرده جستوجو کنید.

نمونهای از خروجی متریکها
در اینجا نمونهای از خروجی منتشرشده توسط متابیس را میبینید:
'# HELP jvm_threads_current Current thread count of a JVM
'# TYPE jvm_threads_current gauge
jvm_threads_current 81.0
'# HELP jvm_threads_daemon Daemon thread count of a JVM
'# TYPE jvm_threads_daemon gauge
jvm_threads_daemon 36.0
'# HELP jvm_threads_peak Peak thread count of a JVM
'# TYPE jvm_threads_peak gauge
jvm_threads_peak 81.0
'# HELP jvm_threads_started_total Started thread count of a JVM
'# TYPE jvm_threads_started_total counter
jvm_threads_started_total 104.0
'# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers
'# TYPE jvm_threads_deadlocked gauge
jvm_threads_deadlocked 0.0
متریکهای صادرشده
نمونهای از متریکهایی که متابیس در اختیار Prometheus قرار میدهد:
c3p0_max_pool_sizec3p0_min_pool_sizec3p0_num_busy_connectionsc3p0_num_connectionsc3p0_num_idle_connectionsc3p0_num_threads_awaiting_checkout_default_userjetty_async_dispatches_totaljetty_async_requests_totaljetty_async_requests_waitingjetty_async_requests_waiting_maxjetty_dispatched_activejetty_dispatched_active_maxjetty_dispatched_time_maxjetty_dispatched_time_seconds_totaljetty_dispatched_totaljetty_expires_totaljetty_request_time_max_secondsjetty_request_time_seconds_totaljetty_requests_activejetty_requests_active_maxjetty_requests_totaljetty_responses_bytes_totaljetty_responses_totaljetty_stats_secondsjvm_gc_collection_seconds_countjvm_gc_collection_seconds_sumjvm_memory_bytes_committedjvm_memory_bytes_initjvm_memory_bytes_maxjvm_memory_bytes_usedjvm_memory_objects_pending_finalizationjvm_memory_pool_bytes_committedjvm_memory_pool_bytes_initjvm_memory_pool_bytes_maxjvm_memory_pool_bytes_usedjvm_memory_pool_collection_committed_bytesjvm_memory_pool_collection_init_bytesjvm_memory_pool_collection_max_bytesjvm_memory_pool_collection_used_bytesjvm_threads_currentjvm_threads_daemonjvm_threads_deadlockedjvm_threads_deadlocked_monitorjvm_threads_peakjvm_threads_started_totaljvm_threads_stateprocess_cpu_seconds_totalprocess_max_fdsprocess_open_fdsprocess_start_time_secondsprocess_virtual_memory_bytesmetabase_email_messages_totalmetabase_email_messages_createdmetabase_email_message_errors_totalmetabase_email_message_errors_created