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
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
-
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 -
Após instale o SDK, execute o seguinte comando para verifique a instalação:
pip show aliyun-log-python-sdkA 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):
Obtenha um par de AccessKey. No console do Alibaba Cloud, crie um AccessKey para obter um
access_key_ide umaccess_key_secret.Configure as chaves como variáveis de ambiente, como
ALIBABA_CLOUD_ACCESS_KEY_IDeALIBABA_CLOUD_ACCESS_KEY_SECRET, de acordo com seu sistema operacional (Linux, macOS ou Windows).Defina o endpoint. Este documento usa a região China (Hangzhou) como exemplo. O
endpointé definido comocn-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
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
No painel de navegação à esquerda, escolha Alerts > e clique em Create.
-
Na caixa de diálogo Add Action Policy, crie uma política de ação com o Identifier definido como
test-action-policye o Name definido comoNew 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 Reminderpara evitar menções (@) na notificação de alerta do DingTalk.Content template : Selecione
SLS Built-in Content Template.Sending period : Selecione
Any timepara 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
No painel de navegação à esquerda, escolha Alerts > Alert Monitoring Rule e clique em Create Alert.
-
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 comSeveritydeMediumé acionado.Add Annotation: Defina as chaves como
titleedesc, 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-policycriada.
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
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:
Ative o Simple Log Service.
Obtenha um par de AccessKey.
Crie um projeto e um Logstore.
Colete logs e armazene-os no Logstore.
Crie um índice para os logs.
Consulte e analise logs e visualize os resultados.
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.
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.
-
SDK do Simple Log Service para Java:
-
SDK do Simple Log Service para Python:
-
SDKs do Simple Log Service para várias linguagens:
Para mais source de código, consulte os repositórios de logs do Alibaba Cloud no GitHub.