CodeCrafters
774 subscribers
90 photos
50 videos
42 files
170 links
Download Telegram
وب سایت کانال https://codecrafters.ir

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


#design_patterns الگوهای طراحی

#postgresql پستگرس

#k8s کوبرنتیز

#agile اجایل
#scrum

#algorithm الگوریتم

#video

#meeting متینگ‌

#principles اصول کدنویسی

#project_managment_system مدیریت تیم

#free خارج از مبحث کامپیوتر


#app برنامه‌های کاربردی

#Git #actions مباحث مربوط به گیت و گیتلب

#conda #env کار با

#Docker مباحث مربوط به داکر

#AI #ML مباحث هوش مصنوعی

#book معرفی کتاب

#monitoring بررسی وضعیت سیستم و کد

#concurrency همزمانی کتاب grokking concurrency


#blovkchain #web3

#DDD #domain_driven_design

#BDD #behavior_driven_development

#soa #sso #microservice


@Code_Crafters

Git Hub:
https://github.com/CodeCrafters-ir/
👍1
برای بررسی لاگ‌ها در سرور معمولا دو ابزار قدرتمند وجود دارد grafana loki و ELK

در ریپوی مربوط به grafana که در گیتهاب کانال با عنوان sysadmin_monitoring موجود می باشد، loki رو داکرایز کردیم و با ابزارهای دیگه و پلتفرم‌های دیگه میتونید بالا بیارید

در این ریپو هم ELK رو داکرایز و کانفیگ کردم
که با کلون کردنش میتونید ازش استفاده کنید یک فایل زیپ شده هم برای تمرین و تست گذاشتم براتون

خب بین دو پلتفرم loki و ELK کدوم رو اسفاده کنیم؟؟؟
پلتفرم loki برای پروژه‌های متوسط و سرورهای معمولی مناسب هست ELK هم برای سیستم‌های بزرگ و معمولا میکروسرویسی

خود ELK مخفف elastic logstash kibana هستش

لینک ریپو رو در زیر براتون گذاشتم

https://github.com/CodeCrafters-ir/ELK.git


#devops
#monitoring

@code_crafters
5🔥1
پروفایل کردن چیست؟؟؟

در طی طراحی یک برنامه همیشه این سوال برامون پیش میاد که کد و کوئری ما بهینه هست یا نه ،چقدر منابع مصرف میکنه(حافظه ، cpu ، i/o و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئری‌هامون و ...

به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن

پروفایلینگ در توسعه نرم افزار به فرآیند تجزیه و تحلیل رفتاری زمان اجرای یک سیستم یا برنامه میگیم ،تا ازین طریق بتوان نقاط ضعف و مورد دار سیستم رو پیدا کنیم و در جهت بهبود اون اقدام به بازنویسی موارد مدنظرمون کنیم


انواع مختلف پروفایلینگ به دسته بندی های زیر تقسیم میشه
۱-پروفایلینگ زمان:
مقدار زمان صرف شده بخش‌های مختلف کد رو اندازه گیری میکنیم


۲-پروفایلینگ حافظه:
تحلیل نحوه استفاده از حافظه توسط یک برنامه (مدیریت ناکارآمد، مصرف غیر ضروری و ...)

۳-پروفایلینگ cpu:
نحوه استفاده از پردازنده، شناسایی عملیات‌های محدود به cpu و نقاطی که بهینه سازی شود


۴-پروفایلینگ i/o:
دسترسی به فایلها یا کوئری‌های دیتابیس،شناسایی نقاط محدود کننده و بهبود آن

۵-پروفایلینگ پوششی کد:
کدام بخش کد در طول یک جریان ،اجرا شدند کمک به تست و شناسایی کدام بخش کد اجرا نشده است


۶-پروفایلینگ فراخوانی تابع:
ردیابی فراوانی و مدت زمان فراخوانی تابع، درک سلسله مراتب فراخوانی و شناسایی توابع با تاثیر بالا
نکته قابل توجه:
پروفایلینگ نباید در دسترس غیر توسعه دهندگان قرار گیرد ،این رویکرد و ابزارهای آن تنها مورد استفاده تیم توسعه جهت شناسایی ضعف سیستم و کدها در جهت بهبود آن می باشد نه بیشتر
در فریمورک جنگو هم دو پکیج محبوب وجود دارد django-debug-toolbar و django-silk می باشد


خب بیاید django-silk رو پیکربندی و نصب کنیم


نصب
pip install django-silk
تنظیمات در settings.py
INSTALLED_APPS = [
...
'silk'
]


MIDDLEWARE = [
...
'silk.middleware.SilkyMiddleware',
]
در urls اصلی پروژه
from django.contrib import admin
from django.urls import path, include
from django.conf import settings


urlpatterns = [
path('admin/', admin.site.urls),
]

if settings.DEBUG:
urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]
در نهایت
python manage.py makemigrations

python manage.py migrate

python manage.py collectstatic

python manage.py runserver
حالا کافیه به مرورگر خود برید یکم داخل اپلیکیشن بگردید ویوهای مختلف رو ببینید و قسمت‌های مختلف برنامه رو بالا پایین کنید و در نهایت به آدرس
http://localhost:8000/silk
میتوانید خروجی پروفایلینگ کارهای مختلف و رفتارها رو ببینید

این پکیج امکانات بیشتری به شما میدهد که با خوندن صفحه گیت‌هاب اون میتونید بیشتر باهاش آشنا بشید

#monitoring

@code_crafters
👍12
بنچمارکینگ ( benchmark test) چیست؟؟؟

همیشه بحث بر سر کدهامون هست
مدام و مدام کد میزنیم چه در قالب فردی، چه در قالب گروهی و موضوع اصلی همیشه پابرجاست کد ما چقدر خوب و سریع هستش

یک کد رو از دیدگاه‌های مختلفی میشه بررسی کرد سرعت اجرایی اون در حالت‌های مختلف، محک گذاری برای یافتن تنگناها، ناکارآمدی ها و رگرسیون‌ها

تست عملکرد (benchmark) شامل قراردادن کد در معرض عوامل استرس زا و سناریوهای مختلف جهت سنجش پاسخگویی، ثبات و مقیاس پذیری است

از طرفی هم معیارسنجی فرآیند اندازه‌گیری زمان اجرای کد یا استفاده از منابع برای ایجاد یک خط پایه عملکرد و پیگیری تغییرات در طول زمان است

در خصوص موضوع این پست pytest متحد ما خواهد بود و در کنار آن pytest benchmark همراه ما خواهد بود


چرا باید کدهای خود را محک بزنیم؟؟؟
۱-برای بهینه سازی الگوریتم‌ها و تکه‌های کد، شناسایی تنگناهای عملکرد و اعتبارسنجی پیشرفت‌ها 

۲-در مقایسه نسخه‌های متفاوت کمک میکند و اطمینان حاصل میکند که نسخه‌های جدید عملکرد را حفظ یا بهبود داده

۳-به تست سازگاری سخت افزار و پلتفرم کمک میکند و اختلافات را در محیط‌های مختلف برجسته میکند

۴-در خطوط لوله یکپارچه سازی پیوسته، محک زدن بعنوان یک سیستم هشدار اولیه عمل میکند و از رگرسیون عملکرد جلوگیری میکند(به این معنی که کد جدید بر عملکرد قبلی تاثیر منفی نمیگذارد)

۵-در نهایت کمک میکند تا با مقایسه عملکرد کتابخانه‌ها مختلف، انتخاب‌های فناوری آگاهانه داشته باشیم



و اما BIG O NOTATION (درک این قسمت مناسب مهندسین نرم افزار)
یکی از مسائل بشدت مهم ساختمان داده‌ها و الگوریتم‌ها تحلیل زمانی کد می‌باشد ،این موضوع به ما مهندسین نرم افزار در درک بهتر معیارها و درک اصول اولیه کمک میکند

این نماد بر مهمترین عوامل موثر بر زمان اجرا یا استفاده از منابع الگوریتم تمرکز میکند و جزئیات دقیق‌تر را انتزاع میکند

بعنوان مثال با توجه به ورودی بزرگتر، آیا انتظار می‌رود زمان اجرا کد بصورت خطی، نمایی یا لگاریتمی مقیاس شود
یا زمان اجرا مستقل از اندازه ورودی است؟یعنی صرف نظر از اینکه ورودی چقدر بزرگ است همان زمان را می‌گیرد


دانش BIG O و عملکرد میتونه به ما قدرتی بده که انتخاب‌های آگاهانه‌ای داشته باشیم که در حوزه تست عملکرد ضروری است


پیش نیازها
دانش پایه‌ای از پایتون و ساختارهای داده‌(list, tuple, string)

دانش پایه‌ای از pytest

اندکی دانش از الگوریتم‌ها

pip install pytest
pip install pytest-benchmark


این کتابخونه به ما امکان این رو میده که کدهامون رو تو حالت‌های مختلف و تعداد بالا محک بزنیم با استفاده از pytest گروه بندی کنیم خروجی هارو نگه داریم و هنگام توسعه خروجی‌ها رو با هم مقایسه کنه و اینکه هیستوگرام بنچمارک رو هم برامون رسم کنه


به طور پیش فرض، pytest-benchmark محک گذاری مبتنی بر زمان را انجام می دهد. زمان اجرای کد مورد آزمایش را اندازه گیری می کند و آماری در مورد زمان بندی هر اجرا ارائه می دهد.
که موارد زیر رو شامل میشه
Min
Max
Mean
StdDev
Median
IQR
Outliers
OPS (Mops/s)
Rounds
Iterations

توضیحات رو در کامنت‌ها براتون میزارم

در پست بعدی یک نمونه عملی رو باهم انجام میدیم

لینک وبسایت
#monitoring

@code_crafters
🔥3👍1
خب بیاید با یک پروژه ساده پیش بریم دایرکتوری کاری ما به شکل زیر خواهد بود
Plbenchmark-test
├── src
│ └── sorting_examples.py
└── test
├── conftest.py
└── test_benchmark.p

از این ریپوزیتوری میتونید دریافت کنید

توضیحات
در داخل فایل sorting_example.py سه الگوریتم مرتب سازی قرار دادیم

در فایل conftest.py دو نوع داده ورودی کوچک و بزرگ برای تست‌هامون ساختیم

در فایل test_benchmark.py تست‌هامون رو نوشتیم


با دستور زیر گروه sort_small رو اجرا میکنیم
pytest -m sort_small -v -s 
و خروجی سه تستی که برای اون نوشتیم رو میبینیم که شامل موارد ذکر شده در پست قبلی میباشد

با دستور زیر میتونیم هیستوگرام اون رو هم ببینیم
pip install pygal

pytest --benchmark-histogram -m sort-larg

هیستوگرام رو در یک تصویر در مسیر جاریتون خواهد ساخت هر تابع تست شده رو به شکل یک کندل نشون میده
در پست قبلی گفته بودیم که این کتابخونه پیش فرض بر روی زمان اجرا تمرکز دارد با دستور زیر و احرا کردن یک قسمت خاص از کدهای تست میتونید این مورد رو مشاهده کنید
pytest --benchmark-histogram -m benchmark

خروجی تست عملکرد در خط فرمان و هیستوگرام در یک فایل تصویری بصورت کندل
و با دستور زیر در هربار اجرا میتوانید بنچمارک رو ذخیره کنید
pytest -m sort_large --benchmark-autosave

در مسیر جاری و در دایرکتوری benchmarks. این فایل‌هارو مطابق با ورژن پایتون ذخیره میکند در ابتدای هر فایل یک مقدار چهر عددی قرار میده که بعدا از این برای مقابسه دو بنچمارک باهم استفاده میکنیم

جالبه بدونید که مشخصات سخت افزار و نود ،تاریخ و ورژن ، مشخصات پردازنده بصورت و ... روکامل هم ذخیره میکنه تا در هربار بنچمارک بتونید مقایسه کاملی انجام دهید
و اخرین دستور جهت مقایسه دو مقدار بنچمارک ذخیره شده
pytest-benchmark compare 0001 0002
نتایج خروجی رو در خط فرمان میتونید مشاهده کنید


و اما یک سوال
ایا اگر در تابع تستی نیاز به خوندن داده از کسیر خاصی یا دیتابیس خاصی باشد آیا این تایم صرف شده رو در بررسی سطح عملکر و محک تاثیر میده؟؟؟ طبق اسناد این کتابخونه خیر

تصاویر خروجی دستورات در کامنت‌ها

لینک وبسایت

#monitoring

@code_crafters
3👍2
در ادامه مبحث بنچمارکینگ روی یک پروژه جنگویی پیاده سازی میکنیم و در نهایت با تست عملکرد برای ویوهای ساخته شده با FBV ,CBV بررسی میکنیم عملکرد و محک زدن کدوم بهتره

ابتدا یک پروژه جنگویی همراه یک اپ core ایجاد میکنیم
pip install django

django-admin startproject config .

python manage.py startapp core
در دایرکتوری config
فایل settings.py
INSTALLED_APPS = [
...
"core",
]

فایل urls.py
path('', include('core.urls')),
در اپ core کدهای زیر رو وارد میکنیم


models.py
class CategoryModel(models.Model):
title = models.CharField(max_length=255)
views.py
from django.views.generic import DetailView, ListView
from .models import CategoryModel


def category_list_view(request):
objs = CategoryModel.objects.all()
return render(request, 'core/list.html', {"objs":objs})

def category_detail_view(request, pk):
obj = CategoryModel.objects.get(id=pk)
return render(request, 'core/detail.html', {"obj":obj})

class CategoryListView(ListView):
model = CategoryModel
template_name = 'core/list.html'
context_object_name = 'objs'

class CategoryDetailView(DetailView):
model = CategoryModel
template_name='core/detail.html'
context_object_name = 'obj'
urls.py
from .views import category_list_view, category_detail_view, CategoryDetailView, CategoryListView

app_name = 'core'

urlpatterns = [
path('fbv/', category_list_view),
path('fbv/<pk>/', category_detail_view),
path('cbv/', CategoryListView.as_view()),
path('cbv/<pk>/', CategoryDetailView.as_view()),
]
دستورات makemigrations و migrate رو فراموش نکنید

الزامات مربوط به templates در settings و فایلهای list.html , detail.html رو برای اپ core بصورت ساده انجام دهید


جهت راه اندازی بنچمارکینگ نیاز به نصب سه کتابخانه داریم
pip install pytest pytest-benchmark pytest-django

در دایرکتوری root پروژه یک فایل با نام pytest.ini ساخته کدهای زیر رو در ان قرار دهید
[pytest]
DJANGO_SETTINGS_MODULE = config.settings

دلیل اینکار ازین بابت هست که بخشی از کدهای ما وابسته به اجرا شدن پروژه جنگویی می‌باشد و اجرا کردن پروژه جنگویی با صدا زدن فایل تنظیمات آن می‌باشد و به این صورت pytest اینکار رو انجام میدهد


دایرکتوری tests ساخته و داخل ان فایل test_view.py رو میسازیم و کدهای زیر رو داخل اون میزاریم
import pytest
from core.models import CategoryModel
from django.test import RequestFactory
from core.views import category_list_view, category_detail_view, CategoryListView, CategoryDetailView


@pytest.fixture
def rf():
return RequestFactory()

@pytest.mark.fbv
def test_fbv_list(benchmark, rf):
request = rf.get('/fbv/')
result = benchmark(category_list_view, request)
assert result.status_code == 200

@pytest.mark.fbv
@pytest.mark.django_db
def test_fbv_detail(benchmark, rf):
blog_comment = CategoryModel.objects.create(title='Test')
request = rf.get(f'/fbv/{blog_comment.pk}/')
result = benchmark(category_detail_view, request, pk=blog_comment.pk)
assert result.status_code == 200

@pytest.mark.cbv
def test_cbv_list(benchmark, rf):
request = rf.get('/cbv/')
view = CategoryListView.as_view()
result = benchmark(view, request)
assert result.status_code == 200

@pytest.mark.cbv
@pytest.mark.django_db
def test_cbv_detail(benchmark, rf):
blog_comment = CategoryModel.objects.create(title='Test')
request = rf.get(f'/cbv/{blog_comment.pk}/')
view = CategoryDetailView.as_view()
result = benchmark(view, request, pk=blog_comment.pk)
assert result.status_code == 200


دستورات زیر رو در خط فرمان بزنید
pytest -m cbv --benchmark-autosave

pytest -m fbv --benchmark-autosave

pytest-benchmark compare 0001 0002


خروجی بنچمارکینگ و تست عملکرد رو برای ویوهای FBV و CBV در جنگو رو باهم مقایسه کنید


لینک وبسایت

#monitoring

@code_crafters
تفاوت پروفایلینگ و بنچمارکینگ

در چند پست قبلی راجب دو‌موضوع profiling و benchmarking صحبت کردیم
با ابزارهای اون آشنا و بصورت عملی هم اجرا کردیم

تفاوت این دو در چیست؟؟؟
اندازه گیری و بررسی پرفورمنس معمولا شامل دو فرآیند متفاوت است پروفایلینگ و بنچمارکینگ، هر دو روش‌های ضروری برای بهبود عملکرد یک برنامه کاربردی هستند و بسته به موقعیت، تنها تنها یکی از این دو ممکن است اجرا بشه، در حالیکه در موارد دیگر این دو مکمل همدیگه هستند


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


بنچمارکینگ
بنچمارکینگ یا محک زدن فرآیندی است که برای مقایسه دو یا چند سیستم با استفاده از یک اندازه گیری مشترک استفاده میشود تا بتوانید تشخیص دهید کدامیک در برابر آن تست خاص عملکرد بهتری دارد، این برای مقایسه راه حل‌های مختلف نرم افزار یا برای مقایسه تغییرات در نسخه‌های مختلف یک نرم افزار مفید است


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

فرض کنید می‌خواهیم راه‌هایی برای بهبود عملکرد پروژه خود تا آنجا که ممکن است پیدا کنیم:
 برای این کار، باید پروفایل‌سازی را انجام دهیم. ما باید بررسی کنیم که کدام عملکردها طولانی‌ترین زمان را برای اجرا می‌برند تا بتوانیم روی بهبود عملکرد آنهایی که بدترین گلوگاه‌ها هستند تمرکز کنیم. 
فرض کنید می خواهیم عملکرد را بین دو نسخه اصلی پروژه خود مقایسه کنیم تا ببینیم چرخه انتشار دوم چگونه بر عملکرد تأثیر می گذارد. برای این کار، باید بنچمارکینگ انجام دهیم:
 آنها را در مقابل یکدیگر قرار می دهیم و برای مثال، زمان بارگذاری محتوای خاصی را در یک نسخه پروژه خود با زمان بارگذاری همان محتوا در نسخه دیگر مقایسه می کنیم


اساساً، بنچمارک همیشه شامل نوعی مقایسه است:
اگر عملکرد یک نسخه اصلی پروژه را معیار قرار دهیم و هرگز آن را با چیزی مقایسه نکنیم، واقعاً ارزش زیادی ارائه نمی دهد. تا زمانی که آن را با یک نقطه مرجع مقایسه نکنیم، نمی‌توانیم بگوییم که انتشار به‌ویژه خوب است یا نه
با این حال، پروفایل کردن فقط از نگاه یک نسخه ارزشمند است، ما مجبور نیستیم نتایج پروفایل را با مجموعه دیگری از نتایج مقایسه کنیم تا ارزشی از آن بدست آوریم.

یکی دیگر از رابطه‌های بین پروفایلینگ و بنچمارکینگ در توالی آن‌ها است:
در حالی که در برخی موقعیت‌ها، تنها یکی از این دو ممکن است اعمال شود
به طور کلی، پروفایلینگ قبل از اقدام در مورد تغییرات کد اتفاق می‌افتد، در حالی که بنچمارک پس از آن اتفاق می‌افتد

وضعیت زیر را در نظر بگیرید:
-ما می‌خواهیم زمان پاسخ‌دهی سرور اصلی پروژه خود را بهبود بخشیم، بنابراین پروژه را نمایه (profile) می‌کنیم و تشخیص می‌دهیم که یک عملکرد خاص 10٪ از زمان کلی را تشکیل می‌دهد

-بنابراین ما تصمیم داریم بر روی بهبود عملکرد آن عملکرد تمرکز کنیم، ما منطق را در آن تابع بهبود می‌دهیم تا کارآمدتر باشد، به این امید که تاثیر کلی عملکرد منفی آن را کاهش دهیم

پس از تکمیل تغییر کد، با مقایسه زمان پاسخ سرور قبل از تغییر با زمان پاسخ سرور پس از تغییر، پروژه خود را محک (benchmark) می زنیم تا تأیید کنیم که تغییر (امیدوارم) تا چه اندازه باعث بهبود آن شده است.


لینک وب‌سایت

#monitoring

@code_crafters
2👍2🔥1
اکنون بخش دشوار اینجاست:
بر اساس موارد بالا، ممکن است استدلال کنید که اگر از پروفایل برای شناسایی عملکرد استفاده کنیم، می‌توانیم دوباره نمایه نماییم تا مقایسه کنیم. این از نظر فنی امکان پذیر است، اما بستگی به این دارد که شما در حال تلاش برای رسیدن به این معیار هستید. از آنجایی که ابزارهای نمایه سازی عملکرد تک تک عملکردها را در حین اجرای برنامه ردیابی می کنند، مقداری سربار اضافه می کنند که زمان اجرا را کاهش می دهد، که می تواند تأثیر مربوط به تغییر را تغییر دهد.

یک راه بهتر برای ارزیابی تأثیر کلی عملکرد یک تغییر، گرفتن معیارها با استفاده از ابزارهایی است که استانداردهای عمومی صنعت مانند TTFB را اندازه گیری می کند.
خلاصه بگم TTFB مخفف Time to First Byte است. اگر بخواهیم به دور از هرگونه پیچیدگی معنای آن را بگوییم، یعنی مدت‌زمانی که طول می‌کشد تا اولین بایت از پاسخ سرور به سیستم کاربر درخواست‌کننده برسد. بگذارید قضیه را کمی باز کنیم. یکی از مهم‌ترین کارایی‌های TTFB این است که کند بودن بیش‌ازحد سرور را معلوم می‌کند.


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

بنابراین آنها برای شناسایی تنگناهای عملکرد بتن برای بهبود در نرم افزار یا زیر سیستم شما مناسب نیستند.

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

یکی از بهترین روش ها برای توضیح این تنوع مورد انتظار، انجام چندگانه است.

بررسی می کند تا تأیید کند که یک رعایت خاص به دلیل ویژگی های محیطی فقط "تصادفی" نبوده است


لینک وب‌سایت

#monitoring

@code_crafters
4👍1
پروژه وقتی به مرحله پروداکشن میرسه، یه گام خیلی مهم داره که انجام اون الزام آوره

لاگ گرفتن و لاگ انداختن
موضوعی که تو همه پروژه‌ها از کوچیک تا بزرگش و تو هر معماری مورد نیاز هستش

انواع مختلف لاگ رو داریم در سطوح مختلف و همیشه کنترل کردنش بهتره بگیم نوشتن لاگ شخصی و توسعه اون یه دردسر نسبتا بزرگ هستش

مهمترین نوع لاگ در دنیای برنامه نویسی audit log (لاگ میمیزی) هستش که در سطح امنیتی و رهگیری تمامی رفتارهای کاربر در سیستم انجام میشه که با جزئیات کامل صورت میگیره

در جنگو کتابخونه django-auditlog با نصب و کانفیگ (تنظیماتش خیلی راحت هستش) کردنش لاگ ممیزی رو در سیستم شما پیاده سازی میکنه و فیچرهای کنترلی زیادی رو هم بهتون میده

کمتر از نیم ساعت این کتابخونه رو بخونید و خیلی راحت تو پروژه‌ها ازش بهره ببرید هم بخش امنیتی سازمان و هم پشتیبانی و مدیران رده بالا رو به رضایت از بخش لاگ گیری سیستم میرسونه

#monitoring
#django
#log
#audit_log

@code_crafters
👍76👎1