いろいろなログを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以外(オンプレなど)からでも貯められます。
- 上記で動作を確認した上で、公式情報を参考により詳細な設定をするといいでしょう。