いろいろなログをAWS CloudWatchで集中管理したいな・・・ということでPHPのログを流し込む例。
monologであればLaravelでもそのまま使えますので。

基本的には、ここのBasic Usageの通りやればいいのですが、一部情報が不足しているので追加メモ。さらに詳しいログ設定は、AWS公式のここを見ればいいのですが、英語訳が変なのと、いきなり見るには少々複雑。

PHP書くのもめんどくさい場合は、コマンドでも書き込めます。ここを参考にして下さい。

前提

IAMユーザーの準備

とりあえずCloudWatchFullAccess権限を持つユーザーを準備し、KeyとSecretを取得しておきます。

リージョン情報の準備

だいたい東京なので、ap-northeast-1でしょうか。必要に応じてメモします。

ライブラリのインストール

composerで必要なライブラリをインストールしておきます。

cd
mkdir phplog
cd phplog
composer require aws/aws-sdk-php monolog/monolog maxbanton/cwh:^1.0

実装

実装は下記の通り。基本的にmaxbanton/cwhのページのものと同じですが、require "vender/autoload.php"など追加しています。

この通り動かすと[php-logtest]というグループと[ec2-instance-1]というストリームが自動生成され、ログが貯まります。

index.php
<?php

    require "vendor/autoload.php";

    use Aws\CloudWatchLogs\CloudWatchLogsClient;
    use Maxbanton\Cwh\Handler\CloudWatch;
    use Monolog\Logger;

    $sdkParams = [
        'region' => 'ap-northeast-1',
        'version' => 'latest',
        'credentials' => [
            'key' => 'xxxxxxxxxxxxxxxx',
            'secret' => 'xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxx',
        ]
    ];

    // Instantiate AWS SDK CloudWatch Logs Client
    $client = new CloudWatchLogsClient($sdkParams);

    // Log group name, will be created if none
    $groupName = 'php-logtest';

    // Log stream name, will be created if none
    $streamName = 'ec2-instance-1';

    // Days to keep logs, 14 by default. Set to `null` to allow indefinite retention.
    $retentionDays = 30;

    // Instantiate handler (tags are optional)
    $handler = new CloudWatch($client, $groupName, $streamName, $retentionDays, 10000, ['my-awesome-tag' => 'tag-value']);

    // Create a log channel
    $log = new Logger('name');

    // Set handler
    $log->pushHandler($handler);

    // Add records to the log
    $log->debug('Foo');
    $log->warning('Bar');
    $log->error('Baz');

備忘

  • 当然ですが、AWS以外(オンプレなど)からでも貯められます。
  • 上記で動作を確認した上で、公式情報を参考により詳細な設定をするといいでしょう。
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.