2017-01-24 4 views
0

Comment obtenir l'utilisation de la bande passante d'instance pour NetworkIn et NetworkOut pour une instance EC2 en fonction de l'ID d'instance à l'aide du SDK PHP.Obtenir l'utilisation de la bande passante EC2 par l'ID d'instance

Jusqu'à présent, ce que j'est ...

<?php 
require_once("../aws/Sdk.php"); 

use Aws\CloudWatch\CloudWatchClient; 

$client = CloudWatchClient::factory(array(
    'profile' => 'default', 
    'region' => 'ap-southeast-2' 
)); 

$dimensions = array(
    array('Name' => 'Prefix', 'Value' => ""), 
); 

$result = $client->getMetricStatistics(array(
    'Namespace' => 'AWSSDKPHP', 
    'MetricName' => 'NetworkIn', 
    'Dimensions' => $dimensions, 
    'StartTime' => strtotime('-1 hour'), 
    'EndTime' => strtotime('now'), 
    'Period'  => 3000, 
    'Statistics' => array('Maximum', 'Minimum'), 
)); 

J'ai un cron job PHP en cours d'exécution toutes les heures et je dois être en mesure d'obtenir la bande passante et pour une instance EC2 spécifique pour enregistrer dans une base de données interne. Ce que j'ai ci-dessus, j'ai été en mesure de reconstituer à partir de la documentation SDK, mais à partir d'ici, je suis un peu perplexe.

Je crois que ce dont j'ai besoin, c'est de cloudwatch donc je préférerais pouvoir le faire. Je sais que je peux installer un petit programme sur chaque serveur pour signaler l'utilisation de la bande passante à un fichier sur le serveur que je SFTP dans pour télécharger à notre base de données mais préférait qu'il soit fait à l'extérieur de tous les paramètres de l'instance L'administration d'instance ne peut pas causer de problèmes avec les rapports de bande passante.

Répondre

0

a réussi à le faire fonctionner avec ...

<?php 
require '../../aws.phar'; 
use Aws\CloudWatch\CloudWatchClient; 

$cw = CloudWatchClient::factory(array(
    'key' => 'your-key-here', 
    'secret' => 'your-secret-here', 
    'region' => 'your-region-here', 
    'version' => 'latest' 
)); 

$metrics = $cw->listMetrics(array('Namespace' => 'AWS/EC2')); 

//print_r($metrics); 

$statsyo = $cw->getMetricStatistics(array(
    'Namespace'  => 'AWS/EC2', 
    'MetricName' => 'NetworkIn', 
    'Dimensions' => array(array('Name' => 'InstanceId', 'Value' => 'your-instance-id-here')), 
    'StartTime'  => strtotime("2017-01-23 00:00:00"), 
    'EndTime'  => strtotime("2017-01-23 23:59:59"), 
    'Period'  => 86400, 
    'Statistics' => array('Average'), 
    'Unit'   => 'Bytes' 
)); 

echo($statsyo); 
0

Si vous essayez de calculer la bande passante de charge de la même manière AWS serait une meilleure et plus concluante serait d'utiliser les journaux VPC Flow. Vous pouvez abonner vos journaux de flux ENI à VPC (ils devraient être bon marché, ils ne facturent que les coûts de CloudWatch Logs, les journaux de flux sont gratuits) puis utiliser AWS SDK pour extraire de CloudWatch avec GetLogEvents, puis additionner le total des octets.

+0

Voulez-vous dire que les statistiques CloudWatch NetworkIn et NetworkOut ne sont pas exactes? –

+0

CloudWatch NetworkIn et NetworkOut incluront certaines catégories de transfert de données qui ne sont ni facturées ni facturées. Il était auparavant décrit sur cette page mais je ne le trouve pas ici: https://aws.amazon.com/ec2/pricing/on-demand/ sous "data transfer". Les catégories telles que les licences Windows, DNS, etc. ne devraient pas avoir un impact énorme sur les numéros de transfert de données que vous extrayez de CloudWatch –