در ادامهی پستهای قبلی تو این پست داریم میریم مابقی ابزارهای گرافانا رو یکم بررسی کنیم و ببینیم چه کمکی به ما میکنه.
خب یه مروری کنیم پستهای قبلی رو:
- دواپس چیه و چرا لازمه؟ اینجا در مورد دواپس و ضرورت استفاده از آن صحبت کردم.
- مسیر شغلی دواپس اینجا در مورد مسیر شغلی دواپس و موارد پیرامون آن صحبت کردم.
- چطور اپلیکیشن مناسب کلاد آماده کنیم؟ و اینجا توضیح دادم که چطور میتونیم یه اپلیکیشن مناسب کلاد توسعه بدیم.
- چه عمقی از لینوکس برای دواپس لازمه؟ و اینجا توضیح دادم که کدوم موارد لینوکس برای دواپس الزامی هست که اول سراغ اون موارد بریم.
- خودکارش کن، مشکلاتت حل میشه 🙂 در اینجا در مورد اتومیشن و اینکه انسیبل چیه و چه کمکی به ما میکنه صحبت کردم.
- در مسیر دواپس اینبار اجزای اصلی انسیبل تو این پست اجزای انسیبل رو معرفی کردم و آنها را شرح دادم.
- در مسیر دواپس به داکر رسیدم. (قسمت اول) تو این پست داکر رو شروع کردیم و اونو معرفی کردیم.
- در مسیر دواپس اینبار: پشت داکر چه خبره؟ (قسمت دوم) توی این پست در مورد تکنولوژی هایی که داکر ازشون استفاده میکنه توضیح دادیم.
- در مسیر دواپس اینبار: والیوم و نتورک داکر (قسمت سوم) توی این پست در مورد شبکه توی داکر و اینکه چطوری دیتای کانتینر رو میتونیم نگه داریم توضیح دادیم.
- در مسیر دواپس اینبار: داکر فایل ( قسمت چهارم ) توی این پست در مورد اینکه چطور با استفاده از داکر اپلیکیشن مون رو بیلد کنیم و ایمیج بسازیم توضیح دادیم.
- در مسیر دواپس اینبار: کامپوز فایل و داکر کامپوز (قسمت پنجم) توی این پست در مورد اینکه چطور روند دیپلوی کردن سرویسهامون و کانفیگ اونها رو به صورت کد داشته باشیم توضیح دادیم.
- در مسیر دواپس: اینبار داکر سوآرم (قسمت ششم) توی این پست در مورد داکر سوآرم و اینکه چطوری به کمک داکر چنتا سرور رو کلاستر کنیم، توضیح دادیم.
- در مسیر دواپس اینبار: دور و بری های داکر (قسمت هفتم) توی این پست در مورد ابزارهای جانبی که بهمون توی کار با داکر کمک میکنن توضیح دادیم.
- در مسیر دواپس: جمع بندی داکر (قسمت هشتم) توی این پست در مورد امنیت داکر توضیح دادیم و در آخر هم یه سری از بست پرکتیسها و تجربیات خودم رو گفتم.
- تست نوشتن و شروع مسیر CI/CD (قسمت اول) توی این پست انواع تست رو بررسی کردیم و با ابزارهای CI/CD آشنا شدیم و یه مقایسه بین گیتلب و جنکینز داشتیم.
- در مسیر CI/CD گیت رو بررسی میکنیم (قسمت دوم) توی این پست قبل ورود به گیتلب نیاز بود که گیت و ورژن کنترل سیستم ها رو یه بررسی کنیم.
- در مسیر CI/CD شناخت گیتلب (قسمت سوم) توی این پست اجزای گیتلب رو بررسی کردیم و با کامپوننتهای مختلفی که داره بیشتر آشنا شدیم.
- در مسیر CI/CD پایپلاین و رانر گیتلب (قسمت چهارم) توی این پست پایپلاین و رانر گیتلب رو بررسی کردیم.
- در مسیر CI/CD وریبل، گیتآپس و جمعبندی (قسمت پنجم) توی این پست وریبلهای گیتلب رو بررسی کردیم و یه معرفی کوتاه از گیتآپس و آتودواپس کردیم و در انتها یه مقدار تجربههای خودم رو در گیتلب باهاتون به اشتراک گذاشتم.
- مسیر Observability (قسمت اول) توی این پست معرفی observability رو داشتیم و مقایسه اش با مانیتورینگ و یه توضیح مختصر هم در مورد اپنتلهمتری دادیم.
- در مسیر Observability، الک (قسمت دوم) توی این پست استک قدرتمند ELK رو بررسی کردیم.
- در مسیر Observability، جمع بندی استک الک (قسمت سوم) توی این پست بقیه کامپوننتهای استک الک رو بررسی کردیم و fluentd و fluentbit رو مقایسه کردیم و نهایتا یه معرفی هم روی opensearch داشتیم.
- در مسیر Observability، استک پرومتئوس (قسمت چهارم) توی این پست یه معرفی اولیه داشتیم روی استک پرومتئوس.
- در مسیر Observability، استک پرومتئوس (قسمت پنجم) توی این پست یه مقدار کامپوننت های استک پرومتئوس رو بیشتر بررسی کردیم.
- در مسیر Observability، استک ویکتوریا (قسمت ششم) توی این پست استک ویکتوریا رو معرفی کردیم و سعی کردیم با پرومتئوس مقایسهاش کنیم.
- در مسیر Observability، میمیر (قسمت هفتم) توی این پست در مورد ابزار میمیر از ابزارهای گرافانا توضیح دادیم و کاربردش رو بررسی کردیم.
- در مسیر Observability، لوکی (قسمت هشتم) توی این پست در مورد ابزار گرافانا برای مدیریت لاگ یعنی لوکی توضیح دادیم و آخرشم یه معرفی کوتاه رو graylog داشتیم.
- در مسیر Observability، تمپو (قسمت نهم) توی این پست در مورد تریسینگ توضیح دادیم و گرافانا تمپو رو بررسی کردیم و یه معرفی کوتاه روی Jaeger داشتیم.
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
ابزار grafana:
- چیه و چه کاری انجام میده
گرافانا ابزار اوپن سورسی هست که امکان کوئری زدن، آلرت گذاشتن، بررسی کردن و ویژوآلایز کردن متریک و لاگ و تریس های شمارو هرکجا که ذخیره شده باشن، بهتون میده. کلا یه ابزار خیلی خوبی هست که کمک میکنه تا با استفاده از آن همهچیز رو خوب ببینید.
با استفاده از Grafana OSS این امکان رو براتون فراهم میکنه که دیتای تایم سریز که دارید رو به گراف و تصویر و … ببینید. پلاگین فریمورک Grafana OSS میتونه به دیتا سورس های دیگه مثل دیتابیس ها و ابزار های تیکتینگ مثل جیرا و ابزارهای CI/CD مثلا گیت لب هم متصل بشه.
- داشبورد از چه قسمتهای تشکیل شده
توی Observability کلمه داشبورد رو زیاد میشنویم، مثلا میگن سف خیلی داشبوردش خوبه یا فلان ابزار رو توصیه نمیکنیم از داشبوردش استفاده کنید و … کانسپت داشبورد رو از ماشین ها قرض گرفتن 🙂 جلوبندی داشبورد ماشین به راننده امکان کنترل کردن خودرو رو میده و بهش میگه که الان سرعتش چقدره و کلا تو این ماشین چه خبره! مثل اتومبیل ها که داشبوردشون قسمت های مختلفی داره … داشبورد های مانیتورینگ هم اجزای خودشون رو دارن.
- Data sources
هر چیزی که دیتایی داره رو میتونیم دیتا سورس در نظر بگیریم. مثلا دیتابیس ها، لوکی یا ابزارهایی که لاگ رو جمع میکنن، گرافانا میمیر یا حتی یک API که دیتای json داره یا یه فایل CSV. اولین قدم این هست که یه دیتا سورسی رو برای داشبوردمون انتخاب کنیم.
- Plugins
پلاگین ها برنامه هایی هستن که قابلیت های بیشتری رو به گرافانا اضافه میکنن، پلاگینها به شما این امکان رو میدن که دادهها رو از منابع مختلفی مانند دیتابیسها، سیستمهای مانیتورینگ متفاوت، سیستمهای ذخیرهسازی و … جمعآوری کنید و به شکل های مختلف نمایش دهید.
برخی از پلاگینهای معروف گرافانا:
پلاگین Prometheus: برای ادغام سیستم مانیتورینگ Prometheus با گرافانا و نمایش دادهها در داشبوردها.
پلاگین Graphite: برای اتصال گرافانا به سرورهای Graphite و نمایش دادهها از آنها.
پلاگین InfluxDB: برای استفاده از پایگاه داده InfluxDB و نمایش دادهها در گرافانا.
پلاگین MySQL: برای مانیتورینگ و نمایش دادههای پایگاه داده MySQL.
پلاگین Elasticsearch: برای ارتباط با Elasticsearch و نمایش دادهها در گرافانا.
این پلاگینها به کمک گرافانا، امکان ایجاد داشبوردها و نمودارهایی دقیق و سفارشی رو فراهم میکنند که به شما کمک میکنه درک بهتری از عملکرد و وضعیت سیستمتون پیدا کنید. البته خیلی از پلاگینها به صورت پیشفرض وجود داره و نیاز نیست که چیزی نصب کنید. اگر هم نبود به راحتی میتونید آنها رو از خود گرافانا بگیرید و نصب کنید.
- Queries
کوئری به ما کمک میکنه تا خروجی رو به شکلی از دیتاسورس جدا کنیم که جواب سوالی که دارم رو بهتر بده. مثلا یه شرکتی که میخواد تعداد مشتری هایی که در هفته گذشته ازش خرید کردن رو بدونه میتونه با استفاده از کوئری جواب این سوال رو پیدا کنه.
- Transformation
فرض کنید بعد از کوئری شما میخواید دوتا دیتا رو با هم ترکیب کنید مثلا نام و نام خانوادگی یا اینکه مثلا میخواید از یک رشته متنی تاریخ یا عددی رو استخراج کنید یا عملیات های دیتابیسی رو انجام بدید که توسط دیتاسورستون ساپورت نمیشدن. ترنسفورمیشن توی این موارد به ما کمک میکنه.
- Panels
بعد از اینکه دیتای از دیتا سورس گرفته شد و کوئری رو روی اون زدیم و ترنسفورمیشن انجام شد، مرحله آخرت نمایش دیتا در پنل هست. کانفیگ پنل جایی هست که ما مشخص میکنیم که دیتامون رو به چه شکلی میخوایم ببینیم، مثلا از یک طریق یک منو در گرافانا مشخص میکنیم که چه نوع چارتی میخوایم دیتا مون رو نمایش بده و …
- گرافانا HA
گرافانا به صورت پیش فرض از دیتابیس امبدد sqlite3 استفاده میکنه. برای HA کردن اون اول باید یه MySQL یا Postgress کلاستر شده بالا بیارید بعد به عنوان بک اند دیتابیس اونو به اینستنس های گرافاناتون بدید و کانفیگ رو انجام بدید. با این کار دیتا رو کامل کلاستر کردیم و دیگه خود گرافانا stateless میشه و به راحتی میتونیم تعدادش رو بیشتر کنیم و کلاسترش کنیم.
- توضیح اجمالی نصب و کانفیگ Grafana
نسخه اوپن سورس گرافانا رو از روی ایمیج داکر grafana/grafana-oss میتونید بالا بیارید و دوتا نسخه Alpine و Ubuntu هم داره که اگه استفاده در اسکیل کوچیک دارید خب بهتره از ایمیج سبک تر Alpine استفاده کنید. در ادامه یه جدول از مسیر دیفالت فایل های کانفیگ و مسیر ذخیره دیتای گرافانا رو براتون میذارم تا بتونید توی انتخاب مسیر والیوم ازش استفاده کنید:
برای نصب پلاگین از بقیه منابع میتونید لینک اونها رو برای متغیر محیطی GF_INSTALL_PLUGINS تعریف کنید و بعد از اون ورژن گرفانا خودتون رو بیلد کنید. حتما توصیه میکنم که پسورد ادمین گرافانا رو توی کانفیگتون عوض کنید و پسورد امن بذارید و لاگ گرافانا هم به STDOUT کانتینرش میره و برای اون هم فکری کنید که بتونید لاگ گرافانا رو داشته باشید.
- توضیح اجمالی موارد مدیریتی grafana
- Provision Grafana
با استفاده از این قابلیت میتونیم به خوبی داشبوردها و دیتاسورسها رو پرویژن کنیم. کاری که به ما کمک میکنه تا کانفیگ گرافانا رو به سمت as a code ببریم و این خیلی اتفاق خوبی هست. معمولا تو پروداکشن ما کلا از این روش استفاده میکنیم و هیچ چیزی حتی یک داشبورد رو هم از طریق GUI درست نمیکنیم. اگر لازم باشه که روی یک داشبورد کار کنیم آن رو آماده میکنیم و سپس به وسیلهی اتومیشن از همین طریق منتشرش میکنیم.
- Explore
با استفاده از این قسمت میتونیم روی دیتاهایی که نیاز داریم به صورت real-time تحلیل و بررسی داشته باشیم کار کنیم. مثلا لاگ یا تریس که تو این قسمت میتونیم کوئری بزنیم و مواردی که لازم داریم رو بررسی و پایش کنیم.
- Alerting
با استفاده از این قسمت میتونیم آلرتهای خودمون رو داشته باشیم. امکانی که با استفاده از آن میتونیم روی دیتاسورسهای مختلف آلرت داشته باشیم. این خیلی خوبه که آلرتینگ رو تجمیع شده یه جا داشته باشیمش. با آلرت منیجر هم میتونه سینک بشه که خیلی کار رو راحت کرده. یه GUI خوب و زیبا هم از آلرتها و ارتباط آنها با هم بهمون نشون میده که خیلی به درک آنها کمک میکنه.
ابزار grafana agent:
- چیه و چه کمکی بهمون میکنه
همونطور که توی دیاگرام ابزار تمپو هم دیدیم، توی سیستم های Observability نیاز به کامپوننتی هست که دیتای تلهمتری رو از سمت کلاینت و جایی که تولید میشه دریافت کنه و به سمت بک اند و جایی که اونو ذخیره و پردازش میکنیم تحویل بده. گرافانا ایجنت ابزار جمع آوری دیتای تلهمتری هست که از ابزار معروف ترافرم الهام گرفته. لازمه اینجا بگم که گرفانا اخیرا ابزاری به نام Grafana Alloy رو معرفی کرده که قراره جایگزین بشه و ابزار اصلی کالکت کردن دیتای تلهمتری بشه. همچنین اعلام کرده که ساپورت خودش رو تا آخر ماه اکتبر سال ۲۰۲۵ برای گرافانا ایجنت ادامه میده و پایان زندگی گرافانا ایجنت اول نوامبر سال ۲۰۲۵ خواهد بود 😣 در ادامه یه توضیح مختصر در مورد گرافانا الوی و نحوه مهاجرت بهش رو براتون میذارم.
- چرا خوبه که ازش استفاده کنیم
- Vendor-neutral
گرافانا ایجنت کاملا با اکوسیستم های پرومتئوس و اپن تلهمتری و گرفانا ( لوکی، تمپو، میمر، گرافانا و Pyroscope که یک پلتفرم پروفایلینگ هست ) سازگار هست
- Every signal
میتونه دیتای تلهمتری رو برای متریک، لاگ، تریس و continuous profiles جمع آوری کنه.
- Scalable
میتونه روی هر تعداد سرور دیپلوی بشه و میلیون ها سریز و چندین ترابایت لاگ رو جمع آوری کنه.
- Powerful:
میتونه پایپ لاین های قابل برنامه ریزی رو به راحتی بنویسه و از طریق رابط کاربری گرافیگی که به صورت built-in ارائه میده اونها دیباگ کنه.
- نحوهی استفاده ازش و اینکه تو دیزاینها کجا قرار میگیره
به سه تا شکل مختلف میتونیم از گرافانا ایجنت استفاده کنیم:
- Static mode
این مود در واقع مود اصلی گرافانا ایجنت هست که از طریق یک فایل yaml کانفیگ میشه و با سه تا استک زیر میتونه کار کنه :
- Grafana Cloud
- Grafana Enterprise Stack
- OSS deployments of Grafana Loki, Grafana Mimir, Grafana Tempo, and Prometheus
این مود از سه تا زیر سیستم تشکیل شده که برای متریک، لاگ و تریس هستند.
- Static mode Kubernetes operator
اگه با مفاهیم کوبرنتیز آشنایی دارید، این مود یه جورایی اپراتور کوبرنتیز برای مود استاتیک هست که دیپلوی کردن رو آسون تر میکنه و مود استاتیک رو کانفیگ میکنه تا دیتای تلهمتری کلاستر کوبر رو جمع آوری کنه. از کاستوم ریسورس های مختلفی هم برای این کار پشتیبانی میکنه که لیست اونا رو براتون میذارم:
- Prometheus Operator ServiceMonitor resources for collecting metrics from Kubernetes Services.
- Prometheus Operator PodMonitor resources for collecting metrics from Kubernetes Pods.
- Prometheus Operator Probe resources for collecting metrics from Kubernetes Ingresses.
- Custom PodLogs resources for collecting logs.
- Flow mode
اگه در مورد دیستریبیوشن ها توی اپن تلهمتری بخونید، اونها رو به عنوان یه راه کاستوم کردن کامپوننت های اپن تلهمتری برای راحت تر دیپلوی کردن کامپوننت ها با بک اند های مختلف، معرفی میکنه. حالا مود فلو هم یک دیستریبیوشن از اپن تلهمتری هست که یه بازنگری بر پایه کامپوننت از گرافانا ایجنت انجام میده با تمرکز بر راحتی استفاده و ارائه امکان دیباگ که بتونه پاسخگو نیازهای کاربرانش باشه. از ویژگی های این مود میشه کانفیگ با زبانیکه از ترافرم الهام گرفته و دیباگ از UI رو گفت.
توضیح grafana alloy :
گرافانا الوی ابزاری هست که برای OTel و Prometheus و Pyroscope و Loki و کلی ابزار متریک و لاگ و تریس و پروفایل دیگه، پایپ لاین های native ارائه میده. با استفاده از پایپ لاین های Alloy میتونید رول های آلرت روی لوکی و میمیر رو کانفیگ کنید و با پرومتئوس ایجنت و Promtail هم کاملا سازگار هست و میتونید اون رو روی زیرساخت های مختلف on-premise و ابری استفاده کنید.
این ابزار تنها برای سیگنال های Observability مثل متریک و لاگ و تریس نیست و کلی قابلیت دیگه هم داره که کمک میکنه تا سریع تر دیتامون رو توی محیط های پیچیده پیدا کنیم و اون رو پردازش کنیم. در ادامه لیستی از این قابلیت هارو براتون میارم:
- Custom components
- GitOps compatibility
- Clustering support
- Security
- Debugging utilities
مود Flow گرافانا ایجنت هم دپریکیت میشه همراه گرافانا ایجنت و اگر قصد مهاجرت به grafana alloy رو دارید یه سر به این لینک بزنید.
ابزارهای گرافانا تمومی ندارن 🙂 در ادامه به اختصار چنتای دیگه شون رو هم بهتون معرفی میکنم که اگه دوست داشتید بیشتر در موردشون بخونید.
توضیح اجمالی grafana incident :
توی دنیای IT به یه مشکل بزرگی که برای سرویس ما پیش میاد مثلا در حد از کار افتادن تمام سرور هامون، اینسیدنت میگیم. گرافانا این ابزار رو برای کمک کردن در مواقع incident توسعه داده بتونیم در مواقع غیر منتظر ریاکشن های بهتری رو داشته باشیم. این ابزار با اینتگریت شدن با گرافانا و اسلک و گیت هاب و ابزارهای دیگه سعی میکنه تا زمان و هزینه پاسخ به اینسیدنت رو کمتر کنه.
توضیح اجمالی grafana on-call
در راستای کمک به مدیریت بهتر تیم و آنکالیها ابزار بعدی گرافانا آنکال هست که به تیم ها کمک میکنه تا بهتر بتونن وظایف رو مدیریت کنن و توی زمان شیفت افرادیکه باید در دسترس باشن تا مساله رو بررسی کنند مشخص باشند. خیلی خوب با ابزارهای دیگهی گرافانا هم یکپارچه شده که بهمون کمک میکنه که آلرتها فقط برای کسانی بره که اون زمان شیفت هستند. خیلی خوب میشه داخلش تعریف کرد که شیفت نگهداشت و کارهای مربوط به آن رو برنامهریزی کرد.
توضیح اجمالی grafana cloud
نسخه SaaS گرافانا که میتونید کل Observability تون رو روی اون انجام بدید و نسخه رایگانش قابلیت های زیر رو داره:
- 10k metrics
- 50GB logs
- 50GB traces
- 50GB profiles
- 500VUh k6 testing
- 50k frontend sessions
- ۱۴-day retention
- ۳ active users
واقعا خیلی خوب تمام آن چه نیاز داریم رو کنار هم جمع کرده و به بهترین شکل داره سرویس میده بهمون.
این پست میشه دهمین و فعلا آخرین پستمون از مسیر Observability امیدوارم که توی این ده قدم دید خوبی رو نسبت به ابزارهای Obesrvability پیدا کرده باشید و باهاشون بیشتر آشنا شده باشید.
مراقب خودتون باشید. 🌹🐳🌹