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

ประกาศ AptWatcher

ที่ Honeybadger เราใช้ apticron เพื่อติดตามการอัปเดต aptpackage สำหรับเซิร์ฟเวอร์ทั้งหมด ตอนแรกฉันมีอีเมล aapticron ส่งมาที่กล่องจดหมายของฉัน แต่เมื่อถึงจุดหนึ่ง ฉันตัดสินใจว่าฉันต้องการให้มีอีเมลเหล่านั้นในช่องการแจ้งเตือน Slack ของเรา Slack มีแอปอีเมลที่มีประโยชน์ซึ่งสามารถรับอีเมลและโพสต์ลงในช่องได้ ฉันก็เลยลองทำดู มันใช้งานได้ แต่ฉันไม่ชอบที่อีเมลแสดงเป็นไฟล์ และก็มีเสียงของส่วนหัวของเมล ฯลฯ ดังขึ้น ดังนั้นฉันจึงตัดสินใจทำสิ่งที่ฉันต้องการเพิ่มอีกเล็กน้อย ดังนั้น AptWatcher จึงถือกำเนิดขึ้น

AptWatcher เป็น สุดยอด แอพง่าย ๆ ที่ฉันรวบรวมอย่างรวดเร็วในช่วงสุดสัปดาห์เพื่อถ่ายทอดข้อมูลเกี่ยวกับการอัปเดตแพ็คเกจ apt จากเซิร์ฟเวอร์ของเราไปยังช่องการแจ้งเตือน Slack ของเรา ทั้งหมดนี้มีให้ HTTPendpoint ที่รับฟังรายการชื่อแพ็คเกจและเวอร์ชันที่พร้อมจะอัปเดตบนเซิร์ฟเวอร์ มันเปรียบเทียบรายการนั้นกับรายการที่ได้รับจากเซิร์ฟเวอร์ก่อนหน้านี้ และหากพบแพ็คเกจใดในรายการใหม่ที่ไม่ได้อยู่ในรายการเก่า แพ็คเกจใหม่เหล่านั้นจะส่งไปยัง Slack ผ่านเว็บฮุคที่เข้ามา

รายการแพ็คเกจนั้นสามารถสร้างได้บนเซิร์ฟเวอร์โดยเรียกใช้สิ่งนี้:

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

ที่สร้างรายการแพ็คเกจที่มีลักษณะดังนี้:

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

และรายการเดียวกันนั้นจะแสดงใน Slack เมื่อกำหนดเส้นทางผ่าน AptWatcher:

ประกาศ AptWatcher

การติดตั้ง

การติดตั้งทำได้ง่ายเพียงแค่คลิกปุ่ม Heroku ใน README ของ repo แล้วเพิ่มงาน cron ให้กับเซิร์ฟเวอร์ทั้งหมดของคุณเพื่อรายงานการเปลี่ยนแปลงแพ็คเกจไปยัง AptWatcher บันทึกโฮสต์จะถูกสร้างขึ้นโดยอัตโนมัติในAptWatcher เมื่อรายงานมาถึงจากเซิร์ฟเวอร์

เราใช้ Ansible ที่ Honeybadger เพื่อทำให้ทุกอย่างเป็นอัตโนมัติ ดังนั้นฉันจึงใช้วิธีที่รวดเร็วและสกปรกเพื่อแทนที่ 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'"

เมื่อเสร็จแล้ว สิ่งที่คุณต้องทำคือรอให้รายงานแพ็คเกจแสดงใน Slack ง่ายนิดเดียว!