laravel - Laravel AWS CloudWatch,使用 PutMetric API 更新现有指标
问题描述
我正在做一个 Laravel 项目。我正在将我的项目与 AWS CloudWatch 集成。我正在将自定义指标从我的应用程序发送到 AWS CloudWatch。但问题在于,如果指标已经存在,它会不断创建新指标,而不是更新现有指标。
这是我的代码。
$client = \Aws\CloudWatch\CloudWatchClient::factory([
'credentials' => [
'key' => env('CLOUDWATCH_LOG_KEY', ''),
'secret' => env('CLOUDWATCH_LOG_SECRET', ''),
],
'region' => env('CLOUDWATCH_LOG_REGION', ''),
'version' => env('CLOUDWATCH_LOG_VERSION', '')
]);
try {
$result = $client->putMetricData([
'Namespace' => 'LaravelAwsOnlineUsersProd',
'MetricData' => [
[
'MetricName' => 'ConnectedUsers',
'Timestamp' => time(),
'Value' => 1,
'Unit' => 'Kilobytes',
'Dimensions' => [
[
'Name' => 'OnlineUser',
'Value' => $connectedUsers
]
]
]
]
]);
//the rest of the code
} catch (\Aws\Exception\AwsException $e) {
return $e->getMessage();
}
我可以将指标发布或发送到 CloudWatch。问题是,每次我发送指标时,它都会创建一个新的添加新行而不是更新现有的行,如下所示:
我该如何解决这个问题?
我想要这个的原因是我正在创建一个 CloudWatch 警报。然后我将不得不选择公制维度。
如果新数据作为新指标出现,则不会包含在警报中。
解决方案
看起来您正在尝试计算选定用户的数量,对吗?
将 设置为$connectedUsers
MetricData 的值,而不是维度。维度用于按某些标准分隔指标。
例如,如果您想计算每台服务器的用户数,您将有一个ServerId
维度。
此外,删除单位,以千字节为单位计算用户没有意义。
尝试这样的事情,看看它是否适合你:
$result = $client->putMetricData([
'Namespace' => 'LaravelAwsOnlineUsersProd',
'MetricData' => [
[
'MetricName' => 'ConnectedUsers',
'Timestamp' => time(),
'Value' => $connectedUsers
]
]
]);
有关 CloudWatch 维度的更多信息:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension
推荐阅读
- c++ - 是否有一种可扩展的方法来从 C++ 中的数组初始化结构?
- java - 如何获取 JSON 数组 Java
- c++ - Configuration.cpp ACE_TEXT_RegOpenKeyEx 上的 ACE TAO 错误未在此范围内声明
- c# - 在本地计算机中使用 Streamreader 访问文件目录路径
- sql - 加入缺少的日期匹配
- mysql - 如何在 Django 中插入和更新多条记录
- docker - 使用 Docker SDK 从文件加载图像
- wordpress - 主题 crocal - 链接菜单问题:仍然重定向到主页
- c# - Google doc API - 尝试使用文本创建表格
- c++ - 在 C++ 中获取拉丁字符