ec-cube2-plugin / cloud_watch_logs
Requires
- php: >=5.6
- ext-json: *
- aws/aws-sdk-php: ^3.158
- ec-cube2/plugin-installer: ^1.0
- maxbanton/cwh: ^1.1
- monolog/monolog: ^1.25
Requires (Dev)
- ec-cube2/cli: ^1.4
- ec-cube2/ec-cube2: ^2.13
README
关于本插件
使用Monolog将EC-CUBE2的日志替换为CloudWatch Logs。 替换EC-CUBE2中使用的 GC_Utils_Ex::gfPrintLog
和 GC_Utils::gfPrintLog
方法。
在管理界面“系统设置>EC-CUBE日志显示”中可以查看CloudWatch Logs的日志。
SC_Helper_HandleError
也被替换,并以Json格式非常整洁的形式输出。 因此,在CloudWatch Logs Insights中进行日志分析也非常容易。
出于安全考虑,在浏览器上应尽可能不显示 session_id
。
日志
Monolog的设置如下。
格式化器
JsonFormatter
当使用 GC_Utils_Ex::gfPrintLog
并指定 verbose
或记录 error
时,includeStacktraces
将自动生效。 Stacktraces 将记录在 trace
和 previous
中。
处理器
UserProcessor
记录EC-CUBE2的登录信息和 session_id
。 在前端,记录 customer_id
、email
;在管理界面,记录 login_id
和 authority
。
WebProcessor
将Web请求信息记录在 extra
以下。 记录的值包括 url
、ip
、http_method
、server
和 referrer
。
架构
以下两点是在使用Composer安装插件后,在EC-CUBE2上启用插件之前自动激活的。 如果是直接安装,则需要将插件中的 vendor/autoload.php
在 html/define.php
的最后加载。
GC_Utils
无法扩展,因此使用技巧方法扩展类。 此外,一些行为不佳的支付插件使用 GC_Utils_Ex
而不是直接使用 GC_Utils
,因此本插件扩展了 GC_Utils
。
SC_Helper_HandleError_Ex
也被替换。 这是通过 app_initial.php
读取的,因此需要预先替换。
设置
请向 config.php
添加以下内容。
define('AWS_REGION', 'ap-northeast-1');
define('AWS_ACCESS_KEY_ID', '');
define('AWS_SECRET_ACCESS_KEY', '');
define('CLOUDWATCH_LOGS_GROUP_NAME', '/eccube/SampleLogGroupName/%name%');
define('CLOUDWATCH_LOGS_STREAM_NAME', 'eccube');
define('CLOUDWATCH_LOGS_RETENTION', null);
CLOUDWATCH_LOGS_GROUP_NAME
CloudWatch Logs 的日志组
%name%
将替换为日志文件中指定的文件名,省略 .log
。
例如) ERROR_LOG_REALFILE
-> error
CLOUDWATCH_LOGS_STREAM_NAME
CloudWatch Logs 的日志流
%name%
将替换为日志文件中指定的文件名,省略 .log
。
例如) ERROR_LOG_REALFILE
-> error
CLOUDWATCH_LOGS_RETENTION
CloudWatch Logs 的日志保留期。 设置为 null
则不会失效。 仅在创建时有效。
关于日志的保存期限
由于过去的泄露信息,在法医调查时,日志是必不可少的。 因此,如果没有日志,在法医调查中得出结论将非常困难,因此需要保存适当的期限的日志。
通过使用CloudWatch Logs来保存和删除日志,本插件提供了一种可以执行适当日志记录的环境。 此外,即使有大量日志,CloudWatch Logs也能快速进行调查。
IAM
在AWS操作中,强烈建议使用IAM Role。 将IAM Role附加到EC2实例等。 不要使用IAM User的 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
。
需要以下权限。
123456789012
SampleLogGroupName
部分请适当替换。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:DescribeLogGroups"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:DescribeLogStreams",
"logs:PutRetentionPolicy"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/eccube/SampleLogGroupName/*"
},
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:GetLogEvents"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/eccube/SampleLogGroupName/*:*:*"
}
]
}