Python

CloudWatch Logsからステータスコード404のレポートを作成する方法(Python + Boto 3)

※PHP版も掲載しました!!(PHPを使ってCloudWatch Logsからデータを取得し、4xx系のレポートを作成する方法

CloudWatch Logsを導入するとAWSにログを保存することができます。この記事では、AWS上に保存したログを取得・加工してレポートを作成する方法を紹介します。

作成するレポートは、ステータスコード4xx系が発生したパスとその発生回数をまとめたものになります。フォーマットは下の例のように、パスと回数を1行で表示しています。また、発生回数の多いもの順にソートしています。

/foo.php: 50
/bar.php: 40
/baz.php: 35

なお、レポートの取得や整形はPython(3.5.1)を使い、AWSへのアクセスはBoto 3を利用します。

また、今回のサンプルではレポートをファイルに保存していますが、実際の運用上はメールで送信する方が望ましいと思います。

CloudWatch Logsにログを保存する方法は、AWSのドキュメントを読むのがいいと思います。また、私の過去の記事CloudWatch Logsを使って500系のレスポンスを検知する方法も参考になれば幸いです。

read more »

Nginx

実例で学ぶ、Nginxのrewriteに指定できるbreakとlastの違い

Nginxのrewriteで指定できるlastbreakの違いを、実例を交えて紹介します。実例には、「apple-touch-iconの様々なサイズのリクエストに対して、一種類だけ用意したアイコン画像を返す」を使用します。

/apple-touch-icon.pngを返すために、Nginxの設定にはこんな感じで記述しておきます。

location ~ ^/apple-touch-icon(.*)\.png$ {
    root /tmp/nginx/;
    %rewriteルール%
}

上記の%rewriteルール%に以下の4つのどれかを書いたとします。

  1. rewrite ^(.*)$ /apple-touch-icon.png break;
  2. rewrite ^(.*)$ /apple-touch-icon.png last;
  3. rewrite ^/apple-touch-icon(.+)\.png$ /apple-touch-icon.png break;
  4. rewrite ^/apple-touch-icon(.+)\.png$ /apple-touch-icon.png last;

この中で、2番目のrewrite ^(.*)$ /apple-touch-icon.png last;だけは、/apple-touch-icon.pngにアクセスするとHTTPステータスコード500が返ってくるようになってしまいます。この記事ではその原因を紹介します。

read more »

Python

Djangoを使って、PubHubSubbubに対応したレスポンスを返す方法

Djangoを使って、PubSubHubbub(PuSH)用のレスポンスを実装する方法を紹介します。PubSubHubbubを実装することで、Googleになどに、サイトの更新を伝えることができます。

PubSubHubbubについては、このブログがわかりやすいと思います。

read more »