This topic shows you how to use the Simple Log Service SDK for Python to perform common operations, such as creating a project and logstore, writing logs, and querying logs.
Prerequisites
A Resource Access Management (RAM) user is created, and the required permissions are granted to the RAM user. For more information, see Create a RAM user and grant permissions to the RAM user.
The ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are configured. For more information, see Configure environment variables in Linux, macOS, and Windows.
ImportantThe AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use the AccessKey pair of a RAM user to call API operations or perform routine O&M.
We recommend that you do not save the AccessKey ID or AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked, and the security of all resources within your account may be compromised.
Simple Log Service SDK for Python is installed. For more information, see Install Simple Log Service SDK for Python.
Examples
Write Python code to collect logs
The following example, contained in a single
SLSQuickStart.pyfile, demonstrates how to use the SDK to create a project, Logstore, and index, and then write and query logs.from aliyun.log import LogClient, PutLogsRequest, LogItem, GetLogsRequest, IndexConfig import time import os # This example obtains the AccessKey ID and AccessKey secret from environment variables. accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '') accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '') # The Simple Log Service endpoint. In this example, the Simple Log Service endpoint for the China (Hangzhou) region is used. Replace the parameter value with the actual endpoint. endpoint = "cn-hangzhou.log.aliyuncs.com" # Create a Simple Log Service client. client = LogClient(endpoint, accessKeyId, accessKey) # The name of the project. project_name = "aliyun-test-project" # The name of the Logstore. logstore_name = "aliyun-test-logstore" # The query statement. query = "*| select dev,id from " + logstore_name # The indexes. logstore_index = {'line': { 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'chn': False}, 'keys': {'dev': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': '', 'doc_value': True, 'chn': False}, 'id': {'type': 'long', 'alias': '', 'doc_value': True}}, 'log_reduce': False, 'max_text_len': 2048} # The from_time and to_time parameters specify the start time and end time of the time range within which you want to query logs. The values of the parameters are UNIX timestamps. from_time = int(time.time()) - 3600 to_time = time.time() + 3600 # Create a project. def create_project(): print("ready to create project %s" % project_name) client.create_project(project_name, project_des="") print("create project %s success " % project_name) time.sleep(60) # Create a Logstore. def create_logstore(): print("ready to create logstore %s" % logstore_name) client.create_logstore(project_name, logstore_name, ttl=3, shard_count=2) print("create logstore %s success " % project_name) time.sleep(30) # Create indexes. def create_index(): print("ready to create index for %s" % logstore_name) index_config = IndexConfig() index_config.from_json(logstore_index) client.create_index(project_name, logstore_name, index_config) print("create index for %s success " % logstore_name) time.sleep(60 * 2) # Write data to the Logstore. def put_logs(): print("ready to put logs for %s" % logstore_name) log_group = [] for i in range(0, 100): log_item = LogItem() contents = [ ('dev', 'test_put'), ('id', str(i)) ] log_item.set_contents(contents) log_group.append(log_item) request = PutLogsRequest(project_name, logstore_name, "", "", log_group, compress=False) client.put_logs(request) print("put logs for %s success " % logstore_name) time.sleep(60) # Execute an SQL statement to query logs. def get_logs(): print("ready to query logs from logstore %s" % logstore_name) request = GetLogsRequest(project_name, logstore_name, from_time, to_time, query=query) response = client.get_logs(request) for log in response.get_logs(): for k, v in log.contents.items(): print("%s : %s" % (k, v)) print("*********************") if __name__ == '__main__': # Create a project. create_project() # Create a Logstore. create_logstore() # Create indexes. create_index() # Write data to the Logstore. put_logs() # Execute an SQL statement to query logs. get_logs()Example output:
ready to create project aliyun-test-project create project aliyun-test-project success ready to create logstore aliyun-test-logstore create logstore aliyun-test-project success ready to create index for aliyun-test-logstore create index for aliyun-test-logstore success ready to put logs for aliyun-test-logstore put logs for aliyun-test-logstore success ready to query logs from logstore aliyun-test-logstore dev : test_put id : 0 ********************* dev : test_put id : 1 ********************* dev : test_put id : 2 ********************* dev : test_put id : 3 ********************* ........For more information about the sample code, see aliyun-log-python-sdk.
Use Logtail to collect Python logs
You can use Logtail to collect Python logs from the logging module in Python. For more information, see Collect Python logs.
References
If an API call fails, the response from Simple Log Service includes an error code. For more information, see Error codes.
In addition to its native SDK, Simple Log Service also supports the common Alibaba Cloud SDKs. For more information, see Simple Log Service_SDK Center_Alibaba Cloud OpenAPI Explorer.
Simple Log Service provides a command-line interface (CLI) for automated configuration. For more information, see Overview of Simple Log Service CLI.
For more information about sample code, see Alibaba Cloud Simple Log Service SDK for Python on GitHub.