matteomeloni / cloudwatch-logs

用于存储和检索 AWS CloudWatch Logs 的 Eloquent 语法。

1.0.5 2022-01-13 11:44 UTC

This package is auto-updated.

Last update: 2024-09-13 18:11:02 UTC


README

Latest Version on Packagist Total Downloads MIT Licensed

用于存储和检索 AWS CloudWatch Logs 的 Eloquent 语法。

安装

通过 Composer

$ composer require matteomeloni/aws-cloudwatch-logs

运行

$ php artisan vendor:publish --provider 'Matteomeloni\CloudwatchLogs\CloudwatchLogsServiceProvider'

config/aws-cloudwatch-logs.php 中更新 AWS CloudWatch Logs 配置

使用

通过 Matteomeloni\CloudwatchLogs\CloudWatchLogs 扩展你的模型

<?php

namespace App\Models;

use Matteomeloni\CloudwatchLogs\CloudWatchLogs;

class Log extends CloudWatchLogs
{
    protected string $logGroupName = 'LOG GROUP NAME';
    protected string $logStreamName = 'LOG STREAM NAME';
}

修改器和类型转换

定义访问器

访问器在访问属性值时转换属性值。要定义访问器,在你的模型上创建一个 get {Attribute} Attribute 方法,其中 {Attribute} 是你想要访问的列的 "studly" 形式名称。

<?php

namespace App\Models;

use Matteomeloni\CloudwatchLogs\CloudWatchLogs;

class Log extends CloudWatchLogs
{
    public function getFooAttribute($value)
    {
        return ucfirst($value);
    }
}

定义修改器

修改器在设置属性值时转换属性值。要定义修改器,在你的模型上定义一个 set{Attribute}Attribute 方法,其中 {Attribute} 是你想要访问的列的 "studly" 形式名称。

<?php

namespace App\Models;

use Matteomeloni\CloudwatchLogs\CloudWatchLogs;

class Log extends CloudWatchLogs
{
    public function setFooAttribute($value)
    {
        $this->attributes['foo'] = strtolower($value);
    }
}

属性类型转换

你的模型 $casts 属性提供了一个方便的方法将属性转换为常见的数据类型。

$casts 属性应该是一个数组,其中键是要转换的属性的名称,值是你希望转换列到的类型。

有关更多信息,请参阅 Laravel 文档

<?php

namespace App\Models;

use Matteomeloni\CloudwatchLogs\CloudWatchLogs;

class Log extends CloudWatchLogs
{
    protected $casts = [
        'foo' => 'boolean',
    ];
}

检索模型

模型的所有方法将检索模型关联的 logGroupName 和 logStreamName 中的所有日志。

默认情况下,将提取当前天生成的所有日志。

如果你想更改时间间隔,只需使用 whereBetween 方法

<?php

use App\Models\Log;

// All logs generated on the current day...
foreach(Logs::all() as $log) {
    echo $log->attributeOne;
}

// All logs generated on custom time interval...
$logs = Logs::whereBetween('timestamp', ['Y-m-d H:i:s', 'Y-m-d H:i:s'])->get();

构建查询

此包支持 "CloudWatch Logs Insights" 功能。

有关此功能的更多信息,请参阅 Aws CloudWatch Logs Insight 文档

要开始新的查询,可以使用 query 方法,此操作的结果是 queryId 字符串,用于检索查询结果

<?php

use App\Models\Log;

// Start a new query and retrieve the queryId string... 
$queryId = Log::query()
    ->where('foo','bar')
    ->get();

// Retrieve the query results... 
$logs = Log::query($queryId)->get();

// Retrieve last started query...
$logs = Log::queries();
选择

select 方法允许你指定查询结果中要显示的列。

<?php

use App\Models\Log;

$logs = Log::query()
    ->select(['column1', 'column2'])
    ->get();


$logs = Log::query()
    ->select('column1', 'column2')
    ->get();
条件

可用的比较运算符:= != < <= > >=

<?php

use App\Models\Log;

// Chainable for 'AND'.
Log::query()
    ->where('column', 'operator', 'value')
    ->where('column', 'operator', 'value')
    ->get();

// Chainable for 'OR'.
Log::query()
    ->where('column', 'operator', 'value')
    ->orWhere('column', 'operator', 'value')
    ->get();

// Other types of conditions
Log::whereIn('column', [1, 2, 3])->get();
Log::orWhereIn('column', [1, 2, 3])->get();

Log::whereNotIn('column', [1, 2, 3])->get();
Log::orWhereNotIn('column', [1, 2, 3])->get();

Log::whereBetween('column', [1, 100])->get();
Log::orWhereBetween('column', [1, 100])->get();

Log::whereNull('column')->get();
Log::orWhereNull('column')->get();

Log::whereNotNull('column')->get();
Log::orWhereNotNull('column')->get();
逻辑分组

有时可能需要将多个 "where" 子句分组在括号中,以在查询中实现逻辑分组。

要完成此操作,你可能需要传递一个闭包到 where 方法

<?php

use App\Models\Log;

Log::query()
    ->where('column', 'operator', 'value')
    ->where(function ($query) {
        $query->where('column', 'operator', 'value')
           ->orWhere('column', 'operator', 'value');
    })
    ->get();
排序

orderBy 方法允许按给定列排序查询。

此方法接受的第一个参数应该是你希望排序的列,第二个参数确定排序的方向,ascdesc

<?php

use App\Models\Log;

//Ordering log by column asc...
Log::query()->orderBy('column')->get();

//Ordering log by column desc...
Log::query()->orderBy('column','desc')->get();

//Ordering log by column desc...
Log::query()->orderByDesc('column')->get();
限制

takelimit 方法允许限制查询返回的结果数。

<?php

use App\Models\Log;

Log::query()->take(10)->get();

Log::query()->limit(10)->get();
聚合

此库还提供了一系列用于检索聚合值的方法,如 countminmaxsumavg

有关此功能的更多信息,请参阅 Aws CloudWatch Logs Insight 文档

构建查询后,您可以调用这些方法中的任何一个。

<?php

use App\Models\Log;

$count = Log::query()
    ->where('level_code', 500)
    ->count();

//Other types of aggregates
Log::query()->min('column');
Log::query()->max('column');
Log::query()->sum('column');
Log::query()->avg('column');
Log::query()->average('column'); //Alias for the "avg" method

您可以通过groupBy方法对结果进行分组和聚合。

在这种情况下,操作的结果将是一个集合。

除了特定的列之外,还可以使用AWS CloudWatch Logs Insights服务提供的所有功能进行分组。

<?php

use App\Models\Log;

Log::query()
    ->groupBy('column')
    ->groupBy('bin (1m)')
    ->count();

检索单个模型

除了检索所有与给定查询匹配的记录外,您还可以使用findfirst方法检索单个记录。

<?php

use App\Models\Log;

/**
 * Retrieve a log by its logRecordPointer 
 * (you can retrieve that from the response of insight query)...
 */
$log = Log::find($ptr);

// Retrieve the first model matching the query constraints...
$log = Log::all()->first();

// Find a model by its ptr or throw an exception...
$log = Log::findOrFail($ptr);

// Find multiple models by their ptr.
$logs = Log::findMany([$ptr1,$ptr2,$ptr3]);

存储新日志

要将新记录插入AWS CloudWatch Log,您应该创建一个新的模型实例并设置模型上的属性。

然后,在模型实例上调用save方法

<?php

use App\Models\Log;

$log = new Log();
$log->attributeOne = 'foo';
$log->attributeTwo = 'bar';
$log->save();

或者,您可以使用create方法使用单个PHP语句“保存”新日志。create方法将返回插入的日志实例给您

<?php

use App\Models\Log;

$log = Log::create([
    'attributeOne' => 'foo',
    'attributeTwo' => 'bar'
]);

要求

  • PHP 7.4或更高版本

  • Laravel 7或更高版本

变更日志

有关最近更改的更多信息,请参阅变更日志

测试

$ composer test

贡献

有关详细信息和工作清单,请参阅contributing.md

安全性

如果您发现任何与安全相关的问题,请通过电子邮件matteomelonig@gmail.com联系,而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件