In a previous article, Deploying and Querying GCS Buckets using StackQL, we walked through some basic creation and query operations on Google Cloud Storage buckets. In this post we will extend on this by enabling logging on a GCS bucket using StackQL. This post is based upon this article: Usage logs & storage logs.
Assuming we have deployed a bucket which we want to log activities on, follow the steps below:
Step 1 : Create a bucket to store the usage logs
One bucket in a project can be used to collect the usage logs from one or more other buckets in the project. Use the StackQL Command Shell (stackql shell
) or stackql exec
to create this logs bucket as shown here:
INSERT INTO google.storage.buckets(
project,
data__name,
data__location,
data__locationType
)
SELECT
'stackql',
'stackql-download-logs',
'US',
'multi-region'
;
for more examples of creating Google Cloud Storage buckets using StackQL, see Deploying and Querying GCS Buckets using StackQL.
Step 2: Set IAM policy for the logs bucket
You will need to create an IAM binding to enable writes to this bucket, do this by using the setIamPolicy
method as shown here:
EXEC google.storage.buckets.setIamPolicy
@bucket = 'stackql-download-logs'
@@json = '{
"bindings":[
{
"role": "roles/storage.legacyBucketWriter",
"members":[
"group:cloud-storage-analytics@google.com"
]
}
]
}';
TIP: you should also add role bindings to the
roles/storage.legacyBucketOwner
role for serviceAccount or users who will be running StackQLSELECT
queries against this logs bucket.
Step 3: Enable logging on the target bucket
To enable logging on your target bucket (or buckets) run the following StackQL EXEC
method:
EXEC google.storage.buckets.patch
@bucket = 'stackql-downloads'
@@json = '{
"logging": {
"logBucket": "stackql-download-logs",
"logObjectPrefix": "stackql_downloads"
}
}';
TIP: use
SHOW METHODS IN google.storage.buckets;
to see what operations are avaialable such as thepatch
andsetIamPolicy
examples shown in the previous steps.
Step 4: Check logging status on target bucket
To see that logging has been enabled run the StackQL query below:
select name, logging
from google.storage.buckets
WHERE project = 'stackql'
and logging is not null;
To unpack the logging
object, you can use the [JSON_EXTRACT
]](/docs/language-spec/functions/json/json_extract) built in function as shown here:
select name, json_extract(logging, '$.logBucket') as logBucket,
json_extract(logging, '$.logObjectPrefix') as logObjectPrefix
from google.storage.buckets
WHERE project = 'stackql'
and logging is not null;
In Part II of this post, we will demonstrate how to create a Big Query dataset, then load and analyze the GCS usage logs you have collected using Big Query, stay tuned!