سلام قبلا در مورد مانیتورینگ تو این پست صبحت کردیم. اینجا میخواهیم طبق قراری که داشتیم در مورد لاگ سرور یا همون لاگینگ باهم صحبت کنیم. مانیتورینگ و لاگینگ چشم و گوش ما برای دیدن سرورها و سرویسهای خودمون هستند. اگر به این موارد به خوبی دقت نکنیم همواره با مشکلاتی روبهرو خواهیم بود که تشخیص آنها برای ما خیلی سخت و دشوار خواهد بود.
لاگ یکی از مهمترین ارکان نگهداری و ارائه سرویس میباشد. هر سرویس و سیستمی با انتشار یک سری لاگ از خودش داره با ما صحبت میکنه و ما رو از وضعیت خودش آگاه میکنه و با بررسی لاگ درست، به خوبی میتوان مشکلات سرویسها را پیدا کرد و آنها را برطرف کرد.
قبلا در نظرسنجی سال ۹۹ سایت داکرمی ازتون پرسیده بودم که کدام سناریوهای داکر رو دوست دارید که پیادهسازی کنم و مانیتورینک و لاگینگ رتبهی ۵ را بدست آورده بود. از این رو در این پست سناریوی لاگینگ و در پست دیگری سناریوی مانیتورینگ رو خدمتتون توضیح خواهم داد.
چرا به لاگ سرور نیاز داریم:
لاگ سرور یکی از موارد خیلی مهم در نگهداری سرویس و سرور میباشد. زیرا لاگ یک موضوع بسیار حیاتی و مهم میباشد و همواره باید حواسمون به لاگها باشد. خیلی مهمه که ما لاگهای خودمان را داخل یک سرویس دیگه جمعآوری کنیم. زیرا اگر از کلاسترینگ و HA داریم استفاده میکنیم یعنی اینکه ما از یک سرویس چند تا داریم و آنها دارن همزمان به درخواستهای رسیده پاسخ میدهند. از این رو برای پیدا کردن یک مشکل، مدام باید در سرورهای مختلف لاگین کنیم و لاگهای آنها را بررسی کنیم؛ در صورتی که با لاگسرور به راحتی داخل یک سری داشبورد و پنل میتوانیم لاگها را مشاهده کنیم. از سوی دیگه نکتهی امنیتی وجود داره که حتما باید لاگها به صورت نزدیک real time به سرورهای دیگه ارسال شود تا همواره یک نسخهای از لاگهای ما در سرور دیگهای ذخیره شود. پس لاگ سرور یکی از ملزومات سامانهی نگهداری سرویس میباشد.
سرویسی که برای لاگ سرور در نظر گرفتم سرویس loki میباشد که برای شرکت خوب grafana است. این پروژه بعد از استقبال و عملکرد خوب پروژهی prometheus با الهام از آن ایجاد و پیادهسازی شد. این دوتا پروژه خیلی کاربردی و عالی هستند و کنار همدیگر تمام نیازهای مانیتورینگ و لاگینگ ما را پوشش میدهند. راهاندازی ابتدایی به شدت سریع و راحته و قابلیت توسعه و پیادهسازی انواع امکانات پیچیده رو به خوبی در اختیار ما قرار میدهد. مجموعهی لاگ سرور ما دارای اجزای زیر میباشد:
- سرویس Promtail: برای ارسال لاگها از جاهای مختلف برای ذخیره در loki استفاده میشود.
- سرویس Grafana: برای Visualize کردن متریکها و لاگها میباشد. برامون گرافهای خیلی خوبی میکشد.
- سرویس Loki: تمامی لاگها را در خود ذخیره و برای استفادهی ما آماده میکند.
- سرویس Traefik: به عنوان reverse proxy برای ایجاد دسترسی وب به سرویسهای مانیتورینگ لازم است.
نحوهی کار این سرویس به این صورت میباشد که سرویس یا سرور ما لاگها را ایجاد میکنند و سرویس Promtail با توجه به کانفیگی که دارد لاگها را به سمت سرور loki ما ارسال میکند. در لاگ سرورها به این سرویسها که لاگ را ارسال میکنند forwarder میگویند.
لاگها داخل سرویس loki ذخیره میشوند و با استفاده از سرویس grafana این لاگها رو به خوبی میتونیم با لیبلهای مختلف که در کانفیگها قرار داده شده است بررسی و مشاهده کنیم.
راهاندازی سرویس لاگینگ:
کامپوننتهای مورد استفادهی سرویس رو بالاتر توضیح دادم. حالا کامپوز فایل مربوط به این سرویس را دانلود و آن را راهاندازی میکنیم.
قبلا در اینجا در مورد کامپوزفایل و نحوهی نوشتن آن صحبت کردیم که میتوانید آن را بررسی کنید.
کامپوزفایل به همراه کانفیگفایلهای مورد نیاز را از اینجا همانند دستور زیر دریافت کنید.
git clone https://gitlab.com/scenario1/docker/logging.git
پس از دریافت، وارد دایرکتوری logging شده و کانفیگها رو بررسی کنید. برای شروع لازم است این اقدامات را انجام دهید. به جای کلمهی DOMAIN داخل کامپوز فایل domain مخصوص خود را قرار دهید که بعد از اعمال آن شما بعد از راهاندازی سرویس این دامنهها را خواهید داشت.
- web.DOMAIN: traefik2 dashboard
- loki.DOMAIN: loki web interface
- grafana.DOMAIN: grafana dashboard
بعد از اعمال این تغییرات با دستور زیر فایل کامپوز را تست کنید که مشکل نداشته باشد. در صورتی که بدون مشکل بود با دستور بعدی کل سرویسها را راهاندازی کنید.
docker-compose config
docker-compose up -d
با استفاده از دستور زیر بررسی کنید که تمام سرویسهای داخل کامپوزفایل بدون مشکل راهاندازی شده است یا خیر و بعد از آن، لاگ مربوط به سرویسها را برای اطمینان از صحت عملکرد آنها بررسی کنید.
docker-compose ps
docker-compose logs -f --tail 100
همانطور که در تصویر بالا مشاهده میکنید تنها پورتی که از این کلاستر به بیرون publish شده است پورت ۸۰ میباشد که مربوط به سرویس traefik بوده و تمام سرویسهای دیگه داخل شبکهی داکر باهم صحبت میکنند و نیازی نیست که پورتی از آنها publish شود و اگر سرویسی بیرون از شبکهی داکر بخواهد به آن وصل شود میتواند از طریق وب به این سرویسها متصل شود. این سرویس هم مانند سرویس مانیتورینگ میبایست داخل شبکه شما در دسترس باشد و خارج از آن برای کسی قابل مشاهده نباشد.
کانفیگ ابتدایی سرویس لاگینگ:
بعد از راهاندازی صحیح سرویسهای مانیتورینگ ابتدا بررسی کنید که داشبورد traefik در اختیار شما باشد. داخل آن میتوانید سرویسهایی که راهاندازی شده و صفحهی وب دارند را بررسی کنید. توضیحات مربوط به این سرویس بعدا در سناریوی وبسرویسها توضیح داده میشود. اینجا به همین جمله اکتفا میکنیم که این سرویس تمام وبهای مد نظر ما را در اختیار ما قرار میدهد.
برای صحت عملکرد سرویس loki شما میتوانید لاگ آن سرویس را با استفاده از دستور زیر بررسی کنید. این سرویس داشبوردی ندارد که بخواهیم آن را بررسی کنیم و دامنهی loki برای دریافت لاگها از فورواردرها استفاده میکند.
docker-compose logs -f --tail 100 loki
بعد از این مرحله که از صحت راهاندازی loki اطمینان پیدا کردیم سراغ کانفیگ مربوط به grafana خواهیم رفت.
ابتدا داخل grafana با یوزر و پسورد admin لاگین میکنیم. این یوزر و پسورد دیفالت هنگام اولین راهاندازی میباشد. حتما بعد از لاگین در پنجرهای همانند تصویر زیر که برای شما باز میشود پسورد جدید را برای آن وارد کنید که پسورد پیشفرض عوض شود.
بعد از لاگین در grafana میبایست آن را کانفیگ کنیم تا امکان بررسی لاگها را به ما بدهد.
اضافه کردن data source مربوط به loki:
برای این کار از منوی سمت چپ روی setting کلیک کرده و از آنجا data sources را انتخاب کنید. اگر بار اول grafana را باز میکنید در صفحهی home قسمت add data source را انتخاب کنید.
بر روی Add data source کلیک کنید و سپس از منویی که جلوی شما باز میشود گزینهی loki را انتخاب کنید و سپس کانفیگ زیر را برای آن انجام دهید. در انتها بعد از کلیک بر روی گزینهی Save & Test از صحت عملکرد خود اطمینان حاصل کنید.
دقت کنید که حتما Data source is working را دریافت کنید. این پیغام به شما نشان میدهد که دیتا سورس به درستی اضافه شده است.
بعد از اضافه شدن دیتا سورس مربوط به لوکی میتوانید از منوی کناری گزینهی Explore را انتخاب کنید. در این منو میتوانید لاگهای رسیده را ببینید و بر اساس لیبلهایی که در کانفیگها برای لاگها قرار دادید آنها را مرور کنید.
یک نکتهی مفید دیگه که بهتون بگم اینکه گوشه سمت راست یک گزینه به نام Live وجود داره که میتونید با انتخاب آن، لاگهای سرور رو به صورت نزدیک به real time مشاهده کنید.
راهاندازی مانیتورینگ و لاگینگ باهم:
دوستان عزیز اگر خواستید که مانیتورینگ و لاگینگ را باهم در یک کامپوز راهاندازی کنید از پروژهی زیر استفاده کنید که ترکیب این دو تا پروژه با یکدیگر می باشد.
git clone git@gitlab.com:scenario1/docker/monlog.git