پرش به محتوا
آرش حاتمی

hatamiarash7/ Salt-Result-Parser

سال توسعه: ۱۴۰۲ متن‌باز

نمایش زمان اجرای Stateهای SaltStack روی نمودار

ابزاری پایتونی برای استخراج زمان اجرای Stateها از خروجی متنی SaltStack و نمایش آن‌ها در نمودار میله‌ای تعاملی، برای مقایسه و پیدا کردن مراحل زمان‌بر.

  • Python
  • SaltStack
  • Matplotlib
  • mplcursors

وقتی اجرای مجموعه‌ای از Stateهای SaltStack طول می‌کشد، پیدا کردن مراحل زمان‌بر در میان خروجی متنی همیشه راحت نیست. Salt Result Parser زمان‌های ثبت‌شده در خروجی را به نمودار میله‌ای افقی تبدیل می‌کند تا بتوانید مدت اجرای مراحل مختلف را کنار هم ببینید و موارد کندتر را برای بررسی بیشتر انتخاب کنید.

این ابزار یک اسکریپت Python است که فایل خروجی ذخیره‌شدهٔ salt یا salt-call را می‌خواند. برای تحلیل فایل به اتصال به Salt Master نیاز ندارد و خودش فرمانی روی سرورها اجرا نمی‌کند؛ دادهٔ موردنیازش همان شناسه‌ها و زمان‌های موجود در متن است.

نمودار چه چیزی نشان می‌دهد؟

  • هر میله با شناسهٔ یک State برچسب‌گذاری می‌شود و طول آن، مدت اجرای ثبت‌شده بر حسب میلی‌ثانیه است.
  • نمودار با Matplotlib نمایش داده می‌شود و کتابخانهٔ mplcursors امکان دیدن جزئیات با قرار دادن نشانگر روی میله‌ها را فراهم می‌کند.
  • راهنمای شناور، شناسه و زمان اجرا را با سه رقم اعشار نشان می‌دهد.
  • ترتیب داده‌ها از فایل ورودی گرفته می‌شود؛ برنامه مراحل را بر اساس زمان اجرا مرتب نمی‌کند.

طبق پیاده‌سازی برنامه، شناسه‌ها از خطوط ID: بعد از جداکنندهٔ ---------- و زمان‌ها از الگوی Duration: ... ms استخراج می‌شوند. سپس نمودار با عنوان Job Durations باز می‌شود. این نمایش برای مقایسهٔ مدت اجراست؛ موفق یا ناموفق بودن Stateها و محتوای بخش Changes در نمودار نمایش داده نمی‌شود.

نصب و آماده‌سازی

به Python ۳، ابزار pip و محیطی نیاز دارید که بتواند پنجرهٔ تعاملی Matplotlib را نمایش دهد. نسخه‌های وابستگی در فایل requirements.txt مشخص شده‌اند: Matplotlib نسخهٔ 3.8.3 و mplcursors نسخهٔ 0.5.2. نسخهٔ Python انتخابی باید با این وابستگی‌ها سازگار باشد.

برای نمونه، در لینوکس یا macOS با Git و پشتیبانی از venv:

git clone https://github.com/hatamiarash7/Salt-Result-Parser.git
cd Salt-Result-Parser
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt

اگر خروجی Salt روی سروری بدون محیط گرافیکی تولید شده است، می‌توانید فایل را به سیستم محلی منتقل کرده و نمودار را آنجا باز کنید. برنامه از plt.show() استفاده می‌کند و گزینهٔ خط فرمانی برای تعیین فایل تصویر خروجی ندارد.

ورودی و اجرای برنامه

خروجی متنی Stateها را در فایلی مثل result.txt ذخیره کنید و مسیر آن را به برنامه بدهید:

python3 main.py result.txt

نام فایل دلخواه است؛ مسیر فایل، اولین آرگومان برنامه است و فایل با کدگذاری UTF-8 خوانده می‌شود. برای یک آزمایش کوچک، متن نمونهٔ زیر را در result.txt قرار دهید. شناسه‌ها و زمان‌های این مثال فرضی‌اند و قالب مورد انتظار پارسر را نشان می‌دهند:

local:
----------
          ID: install_nginx
    Function: pkg.installed
      Result: True
     Comment: Package installed
     Started: 10:00:00.000000
    Duration: 1250.500 ms
     Changes:
----------
          ID: start_nginx
    Function: service.running
      Result: True
     Comment: Service is running
     Started: 10:00:01.250500
    Duration: 45.250 ms
     Changes:

با اجرای دستور بالا، دو شناسهٔ install_nginx و start_nginx مبنای برچسب‌های نمودار می‌شوند. مقایسهٔ طول میله‌ها کمک می‌کند تفاوت زمان نصب بسته و راه‌اندازی سرویس را ببینید؛ برای دیدن مقدار دقیق نیز نشانگر را روی هر میله قرار دهید.

نکات قالب ورودی

پارسر بر پایهٔ الگوهای متنی مشخص نوشته شده است، بنابراین خروجی JSON یا YAML و خروجی‌هایی که این خطوط را ندارند، ورودی مناسبی برای آن نیستند. بهتر است فایل، متن سادهٔ بدون کدهای رنگی ترمینال باشد و هر State یک خط شناسه و یک خط مدت اجرا با واحد ms داشته باشد.

شناسه‌ها و زمان‌ها جداگانه استخراج و به ترتیب به هم نسبت داده می‌شوند. برنامه تطبیق کامل ساختار هر State را بررسی نمی‌کند؛ اگر بخشی از خروجی حذف شده باشد یا تعداد این دو گروه برابر نباشد، ممکن است رسم نمودار خطا بدهد یا نسبت دادن زمان‌ها قابل اتکا نباشد. پیش از تحلیل، کامل بودن فایل را بررسی کنید.

همچنین نام Minion در برچسب‌ها وارد نمی‌شود. برای خروجی چند میزبان یا Stateهایی با شناسهٔ تکراری، برچسب‌ها ممکن است یکسان شوند و میله‌ها روی هم قرار بگیرند؛ استفاده از خروجی یک میزبان با شناسه‌های متمایز، مقایسه را روشن‌تر می‌کند.

کد پروژه با مجوز MIT منتشر شده است. راهنمای اصلی و تصویر نمونهٔ نمودار در مخزن پروژه قرار دارند.