Azure数据工厂的后端?

时间:2019-07-26 07:19:14

标签: azure-data-factory azure-data-factory-2

当我们创建管道并在Azure Data Factory中发布时,内部会保存很多信息。当我们创建管道并触发它们时,历史记录将保存在某处。确切的位置以及我们如何访问它。我不是指“监视”页面,而是该页面从何处获取数据? 可能是我在文档中错过了它,却无法掌握它。

谢谢 -Akshay

3 个答案:

答案 0 :(得分:0)

您可以获得的所有信息就是ADF中monitor功能向您显示的信息。这是内置功能。<​​/ p>

enter image description here

如果您确实想知道这些数据确切位于什么位置,则需要保留它们。请参阅此文档中的statement

  

Data Factory仅将管道运行数据存储45天。如果你想   使用Azure Monitor将管道运行数据保留超过45天,   您不仅可以路由诊断日志进行分析,还可以继续   他们到一个存储帐户,以便您拥有工厂信息   您选择的持续时间。

您可以将日志信息与诊断日志一起存储。请参阅此link或此第三方management tool

答案 1 :(得分:0)

我们可以从Azure数据工厂活动日志中查看所有操作日志: enter image description here

我不确定日志的存储位置,但是您可以使用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)