codemonauts / yii2-cloudwatch-logs
A Yii 2 log target for AWS Cloudwatch Logs
1.0.5
2019-04-14 12:21 UTC
Requires
- php: >=5.6.0
- aws/aws-sdk-php: ^3.18
- yiisoft/yii2: ~2.0.15
README
为 AWS Cloudwatch Logs 提供的 Yii2 日志目标。
安装和配置
通过 composer 安装包
composer require codemonauts/yii2-cloudwatch-logs
然后将其添加到您的应用程序配置中
<?php return [ // ... 'components' => [ // ... 'log' => [ 'targets' => [ [ 'class' => \codemonauts\cloudwatchlogs\Target::class, 'region' => 'eu-west-1', 'logGroup' => '/webserver/production/my-craft', 'logStream' => 'instance-1', // omit for automatic instance ID 'levels' => ['error', 'warning', 'info', 'trace', 'profile'], 'logVars' => ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER'], 'key' => 'your-key', // omit for instance role 'secret' => 'your-secret', // omit for instance role ], // ... ], ],
配置选项
- (字符串)
$region
(必需) AWS 区域的名称,例如 eu-west-1 - (字符串)
$logGroup
(必需) 日志组的名称。 - (字符串)
$logStream
(可选) 日志流的名称。如果省略,它将尝试确定运行在上的 EC2 实例的 ID。 - (数组)
$levels
(可选) 日志级别。默认由 Yii2:['error', 'warning', 'info', 'trace', 'profile'] - (数组)
$logVars
(可选) 要记录的变量。默认由 Yii2:['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION', '_SERVER'] - (字符串)
$key
(可选) 您的 AWS 访问密钥。 - (字符串)
$secret
(可选) 您的 AWS 密钥。
速率限制
Cloudwatch Logs API 需要在消息发送到日志流时发送一个序列令牌。此令牌在将消息传输到日志流后返回,用于在下一次传输中使用。对于多进程系统,这很难处理。
因此,AWS Cloudwatch Logs 不支持多个进程同时向同一日志流写入。他们官方的方法是在每个实例上为每个进程创建一个单独的日志流。但考虑到 PHP-FPM 在几个实例上具有动态子进程。这最终会在一段时间后在日志组中结束数千个废弃的日志流。空日志流不会自动删除并保留在日志组中。这不会花费任何费用,但会使日志组非常混乱。
我们的方法是每个实例只创建一个日志流。为了能够在同一时间从多个进程发送日志流,必须在每次传输之前查询日志流的当前序列令牌。但 AWS Cloudwatch Log API 对此类型请求的速率限制为每秒 60 个请求。
为了避免遇到此速率限制,强烈建议只将那些很少发生且重要的日志直接发送到 Cloudwatch Logs。例如警告和错误。
在具有许多同时进程和高日志负载的大型基础设施中,仍然最好使用文件日志和 Cloudwatch Log Agent,因为这只是一个单个进程。
也许将来会有所改变。
Cloudwatch Logs Insights
如果您想使用 Insights 解析日志,可以这样做
fields @timestamp, @message
| sort @timestamp desc
| limit 20
| parse '[*][*][*][*][*] *' as ip, userId, sessionId, logLevel, category, message