داشتم از روی کنجکاوی بررسی میکردم که چطور میشه جمعآوری و انتقال لاگهای لینوکس رو قابل اعتمادتر کرد؛ اینکه اگر مقصد از دسترس خارج شد، دادهها چه وضعیتی پیدا میکنن و چطور میشه تحویلشون رو مدیریت کرد. همین کنجکاوی کمکم به دِئنا (daena) رسید؛ پروژهای که تا الان نسخه 0.2.0 پیادهسازی کردم.
دِئنا لاگها رو از systemd journal میخونه، از یه پایپ لاین ماژولار برای پردازش، فیلتر و افزودن اطلاعات تکمیلی به رکوردها استفاده میکنه و قبل از ارسال، اونا رو با lmdb روی دیسک نگه میداره.
بخش جذاب ماجرا برای من، مدل تحویل داده هاس که هر مقصد (sink) وضعیت تحویل مستقل خودش رو داره؛ بنابراین اختلال یه مقصد لزوماً بقیه رو متوقف نمیکنه. ارسال مجدد با backoff مدیریت میشه و رکوردهای ناموفق هم از طریق dead-letter queue قابل بررسی و بازیابی هستن...
معماری پروژه هم ماژولاره؛ سورس ها، پروسسورها و sink ها قابل توسعه اند و میشه
رکوردها رو به مقصدی مثل loki یا هر سرویس که روی http فرستاد. برای مدیریت و عیبیابی هم یه api روی grpc و یه cli پیاده کردم تا وضعیت سرویس، صف تحویل و رکوردهای ناموفق قابل بررسی باشن.
برای من که این پروژه بیشتر از اینکه صرفاً یه ابزار جمعآوری لاگ به حساب بیاد، تجربه ای برای فکر کردن به قابلیت اطمینان تو لایه ایه که معمولاً بین تولید داده و زیرساخت مرکزی نادیده گرفته میشه.
اگه دوست داشتین خوشحال میشم نگاهی بهش بندازید اگه مفید بود بهتون ایده بده یا ازش استفاده کنید.
لینک سورس پروژه:
https://src.panahifar.ir/ahp/daena
@DevTwitter | <Amir Husayn Panahifar/>
Post #13563
2.05K

- ❤ 9
- 💔 1