تجربه‌ی بهینه‌سازی و استفاده از Docker Registry Exporter

تجربه‌ی بهینه‌سازی و استفاده از Docker Registry Exporter
Docker Registry


چند وقت پیش درگیر پروژه‌ای برای رجیستری‌های داکر بودم، و بزرگترین چالشم مانیتور کردن وضعیت رجیستری ها بود. داکر رجیستری به‌طور پیش‌فرض یک‌سری متریک داره که میشه اون‌ها رو با چند خط تنظیمات فعال کرد. برای این کار، باید توی تنظیمات http، آپشن debug رو فعال کنید و یه مسیر برای نمایش متریک‌ها تعریف کنید. تنظیماتش به این شکله:

http:
  addr: 0.0.0.0:5000
  net: tcp
  debug:
    addr: 0.0.0.0:5001
    prometheus:
      enabled: true
      path: /metrics

مشکل اینجا بود که این متریک‌ها کافی نبودن و شامل مواردی که لازم داشتم، مثل تعداد ریپازیتوری‌ها و تعداد تگ‌ها، نمی‌شدن. برای همین قبل از اینکه خودم دست به کار بشم و Exporter بنویسم، توی گیت‌هاب یه گشتی زدم. بعد از کلی گشتن، بالاخره یه Exporter پیدا کردم که کارم رو راه می‌نداخت.

نکته‌ی جالب این بود که این Exporter خودش از Docker استفاده نمی‌کرد:))))) و حدود یک سال هم آپدیت نشده بود!! پس دست به کار شدم و یه سری بهینه‌سازی روش انجام دادم و Dockerize‌اش کردم تا بتونم همون خروجی که می‌خوام رو ازش بگیرم. این شد نتیجه کارم :

GitHub - SinaAboutalebi/docker-registry-exporter: Export Docker Registry metrics such as repository and tag counts for Prometheus to scrape. Runs separately from your Docker registry and Prometheus server.
Export Docker Registry metrics such as repository and tag counts for Prometheus to scrape. Runs separately from your Docker registry and Prometheus server. - SinaAboutalebi/docker-registry-exporter

سعی کردم مستندات رو هم کامل بنویسم تا کار باهاش راحت باشه. برای استفاده ازش می‌تونید مستقیم از دستور Docker استفاده کنید و پارامترهای لازم رو به عنوان env variable پاس بدید:

docker run -d -p 9055:9055 -e REGISTRY_ADDRESS=127.0.0.1:5000 zer0power/docker-registry-exporter

اگه هم بخواید تنظیمات بیشتری انجام بدید، می‌تونید با یه فایل yaml و env variable یا volumes اجراش کنید.

ترکیب متریک‌ها و مانیتورینگ با Prometheus و Grafana

در نهایت با ترکیب متریک‌های داکر رجیستری و Exporter بالا، یه کانفیگ برای Prometheus نوشتم که به شکل زیره:

global:
  scrape_interval: 45s
  scrape_timeout: 30s

scrape_configs:
  - job_name: 'local-registry'
    static_configs:
      - targets: ['172.16.101.250:5001', 'local-registry-exporter:9055']

اینطوری Prometheus می‌تونه متریک‌ها رو به‌صورت مرتب جمع کنه و با یه داشبورد خوشگل توی Grafana، وضعیت رجیستری‌ها رو مانیتور کنید. این کار دید خوبی به وضعیت رجیستری میده و کمک می‌کنه از وضعیت رجیستری ها با خبر باشم.