Oracle云 OCI Python logging 服务 Searchlog 日志查询代码示例

Oracle Cloud Infrastructure (OCI) 提供了功能强大的 Logging 服务,允许您有效地管理和检索日志数据,从而更好地监控和分析您的云资源的行为。

Logging 服务支撑在 Oracle 云中的各种资源上收集、存储和查询日志信息,为您提供全面的操作可视化和故障排除工具。

然而,在使用 logging 服务的 Searchlog 查询功能时,需要注意到一些控制台的限制。当在控制台搜索结果达到上限(500 条记录)时,系统会提示您调整查询时间范围以细化搜索结果。这是为了确保查询的高效性和性能。有时,为了获取更全面的搜索结果,可能需要通过 OCI Python SDK 或其他编程接口进行查询,以便更灵活地处理和分析大量的日志数据。

在使用 Oracle 云 Logging 服务时,了解这些查询限制并利用 SDK 功能,可以帮助我们更好地理解和分析云资源的活动,提高日志管理的效率。

1 安装 OCI Python SDK 包

pip install oci  # 通过 pip 直接按照

2 OCI Python SDK 认证方式

Python SDK 认证方式可参考如下链接:

OCI Python SDK 认证 代码示例-CSDN博客

3 OCI Logging 服务 SearchLog 示例代码

通过示例可以帮助我们快速了解 SearchLog 使用方式

import oci
from datetime import datetime
import json
config_with_key_file = {  # 基础的认证信息
    "user": '',
    "key_file": '/home/opc/.oci/oci_api_key.pem',
    "fingerprint": 'dxxx5:75:xxxxxxxxxxx:c5:96:52',
    "tenancy": '',
    "region": ''
}

# 写入文件操作
def save_logs_to_file(logs, file_path):
    with open(file_path, 'a') as file:
      json.dump(logs, file, indent=2)
      file.write("\n")

# 读取 logging 日志操作
def search_logs(loggingsearch_client, time_start, time_end, search_query, limit=100):
    i=0
    offset = None

    while True:
        # 设置查询参数
        query_details = oci.loggingsearch.models.SearchLogsDetails(
            time_start=time_start,
            time_end=time_end,
            search_query=search_query,
            is_return_field_info=False,
        )


        logs = []
        # 发起日志搜索请求
        try:
            search_logs_response = loggingsearch_client.search_logs(
                search_logs_details=query_details,opc_request_id="RIJJ87OXLQBMPBRN6ZWO/OpcRequestIdExample/UniqueRequestId",limit=1000,page=offset
            )
            i +=1
            print(i)
            # 处理搜索结果
            for s_data in search_logs_response.data.results:
                logs.append(s_data.data)
            save_logs_to_file(logs, "logs_output.json")
            #for log_entry in search_logs_response.data.results:
            #    logs.append(log_entry)
            print(len(search_logs_response.data.results))

            #print(search_logs_response.headers['opc-next-page'])
            # 获取下一页的 offset
            offset = search_logs_response.headers['opc-next-page']

            if not offset:
                break  # 已经到达最后一页

        except oci.exceptions.ServiceError as e:
            print(f"Error: {e}")
            break

    return logs

search_query='search "" | sort by datetime desc'
loggingsearch_client = oci.loggingsearch.LogSearchClient(config_with_key_file)
limit=1000 # 每次返回数据
time_start = datetime.strptime("2023-10-26T00:00:00.600Z", "%Y-%m-%dT%H:%M:%S.%fZ")
time_end = datetime.strptime("2023-10-28T12:00:00.600Z", "%Y-%m-%dT%H:%M:%S.%fZ")
logs = search_logs(loggingsearch_client, time_start, time_end, search_query, limit)

4 参考资料

oci python SDK logSearchClient 

LogSearchClient — oci 2.78.0 documentation

你可能感兴趣的:(OCI云,oracle,云原生,云计算,python)