Python CLI ง่ายๆ บันทึกเหตุการณ์เพื่อ Compliance
สวัสดีครับ
โปรแกรมเมอร์แบบเราๆ เจอไฟล์ Config เยอะแยะไปหมดเลยใช่ไหมครับ บางทีก็อยากเช็คว่ามันถูกต้องตามกฏระเบียบหรือเปล่า หรือมีใครมาแก้ตอนไหนบ้างนะ วันนี้ผมจะมาแชร์วิธีสร้าง Python CLI ง่ายๆ ที่ไม่แค่ช่วยเช็ค แต่ยังบันทึกทุกเหตุการณ์ไว้ด้วยระบบ Logging เพื่อให้เราเอาไปใช้ยืนยันเรื่อง Compliance หรือตรวจสอบความปลอดภัยได้เลยนะครับ
1. เตรียมโปรเจกต์กันก่อน
เรามาเริ่มต้นสร้างไฟล์ main.py กับ requirements.txt กันก่อนเลยนะครับ สำหรับ CLI ตัวนี้ ผมจะใช้ Click ไลบรารี่ดังๆ ที่ใช้ง่ายมากๆ ครับ
# requirements.txt
Click==8.1.7
จากนั้นก็ pip install -r requirements.txt ได้เลยครับ
2. โครงสร้าง CLI พื้นฐาน
มาดูโค้ด CLI ง่ายๆ ที่มีคำสั่ง check-config กันก่อนเลยนะ โค้ดนี้จะแค่จำลองว่าเรากำลังเช็ค Config บางอย่างอยู่นะครับ
# main.py
import click
import logging
# ตั้งค่า Logging พื้นฐานไว้ก่อน
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(\"compliance_audit.log\"), # เก็บลงไฟล์
logging.StreamHandler() # แสดงบน Console ด้วย
]
)
logger = logging.getLogger(__name__)
@click.group()
def cli():
pass
@cli.command('check-config')
@click.option('--path', default='./config.txt', help='Path to the config file.')
def check_config(path):
logger.info(f\"[Audit] เริ่มต้นตรวจสอบไฟล์ Config: {path}\")
try:
with open(path, 'r') as f:
content = f.read()
# จำลองการตรวจสอบ Config
if \"secure_setting=true\" in content:
logger.info(f\"[Audit] ตรวจพบการตั้งค่า 'secure_setting=true' ใน {path}. ผ่านเกณฑ์.\")
click.echo(f\"Config ที่ {path} ดูดีนะครับ.\")
else:
logger.warning(f\"[Audit] ไม่พบ 'secure_setting=true' ใน {path}. อาจจะไม่ตรงตามเกณฑ์.\")
click.echo(f\"Config ที่ {path} อาจจะต้องดูเพิ่มนะครับ.\")
logger.info(f\"[Audit] ตรวจสอบไฟล์ Config: {path} เสร็จสิ้น.\")
except FileNotFoundError:
logger.error(f\"[Audit] ไม่พบไฟล์ Config ที่: {path}\")
click.echo(f\"ไม่เจอไฟล์ Config ที่ {path} ครับ.\")
except Exception as e:
logger.critical(f\"[Audit] เกิดข้อผิดพลาดร้ายแรงขณะตรวจสอบไฟล์ {path}: {e}\")
click.echo(f\"เกิดข้อผิดพลาด: {e}\")
if __name__ == '__main__':
cli()
ลอง Save โค้ดนี้ แล้วสั่งรันใน Terminal แบบนี้นะครับ:
python main.py check-config
หรือจะระบุ Path ด้วย:
python main.py check-config --path ./my_app_config.cfg
3. เพิ่มระบบ Logging ให้ละเอียดขึ้น
เห็นไหมครับ ว่าผมฝัง logger.info, logger.warning, logger.error เข้าไปในโค้ดของเราแล้ว ทีนี้ไม่ว่า CLI ของเราจะทำอะไร มันก็จะถูกบันทึกไว้ในไฟล์ compliance_audit.log ที่เราตั้งค่าไว้เลยนะครับ พร้อมบอกเวลาด้วย ทำให้ง่ายต่อการตรวจสอบมากๆ ครับ
ลองสร้างไฟล์ config.txt หรือ my_app_config.cfg แล้วลองใส่ข้อความ "secure_setting=true" หรือไม่ใส่ดูนะครับ แล้วรัน CLI ของเราดู
ตัวอย่างไฟล์ config.txt (แบบผ่าน):
# config.txt
app_name=MySecureApp
version=1.0
secure_setting=true
ตัวอย่างไฟล์ config.txt (แบบไม่ผ่าน):
# config.txt
app_name=MyOtherApp
version=1.0
debug_mode=enabled
จากนั้นเราก็ไปดูในไฟล์ compliance_audit.log ได้เลยนะครับ จะเห็น Log ที่ละเอียด บอกว่าใครรัน (ถ้าเราเพิ่มข้อมูลผู้ใช้เข้าไปนะ), ทำอะไร, ผลเป็นยังไงบ้าง ครบเลยครับ แบบนี้ก็ช่วยเรื่อง Compliance ที่ต้องมีหลักฐานการตรวจสอบได้ดีมากๆ เลยครับ
4. ทำไม Logging ถึงสำคัญกับ Compliance?
การมี Log ที่ดี ไม่ได้แค่ช่วย Debug นะครับ แต่ยังเป็นเหมือน \"หลักฐาน\" สำคัญที่เราสามารถเอาไปใช้:
- พิสูจน์ได้ว่าเราทำตามกฏ: เช่น มีกฏบอกว่า Config ต้องมีการตั้งค่า A, B, C เราก็ใช้ CLI ตัวนี้เช็คแล้วบันทึกผลได้เลยครับ
- ตรวจสอบย้อนหลัง: ถ้ามีปัญหาอะไรเกิดขึ้น หรือมีคนมาบอกว่า Config ไม่ถูกต้อง เราก็ย้อนดู Log ได้ว่าตอนนั้นมันเกิดอะไรขึ้น ใครเป็นคนรันการตรวจสอบครั้งล่าสุด
- แจ้งเตือนความผิดปกติ: ถ้าเราเห็น Warning/Error บ่อยๆ ใน Log ก็แปลว่าระบบของเราอาจจะมีช่องโหว่ หรือไม่ตรงตามมาตรฐานนะครับ
ผมว่าเทคนิคนี้มันง่ายและใช้ได้จริงมากๆ เลยนะครับ ลองเอาไปปรับใช้กับโปรเจกต์ของเพื่อนๆ ดูได้เลยครับ
cii3.net