كيف يتم تصدير سجلات تدقيق AWS RDS تلقائيًا إلى مثيل حاوية S3؟

نشرت: 2022-03-05

Export RDS logs to S3 Bucket

قبل أن نتعلم كيفية تصدير سجلات تدقيق RDS تلقائيًا إلى S3 ، هل تعلم أن AWS CloudWatch يخزن سجلات RDS DB تلقائيًا؟ نعم ، يفعلون ذلك ، لكنهم يخزنون فقط السجلات العامة لمثيل قاعدة البيانات الخاصة بك. الآن ، ماذا لو كنت تريد العثور على استعلام أو بيانات معينة من السجل؟ أي مستخدم أجرى استعلامًا معينًا أو من أي عنوان IP؟ من قام بحذف سجلات معينة من جداول قاعدة البيانات الخاصة بك؟

أيضًا ، بطريقة ما تمكنت من تصدير جميع سجلات التدقيق الخاصة بمثيل RDS إلى CloudWatch ، وهو أمر رائع. لكن هل تعلم؟ ستحتفظ CloudWatch بهذه السجلات لمدة 30 يومًا فقط !! للاحتفاظ بها لفترة أطول ، تحتاج إلى تصدير سجلات CloudWatch إلى حاوية S3. يمكنك القيام بذلك يدويًا من لوحة معلومات CloudWatch. ولكن ، ماذا لو كنت تريد أتمتة هذا؟

سيرشدك هذا الدليل خلال جميع الخطوات المطلوبة لتسجيل كل هذه الأحداث تلقائيًا !!

هل تبحث عن خبراء AWS؟ تحقق من هنا

يتضمن هذا الدليل:

1) قم بتعديل إعدادات RDS لإرسال سجلات التدقيق إلى CloudWatch
2) إنشاء حاوية S3 (لتخزين سجلات تدقيق CloudWatch)
3) إنشاء دور IAM (سنستخدم هذا لأتمتة Lambda)
4) Lambda (وظيفة لأتمتة تصدير سجلات CloudWatch إلى S3)

هيا نبدأ!

قم بتعديل إعدادات RDS لإرسال سجلات التدقيق إلى CloudWatch

بادئ ذي بدء ، نحتاج إلى تعديل RDS لإرسال سجلات محددة إلى CloudWatch. للقيام بذلك ، سننشئ مجموعة خيارات واحدة ومجموعة معلمات واحدة.

إنشاء مجموعة الخيارات

⇒ قم بزيارة Amazon RDS Dashboard.
⇒ اذهب إلى مجموعة الخيارات.
⇒ انقر فوق الزر "إنشاء مجموعة".

Create an Option Group

أدخل الاسم والوصف لهذه المجموعة.
⇒ حدد المحرك: mysql وإصدار المحرك: 8.0. انقر فوق إنشاء.

Create an Option Group

⇒ انقر فوق مجموعة الخيارات التي قمت بإنشائها.
⇒ ضمن قسم "الخيارات" ، انقر فوق الزر "إضافة خيار".
⇒ ضمن الخيار "SERVER_AUDIT_EVENTS *" ، أدخل القيم التي تريد تدقيقها مثل CONNECT ، QUERY ، QUERY_DDL ، QUERY_DML ، QUERY_DCL ، QUERY_DML_NO_SELECT. إذا كنت تريد تسجيل جميع الاستعلامات التي يتم تشغيلها في الجداول الخاصة بك ، فما عليك سوى إدخال QUERY في هذا الحقل.
⇒ اضبط "نعم" للتقديم على الفور. انقر فوق إضافة خيار.

Option Group Settings

هل تبحث عن خبراء AWS؟ تحقق من هنا

تكوين مجموعة معلمات

⇒ لنفتح لوحة معلومات Amazon RDS.
⇒ انقر فوق مجموعة المعلمات.
⇒ انقر فوق الزر Create Parameter Group.

Create Parameter Group

⇒ حدد "عائلة مجموعة المعلمات": mysql8.0
⇒ حدد "النوع": مجموعة معلمات DB
⇒ أدخل اسم المجموعة والوصف. انقر فوق إنشاء.

Create Parameter Group

⇒ الآن ، انقر فوق مجموعة المعلمات التي قمت بإنشائها.
⇒ ضمن المعلمة ، سنقوم بتحرير معلمات معينة وتعيين القيم التالية:
⇒ تحرير المعلمة: “log_output” قم بتغيير قيمتها من TABLE إلى FILE
⇒ تحرير المعلمة: "slow_query_log" قم بتغيير قيمتها من BLANK إلى 1
⇒ تحرير المعامل: “general_log” قم بتغيير قيمته من BLANK إلى 1

الآن ، نحن مستعدون جميعًا مع مجموعة الخيارات ومجموعة المعلمات. الآن ، دعنا نخصص هذه المجموعات لـ RDS.

⇒ انتقل إلى لوحة معلومات RDS.
⇒ انقر فوق RDS الذي قمت بإنشائه.
⇒ انقر فوق تعديل.
⇒ قم بالتمرير لأسفل الصفحة وانتقل إلى قسم "خيارات قاعدة البيانات".
ضمن "مجموعة معلمات قاعدة البيانات" ، حدد مجموعة المعلمات التي قمت بإنشائها.
⇒ ضمن "مجموعة الخيارات" ، حدد مجموعة الخيارات التي قمت بإنشائها.

Tweak RDS Settings

نحن الآن جاهزون مع RDS. بمجرد الانتهاء من الخطوات المذكورة أعلاه ، يرجى السماح بـ 20-30 دقيقة لملء البيانات في CloudWatch (ملاحظة: قد يستغرق الأمر مزيدًا من الوقت اعتمادًا على حجم السجلات).

بمجرد أن تجمع CloudWatch جميع السجلات ، سترى سجلات التدقيق أسفل لوحة معلومات CloudWatch. ستبدو مثل الصورة التالية:

CloudWatch Log Groups

هل تبحث عن خبراء AWS؟ تحقق من هنا

إنشاء حاوية S3 (لتخزين سجلات تدقيق CloudWatch)

⇒ انتقل إلى Amazon S3 Dashboard.
⇒ قم بإنشاء دلو جديد.
⇒ بمجرد إنشاء حاوية ، افتحها وانتقل إلى علامة التبويب الأذونات.
⇒ سنحتاج إلى السماح لـ CloudWatch بوضع الكائنات في الحاوية (الوصول للكتابة)
⇒ انقر فوق الزر "تعديل" لسياسة الحاوية. أدخل الرمز التالي:

{
"الإصدار": "2012-10-17" ،
"بيان - تصريح": [
{
"التأثير": "السماح" ،
"المالك": {
"الخدمة": "logs.YOUR-REGION.amazonaws.com" // أي logs.us-east-1.amazonaws.com
} ،
"الإجراء": "s3: GetBucketAcl" ،
"المورد": "arn: aws: s3 ::: BUCKET_NAME_HERE"
} ،
{
"التأثير": "السماح" ،
"المالك": {
"الخدمة": "logs.YOUR-REGION.amazonaws.com"
} ،
"الإجراء": "s3: PutObject" ،
"المورد": "arn: aws: s3 ::: BUCKET_NAME_HERE / *" ،
"حالة": {
"StringEquals": {
"s3: x-amz-acl": "bucket-owner-full-control"
}
}
}
]}

إنشاء دور IAM (سنستخدم هذا لأتمتة Lambda)

الآن ، سننشئ دور IAM الذي سيتم استخدامه في إعداد وظيفة Lambda. ستتطلب خدمة AWS Lambda إذنًا لتسجيل الأحداث والكتابة إلى حاوية S3 التي أنشأناها.

سننشئ دور IAM "Export-RDS-CloudWatch-to-S3-Lambda" مع سياسات "AmazonS3FullAccess" و "CloudWatchLogsFullAccess" و "CloudWatchEventsFullAccess".

⇒ افتح لوحة معلومات AWS IAM الخاصة بك.
⇒ قم بالتبديل إلى الأدوار وانقر على زر إنشاء دور.
⇒ ضمن "حالة الاستخدام" ، حدد Lambda وانقر فوق "التالي".
⇒ ابحث عن "AmazonS3FullAccess" وحدده.
⇒ ابحث عن "CloudWatchLogsFullAccess" وحدده.
⇒ ابحث عن "CloudWatchEventsFullAccess" وحدده.
⇒ تعيين اسم الدور: "Export-RDS-CloudWatch-to-S3-Lambda" وانقر على إنشاء دور.

هل تبحث عن خبراء AWS؟ تحقق من هنا

Lambda (وظيفة لأتمتة تصدير سجلات CloudWatch إلى S3)

تتيح لك وظيفة Lambda وضع التعليمات البرمجية الخاصة بك ضمن الوظيفة وتشغيلها على المشغلات. لا تحتاج إلى أي خادم أو الإعداد لهذا. سهل جدا وفعال!

⇒ قم بالتبديل إلى AWS Lambda Dashboard.
⇒ انقر فوق الوظائف ثم انقر فوق الزر إنشاء وظيفة.

Create Lambda Function

⇒ حافظ على تحديد "مؤلف سكراتش".
⇒ اضبط "اسم الوظيفة": Export-RDS-CloudWatch-Logs-To-S3
⇒ ضمن "وقت التشغيل" ، حدد Python 3.x.
⇒ ضمن "الأذونات" ، حدد "استخدام دور موجود" وحدد دور IAM الذي أنشأناه في الخطوة السابقة.

Configure Lambda Function

⇒ انقر فوق إنشاء وظيفة وانتقل إلى طريقة العرض Code وأدخل النص التالي:

استيراد boto3
استيراد نظام التشغيل
استيراد التاريخ والوقت

GROUP_NAME = os.environ ['GROUP_NAME'] DESTINATION_BUCKET = os.environ ['DESTINATION_BUCKET'] PREFIX = os.environ ['PREFIX'] NDAYS = os.environ ['NDAYS'] nDays = int (NDAYS)

CurrentTime = datetime.datetime.now ()
StartDate = currentTime - datetime.timedelta (الأيام = nDays)
EndDate = currentTime - datetime.timedelta (الأيام = nDays - 1)

fromDate = int (StartDate.timestamp () * 1000)
toDate = int (EndDate.timestamp () * 1000)

BUCKET_PREFIX = os.path.join (PREFIX، StartDate.strftime ('٪ Y {0}٪ m {0}٪ d'). تنسيق (os.path.sep))

def lambda_handler (حدث ، سياق):
العميل = boto3.client ("السجلات")
client.create_export_task (
logGroupName = GROUP_NAME ،
fromTime = fromDate ،
to = toDate،
الوجهة = DESTINATION_BUCKET ،
DestinationPrefix = BUCKET_PREFIX
)

⇒ الآن ، انقر فوق التكوين ⇒ متغيرات البيئة.
⇒ نحتاج إلى إنشاء 4 متغيرات:
⇒ DESTINATION_BUCKET: <اسم حاوية S3 الخاصة بك>
⇒ GROUP_NAME: <اسم مجموعة السجل الذي تقوم بتصديره>
⇒ الأيام: 1
⇒ PREFIX: تصدير السجلات

Lambda Environment Variables

⇒ حسنًا ، لقد تم تعيينك الآن. احفظ الوظيفة.

الآن ، دعنا نضبط الأتمتة لتشغيل وظيفة lambda هذه.

⇒ الآن ، قم بزيارة لوحة تحكم CloudWatch الخاصة بك.
⇒ اذهب إلى الأحداث القواعد.
⇒ انقر فوق إنشاء قاعدة.
⇒ ضمن "مصدر الحدث" ، حدد الجدول الزمني.
⇒ تعيين معدل ثابت أو تعبير كرون لتشغيل وظيفة لامدا الخاصة بنا تلقائيًا.
⇒ ضمن الهدف ، حدد وظيفة Lambda.
⇒ ضمن الوظيفة ، حدد الوظيفة التي أنشأناها في الخطوة السابقة.

Cron to Execute Lambda Function

هذا كل شيء. الآن ، قمت بإعداد بيئة لتصدير سجلات RDS إلى S3 تلقائيًا. يمكنك الاحتفاظ بالسجلات طالما أردت. ولكن ، إذا كنت لا تزال تواجه أي مشكلة ، فلا تتردد في نشر تعليق هنا. كنا نحب أن نسمع منك!!

هل تبحث عن خبراء AWS؟ تحقق من هنا