文档

常见资源管理

更新时间:

本文介绍常用的日志服务资源管理代码操作示例。

前提条件

  • 已创建RAM用户并完成授权。具体操作,请参见创建RAM用户并完成授权

  • 已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见配置环境变量

    重要
    • 阿里云账号的AccessKey拥有所有API的访问权限,建议您使用RAM用户的AccessKey进行API访问或日常运维。

    • 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

示例1:初始化日志服务Client

LogClient是日志服务的Python客户端,用于管理Project、Logstore等日志服务资源。使用Python SDK发起日志服务请求,您需要初始化一个Client实例。示例代码如下所示:

# Setup basic client
from aliyun.log.logclient import LogClient
import os
# 日志服务的服务入口。
endpoint = "cn-huhehaote.log.aliyuncs.com"

# 本示例从环境变量中获取AccessKey ID和AccessKey Secret。
accessId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

client = LogClient(endpoint, accessId, accessKey)

示例2:写入日志数据

示例代码如下:

# Write Log to Logstore

import time
from aliyun.log.logitem import LogItem
from aliyun.log.putlogsrequest import PutLogsRequest

project  = "YOUR_SLS_PROJECT" 
logstore = "YOUR_SLS_LOGSTORE"

one_log_contents = []
one_log_contents.append(("msg1", "Hello")) # log key value in one logitem
one_log_contents.append(("msg2", "World"))

one_log = LogItem(
    timestamp=int(time.time()),
    contents=one_log_contents,
)

logs = [one_log]

putReq = PutLogsRequest(
        project=project,
        logstore=logstore,
        logitems=logs,
)

res = client.put_logs(putReq)

print(res.get_body())

示例3:查询日志

示例代码如下:

# Query SLS Logstore

import time

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

etime = int(time.time())
stime = etime - 3600
query = '*'

datas = []
for i in client.get_log_all(project, logstore, stime, etime, query=query):
    for log in i.logs:
        datas.append(log.get_contents())
print(datas)

可视化展示查询日志,代码示例如下:

# Query SLS Logstore to Pandas

import time
import pandas as pd

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

etime = int(time.time())
stime = etime - 3600
query = '* | select msg1 from log'

datas = []
for i in client.get_log_all(project, logstore, stime, etime, query=query):
    for log in i.logs:
        datas.append(log.get_contents())

# Convert datas to pandas dataframe
df_ret = pd.DataFrame(datas)
print(df_ret)

示例4:查询Project列表

示例代码如下:

# List SLS Project

ret = client.list_project()
ret.get_projects()

示例5:查询Logstore列表

示例代码如下:

# List SLS Logstore

project  = "YOUR_SLS_PROJECT"
ret = client.list_logstore(project)
print(ret.get_logstores())

示例6:创建Logstore

示例代码如下:

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

ret = client.create_logstore(project, logstore)

ret.log_print()

示例7:创建或更新Logstore索引配置

示例代码如下:

# Create or Update SLS Logstore Index

from aliyun.log.logexception import LogException
from aliyun.log.index_config import IndexConfig

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

request_json = {
    'index_mode': 'v2',
    'line': {
        'caseSensitive': False,
        'chn': False,
        'token': [',',' ',"'",'"',';','=','(',')','[',']','{','}','?','@','&','<','>','/',':','\n','\t','\r']
    },
    'log_reduce': False,
}
    
req = IndexConfig()
req.from_json(request_json)

try:
    client.get_index_config(project_b, logstore_b)
    # update index config if index config is already exists
    ret = client.update_index(project_b, logstore_b, req)
except LogException as ex:
    if ex.get_error_code() in ("IndexConfigNotExist"):
        # create index if index not exists
        ret = client.create_index(project_b, logstore_b, req)

ret.log_print()

创建或更新Logstore列索引,代码示例如下:

# Create or Update SLS Logstore Index With Column Index

from aliyun.log.logexception import LogException
from aliyun.log.index_config import IndexConfig

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

request_json = {
    'index_mode': 'v2',
    'line': {
        'caseSensitive': False,
        'chn': False,
        'token': [',',' ',"'",'"',';','=','(',')','[',']','{','}','?','@','&','<','>','/',':','\n','\t','\r']
    },
    'log_reduce': False,
    'keys' : {
        "msg1" : {
            "type": "text",
            'token': [',',' ',"'",'"',';','=','(',')','[',']','{','}','?','@','&','<','>','/',':','\n','\t','\r'],
            "doc_value": True
        },
        "long_column" : {
            "type": "long",
            "doc_value": True
        },
        "double_column" : {
            "type": "double",
            "doc_value": True
        },
        "json_column" : {
            "type": "json",
            'token': [',',' ',"'",'"',';','=','(',')','[',']','{','}','?','@','&','<','>','/',':','\n','\t','\r'],
            "doc_value": True,
            'json_keys': {
                "key1" : {
                    "type": "text",
                    'token': [',',' ',"'",'"',';','=','(',')','[',']','{','}','?','@','&','<','>','/',':','\n','\t','\r'],
                    "doc_value": True
                }
            }
        },
    }
}
    
req = IndexConfig()
req.from_json(request_json)

try:
    client.get_index_config(project_b, logstore_b)
    # update index config if index config is already exists
    ret = client.update_index(project_b, logstore_b, req)
except LogException as ex:
    if ex.get_error_code() in ("IndexConfigNotExist"):
        # create index if index not exists
        ret = client.create_index(project_b, logstore_b, req)
        
ret.log_print()

示例8:跨Logstore复制索引配置

示例代码如下:

# Copy SLS Logstore A's index config to Logstore B

from aliyun.log.logexception import LogException
from aliyun.log.index_config import IndexConfig

project_a  = "YOUR_SLS_PROJECT_A"
logstore_a = "YOUR_SLS_LOGSTORE_A"

project_a  = "YOUR_SLS_PROJECT_B"
logstore_a = "YOUR_SLS_LOGSTORE_B"

ret = client.get_index_config(project_a, logstore_a)
req = IndexConfig()
req.from_json(ret.get_body())

try:
    client.get_index_config(project_b, logstore_b)
    # update index config if index config is already exists
    ret = client.update_index(project_b, logstore_b, req)
except LogException as ex:
    if ex.get_error_code() in ("IndexConfigNotExist"):
        # create index if index not exists
        ret = client.create_index(project_b, logstore_b, req)

示例9:跨Project复制Logtail配置

示例代码如下:

# Copy logtail configs between projects

project_a  = "YOUR_SLS_PROJECT_A"
project_b  = "YOUR_SLS_PROJECT_B"

logtail_config_name = "YOUR_LOGTAIL_CONFIG_NAME"

ret = client.get_logtail_config(project_a, logtail_config)
ret = client.create_logtail_config(project_b, ret.logtail_config)
ret.log_print()

示例10:跨Project复制Dashboard配置

示例代码如下:

# Copy dashboard between projects

project_a  = "YOUR_SLS_PROJECT_A"
project_b  = "YOUR_SLS_PROJECT_B"

dashboard_name = "YOUR_DASHBOARD_NAME"

ret = client.get_dashboard(project_a, dashboard_name)

ret = client.create_dashboard(project_b, ret.get_body())
ret.log_print()

示例11:跨Project复制告警配置

示例代码如下:

# Copy alert between projects

project_a  = "YOUR_SLS_PROJECT_A"
project_b  = "YOUR_SLS_PROJECT_B"

alert_name = "YOUR_ALERT_NAME"

ret = client.get_alert(project_a, alert_name)

ret = client.create_alert(project_b, ret.get_body())
ret.log_print()

示例12:创建日志投递任务

示例代码如下:

# Create Logstore Shipper
from aliyun.log.logexception import LogException

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

shipper_config = {
        'shipperName': 'test_ship22',
        'targetType': 'odps',
        'targetConfiguration': {
            'bufferInterval': 1800,
            'enable': True,
            'fields': ['__time__', '__source__', '__topic__', 'content'],
            'odpsEndpoint': 'http://odps-ext.aliyun-inc.com/api',
            'odpsProject': 'TS_DL',
            'odpsTable': 'test_odps',
            'partitionColumn': ['__time__'],
            'partitionTimeFormat': 'yyyy_MM_dd_HH_mm'
        }
}

try:
    client.create_shipper(project, logstore, shipper_config)
except LogException as ex:
    if 'shipperName already exists' in ex.get_error_message():
        # create index if index not exists
        ret = client.update_shipper(project, logstore, shipper_config)

示例13:查询日志投递任务配置

示例代码如下:

# List and get Logstore Shipper Config

project  = "YOUR_SLS_PROJECT"
logstore = "YOUR_SLS_LOGSTORE"

ret = client.list_shipper(project, logstore)
for shipper_name in ret.get_body()['shipper']:
    ret = client.get_shipper(project, logstore, shipper_name)

    print("------------------------------------------")
    print(shipper_name)
    print(ret.get_body())
  • 本页导读 (1)
文档反馈