用法¶
CLI¶
身份验证¶
CloudKitty 客户端可以通过独立的 CLI 可执行文件 (cloudkitty) 或通过 OpenStack 客户端模块 (openstack rating) 使用。
在使用不进行 Keystone 认证的独立模式下,必须指定 API 端点和认证方法
cloudkitty --os-endpoint http://cloudkitty-api:8889 --os-auth-type cloudkitty-noauth module list
这些选项也可以作为环境变量指定
export OS_ENDPOINT=http://cloudkitty-api:8889
export OS_AUTH_TYPE=cloudkitty-noauth
cloudkitty module list
使用 OpenStack 客户端插件时,适用完全相同的选项
# EITHER
openstack rating --os-endpoint http://cloudkitty-api:8889 --os-auth-type cloudkitty-noauth module list
# OR
export OS_ENDPOINT=http://cloudkitty-api:8889
export OS_AUTH_TYPE=cloudkitty-noauth
openstack rating module list
版本¶
客户端存在两个版本:v1 和 v2。v2 版本增加了对 v2 API 端点支持。默认 API 版本为 1。您可以通过 CLI 选项指定要使用的 API 版本
# EITHER
cloudkitty --os-rating-api-version 2 summary get
# OR
export OS_RATING_API_VERSION=2
cloudkitty summary get
同样,该选项也可以通过 CLI 标志或环境变量提供给 OSC 插件。
Python 库¶
您可以使用或不使用 Keystone 认证来使用 cloudkittyclient。为了在不使用 Keystone 认证的情况下使用它,cloudkittyclient 提供了 CloudKittyNoAuthPlugin keystoneauth 插件
>>> from cloudkittyclient import client as ck_client
>>> from cloudkittyclient import auth as ck_auth
>>> auth = ck_auth.CloudKittyNoAuthPlugin(endpoint='http://127.0.0.1:8889')
>>> client = ck_client.Client('1', auth=auth)
>>> client.report.get_summary()
{u'summary': [{u'begin': u'2018-03-01T00:00:00',
u'end': u'2018-04-01T00:00:00',
u'rate': u'1672.71269',
u'res_type': u'ALL',
u'tenant_id': u'bea6a24f77e946b0a92dca7c78b7870b'}]}
否则,以与任何其他 OpenStack 客户端相同的方式使用它
>>> import os
>>> from keystoneauth1 import session
>>> from keystoneauth1.identity import v3
>>> from cloudkittyclient import client as ck_client
>>> auth = v3.Password(
auth_url=os.environ.get('OS_AUTH_URL'),
project_domain_id=os.environ.get('OS_PROJECT_DOMAIN_ID'),
user_domain_id=os.environ.get('OS_USER_DOMAIN_ID'),
username=os.environ.get('OS_USERNAME'),
project_name=os.environ.get('OS_PROJECT_NAME'),
password=os.environ.get('OS_PASSWORD'))
>>> ck_session = session.Session(auth=auth)
>>> c = ck_client.Client('1', session=ck_session)
>>> c.report.get_summary()
{u'summary': [{u'begin': u'2018-03-01T00:00:00',
u'end': u'2018-04-01T00:00:00',
u'rate': u'1672.71269',
u'res_type': u'ALL',
u'tenant_id': u'bea6a24f77e946b0a92dca7c78b7870b'}]}
警告
如果您想在 Python 库中使用 SSL,您需要向 Keystone 的会话对象提供证书。否则,如果您向客户端提供 auth 对象,则有两个额外的选项可用:insecure 和 cacert
>>> client = ck_client.Client(
'1', auth=auth, insecure=False, cacert='/path/to/ca')
如果您想使用 v2 API,您必须在客户端实例化时指定它
c = ck_client.Client('2', session=session)
在使用 Keystone 认证的 cloudkitty CLI 客户端时,应自动检测要使用的认证插件。如果未检测到,您可以使用 --os-auth-type/--os-auth-plugin 指定要使用的认证插件。
$ cloudkitty --debug --os-auth-type cloudkitty-noauth summary get
+------------+---------------+------------+---------------------+---------------------+
| Project ID | Resource Type | Rate | Begin Time | End Time |
+------------+---------------+------------+---------------------+---------------------+
| ALL | ALL | 1676.95499 | 2018-03-01T00:00:00 | 2018-04-01T00:00:00 |
+------------+---------------+------------+---------------------+---------------------+
CSV 报告生成¶
创建了一个输出格式化程序 (DataframeToCsvFormatter),以便允许通过客户端生成 CSV 报告。它可以使用 -f df-to-csv 选项使用。
$ cloudkitty dataframes get -b 2018-03-22T12:00:00 -f df-to-csv
Begin,End,Metric Type,Qty,Cost,Project ID,Resource ID,User ID
2018-03-01T12:00:00,2018-03-01T13:00:00,compute,1,2.0,53c3fe396a1a4ab0914b9aa997a5ff88,382d23c3-7b77-4e32-8d65-b3baf86ed7bb,38c1949c2e624f729b30e034ac787640
[...]
警告
df-to-csv 格式化程序绝不能与 -c/--column 选项一起使用,并且只能用于 dataframes get 命令。
上面的示例显示了如何使用标准列获取 CSV 报告。如果您想要其他列,可以通过配置文件自定义格式化程序
# This exact file format must be respected (- column_name: json_path)
# The path is interpreted using jsonpath-rw-ext, see
# https://github.com/sileht/python-jsonpath-rw-ext for syntax reference
- 'Begin': '$.begin'
- 'End': '$.end'
- 'User ID': '$.desc.user_id'
- 'Resource ID': '$.desc.resource_id'
- 'Qty': '$.volume'
- 'Cost': '$.rating'
使用此配置文件的示例
$ cloudkitty dataframes get -f df-to-csv --format-config-file /etc/cloudkitty/csv_config.yml > report.csv
$ head -n 2 report.csv
Begin,End,User ID,Resource ID,Qty,Cost
2018-03-01T12:00:00,2018-03-01T13:00:00,38c1949c2e624f729b30e034ac787640,382d23c3-7b77-4e32-8d65-b3baf86ed7bb,1,2.0
提供了另一个配置文件:legacy_csv_config.yml。此文件与 cloudkitty-writer 的 CSV 报告格式兼容。