Laravel AWS CloudWatch, обновление существующей метрики c с помощью PutMetri c API - PullRequest
2 голосов
/ 10 июля 2020

Я работаю над проектом Laravel. Я интегрирую свой проект с AWS CloudWatch. Я отправляю пользовательские метри c из своего приложения на AWS CloudWatch. Но проблема в том, что он продолжает создавать новые метри c вместо обновления существующего, если метри c уже существует.

Это мой код.

$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();
    }

Я мог бы publi sh или отправьте метрику c в CloudWatch. Проблема в том, что каждый раз, когда я отправляю метрику c, она создает новую, добавляя новую строку вместо обновления существующей следующим образом:

enter image description here

How can I solve the problem?

The reason I want this is that I am creating a CloudWatch alarm. Then I will have to select the metric dimensions.

введите описание изображения здесь

Если новые данные поступают как новые метри c, они не будут включены в сигнал тревоги.

1 Ответ

0 голосов
/ 11 июля 2020

Похоже, вы пытаетесь подсчитать количество выбранных пользователей, верно?

Установите $connectedUsers на значение MetricData, а не на измерение. Измерение используется для разделения показателей по некоторым критериям.

Например, если вы хотите подсчитать пользователей для каждого сервера, у вас будет измерение ServerId.

Также удалите unit, не имеет смысла считать пользователей в килобайтах.

Попробуйте что-нибудь вроде этого и посмотрите, работает ли это для вас:

$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

...