[บันทึกช่วยจำ] สร้าง LINE Notify สำหรับแจ้งเตือน Service ต่างๆ บน GCP เมื่อมีปัญหา

จากเดือนกันยายน 2563 นี้ Service GCP ต่างๆ เกิดปัญหาติดๆ กันหลายครั้งทำให้ปวดหัวกันหลายๆ คนแน่นอน และในช่วงที่เกิดเหตุบ้างคนกว่าจะรู้ว่ามีปัญหาก็ต้องเข้าไปดูหน้าเว็บ Google Cloud Status Dashboard หรือไม่ก็โดนลูกค้าแจ้งมา แน่นอนละลูกค้าแจ้งมานี้โดนด่าไปก่อนแล้ว บนหน้า ก็มีแต่ Google Cloud Status Dashboard RSS Feed จะเข้าหน้าเว็บมาดูตลอดเวลาก็น่าจะไม่เหมาะ จะดีกว่าไหมถ้าเรามีระบบสักระบบแจ้งผ่าน Line, Slack หรืออีเมล์ได้ อย่างน้อยก็อัพเดตตามหน้า Google Cloud Status Dashboard ได้ทันทีเลย

ผู้เขียนคิดว่ามาทำ LINE Notify ไว้ใช้งานดีกว่า ทำแบบง่ายๆ ไว่ใช้กันในทีมเพื่อที่จะได้เกิดเหตุแล้วสามารถแจ้งลูกค้าได้ก่อนที่ลูกค้าจะมีแจ้งเรา ฮ่าๆ

เอาละเกรินไปพอละเราไปลงมือทำกันเลยดีกว่า

ขั้นตอนที่ 1— สร้าง Token ให้เรียบร้อยบนหน้าเว็บ https://notify-bot.line.me/en/

หมายเหตุ ทางผู้เขียนไม่ขอพาทำการสร้าง Token บน LINE Notify เข้าใจว่าทุกๆ ท่านน่าจะเคยทำกันบ้างแล้ว

ขั้นตอนที่ 2— เอาละเรามาทำการสร้างโปรแกรมกันเลยผู้เขียนเลือกใช้ python3 โดยสามารถดู Code ตัวอย่างได้เลย

เริ่มจากเราสร้าง app1.py ขึ้นมาก่อน

แล้วก็ตามด้วย app2.py

โดยในส่วนนี้เราจะใช้ libary ที่ื่อว่า BeautifulSoup มาช่วยในการตรวจ HTML element หน้าเว็บว่าถ้าเจอ text หรือtag บน id หรือ class ต่างๆ ที่เราต้องการ ให้ในมาเก็บบนตัวแปร Array แล้วนำไปใช้งานต่อ ในที่นี้ทางผู้เขียนให้เก็ขค่าชื่อ Service ที่แสดงบนหน้าเว็บ และสถานะล่าสุดของตารางว่ามีสถานะเป็นอะไรอยู่ โดยจะมีอยู่ 3 สถานะได้แก่ Available, Service Disruption และ Service Outage ต่อมาเราก็นำ Array ดังกล่าวมาใช้ตรวจสอบต่อว่าถ้าข้อมูลในมีสถานะไม่เป็น Available ก็ให้แจ้งเตือนออกไปทาง LINE Notify

ในส่วนนี้จะเป็นการดึงค่า json มาตรวจสอบว่าค่า service_name และ created มีอยู่ในฐานข้อมูลหรือยังหากยังไม่มีก็ให้ทำการบันทึกลงไปในฐานข้อมูล และก็ให้แจ้งเตือนออกไปทาง LINE Notify หากมีแล้วก็ให้ไปเช็คต่อว่า modified มีการอัพเดตหรือไม่หากมีการอัพเดตก็ให้ทำการอัพเดตฐานข้อมูล และก็ให้แจ้งเตือนออกไปทาง LINE Notify ด้วย

หมายเหตุ อย่าลืมแก้ token เป็น token ของตัวเองที่จะใช้งานด้วยครับ

ต่อมาเราก็สร้าง requirements.txt สำหรับติดตั้ง libary ที่จำเป็นผ่าน pip3

แล้วสร้าง docker-compose.yaml สำหรับสร้าง mysql และ phpmyadmin สำหรับจัดการเรื่องฐานข้อมูล

ขั้นตอนที่ 3— สั่งรัน docker-compose เพื่อสร้าง container สำหรับระบบฐานข้อมูล

$ docker-compose up -dCreating google-cloud-status-line-notify_database_1 ... done
Creating google-cloud-status-line-notify_phpmyadmin_1 ... done

ตรวจสอบว่าเราสามารถเข้าหน้า phpmyadmin ได้หรือไม่

ทำการสร้าง table สำหรับเก็บข้อมูล

ผมลัพธ์ที่ได้

ขั้นตอนที่ 4 — เตรียมเครื่อง Linux server และทำการติดตั้ง docker, docker-compose, python3, pip3 ให้เรียบร้อย แล้วทำการ กำหนดค่า crontab เพื่อกำหนดให้รันโปรแกรมทุกๆ 5 วินาที

$ crontab -e*/1 * * * * python3 /home/dcadmin/app.py
*/1 * * * * sleep 5; python3 /home/dcadmin/app.py
*/1 * * * * sleep 10; python3 /home/dcadmin/app.py
*/1 * * * * sleep 15; python3 /home/dcadmin/app.py
*/1 * * * * sleep 20; python3 /home/dcadmin/app.py
*/1 * * * * sleep 25; python3 /home/dcadmin/app.py
*/1 * * * * sleep 30; python3 /home/dcadmin/app.py
*/1 * * * * sleep 35; python3 /home/dcadmin/app.py
*/1 * * * * sleep 40; python3 /home/dcadmin/app.py
*/1 * * * * sleep 45; python3 /home/dcadmin/app.py
*/1 * * * * sleep 50; python3 /home/dcadmin/app.py
*/1 * * * * sleep 55; python3 /home/dcadmin/app.py
*/10 * * * * python3 /home/dcadmin/app2.py

ขั้นตอนที่ 5— ตัวอย่างข้อความที่ ระบบมีการแจ้งเตือน

แค่นี้ก็เป็นอันเสร็จสิ้นในการทำ LINE Notify แบบง่ายๆ สำหรับแจ้งเตือน Service ต่างๆ บน GCP แล้ว

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

Ref: https://notify-bot.line.me/doc/en/

Ref: https://pypi.org/project/requests/

Ref: https://pypi.org/project/PyMySQL/

Ref: https://pypi.org/project/beautifulsoup4/

นายช่างระบบระบบคอมพิวเตอร์ทั้วๆ ที่ชอบทดลอง และเรียนรู้สิ่งใหม่ไปเรื่อยๆ

นายช่างระบบระบบคอมพิวเตอร์ทั้วๆ ที่ชอบทดลอง และเรียนรู้สิ่งใหม่ไปเรื่อยๆ