索引是一種倒排的資料存放區結構,由關鍵詞和指向實際資料的邏輯指標組成,用於快速根據關鍵詞定位到具體資料行,類似於資料的目錄。您只有配置索引後,才能進行查詢和分析操作。本文通過程式碼範例介紹如何建立、修改、查詢、刪除索引。
前提條件
已開通Log Service。更多資訊,請參見開通Log Service。
已建立RAM使用者並完成授權。具體操作,請參見建立RAM使用者並完成授權。
已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
重要阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。
強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
已安裝Log ServicePython SDK。具體操作,請參見安裝Python SDK。
已建立Log ServiceProject、Logstore並完成日誌採集。具體操作,請參見建立專案Project、建立Logstore和資料擷取概述。
注意事項
本樣本以華東1(杭州)的公網Endpoint為例,其公網Endpoint為https://cn-hangzhou.log.aliyuncs.com
。如果您通過與Project同地區的其他阿里雲產品訪問Log Service,請使用內網Endpointhttps://cn-hangzhou-intranet.log.aliyuncs.com
。關於Log Service支援的地區與Endpoint的對應關係,請參見服務入口。
計費說明
Logstore的計費方式,包含按寫入資料量計費和按使用功能計費。具體資訊,請參見管理Logstore、按使用功能計費模式計費項目和按寫入資料量計費模式計費項目。
按寫入資料量計費的logstore
建立的索引會佔用儲存空間,儲存類型請參見管理智能儲存分層。
重建索引不產生費用。
按使用功能計費的logstore
建立的索引會佔用儲存空間,儲存類型請參見管理智能儲存分層。
建立索引會產生流量,索引流量計費請參見按使用功能計費模式計費項目中的索引流量-日誌索引和索引流量-日誌索引-查詢型。降低索引流量的建議,請參見文末的相關文檔。
重建索引會產生費用。計費項目、計費價格和建立索引相同。
原始日誌範例
body_bytes_sent:1750
host:www.example.com
http_referer:www.example.com
http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
http_x_forwarded_for:203.0.XX.XX
remote_addr:203.0.XX.XX
remote_user:p288
request_length:13741
request_method:GET
request_time:71
request_uri:/request/path-1/file-1
http_code:200
time_local:11/Aug/2021:06:52:27
upstream_response_time:0.66
建立索引範例程式碼
控制台介面支援介面化配置索引,操作更便捷。具體操作,請參見建立索引。
以下代碼用於建立索引。該樣本中,基於原始日誌範例,開啟全文索引,為request_method、status欄位開啟欄位索引。
from aliyun.log import LogClient, IndexConfig
import os
# 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# 建立Log ServiceClient。
client = LogClient(endpoint, accessKeyId, accessKey)
# Project名稱。
project_name = "ali-test-project"
# Logstore名稱。
logstore_name = "ali-test-logstore"
if __name__ == '__main__':
# 建立索引前,必須規劃好全文索引、欄位索引配置。該樣本中,開啟全文索引,為request_method、status欄位開啟欄位索引。
logstore_index = {'line': {
'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n',
'\t',
'\r'], 'caseSensitive': False, 'chn': False}, 'keys': {'request_method': {'type': 'text',
'token': [',', ' ', "'", '"', ';', '=',
'(', ')', '[', ']', '{', '}',
'?', '@', '&', '<', '>', '/',
':', '\n', '\t', '\r'],
'caseSensitive': False, 'alias': '',
'doc_value': True, 'chn': False},
'status': {'type': 'long', 'alias': '',
'doc_value': True}},
'log_reduce': False,
'max_text_len': 2048}
print("ready to create index")
index_config = IndexConfig()
index_config.from_json(logstore_index)
client.create_index(project_name, logstore_name, index_config)
print("create index success ")
預期結果如下:
ready to create index
create index success
更新索引範例程式碼
控制台介面支援介面化配置索引,操作更便捷。具體操作,請參見建立索引。
以下代碼用於更新索引。該樣本中,基於原始日誌範例,開啟全文索引,為request_method、status開啟欄位索引,並設定request_method欄位大小寫敏感為True。
from aliyun.log import LogClient, IndexConfig
import os
# 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# 建立Log ServiceClient。
client = LogClient(endpoint, accessKeyId, accessKey)
# Project名稱。
project_name = "ali-test-project"
# Logstore名稱。
logstore_name = "ali-test-logstore"
if __name__ == '__main__':
# 設定request_method欄位大小寫敏感為True。
logstore_index = {'line': {
'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n',
'\t',
'\r'], 'caseSensitive': False, 'chn': False}, 'keys': {'request_method': {'type': 'text',
'token': [',', ' ', "'", '"', ';', '=',
'(', ')', '[', ']', '{', '}',
'?', '@', '&', '<', '>', '/',
':', '\n', '\t', '\r'],
'caseSensitive': True, 'alias': '',
'doc_value': True, 'chn': False},
'status': {'type': 'long', 'alias': '',
'doc_value': True}},
'log_reduce': False,
'max_text_len': 2048}
print("ready to update index")
index_config = IndexConfig()
index_config.from_json(logstore_index)
client.update_index(project_name, logstore_name, index_config)
print("update index success ")
預期結果如下:
ready to update index
update index success
查詢索引範例程式碼
以下代碼用於查詢指定Logstore的索引資訊。
from aliyun.log import LogClient, IndexConfig
import os
# 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# 建立Log ServiceClient。
client = LogClient(endpoint, accessKeyId, accessKey)
# Project名稱。
project_name = "ali-test-project"
# Logstore名稱。
logstore_name = "ali-test-logstore"
if __name__ == '__main__':
# 查詢索引。
print("ready to list index")
res = client.get_index_config(project_name, logstore_name)
print("The index config is :%s" % res.get_index_config().to_json())
print("list index success ")
預期結果如下:
ready to list index
The index config is :{'line': {'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': False, 'chn': False}, 'keys': {'request_method': {'type': 'text', 'token': [',', ' ', "'", '"', ';', '=', '(', ')', '[', ']', '{', '}', '?', '@', '&', '<', '>', '/', ':', '\n', '\t', '\r'], 'caseSensitive': True, 'alias': '', 'doc_value': True, 'chn': False}, 'status': {'type': 'long', 'alias': '', 'doc_value': True}}, 'log_reduce': False, 'max_text_len': 2048}
list index success
刪除索引範例程式碼
以下代碼用於刪除指定Logstore的索引資訊。
from aliyun.log import LogClient, IndexConfig
import os
# 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
accessKeyId = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
accessKey = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
# Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
endpoint = "cn-hangzhou.log.aliyuncs.com"
# 建立Log ServiceClient。
client = LogClient(endpoint, accessKeyId, accessKey)
# Project名稱。
project_name = "ali-test-project"
# Logstore名稱。
logstore_name = "ali-test-logstore2"
if __name__ == '__main__':
# 刪除索引。
print("ready to delete index")
client.delete_index(project_name, logstore_name)
print("delete index success ")
預期結果如下:
ready to delete index
delete index success
相關文檔
阿里雲OpenAPI開發人員門戶提供調試、SDK、樣本和配套文檔。通過OpenAPI,您無需手動封裝請求和簽名操作,就可以快速對Log ServiceAPI進行調試。更多資訊,請參見OpenAPI開發人員門戶。
控制台操作索引請參見建立索引。
為滿足越來越多的自動化Log Service配置需求,Log Service提供命令列工具CLI(Command Line Interface)。更多資訊,請參見Log Service命令列工具CLI。
關於Index API介面說明,請參見如下:
更多範例程式碼,請參見Aliyun Log Python SDK on GitHub。