当我们创建管道并在Azure Data Factory中发布时,内部会保存很多信息。当我们创建管道并触发它们时,历史记录将保存在某处。确切的位置以及我们如何访问它。我不是指“监视”页面,而是该页面从何处获取数据? 可能是我在文档中错过了它,却无法掌握它。
谢谢 -Akshay
答案 0 :(得分:0)
您可以获得的所有信息就是ADF中monitor功能向您显示的信息。这是内置功能。</ p>
如果您确实想知道这些数据确切位于什么位置,则需要保留它们。请参阅此文档中的statement:
Data Factory仅将管道运行数据存储45天。如果你想 使用Azure Monitor将管道运行数据保留超过45天, 您不仅可以路由诊断日志进行分析,还可以继续 他们到一个存储帐户,以便您拥有工厂信息 您选择的持续时间。
您可以将日志信息与诊断日志一起存储。请参阅此link或此第三方management tool。
答案 1 :(得分:0)
我不确定日志的存储位置,但是您可以使用PowerShell下载ADF日志。
您可以使用从输出中看到的ID值运行Save-AzureRmDataFactoryLog
cmdlet,并使用-cmdlet的-DownloadLogs选项下载日志文件。
例如:
| email | points |
|-------|----------|
| a | 2 |
| b | 1 |
| c | 0 |
希望这会有所帮助。
答案 2 :(得分:0)
Azure数据工厂管道运行元数据存储在Azure数据工厂Web服务器数据库中,可通过Azure SDK进行访问。例如,如果可以使用Python,则可以创建数据工厂Python客户端并提取管道运行/活动运行元数据。然后,您可以将响应元数据解析为pandas数据框并写入数据库表。
可以使用下面的功能。
def adf_logging():
# Azure subscription ID
subscription_id = ''
# Azure resource group
rg_name = ''
# The data factory name. It must be globally unique.
df_name = ''
credentials = ServicePrincipalCredentials(
client_id='',
secret='',
tenant='')
# Create a data factory client.
adf_client = DataFactoryManagementClient(credentials, subscription_id)
filter_parameters = {"lastUpdatedAfter": "2019-08-06T00:36:44.3345758Z",
"lastUpdatedBefore": "2019-08-07T00:49:48.3686473Z"}
# Extract last 24 hours pipeline run metadata.
pipeline_runs = adf_client.pipeline_runs.query_by_factory(rg_name, df_name, filter_parameters)
# Iterate and parse metadata, get log stats.
cols = ['Pipeline_Name', 'Pipeline_Run_Id', 'Pipeline_Run_Status',
'Activity_Name', 'Activity_Start_Time', 'Activity_End_Time',
'Activity_Run_Status', 'Data_Read',
'Data_Written', 'Rows_Read', 'Rows_Written', 'Copy_Duration',
'Error_Message']
df_stats = pd.DataFrame(columns=cols)
for i in pipeline_runs.as_dict()['value']:
pipeline_name = i['pipeline_name']
run_id = i['run_id']
pipeline_run_status = i['status']
activity_runs = list(adf_client.activity_runs.list_by_pipeline_run(
rg_name,
df_name, run_id,
datetime.now() - timedelta(1),
datetime.now() + timedelta(1)))
# Parse activity run metadata.
for activity_run in activity_runs:
if re.match(r"Lookup_[A-Z]", activity_run.activity_name):
pass
elif re.match(r"If_[A-Z]", activity_run.activity_name):
pass
elif re.match(r"ForEach_[A-Z]", activity_run.activity_name):
pass
elif re.match(r"Success [A-Z]", activity_run.activity_name):
pass
else:
activity_name = activity_run.activity_name
start_time = activity_run.activity_run_start
start_time = start_time.replace(tzinfo=None)
end_time = activity_run.activity_run_end
end_time = end_time.replace(tzinfo=None)
activity_run_status = activity_run.status
data_read = activity_run.output['dataRead'] / (1000*1000)
data_write = activity_run.output['dataWritten'] / (1000*1000)
rows_read = activity_run.output['rowsRead']
rows_write = activity_run.output['rowsCopied']
copy_duration = activity_run.output['copyDuration']
error_message = activity_run.output['errors']
data = {'Pipeline_Name': pipeline_name, 'Pipeline_Run_Id':run_id,
'Pipeline_Run_Status': pipeline_run_status,
'Activity_Name': activity_name,
'Activity_Start_Time': start_time,
'Activity_End_Time': end_time,
'Activity_Run_Status': activity_run_status,
'Data_Read': data_read, 'Data_Written': data_write,
'Rows_Read': rows_read, 'Rows_Written': rows_write,
'Copy_Duration': copy_duration,
'Error_Message': error_message}
df = pd.DataFrame([data])
df_stats = df_stats.append(df)