AWS CloudWatch รปภ. ของแอพพลิเคชั่น ผู้ช่วยที่ขาดไม่ได้

ทักทายและเกริ่นนำ

สวัสดีครับผู้อ่านทุกท่าน ช่วงนี้อากาศร้อน ดูแลสุขภาพกันด้วยนะครับ ดื่มน้ำเยอะ ๆ จะได้ไม่เป็นลมครับ เราควรจะต้องหมั่นตรวจเช็คและติดตามสุขภาพของเรากันเรื่อย ๆ นะครับ ซึ่งการที่ผมเกริ่นนำมาแบบนี้ก็เพราะว่าการใช้ AWS Cloud Platform นั้น ไม่ว่าจะเป็นบริการไหนก็ตาม เราก็ควรจะต้องมีการติดตามและประเมินผลของการทำงานของบริการต่าง ๆ รวมไปถึงติดตามข้อมูลที่เกิดขึ้นระหว่างการทำนาย หรือติดตามการแจ้งเตือนรวมไปถึงข้อผิดพลาดต่าง ๆ ที่อาจจะเกิดขึ้นได้ครับ โดยในบทความนี้เราจะมาเจาะลึกบริการตัวหนึ่งของ AWS ที่ชื่อว่า Amazon CloudWatch ซึ่งเรียกได้ว่าเป็น service ที่ใครที่ใช้ AWS จะต้องรู้จักดี เพราะว่าบริการที่ถูกนำไปใช้ร่วมกับการทำงานกับบริการอื่น ๆ ของ AWS มากที่สุดตัวหนึ่งก็ว่าได้

ภาพที่สื่อถึงการเฝ้าหรือสอดส่องของ CloudWatch

AWS CloudWatch

CloudWatch => ก็คือการที่เราสอดส่องและติดตามระบบคลาวด์ของเรา

ข้อดีของการใช้ CloudWatch

1. ทุกอย่างครบและจบใน Platform เดียว

บริการแรกที่น่าสนใจของ CloudWatch ก็คือ บริการ Amazon CloudWatch Logs ซึ่งช่วยให้เราสามารถรวบรวมและจัดเก็บบันทึกข้อมูลจากทรัพยากรหรือ resource ของแอปพลิเคชันได้อย่างต่อเนื่อง โดยบริการในส่วนนี้จะมีด้วยกันสามอันคือ

1) การบันทึกข้อมูลที่ทำงานเสร็จแล้ว โดยจะเป็นบริการของ AWS ได้แก่ บันทึก Amazon VPC Flow และบันทึก Amazon Route 53

2) การบันทึกข้อมูลที่เผยแพร่โดยบริการของ AWS เช่น Amazon API Gateway, AWS Lambda, AWS CloudTrail และอื่นๆ อีกมากมาย

3) การบันทึกข้อมูลแบบกำหนดเอง ซึ่งไฟล์บันทึกเหล่านี้มาจากแอปลิเคชันและทรัพยากรของแอพพลิเคชั่นของเราเอง

2. รวบรวมตัววัด (Metric) บน AWS

ตัววัดหรือ Metric คือพารามิเตอร์ที่เรานำมาใช้ในการประเมินประสิทธิภาพของแอพพลิเคชั่นหรือการบริการ รวมไปถึงเป็นตัวที่จะบ่งบอกค่าที่เราต้องการ โดยเราสามารถกำหนดเงื่อนไขต่าง ๆ ได้ 

3. ปรับปรุงประสิทธิภาพการทำงานและการเพิ่มประสิทธิภาพทรัพยากร

เราสามารถเพิ่มประสิทธิภาพของ CloudWatch ได้ง่าย ๆ เช่น ตั้งการแจ้งเตือนและดำเนินการอัตโนมัติตามเกณฑ์ที่กำหนดไว้ล่วงหน้า หรือบนอัลกอริทึม Machine Learning ที่ตรวจจับการทำงานที่ผิดปกติของตัววัดที่เรากำหนดไว้สำหรับแอพพลิเคชั่นของเรา ถ้าตรวจพบสิ่งผิดปกติก็จะแจ้งเตือนเราทันที

4. รับข้อมูลเชิงลึกไปทำอย่างอื่นได้ต่อ

CloudWatch สามารถสำรวจ วิเคราะห์ และแสดงบันทึกข้อมูลของเราออกมาเป็นภาพ เช่น กราฟ หรือ ตาราง ที่สามารถเข้าใจง่าย ๆ ได้ ดังนั้นจึงทำให้เราแก้ไขปัญหาการทำงานได้อย่างง่ายดาย เช่น บริการ CloudWatch Logs Insights ซึ่งเราจ่ายเพียงแค่เฉพาะการสืบค้นที่เราใช้เท่านั้น โดยค่าบริการจะปรับไปตามขนาดของการบันทึกและความซับซ้อนของการสืบค้น

CloudWatch ทำงานอย่างไร

CloudWatch เป็นบริการที่รวบรวมการจัดการทั้งหมดของข้อมูลที่อยู่ในรูปแบบของ logs ไฟล์ โดยจะเป็นไฟล์ที่บันทึกกิจกรรมหรือเหตุการณ์ทั้งหมดที่เกิดขึ้นภายในระบบหรือบัญชีของผู้ใช้งาน โดยทั่วไปแล้วไฟล์ log นั้นจะเป็นการบันทึกที่อ้างอิงตามเวลา เช่น อาจจะบันทึกทุก ๆ วินาที ทุก ๆ นาที ทุก ๆ ชั่วโมง หรืออาจจะทุก ๆ วันก็ได้ ขึ้นอยู่กับความถี่ที่ต้องการบันทุกข้อมูล โดยเราสามารถแสดงหรือ visualize แอพพลิเคชั่นของเราพร้อม ๆ กับดูการเปลี่ยนแปลงของข้อมูลหรือพารามิเตอร์ที่เราสนใจได้ นอกจากนี้ยังมีฟีเจอร์อื่น ๆ เพิ่มเติมที่ CloudWatch สามารถทำได้ เช่น เราสามารถทำการทดลองหรือ experiment เพื่อทดสอบฟีเจอร์อะไรบางอย่าง โดยที่เราไม่ไปรบกวนระบบจริง ๆ ที่กำลังทำงานหรือรันอยู่บน Production server ตัวอย่างเช่น เราสามารถทั้งการกระทำแบบอัตโนมัติให้แจ้งเตือนเรา เปรียบเสมือนเป็นตัวสัญญาณตรวจจับควันในบ้านอะไรแบบนั้นเลยครับ นอกจากนี้ยังสามารถตั้งให้มีการบันทึกข้อมูลแล้วนำไปวิเคราะห์หรือไปทำงานร่วมกับบริการอื่น ๆ ได้อีก เช่น Machine Learning ใน SageMaker เป็นต้น

Credit: AWS

ตัวอย่างการใช้งาน CloudWatch

CloudWatch สามารถนำไปใช้งานกับบริการอื่น ๆ ได้หลากหลายรูปแบบ เช่น

  • Infrastructure monitoring
  • Containers
  • Serverless
  • Events
  • Logs analytics
  • Anomaly detection & alarms
  • Dashboards
  • Custom metrics
  • Application monitoring
  • Metrics analytics

โดยเราจะมาดูตัวอย่างของแบบแรกกันก็คือ Infrastructure monitoring ซึ่งตัวอย่างที่ผมจะยกให้ดูนั้นก็คือการส่งข้อมูลจาก EC2 เข้าไปวิเคราะห์ต่อใน CloudWatch นั่นเอง

การส่ง Logs จาก Amazon EC2 ไปยัง CloudWatch

โอเคครับ สำหรับ tutorial ต่อไปนี้เราจะมาดู Service ที่ชื่อว่า CloudWatch Logs agent กันนะครับ โดยที่ CloudWatch Logs agent จะช่วยให้เราสามารถส่งข้อมูลแบบ log จาก Amazon EC2 instance ไปยัง CloudWatch ได้แบบอัตโนมัติ ก่อนอื่นเรามาดูกันที่ Configuration file กันก่อนเลย โดยมีหน้าตาของไฟล์และพารามิเตอร์ที่อยู่ด้านในที่เราจะต้องทำการกำหนดค่าของแต่ละพารามิเตอร์ดังต่อไปนี้

[general]

state_file = value

logging_config_file = value

use_gzip_http_content_encoding = [true | false]

[logstream1]

log_group_name = value

log_stream_name = value

datetime_format = value

time_zone = [LOCAL|UTC]

file = value

file_fingerprint_lines = integer | integer-integer

multi_line_start_pattern = regex | {datetime_format}

initial_position = [start_of_file | end_of_file]

encoding = [ascii|utf_8|..]

buffer_duration = integer

batch_count = integer

batch_size = integer

[logstream2]

โดยรายละเอียดของพารามิเตอร์แต่ละตัว (Definition & Usage) สามารถศึกษาเพิ่มเติมได้จากเว็บไซต์ https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html

หลังจากที่เราสร้าง configuration file แล้ว ลำดับต่อไปคือการติดตั้ง AWS CloudWatch Logs agen ครับ โดยใช้คำสั่งต่อไปนี้

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O

sudo python awslogs-agent-setup.py –region us-east-1 –http-proxy http://your/proxy –https-proxy http://your/proxy –no-proxy 169.254.169.254

หลังจากนั้นให้ไปที่ไฟล์ /var/awslogs/etc/proxy.conf แล้วทำการแก้ไขโดยให้เพิ่ม proxies เข้าไป ดังนี้

HTTP_PROXY=

HTTPS_PROXY=

NO_PROXY=

แล้วทำการ restart ตัว agent ครับ

sudo service awslogs restart

เพียงเท่านี้ก็ทำการติดตั้งเสร็จแล้ว

นอกจากนี้เรายังสามารถทำการเรียกดู API call ได้ด้วยว่ามีการทำงานอย่างไร โดยเราสามารถเรียกดู IAM policy ล่าสุดได้แบบนี้ครับ

{

“Version”: “2012-10-17”,

“Statement”: [

  {

“Effect”: “Allow”,

“Action”: [

   “logs:CreateLogGroup”,

   “logs:CreateLogStream”,

   “logs:PutLogEvents”,

   “logs:DescribeLogStreams”

],

“Resource”: [

   “arn:aws:logs:*:*:*”

]

  }

 ]

}

ซึ่งไฟล์ log นั้นจะถูกเก็บไว้ที่ /var/log/awslogs-agent-setup.log และ /var/log/awslogs.log ตามลำดับ

นอกจากนี้ยังมี tutorial เพิ่มเติมอื่น ๆ อีกมากมายที่เกี่ยวข้องกับการใช้ Amazon CloudWatch สำหรับ service อื่น ๆ ไว้ถ้าหากผู้เขียนมีโอกาสได้เขียนบทความเกี่ยวกับ CloudWatch อีก จะนำมาแบ่งปันให้ได้อ่านและศึกษากันนะครับ หวังว่าบทความนี้จะเป็นประโยชน์กับผู้อ่านที่กำลังสนใจหรือศึกษา AWS อยู่ไม่มากก็น้อยครับ

อ่านมาจนถึงจุดนี้แล้วถ้าหากผู้อ่านมีความสนใจในบริการของ AWS โดยเฉพาะถ้าอยากจะปรึกษาเกี่ยวกับการใช้ Amazon CloudWatch สำหรับการติดตามและประเมินข้อมูลต่าง ๆ ของบริการอื่น ๆ ใน AWS Cloud Platform ก็สามารถติดต่อ Cloud HM ได้โดยตรงเลยครับ เพราะเรามีการให้บริการ Cloud Platform ครบวงจร ทั้ง Domestic Cloud และ Global Cloud เพื่อตอบสนองความต้องการรอบด้านของลูกค้าครับ

— Cloud HM