Skip to content

Latest commit

 

History

History
66 lines (51 loc) · 2.43 KB

File metadata and controls

66 lines (51 loc) · 2.43 KB

AWS Cost Explorer Prometheus Exporter

Links

This Python module allows you to run AWS API calls through Boto3 and utilise IAM Role to query the AWS api. It expose the results of api calls as Prometheus metrics. Metrics must be described in YAML. For example:

aws_services_information:
  description: AWS Services running in account
  service: ce
  method: get_cost_and_usage
  method_args: |
    {
      "TimePeriod": {
        "Start": (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d"),
        "End": datetime.now().strftime("%Y-%m-%d")
      },
      "Granularity": 'MONTHLY',
      "Metrics": ["BlendedCost","UnblendedCost"],
      "GroupBy": [
        {
          "Type": "DIMENSION",
          "Key": "SERVICE"
        }
      ]
    }
  label_names:
    - aws_service_name
    - blended_cost_amount
    - blended_cost_unit
  search: |
    ResultsByTime[].Groups[].{aws_service_name: Keys[0], blended_cost_amount: Metrics.UnblendedCost.Amount, blended_cost_unit: Metrics.UnblendedCost.Unit, value: `1`}

Usage

Running using Docker (on EC2 instance):

# PERIOD_SECONDS in seconds to query AWS API, as AWS cost explorer api cast money every time we use it.
# EC2 should required a instance profile attached to it and 
# Please replace ROLEARN value to with other appropriate role ARN and Trust relationships should have EC2 instance role as Trusted entities.
# 

docker run --network="host" --rm -it -p 9000:9000 -e "APPPORT=9000"  -e "PERIOD_SECONDS=18000" -e "AWS_DEFAULT_REGION=eu-central-1" -e  -e "ROLEARN=arn:aws:iam::111111111:role/iam_role_nitin_test" nitindas/aws-api-prometheus-exporter:latest

Running using Docker (on local):

# PERIOD_SECONDS in seconds to query AWS API, as AWS cost explorer api cast money every time we use it.
# ACCESS and Secret keys are required as environment variable.
# Please replace ROLEARN value to with other appropriate role ARN and Trust relationships should have Account ARN as Trusted entities.
# 

docker run --network="host" --rm -it -p 9000:9000 -e "APPPORT=9000"  -e "PERIOD_SECONDS=18000" -e "AWS_DEFAULT_REGION=eu-central-1" -e  -e "ROLEARN=arn:aws:iam::111111111:role/iam_role_nitin_test" -e "AWS_ACCESS_KEY_ID=****************" -e "AWS_SECRET_ACCESS_KEY=*********************" nitindas/aws-api-prometheus-exporter:latest