Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

แนะนำ AptWatcher: จัดการอัปเดต Apt Packages สำหรับเซิร์ฟเวอร์อย่างราบรื่น

ที่ Honeybadger เราใช้ apticron ติดตาม apt package updates สำหรับทุก servers ตอนแรก apticron emails มา inbox แต่จุดหนึ่งตัดสินใจอยากให้อยู่ใน Slack notifications channel Slack มี email app รับ emails post ไป channel ลองแล้ว ใช้ได้ แต่ไม่ชอบ emails โชว์เป็น files และมี noise ของ mail headers ฯลฯ จัดสินใจสร้างอะไรที่ชอบมากกว่า เกิด AptWatcher

AptWatcher เป็น super simple app ที่ผมเขียนเร็วๆ บน weekend ส่งข้อมูล apt package updates จาก servers ไป Slack notifications channel มันแค่ provide HTTP endpoint รอ list of package names และ versions พร้อม update บน server เปรียบเทียบ list กับ list ที่รับมาก่อนหน้านี้จาก server เดียวกัน หากพบ packages ใหม่ใน list ใหม่ที่ไม่มีใน list เก่า ส่ง packages ใหม่ๆ ไป Slack ผ่าน incoming webhook

List of packages สร้างบน server ได้โดยรัน:

$ apt-get upgrade -s | grep ^Inst | awk '{ print $2,$3; }' | tr -d '[]'

ได้ list packages แบบนี้:

libxml2-dev 2.9.1+dfsg1-3ubuntu4.7
libxml2 2.9.1+dfsg1-3ubuntu4.7
libnl-genl-3-200 3.2.21-1ubuntu1.1
libnl-3-200 3.2.21-1ubuntu1.1

List เดียวกันจะโชว์ใน Slack ผ่าน AptWatcher:

แนะนำ AptWatcher: จัดการอัปเดต Apt Packages สำหรับเซิร์ฟเวอร์อย่างราบรื่น

Installation

Installation ง่ายแค่กด Heroku button ใน README ของ repo แล้วเพิ่ม cron job ทุก servers report package changes ไป AptWatcher Host records จะสร้างอัตโนมัติใน AptWatcher ตอน reports มาถึงจาก servers

เราใช้ Ansible ที่ Honeybadger automate ทุกอย่าง ผมใช้ quick-and-dirty approach แทน apticron ด้วย AptWatcher:

$ ansible all -m apt -a 'pkg=apticron state=removed'
$ ansible all -m cron -a "name='Report pending apt changes' special_time=daily job='apt-get upgrade -s | grep ^Inst | awk \\'{ print \\$2,\\$3; }\\' | tr -d \\'[]\\' | curl -u user:pass --data-binary @- https://our.aptwatcher.url/report/\\$(hostname) &> /dev/null'"

ทำเสร็จ แค่รอ package reports โชว์ใน Slack ง่ายมาก!