QuicksightのSPICE空き容量が急に圧迫してしまうことがあり、追加購入の対応で応急処置しています。
どのユーザのデータセット更新が起因しているかをすぐに確認したいのですが、方法があればご教示いただけないでしょうか?
※500GBほどSPICE空き容量があった翌日いきなり容量が足りなくなり、他ユーザのデータセット自動更新もSTOPしてしまうといったことがあり、ユーザ影響が大きく困っています。
そのため原因となった容量を圧迫したデータセットを迅速に特定したいです。
QuicksightのSPICE空き容量が急に圧迫してしまうことがあり、追加購入の対応で応急処置しています。
どのユーザのデータセット更新が起因しているかをすぐに確認したいのですが、方法があればご教示いただけないでしょうか?
※500GBほどSPICE空き容量があった翌日いきなり容量が足りなくなり、他ユーザのデータセット自動更新もSTOPしてしまうといったことがあり、ユーザ影響が大きく困っています。
そのため原因となった容量を圧迫したデータセットを迅速に特定したいです。
ご質問ありがとうございます。
QuickSight としての機能提供はございませんが、データセットの更新は create-ingestion で行われており、この API の実行履歴は CloudTrail でご確認いただくことが可能でございます。
具体的には、CloudTrail のコンソールで以下の条件を指定することで、問題が発生した期間のデータセット更新を確認できます:
そのため、CloudTrail で記録されているイベント情報を何らかの方法で検知する実装をしていただき、その実装で更新されたデータセットのデータ増加量が多い場合には QuickSight 管理者に通知する実装をしていただけると幸いです。
以下のAPIを活用することで、データセットの更新状況を確認できます:
それぞれの API のレスポンスとしては以下の内容が実行結果として返ってきます。そして返ってきた IngestionSizeInBytes キーがデータセットの容量になりますので、この値が一定の容量(例:100GB)を超えた場合に管理者に通知する処理を実装していただければと思います。
~ $ aws quicksight create-ingestion --data-set-id <value> --ingestion-id <value> --aws-account-id 123456789012
{
"Status": 201,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/<value>/ingestion/<value>",
"IngestionId": "<value>",
"IngestionStatus": "INITIALIZED",
"RequestId": "d052565c-b15d-413f-ad33-c60eb107a77b"
}
~ $ aws quicksight list-ingestions --aws-account-id 123456789012 --data-set-id <value>
{
"Ingestions": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/<value>/ingestion/0206-v01",
"IngestionId": "0206-v01",
"IngestionStatus": "COMPLETED",
"ErrorInfo": {},
"RowInfo": {
"RowsIngested": 1461,
"RowsDropped": 0,
"TotalRowsInDataset": 1461
},
"CreatedTime": "2025-02-06T03:00:30.324000+00:00",
"IngestionTimeInSeconds": 15,
"IngestionSizeInBytes": 365982,
"RequestSource": "MANUAL",
"RequestType": "FULL_REFRESH"
},
{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/618a67fd-149a-4f54-9afe-9b13bb39185f/ingestion/2feba5c3-fb04-4aef-ae5e-80c4c1fef18e",
"IngestionId": "2feba5c3-fb04-4aef-ae5e-80c4c1fef18e",
"IngestionStatus": "COMPLETED",
"ErrorInfo": {},
"RowInfo": {
"RowsIngested": 1461,
"RowsDropped": 0,
"TotalRowsInDataset": 1461
},
"CreatedTime": "2025-02-05T07:47:59.937000+00:00",
"IngestionTimeInSeconds": 15,
"IngestionSizeInBytes": 365982,
"RequestSource": "MANUAL",
"RequestType": "INITIAL_INGESTION"
}
],
"Status": 200,
"RequestId": "4c43761b-b954-47fa-bcd4-1731963b39db"
}
~ $ aws quicksight describe-ingestion --aws-account-id 123456789012 --data-set-id <value> --ingestion-id <value>
{
"Status": 200,
"Ingestion": {
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/<value>/ingestion/<value>",
"IngestionId": "<value>",
"IngestionStatus": "COMPLETED",
"ErrorInfo": {},
"RowInfo": {
"RowsIngested": 1461,
"RowsDropped": 0,
"TotalRowsInDataset": 1461
},
"CreatedTime": "2025-02-06T03:00:30.324000+00:00",
"IngestionTimeInSeconds": 15,
"IngestionSizeInBytes": 365982,
"RequestSource": "MANUAL",
"RequestType": "FULL_REFRESH"
},
"RequestId": "510cb402-2942-470a-9fe8-bf56b2555018"
}
また、将来的な実装としては、CloudTrail → EventBridge → Lambda → SNS という構成で自動監視の仕組みを構築することをご検討いただければと思います。
ありがとうございます。
上記ご提案頂いた方法で通知機能の実装を進めてみたいと思います。
実装に際してまた不明な点が出てきましたら改めてご相談させてください。
どのユーザのデータセット更新が起因しているかをすぐに確認したいのですが、方法があればご教示いただけないでしょうか?
@Iwaki さん、もしまだ該当のデータセットが特定できずお困りの場合、お手元でAWS CLIが使えるようでしたら以下のコマンドでSPICEデータセットの一覧が取得できますので、ご参考までに共有いたします。
これはSPICEデータセットのID(DataSetId)、名前(Name)、作成日時(CreatedTime)、最終更新日時(LastUpdatedTime)、SPICE消費サイズ(ConsumedSpiceCapacityInBytes)をCSV形式で一覧出力するものになります。最終更新日時とSPICE消費サイズを確認することで対象データセットを特定できるのではないかと思います。そのうえでデータセットIDに対しListIngestions API(list-ingestions)を実行すると契機となった更新の特定が早くなります。
(aws quicksight list-data-sets --aws-account-id $AID | jq -r '.DataSetSummaries[] | select(.ImportMode == "SPICE") | .DataSetId' | while read ID; do aws quicksight describe-data-set --aws-account-id $AID --data-set-id $ID | jq -r '.DataSet | [.DataSetId, .Name, .CreatedTime, .LastUpdatedTime, .ConsumedSpiceCapacityInBytes] | @csv' & done) >>./spice-data-set.csv 2>>error.log
補足:
An error occurred (InvalidParameterValueException) when calling the DescribeDataSet operation: The data set type is not supported through API yet
以上、ご参考になれば幸いです。
↑あくまで一時切り分けのための参考情報になりますので、恒久的な監視の仕組みについては keien-nishikawa さんご案内の方法を参考にしてみてくださいませ。
直ぐに確認できる方法も教えて頂きありがとうございます。非常に助かります。
こちらである程度データセットを絞り込めました。ありがとうございます。
1点質問させてください。
SPICE消費サイズ(ConsumedSpiceCapacityInBytes)は最終更新日時(LastUpdatedTime)に更新によって新たに消費された容量になりますでしょうか?
それともデータセット自体の総容量になりますでしょうか?
@Iwaki さん、データセット自体の総容量になります。
更新によって新たに消費された容量については、特定したデータセットIDに対しListIngestions API(list-ingestions)を実行し、IngestionSizeInBytesをご確認ください。
ありがとうございます。
無事対象のデータセットを特定できました。