2017-06-14 7 views
0

私の主な問題は、負荷テストのデバッグのために、Azure SQLで最も遅い実行クエリを集中型のログシステムに送信したいのです。Azureの自動出力をアプリケーションの洞察にテーブル形式で送信する

結果のセットをアプリケーションの洞察に送るにはどうすればよいですか? Azureの自動化から実行中の最も遅いクエリをApplication Insightに送信したいのですか?

それが表形式で

workflow Use-SqlCommandSample 
{ 
param(
    [parameter(Mandatory=$True)] 
    [string] $SqlServer, 

    [parameter(Mandatory=$False)] 
    [int] $SqlServerPort = 1433, 

    [parameter(Mandatory=$True)] 
    [string] $Database, 

    [parameter(Mandatory=$True)] 
    [string] $Table, 

    [parameter(Mandatory=$True)] 
    [PSCredential] $SqlCredential 
) 

# Get the username and password from the SQL Credential 
$SqlUsername = $SqlCredential.UserName 
$SqlPass = $SqlCredential.GetNetworkCredential().Password 

inlinescript { 
    # Define the connection to the SQL Database 
    $Conn = New-Object System.Data.SqlClient.SqlConnection("xxxx") 

    # Open the SQL connection 
    $Conn.Open() 
    $Cmd=new-object system.Data.SqlClient.SqlCommand("SELECT top 10 creation_time"+ 
     ",last_execution_time"+ 
     ",total_physical_reads"+ 
     ",total_logical_reads "+ 
     ",total_logical_writes"+ 
     ", execution_count"+ 
     ", total_worker_time"+ 
     " , total_elapsed_time"+ 
     ", total_elapsed_time/execution_count avg_elapsed_time"+ 
     ",SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,"+ 
     " ((CASE statement_end_offset"+ 
     " WHEN -1 THEN DATALENGTH(st.text)"+ 
     " ELSE qs.statement_end_offset END"+ 
     " - qs.statement_start_offset)/2) + 1) AS statement_text"+ 
     " FROM sys.dm_exec_query_stats AS qs"+ 
     " CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st"+ 
     " ORDER BY total_elapsed_time/execution_count DESC;", $Conn) 
    $Cmd.CommandTimeout=120 

    # Execute the SQL command 
    $Ds=New-Object system.Data.DataSet 
    $Da=New-Object system.Data.SqlClient.SqlDataAdapter($Cmd) 
    [void]$Da.fill($Ds) 



     $assemblyPath = 
    "C:\Modules\Global\Azure\Compute\Microsoft.ApplicationInsights.dll" 
    [System.Reflection.Assembly]::LoadFrom($assemblyPath) 
    $TelClient = New-Object "Microsoft.ApplicationInsights.TelemetryClient" 
    $TelClient.InstrumentationKey = "1234" 

    # Output the result 


    $TelClient.TrackEvent($Ds.Tables) 
    $TelClient.Flush 

    # Close the SQL connection 
    $Conn.Close() 
} 

}

答えて

1

In Application Insightsイベントでは、名前、値のプロパティバッグが使用できます。したがって、AppInsightsに提出するために、テーブルをjsonにシリアル化する必要があります。

1

あるとき私は運でこれを試してみましたが、あなたのSQLサーバーが正常にログオンしているあなたは確かですか。私は、あなたのスクリプトの行をチェック

$Conn = New-Object System.Data.SqlClient.SqlConnection("xxxx") 

私はあなたが注意を払う必要がある一つのことと思いますが、デフォルトではこのofficial document

によると、ワークフローで定義されている変数は ではありませんInlineScriptスクリプトブロックのコマンドに表示されます。 ワークフロー変数をInlineScriptに表示させるには、$ Usingスコープ 修飾子を使用します。 $ Usingスコープ修飾子は、InlineScriptの変数 ごとに1回だけ必要です。

$SqlUsername$SqlPassをインラインスクリプトで使用する場合は、次の行を使用する必要があります。

inlinescript { 

# Get the username and password from workflow 
$ServerName = $Using:SqlUsername 
$Password = $Using:SqlPass 
    ...... 
} 

詳細については、Azure Automation: Your SQL Agent in the Cloudを参照してください。

+0

Azureからアプリケーションの洞察を引き起こす問題があります。私のパワーシェルISEで動作します。 AzureのオートメーションでDLLをどのように参照するのですか? –

関連する問題