Todos os produtos
Search
Central de documentação

Simple Log Service:Início rápido: Envie e analise logs com o SDK do SLS

Última atualização: Jul 10, 2026

Envie logs com o SDK Python do Simple Log Service (SLS), visualize os resultados da análise no console e configure alertas para anomalias.

Pré-requisitos

  • Você tem uma instância ECS disponível. Para mais informações, consulte Início rápido do ECS.

  • O Simple Log Service está ativado. Para mais informações, consulte Ativar o Simple Log Service.

  • O Python e um ambiente de desenvolvimento Python, como o PyCharm, estão instalados.

    O SDK Python do SLS é compatível com as seguintes versões:

    • Python 2: 2,7 e posteriores

    • Python 3: 3,7 e posteriores

    • PyPy 2: 2,7 e posteriores

    • PyPy 3: 3,7 e posteriores

Visão geral da solução

image

Neste início rápido, você aprenderá a:

  • Crie um projeto (unidade de gerenciamento de recursos) e um logstore (unidade de armazenamento de logs).

  • Usar o SDK Python para enviar logs a um logstore, crie um índice e consultar e analisar os logs.

  • Visualizar os resultados da análise como gráficos em um painel.

  • Configure regras de alerta para monitoramento.

  • Limpar recursos desnecessários para evitar cobranças.

1. Crie um projeto e um logstore

1,1 Criar um projeto

Faça login no console do Simple Log Service. Na seção Projects, clique em Create Project. No painel Create Project, selecione uma Region e insira um Project Name. Este documento usa como exemplo um projeto chamado aliyun-test-project na região China (Hangzhou). Mantenha os valores padrão para os demais parâmetros.

1,2 Criar um logstore

2. Instale o SDK

  1. Na interface de linha de comando (CLI), execute o seguinte comando como administrador para instale o SDK Python. Para mais informações sobre versões, consulte Aliyun Log Python Release.

    pip install -U aliyun-log-python-sdk
  2. Após instale o SDK, execute o seguinte comando para verifique a instalação:

    pip show aliyun-log-python-sdk

    A saída abaixo confirma que a instalação foi bem-sucedida:

    Name: aliyun-log-python-sdk
    Version: 0.9.12
    Summary: Aliyun log service Python client SDK
    Home-page: https://github.com/aliyun/aliyun-log-python-sdk
    Author: Aliyun

3. Inicialize o cliente

O LogClient gerencie projetos, logstores e dados de log. Para inicializar o cliente com um par de AccessKey (assinatura V1):

  1. Obtenha um par de AccessKey. No console do Alibaba Cloud, crie um AccessKey para obter um access_key_id e um access_key_secret.

  2. Configure as chaves como variáveis de ambiente, como ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET, de acordo com seu sistema operacional (Linux, macOS ou Windows).

  3. Defina o endpoint. Este documento usa a região China (Hangzhou) como exemplo. O endpoint é definido como cn-hangzhou.log.aliyuncs.com. Para outras regiões, substitua o valor pelo endpoint correspondente.

# Import the SLS package.
from aliyun.log import *
# Import this module to get the AccessKey pair from environment variables.
import os
# Obtain the AccessKey ID and AccessKey secret from environment variables.
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# The endpoint of Simple Log Service.
endpoint = "cn-hangzhou.log.aliyuncs.com"
# Create a LogClient instance.
client = LogClient(endpoint, access_key_id, access_key_secret)

4. Envie logs

Chame put_logs para enviar dados de log. Abaixo está um exemplo de log bruto:

10.0.*.1 - - [14/Jul/2025:12:00:03 +0000] "POST /login HTTP/1.1" 302 0 "http://example.com/login.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"  

Estruture o conteúdo do log por campo ao chamar put_logs para simplificar análises futuras.

# The name of the project.
project_name = "aliyun-test-project"
# The name of the logstore.
logstore_name = "aliyun-test-logstore"
# 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()
        # Set the log content by field.
        contents = [
            ('remote_addr', '192.168.0.%d' % (i % 255)),
            ('remote_user', 'user%d' % i),
            ('time_local', time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime())),
            ('request_method', 'GET' if i % 2 == 0 else 'POST'),
            ('request_uri', '/index.html' if i % 3 == 0 else '/api/data'),
            ('status', str(200 + (i % 100))),  # Status codes are between 200 and 299.
            ('body_bytes_sent', str(1024 + i)),
            ('http_referer', 'http://example.com/page%d' % (i // 10)),
            ('http_user_agent',
             'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.%d Safari/537.36' % (i * 10))
        ]
        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)

5. Crie um índice

Configure um índice antes de consultar logs. Defina remote_addr, remote_user, time_local, request_method, request_uri, status, body_bytes_sent, http_referer e http_user_agent como campos de índice.

# The name of the project.
project_name = "aliyun-test-project"
# The name of the logstore.
logstore_name = "aliyun-test-logstore"
# The index.
logstore_index = {'line': {
    'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t',
              '\r'], 'caseSensitive': False, 'chn': False},
    'keys': {'remote_addr': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_addr', 'doc_value': True, 'chn': False},
            'remote_user': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_user', 'doc_value': True, 'chn': False},
            'time_local': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'time_local', 'doc_value': True, 'chn': False},
            'request_method': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_method', 'doc_value': True, 'chn': False},
            'request_uri': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_uri', 'doc_value': True, 'chn': False},
            'status': {'type': 'long', 'alias': 'status', 'doc_value': True},
            'body_bytes_sent': {'type': 'long', 'alias': 'body_bytes_sent', 'doc_value': True},
            'http_referer': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_referer', 'doc_value': True, 'chn': False},
            'http_user_agent': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_user_agent', 'doc_value': True, 'chn': False}}}
# Create an index.
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)

Após a criação do índice, consulte os logs.

Na página Raw Logs do console SLS, 100 logs são retornados com campos indexados e valores como body_bytes_sent:1024, remote_addr:192.168.0.1, request_method:GET, request_uri:/index.html, status:200 e http_referer:http://example.com/page0. Isso confirma que o índice funciona e que os dados de log podem ser consultados.

6. Consulte e analise logs

Envie logs para gerar novos dados e execute a consulta *| select request_method,status from aliyun-test-logstore para recuperá-los. Para mais informações, consulte Consulta e análise baseadas em índice.

# 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 request_method,status from " + logstore_name
# from_time and to_time specify the time range for the query, in UNIX timestamp format.
from_time = int(time.time()) - 3600
to_time = time.time() + 3600
# Query logs by using SQL.
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("*********************")

A seguinte resposta é retornada:

ready to query logs from logstore aliyun-test-logstore
request_method : GET
status : 200
*********************
request_method : POST
status : 201
*********************
request_method : GET
status : 202
*********************
request_method : POST
status : 203
*********************
Process finished with exit code 0

7. Visualize dados

  1. Na página de edição de gráficos, selecione Logstore (SQL) na lista suspensa do painel Query and Analysis. Em seguida, selecione o logstore correspondente e insira * | SELECT request_method,status,COUNT(*) AS request_count GROUP BY request_method,status ORDER BY request_count DESC LIMIT 10;. Essa consulta calcula as 10 maiores contagens de solicitações para cada método e código de status. Como este exemplo conta campos, selecione Table Pro nos tipos de gráfico à direita e clique em Apply para exibir o resultado. Se a visualização atender aos seus requisitos, clique em OK e, em seguida, clique em Save no canto superior direito da página do painel. Os painéis oferecem suporte a vários tipos de gráficos, filtragem de dados e integração com ferramentas de terceiros. Para mais informações, consulte Visão geral de visualização.

8. Alertas e monitoramento

8,1 Criar uma política de ação

  1. No painel de navegação à esquerda, escolha Alerts > Notification Policy > Action Policy e clique em Create.

  2. Na caixa de diálogo Add Action Policy, crie uma política de ação com o Identifier definido como test-action-policy e o Name definido como New Alert Rule-My Action Policy test. Essa política envia notificações via DingTalk quando um alerta é acionado. As configurações específicas do grupo de ações são as seguintes:

    • Channel : Selecione DingTalk-Custom.

    • Request URL : Insira o webhook do seu chatbot do DingTalk, por exemplo, https://oapi.dingtalk.com/robot/send?access_token=4dff******6bfe.

    • Reminder : Selecione No Reminder para evitar menções (@) na notificação de alerta do DingTalk.

    • Content template : Selecione SLS Built-in Content Template.

    • Sending period : Selecione Any time para enviar notificações de alerta sempre que um alerta ocorrer.

O Simple Log Service fornece SDKs para gerencie usuários, grupos de usuários, integrações de webhook, políticas de ação, políticas de alerta e modelos de conteúdo. Para mais informações, consulte Gerenciar dados de recursos de alerta.

8,2 Criar uma regra de alerta

  1. No painel de navegação à esquerda, escolha Alerts > Alert Monitoring Rule e clique em Create Alert.

  2. Na página Create Alert, configure uma regra para acionar uma notificação de alerta do DingTalk a cada 15 minutos quando dados forem detectados. Configure a regra da seguinte forma:

    • Rule Name: New Alert Rule.

    • Check Frequency: Fixed interval of 15 minutes.

    • Query statistics:

      • Type: Logstore.

      • Region: China (Hangzhou).

      • Project: aliyun-test-project.

      • Logstore: aliyun-test-logstore.

      • Query: * | select *.

      • Query Time Range: Today.

    • Group evaluation: No grouping.

    • Trigger Condition: Quando there is data, um alerta com Severity de Medium é acionado.

    • Add Annotation: Defina as chaves como title e desc, e defina o valor de ambas como ${alert_name} alert is triggered.

    • Destination: Para notificações do SLS, defina a política de ação como a test-action-policy criada.

    Além disso, ative os destinos EventStore e CloudMonitor Event Center. Para a política de alerta, selecione Normal Mode e defina o intervalo de repetição como 1 minute.

9. Limpe recursos

Exclua os recursos criados neste início rápido para evitar cobranças contínuas. Shards ativos geram custos enquanto um logstore existir, mesmo que não esteja em uso. Execute o código a seguir para exclua o projeto e todos os recursos associados.

# The name of the project.
project_name = "aliyun-test-project"

# Delete the specified project.
def main():
    try:
        response = client.delete_project(project_name)
        response.log_print()
    except Exception as error:
        print(error)

Código de exemplo completo

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.
access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# The endpoint of Simple Log Service. This example uses the China (Hangzhou) region. For other regions, specify the actual endpoint.
endpoint = "cn-hangzhou.log.aliyuncs.com"
# Create a Simple Log Service client.
client = LogClient(endpoint, access_key_id, access_key_secret)
# 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 request_method,status from " + logstore_name
# from_time and to_time specify the time range for the query, in UNIX timestamp format.
from_time = int(time.time()) - 3600
to_time = time.time() + 3600
# The index.
logstore_index = {'line': {
    'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t',
              '\r'], 'caseSensitive': False, 'chn': False},
    'keys': {'remote_addr': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_addr', 'doc_value': True, 'chn': False},
            'remote_user': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'remote_user', 'doc_value': True, 'chn': False},
            'time_local': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'time_local', 'doc_value': True, 'chn': False},
            'request_method': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_method', 'doc_value': True, 'chn': False},
            'request_uri': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'request_uri', 'doc_value': True, 'chn': False},
            'status': {'type': 'long', 'alias': 'status', 'doc_value': True},
            'body_bytes_sent': {'type': 'long', 'alias': 'body_bytes_sent', 'doc_value': True},
            'http_referer': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_referer', 'doc_value': True, 'chn': False},
            'http_user_agent': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'alias': 'http_user_agent', 'doc_value': True, 'chn': False}}}
# Create an index.
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()
        # Set the log content by field.
        contents = [
            ('remote_addr', '192.168.0.%d' % (i % 255)),
            ('remote_user', 'user%d' % i),
            ('time_local', time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime())),
            ('request_method', 'GET' if i % 2 == 0 else 'POST'),
            ('request_uri', '/index.html' if i % 3 == 0 else '/api/data'),
            ('status', str(200 + (i % 100))),  # Status codes are between 200 and 299.
            ('body_bytes_sent', str(1024 + i)),
            ('http_referer', 'http://example.com/page%d' % (i // 10)),
            ('http_user_agent',
             'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.%d Safari/537.36' % (i * 10))
        ]
        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)
# Query logs by using SQL.
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 an index.
    create_index()
    # Write data to the logstore.
    put_logs()
    # Query logs by using SQL.
    get_logs()

Tópicos relacionados

  • O Simple Log Service oferece SDKs para diversas linguagens de programação. Para mais informações, consulte Visão geral da referência do SDK.

  • O OpenAPI Explorer permite depurar operações da API do SLS sem precisar construir solicitações manualmente ou lidar com assinaturas. Para mais informações, consulte OpenAPI Explorer.

  • O SLS fornece uma interface de linha de comando (CLI) para configuração automatizada. Para mais informações, consulte Visão geral da CLI.

  • O uso do SDK, do OpenAPI Explorer ou da CLI incorre nas mesmas taxas que o uso do console. Para mais informações, consulte Visão geral de faturamento.

Perguntas frequentes

Quais recursos os SDKs do Simple Log Service suportam?

Os SDKs do SLS oferecem suporte à maioria dos recursos do SLS, incluindo coleta de logs, criação de índices, consulta e análise, transformação de dados, consumo de logs, gerenciamento de entrega de logs, alertas e jobs SQL agendados. Caso algum recurso não seja suportado, atualize para a versão mais recente do SDK ou verifique se há atualizações em lançamentos futuros.

Qual é o procedimento básico para usar um SDK do Simple Log Service?

O uso de um SDK segue um fluxo de trabalho semelhante ao do console:

  1. Ative o Simple Log Service.

  2. Obtenha um par de AccessKey.

  3. Crie um projeto e um Logstore.

  4. Colete logs e armazene-os no Logstore.

  5. Crie um índice para os logs.

  6. Consulte e analise logs e visualize os resultados.

  7. Execute operações nos dados de log, como transformação de dados, entrega e alertas.

Para operações mais simples, use o console do SLS. Início rápido.

Como lidar com erros comuns ao depurar um SDK?

Os SDKs do SLS possuem tratamento de erros integrado. As exceções se enquadram nas seguintes categorias:

  • Exceções retornadas pelo Simple Log Service. O SDK lida com essas exceções. Para mais informações, consulte as descrições das operações da API e Códigos de erro.

  • Exceções de rede que ocorrem quando o SDK envia solicitações, como desconexão de rede e tempo limite de resposta do servidor.

  • Exceções específicas de plataforma e linguagem geradas pelo SDK, como estouro de memória.

Tratamento de erros.

Para soluções de erros comuns relacionados à coleta de logs, indexação, consulta, análise e transformação, consulte as Perguntas frequentes.

Existem limites para o uso dos SDKs do Simple Log Service?

O SLS impõe limites em projetos, Logstores, shards e tamanho de LogItem. Revise os Limites de recursos básicos antes de usar um SDK.

Existem documentos com exemplos de código para usar os SDKs?

O SLS fornece exemplos de código para operações comuns. Consulte os documentos de referência de cada SDK.

Para mais source de código, consulte os repositórios de logs do Alibaba Cloud no GitHub.