<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های احسان مسعودی نژاد</title>
        <link>https://virgool.io/feed/@ehsanmasoudi</link>
        <description>‏‏‏‏‏مهندس DevOps، طرفدار فرهنگ متن باز، آزادی، منطق و پرسش‌گری</description>
        <language>fa</language>
        <pubDate>2026-06-21 13:15:43</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/8298/avatar/mGuVUB.jpeg?height=120&amp;width=120</url>
            <title>احسان مسعودی نژاد</title>
            <link>https://virgool.io/@ehsanmasoudi</link>
        </image>

                    <item>
                <title>چه بازه ای باید در تابع ()rate در prometheus استفاده شود؟</title>
                <link>https://virgool.io/@ehsanmasoudi/%DA%86%D9%87-%D8%A8%D8%A7%D8%B2%D9%87-%D8%A7%DB%8C-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AF%D8%B1-%D8%AA%D8%A7%D8%A8%D8%B9-rate-%D8%AF%D8%B1-prometheus-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%B4%D9%88%D8%AF-mn0xahntfn0q</link>
                <description>اینکه چه بازه ای برای تابع rate استفاده شود میتواند سوال برانگیز شود.به صورت یک قانون کلی میتوان گفت بازه مربوط به rate باید حداقل 4 برابر scrape interval باشد. در این صورت در سناریوهای مختلف به مشکل نمیخوریم و در برابر یک scrape ناموفق مقاوم خواهیم بود.در نظر بگیریم که scrape interval ما ده ثانیه باشد و scrapeها در زمان t=0 شروع شده باشند. تابع rate حداقل به دو نمونه نیاز دارد تا بتواند کار کند، پس برای یک query در زمان t=10 نیازمند گذشتن یک دوره scrape interval هستیم. در زمان t=20، ممکن است scrape به صورت کامل ingest نشده باشد. این مسئله راجع به scrape interval سوم یعنی تا زمان t=30 هم ممکن است صادق باشد، پس برای اطمینان خاطر جهت همین مسئله به سه بازه scrape interval نیاز داریم. در نهایت در صورتی که میخواهیم نسبت به یک failed scrape هم مقاوم باشیم لازم است یک scrape interval دیگر را نیز در نظر بگیریم که در مجموع به 4 scrape interval میرسیم. معمولا برای رند کردن این عدد بازه یک دقیقه در نظر گرفته میشود.مسئله دیگر این است که اگر برای مثال جهت گراف کردن از query_range استفاده میکنیم، این رنج باید حداقل اندازه یک step باشد در غیر این صورت بعضی از داده ها در نظر گرفته نمی شوند. متغیر rate__interval__$ مربوط به گرافانا میتواند در این شرایط مفید واقع شود.از طرف دیگر نباید بازه range را بیش از حد بزرگ در نظر گرفت. برای نمونه اگر برای یک rate بازه ای یک ساعته در نظر بگیریم و بر اساس آن اخطار اعلان کنیم همه چیز خوب پیش میرود اما در صورتی که شرط مربوط متوقف شود لازم است یک ساعت منتظر بمانیم تا اخطار از بین برود. پس از یک طرف بازه های طولانی تر موجب می شوند که نقاط trend بهتر شناسایی شوند اما از طرف دیگر زمان بازخورد دادن را زیاد میکند.ضمنا در صورتی که میخوایم در بازه های مختلف میانگین گیری کنید، برای هر بازه‌ی ممکن recording rules نسازید. این کار ضمن اینکه پر زحمت و خطابرانگیز است، گیج کننده هم هست و نگه داری سختی هم در پیش خواهد داشت. بهتر است در بازه های معقولی مثل یک دقیقه دو دقیقه یا پنج دقیقه recording rule بسازید و برای بازه های طولانی تر از avg_over_time بر روی آن ها جهت بهره بری روی گراف ها و اخطارها استفاده کنید.کل مطلب را به این صورت میتوان خلاصه کرد که بازه هایی حداقل چهار برابر scrape_interval استفاده کنید، در سازمانتان از یک یا چند بازه زمانی ثابت در recording rules استفاده کنید و برای بازه های طولانی تر از avg_over_time استفاده کنید.</description>
                <category>احسان مسعودی نژاد</category>
                <author>احسان مسعودی نژاد</author>
                <pubDate>Wed, 16 Jun 2021 22:36:56 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت بین group_interval، group_wait و repeat_interval در Prometheus Alertmanager</title>
                <link>https://virgool.io/@ehsanmasoudi/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-groupinterval-groupwait-%D9%88-repeatinterval-%D8%AF%D8%B1-prometheus-alertmanager-q0xzjhwvl7bu</link>
                <description>در این نوشتار هدف مشخص کردن تفاوت های کلیدی بین group_interval  و group_wait و repeat_interval که از گزینه های پیکربندی Alerting در Prometheus هستند، است.قبل از اینکه درباره این سه انتخاب عمیق‌تر شویم، بهتر است مروری به دو مورد پایه ای درباره Alerting در Prometheus داشته باشیم.خود Prometheus دارای دو لحظه‌شمار کلی (global) است که شامل scrape_interval و evalution_interval می‌شود.در واقع &quot;scrape_interval&quot; زمانی است که بین هر بار داده‌گیری (scrape) مربوط به prometheus طی می‌شود (برای مثال زمانی که Prometheus داده ها را از exporterها می‌گیرد.) و &quot;evalution_interval&quot; زمانی است که بین هر بار ارزیابی قوانین Alerting مربوط به Prometheus طی میشود.زمانی که یک قانون (rule) ارزیابی می‌شود، وضعیت آن میتواند به هر یک از سه حالت inactive (غیرفعال)، pending (در حال انتظار) و همچنین firing (در حال اعلان) تغییر وضعیت دهد. بعد از مشخص شدن وضعیت آن، این وضعیت بهAlertManager فرستاده میشود تا این اعلان ها به صورت بالقوه آغاز یا پایان بیابند.برای اینکه از ارسال مداوم اعلان هایی برای اخطارهای مشابه جلوگیری شود.(مثلا فرآیندهای (Processes) مشابهی که بر روی instanceها، nodeها یا مرکز داده های مختلفی fail میشوند.)، میتوان AlertManager را به نحوی پیکربندی کرد این اخطارهای مرتبط را تبدیل به یک اخطار کند. برای نمونه:group_by: [&#039;alertname&#039;, &#039;job&#039;]در مثال بالا از طریق group_by اخطارها برای اساس اشتراک بر اساس alertname یا job تبدیل به گروه میشوند.(هر یک به تنهایی یا هر دو با هم)ضمنا group_wait  مشخص می‌کند چه میزان زمان قبل از ارسال اعلان باید سپری شود تا اخطارهای مربوط به یک گروه را جمع آوری کنیم. در واقع از این طریق این امکان فراهم می شود تا اخطارهایی که از Prometheus به AlertManager فرستاده می شوند و با یک label یکسان گروه بندی شده اند را buffer کند:group_by: [&#039;alertname&#039;, &#039;job&#039;]
group_wait: 45s # Usually set between ~0s to a few minutes.همانطور که در پیکربندی بالا میبینید زمان در نظر گرفته شده برای group_wait معمولا بین 0 ثانیه تا چند دقیقه است.اگر چه این خصوصیت موجب می‌شود که اخطارهای آزاردهنده دریافت نشوند و شما را از سردردهای ناشی از زنگ خوردن گوشی نجات می‌دهد ولی از طرف دیگر موجب می‌شود زمان ارسال اعلان های خطر به تعویق بیفتد.مسئله دیگری که باید مدنظر داشته باشیم این است که در ارزیابی های آتی هم همان اعلان خطرهای گروه بندی شده را دریافت خواهیم کرد.توجه داشته باشیم که group_interval  زمانی است که باید بعد از آخرین اعلانی که برای گروه وجود دارد سپری شود تا مطمئن شویم اعلان جدیدی وجود نخواهد داشت.group_by: [&#039;instance&#039;, &#039;job&#039;]
group_wait: 45s
group_interval: 10m # Usually ~5 mins or more.در انتها &quot;repeat_interval&quot; زمانی را مشخص میکند که باید قبل از ارسال مجدد اخطاری که قبلا با موفقیت ارسال شده است بگذرد تا مجدد اخطار را ارسال کند.</description>
                <category>احسان مسعودی نژاد</category>
                <author>احسان مسعودی نژاد</author>
                <pubDate>Wed, 16 Jun 2021 21:25:46 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت بین Encryption و Encoding و Hashing</title>
                <link>https://virgool.io/@ehsanmasoudi/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-encryption-%D9%88-encoding-%D9%88-hashing-hxrzqnmq8ypz</link>
                <description>خب Encryption و Encoding و Hashing اصطلاح های شبیه به هم هستن و همین باعث میشه که خیلی وقت ها آدم رو گیج کنن. پس بریم که گره ها رو باز کنیم و دونه دونه بریم سراغشون.اولی: Encodingتوی روش Encoding، داده هامون از یک فرم به یک فرم دیگه تغییر پیدا میکنن. هدف اصلی Encode کردن اینه که داده رو به فرمی تبدیل کنیم که توسط اکثر سیستم ها قابل خوندن بشه یا برای هر پروسس externalای قابل استفاده بشه. این روش برای امن کردن داده نیست. الگوریتم های عمومی (Public) زیادی برای Encode کردن موجود هستند.یکی از استفاده های مهم Encoding کاهش دادن سایز فایل های صوتی و تصویریه. هر فرمت فایل صوتی و تصویری یک برنامه coded (که جمع و جور شده ی coder-decoderه) مربوط به خودش رو داره که برای code کردن فایل به فرمت مناسب و همینطور برای decode کردن در زمان پخش استفاده میشه.مثال هاش: ASCII، BASE64، UNICODEدومی: Encryptionدر واقع Encryption یک تکنیک encodingه. منتها به نحوی که داده مون توسط یک الگورتیم encyption، encode میشه. این کار به نحوی انجام میشه که فقط آدم هایی که جوازش رو دارن بتونن به داده دسترسی پیدا کنن. قراره از Encryption به این خاطر استفاده کنیم که داده مون از چشم بقیه دور بمونه. شبیه به وقت هایی که با دوست های خیلی صمیمی مون توی دبستان یک زبان اختراع میکردیم که فقط خودمون تا دو تا میفهمیدیم چی میگیم.توی فرآیند Encryption داده ای که قراره Encrypt بشه (که بهش میگیم plain-text) توسط الگوریتم encryptionای مثل AES یا RAS با استفاده از یک secret key که بهش میگیم cipher انتقال داده میشه. به داده encrypt شده cipher-text میگیم و در آخر کار هم سمتی که قراره داده رو بگیره با همون secret key داده رو به حالت plain-text بر میگردونه.به صورت کلی دو نوع الگوریتم encryption داریم که بهشون symmetric encryption و asymmetric encryption گفته میشه که اگر بخوایم از فارسی سخت استفاده کنیم به ترتیب به رمزنگاری متقارن و رمزنگاری نامتقارن ترجمه شون میکنیم. (به نظر من فکر کردن به ترجمه هاشون شما رو الکی میترسونه، نسبتا بحث پیچیده ای هستن ولی نه اندازه ای که فارسیش میترسونه)در حالت symmetric encryption برای رمزنگاری فقط از  یک کلید هم برای encode و decode کردن استفاده میشه (مثلا الگورتیم AES همینطوریه) ولی در حالت asymmetric encryption داده با کمک دو کلید مختلف که به اسم private key و public key شناخته میشن، رمزنگاری رو انجام میدیم. (مثالش هم الگوریتم RSA).(به نظر من جا داره که درباره اش بیشتر بخونید چون هم پرکاربرده هم پر تکرار)سومی Hashing:در فرآیند Hashingِ، داده با یه hashing function به یک hash تبدیل میشه که میتونه هر عبارت عجیب و غریبی که شامل کاراکترهاست باشه. نکته اینجاست که هر عبارتی فقط به یک عبارت عجیب و غریب hash میشه و اگر کسی بخواد اون وسط تغییری توی داده ایجاد کنه کلا یک عبارت عجیب و غریب دیگه ایجاد میشه. ما از این طریق میتونیم به صحت داده مون پی ببریم. مثلا اگر مسیجی یا عکسی به دوستامون توی پیام رسان های درست و حسابی بفرستیم اگر کسی اون وسط دستکاریش کنه، hash داده ای که به دوستمون رسیده با hash داده ای که ما فرستادیم فرق داره. یه استفاده دیگه از hash میتونه برایverify کردن پسوردهامون زمان وارد شدن به وبسایت های مختلف باشه.برای نوشتن این پست از این لینک هم استفاده شد.</description>
                <category>احسان مسعودی نژاد</category>
                <author>احسان مسعودی نژاد</author>
                <pubDate>Sat, 20 Feb 2021 19:59:32 +0330</pubDate>
            </item>
            </channel>
</rss>