CloudWatchのログ蓄積とモニタリングを使ってみる(その1)

2014年8月19日火曜日 Kouta Mikawa

皆さん初めまして。ヴァル研究所で開発、運用、雑用をやっているMikawaです。
ここ数年はAWSにはまっていて、会社以外にもAWSのコミュニティであるJAWS-UGの
中央線支部で活動していたりします。
さて、今日はちょっと旬を逃した感じもしますが、 CloudWatchに新しく追加された ログの蓄積とモニタリング機能について書こうとおもいます。



導入の詳細はリンクの本家サイトを見てもらうのが早いのですが
このエージェントのインストールスクリプト
https://s3.amazonaws.com/aws-cloudwatch/downloads/awslogs-agent-setup-v1.0.py

 CentOSで実行してみると、わかるんですが

Launching interactive setup of CloudWatch Logs agent ...
ERROR: Failed to determine linux distribution. Exiting.
のようなメッセージが 出ます。どうやら非対応のようです。
(8/18時点で対応アナウンスが出ていたみたいです)
因みにソースコードには

# For now, we only support AmazonLinux and Ubuntu.
with open(issue_file_path, "r") as issue_file:
    line = issue_file.readline()
    if line.startswith("Amazon Linux AMI"):
        return self.AmazonLinux
    elif line.startswith("Ubuntu"):
        return self.Ubuntu
    else:
        fail("Failed to determine linux distribution. Exiting.", PLATFORM_NOT_SUPPORTED)
となっているので、AmazonLinuxとUbuntu しか対応していないみたいですね。
と言われると使いたいんじゃー、ということでissueを書き換える ではなく、awslogs-agent-setup-v1.0.pyを直します。(自己責任で)

この辺と、(userは好きにしてください)

    Rhel, Ubuntu, AmazonLinux, CentOS = range(4)

    user_name_map = {Rhel: "ec2-user",
                     Ubuntu: "ubuntu",
                     AmazonLinux: "ec2-user",
                     CentOS: "xxxx"}


    installer_name_map = {Rhel: "yum",
                          Ubuntu: "apt-get",
                          AmazonLinux: "yum",
                          CentOS: "yum"}
この辺と、

        # For now, we only support AmazonLinux and Ubuntu.
        with open(issue_file_path, "r") as issue_file:
            line = issue_file.readline()

            if line.startswith("Amazon Linux AMI"):
                return self.AmazonLinux
            elif line.startswith("Ubuntu"):
                return self.Ubuntu
            elif line.startswith("CentOS"):
                return self.CentOS
            else:
                fail("Failed to determine linux distribution. Exiting.", PLATFORM_NOT_SUPPORTED)
この辺。(daemonのところを飛ばしてますが、ちょっとエラーでるだけで自分で起動すればOK)

       if self.os_flavor == self.AmazonLinux or self.os_flavor == self.Rhel or self.os_flavor == self.CentOS:
            log_file_path = '/var/log/messages'
        elif self.os_flavor == self.Ubuntu:
            log_file_path = '/var/log/syslog'
あとは、エージェントが動いていて、設定が正しければ、CloudWatch(N.Virginiaですよ)に ガンガン流れてきます。



簡単ですね。
CloudWatchのログ蓄積とモニタリング機能は運用のコストを軽減するのに最適だと思いますので
これから積極的に使っていきたいですね。
それではまた次回お会いしましょう。