Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

AptWatcherの発表:サーバーのaptパッケージ更新をSlackへ通知するシンプルなツール

Honeybadgerでは、すべてのサーバーにおけるaptパッケージの更新状況を把握し続けるために、これまで「apticron」を活用してきました。当初はapticronからの通知メールを自分の受信箱で確認していましたが、途中から「Slackの通知チャンネルに流れたほうが扱いやすい」と感じるようになりました。Slackにはメールを受信してそのままチャンネルへ投稿できるEmailアプリがあり、まずはそれを試してみました。ところが実際に使ってみると、メールがファイルとして表示されてしまったり、メールヘッダーのノイズが目立ったりと、どうにもしっくりきません。そこで「もう少しこなれた仕組みを自分で作ろう」と思い立ち、AptWatcherが生まれました。

AptWatcherは、ある週末に駆け足で組み上げた極めてシンプルなアプリケーションです。その役割は、各サーバーで検出されたaptパッケージの更新情報を、Slackの通知チャンネルへ中継することだけ。内部構造も至ってシンプルで、HTTPエンドポイントを1つ公開し、そこへサーバーから「アップデート待ちのパッケージ名とバージョンのリスト」がPOSTされるのを待ち受けます。受信したリストは、同じサーバーから以前受け取ったリストと照合され、新しく現れたパッケージだけがincoming webhook経由で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

このリストがAptWatcherを経由すると、Slack上では次のように表示されます。

AptWatcherの発表:サーバーのaptパッケージ更新をSlackへ通知するシンプルなツール

インストール

導入は非常に簡単です。リポジトリのREADMEに用意されているHerokuボタンをクリックしてデプロイし、あとは管理対象の全サーバーにcronジョブを追加して、パッケージの変更内容をAptWatcherへ報告させるだけです。ホストのレコードは、サーバーからレポートが届くたびにAptWatcher側で自動的に作成されるため、事前の登録作業は一切不要です。

HoneybadgerではAnsibleを使ってインフラ作業を幅広く自動化しているため、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にパッケージレポートが届くのを待つだけ。いたって簡単です!


  1. Rubyで学ぶリンクリストの基礎と実装:配列との違いからコード例まで徹底解説

    本記事は「Practical Computer Science in Ruby」シリーズの第3回です。今回はリンクリスト(連結リスト)について詳しく解説します。 リンクリストとは何か? 名前の通り、リンクリストとはデータをリスト形式で格納するためのデータ構造です。 「リンク(連結)」という言葉が示すように、データはノードと呼ばれる単位に保存され、これらのノードが順番に互いに連結される仕組みになっています。 リンクリストと配列の違い リンクリストは配列とは異なるパフォーマンス特性を持っています。それが、用途に応じてどちらかを選ぶ理由の一つです。つまり、特定のタスクにおいては、リンクリストの方が

  2. Discord コマンド一覧|覚えておきたいチャット&ボットコマンド徹底解説

    オンラインゲームをプレイするゲーマーの間では、Mumble、Steam、TeamSpeakなど、さまざまなチャットアプリを使ってゲーム中にコミュニケーションを取るのが一般的です。最近特に人気が高く、多くのユーザーに利用されているのが「Discord」です。Discordを使えば、プライベートサーバーを通じて他のプレイヤーと音声通話やビデオ通話、テキストチャットが可能になります。Discordには複数のコマンドが用意されており、サーバー内で入力することで作業効率の向上、チャンネルの管理、そしてコミュニケーションをより楽しくすることができます。これらのコマンドは「Discord ボットコマンド」と