14 unstable releases (4 breaking)
0.5.3 | Feb 16, 2024 |
---|---|
0.4.2 | Jan 4, 2024 |
0.4.1 | Nov 30, 2023 |
0.3.2 | Jul 27, 2023 |
0.2.0 | Mar 28, 2023 |
#688 in Network programming
113 downloads per month
180KB
4K
SLoC
osc-cost
osc-cost allows Outscale users to estimate their cloud costs.
DISCLAMER
This program only provides a cost estimation of the current account state. Only official bills provided by Outscale will represent your consumption. Read license for more details.
Features
- Data sources:
- Outscale API
- JSON
- Supported resources:
- Virtual Machines (tina types, aws-compatible types, licenses)
- Volumes
- Public Ips
- Snapshots (🚨 Warning: snapshot computation is currently known to be over-priced.)
- Dedicated Vm
- Load Balancers
- Flexible GPU
- VPN Connections
- Outscale Object Storage (🚨 Warning: Oos computation can take a long time, use
--skip-resource Oos
to disable this computation.) - Nat Services
- Output formats:
- Current cost per hour
- Current cost per month
- Current cost per year
- Json (line-delimited JSON document)
- Human
- Open Document Spreadsheet (Ods)
- Prometheus
Installation
Go to release and download latest binary.
Configuration
You will need .osc/config.json
file in you home folder. osc-cost takes default
profile if not specified.
Example of config.json
:
{
"default": {
"access_key": "YoUrAcCeSsKeY",
"secret_key": "YoUrSeCrEtKeY",
"region": "eu-west-2"
}
}
Run
Here are few examples with different output formats. Note that json
format will provide the most detailed output.
osc-cost --format=human # default
Summary:
╭───────────────────────┬──────────────╮
│ Account Id ┆ 620346218618 │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Total price per hour ┆ 2.2062643€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Total price per month ┆ 1610.5729€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Total price per year ┆ 19326.875€ │
╰───────────────────────┴──────────────╯
Details:
╭───────────────┬───────┬──────────────────────┬───────────────────────┬──────────────────────╮
│ Resource Type ┆ Count ┆ Total price per hour ┆ Total price per month ┆ Total price per year │
╞═══════════════╪═══════╪══════════════════════╪═══════════════════════╪══════════════════════╡
│ Snapshot ┆ 23 ┆ 0.03164384€ ┆ 23.1€ ┆ 277.2€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Vm ┆ 9 ┆ 1.7939999€ ┆ 1309.6199€ ┆ 15715.438€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ LoadBalancer ┆ 2 ┆ 0.06€ ┆ 43.8€ ┆ 525.6€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ NatServices ┆ 2 ┆ 0.1€ ┆ 73€ ┆ 876€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Volume ┆ 12 ┆ 0.20554796€ ┆ 150.04999€ ┆ 1800.5999€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ PublicIp ┆ 7 ┆ 0.015€ ┆ 10.95€ ┆ 131.4€ │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Oos ┆ 5 ┆ 0.00007237231€ ┆ 0.05283179€ ┆ 0.63398147€ │
╰───────────────┴───────┴──────────────────────┴───────────────────────┴──────────────────────╯
osc-cost --format=hour
0.42
osc-cost --format=month
150.91
osc-cost --format=json
{"resource_type":"Vm","osc_cost_version":"0.1.0","account_id":"509075394552","read_date_rfc3339":"2022-11-24T11:15:50.665643413+00:00","region":"eu-west-2","resource_id":"i-e51434a6","price_per_hour":0.044,"price_per_month":32.12,"vm_type":"tinav4.c1r1p2","vm_vcpu_gen":"4","vm_core_performance":"high","vm_image":"ami-bb490c7e","vm_vcpu":1,"vm_ram_gb":1,"price_vcpu_per_hour":0.039,"price_ram_gb_per_hour":0.005,"price_box_per_hour":0.0,"price_product_per_ram_gb_per_hour":0.0,"price_product_per_cpu_per_hour":0.0,"price_product_per_vm_per_hour":0.0}
{"resource_type":"Volume","osc_cost_version":"0.1.0","account_id":"509075394552","read_date_rfc3339":"2022-11-24T11:15:50.665643413+00:00","region":"eu-west-2","resource_id":"vol-9e99bad9","price_per_hour":0.02321918,"price_per_month":16.95,"volume_type":"io1","volume_size":15,"volume_iops":1500,"price_gb_per_month":0.13,"price_iops_per_month":0.01}
{"resource_type":"PublicIp","osc_cost_version":"0.1.0","account_id":"509075394552","read_date_rfc3339":"2022-11-24T11:15:50.665643413+00:00","region":"eu-west-2","resource_id":"eipalloc-2e5f8e4f","price_per_hour":0.0,"price_per_month":0.0,"price_non_attached":null,"price_first_ip":0.0,"price_next_ips":null}
...
NOTE: The next feature is still in beta
The tools can also be used to see the drift between osc-cost estimation and what have been actually recorded. Here are the steps to do that:
- store the output of osc-cost in a json
osc-cost --format json --output account.json
- freeze the account during one day
- the next day
osc-cost --compute-drift --from-date "$(date "+%Y-%m-%d" --date='-1day') --to-date $(date "+%Y-%m-%d") --input account.json
In order to have default values in prometheus format please use:
osc-cost -n --format=prometheus
You will have the details of the drift.
╭───────────────┬──────────┬────────┬───────╮
│ Resource Type ┆ Osc-cost ┆ Digest ┆ Drift │
╞═══════════════╪══════════╪════════╪═══════╡
│ Volume ┆ 1.18 ┆ 1.18 ┆ 0% │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Oos ┆ 0.01 ┆ 0.01 ┆ -5% │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Snapshot ┆ 1.25 ┆ 0.62 ┆ 101% │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Vm ┆ 34.01 ┆ 34.01 ┆ 0% │
╰───────────────┴──────────┴────────┴───────╯
Contributing
Check contributing documentation.
Release
-
Update chart version (if necessary) in
helm/osccost/Chart.yaml
and osc-cost version inhelm/osccost/values.yaml
-
Tag the release
git tag -a vX.X.X -m "vX.X.X"
- Make the release on Github
Osc-cost prometheus exporter output
But what is prometheus (Prometheus)
We create a prometheus exporter (Prometheus-Exporter)
To have something simple to manipulate we create a serde for prometheus. (Serde)
How to deploy
You can deploy with helm chart (osc-cost)
You can also deploy with docker-compose (docker-compose)
Environment
You need to have a config file.
Test with an account with several cloud object.
For prometheus, you can use docker-compose file in the projet to test with prometheus.
Or you can test with k8s cluster.
To test with k8s cluster, you can use kind but for me i create a cluster with one worker and one master using this project (osc-k8s-rke-cluster)
A account on outscale on eu-west-2/cloud-gouv or us-east-2. If you want on another region, please create omi on those region.
License
Copyright Outscale SAS
BSD-3-Clause
This project is compliant with REUSE.
Dependencies
~73MB
~1.5M SLoC