我在Azure上托管了Flask API,并且我正在使用azure_storage_logging.handlers包将API运行时日志发送到Azure存储。我正在使用BlobStorageRotatingFileHandler。 我的存储帐户中收到很少的日志。但是,大量日志丢失了。我的API占用大量CPU。 请让我知道如何解决此问题。
def fun_logging(id, logfilename , loggername):
mystorageaccountname = STORAGE_ACCOUNT_NAME
mystorageaccountkey = STORAGE_ACCOUNT_KEY
mystoragecontainer = STORAGE_CONTAINER
utctime = asctime(gmtime())
logger = logging.getLogger(loggername)
logger.setLevel(logging.DEBUG)
log_formater = logging.Formatter('%(utctime)s - %(id)s - %(levelname)s - %(message)s')
azure_blob_handler = BlobStorageRotatingFileHandler(filename = logfilename, account_name=mystorageaccountname,account_key=mystorageaccountkey, delay=False, maxBytes= 10000,container=mystoragecontainer)
azure_blob_handler.setLevel(logging.DEBUG)
azure_blob_handler.setFormatter(log_formater)
if (logger.hasHandlers()):
logger.handlers.clear()
logger.addHandler(azure_blob_handler)
logger = logging.LoggerAdapter(logger, {'id': id, 'utctime':utctime})
return logger
####### Calling function
logger = fun_logging(id, 'Logs//xyz.log', 'xyz')
logger.info(Result.log) ## the variable I am logging
答案 0 :(得分:0)
我搜索了您使用的BlobStorageRotatingFileHandler
,并找到了github存储库michiya/azure-storage-logging
。我不确定您的烧瓶项目中是否使用过它。如果是,我建议您使用TableStorageHandler
登录场景以编写大量日志,而不要使用BlobStorageRotatingFileHandler
。
查看完此仓库的代码后,出现了一个问题,即使用BlockBlob一次存储整个日志文件,而不是将日志记录追加到AppendBlob中。因此,它不适合具有大量日志的情况。 Azure建议使用AppendBlob进行日志记录,如果使用Blob存储,请参见以下here。
附加blob用于记录日志,例如当您要写入 文件,然后继续添加更多信息。大多数对象存储在 Blob存储是块Blob。
因此,您可以尝试通过Azure Blob Storage SDK for Python使用Append Blob来自行包装日志记录API。否则,Azure表存储是一个不错的选择,您可以尝试进行日志记录。对于大量日志记录,最佳实践是将日志写入EventHub,然后使用流分析等其他服务来过滤数据并将数据传输到Blob存储中。
希望有帮助。