1

サービス定義でProgramEntryPointを設定することによって構成された、.NET 以外のワーカー ロールを使用しています。これは、Java と Python で記述された私のアプリケーションに.NETコードがないことを意味します。

ワーカー ロールをローカルで実行すると、Windows Azure コンピューティング エミュレーター アプリケーションを開いて、ワーカー プロセスの標準出力とエラーを確認できます。

自分の Azure インスタンスにリモート デスクトップ接続するとき、同じ情報をどこから取得すればよいかわかりません。標準出力とエラーはどこにありますか?

4

2 に答える 2

1

上記の質問に直接答えるには:

<ProgramEntryPoint commandLine="run.bat >> app.log 2>&amp;1" ... "/>

コンピューティングエミュレーターで上記のコマンドを実行すると、コマンドシェルの出力をrun.batが配置されているのと同じ場所にリダイレクトするように求められます。それでおしまい。コンピューティングエミュレーターでワーカーロールを起動すると、CSXフォルダー内の場所から開始され、そこにapp.logが作成されます。

これで、まったく同じコードを取得してWindows Azureにデプロイすると、「run.bat >> app.log」が実行されると、app.logファイルがrun.batと同じ場所に直接作成されます。これは、AzureインスタンスのRDPの後のE:\Approot\にあります。

上記の方法は正しいですが、戦略は正しくありません。それの訳は:

  1. ログはAzureVMに保持されませんAzureVMはリサイクルされます
  2. 確認するには、Azure VMにRDPする必要があります(100個のインスタンスがある場合、ログを取得するために各インスタンスにRDPしますか?)

最善の戦略は、サードパーティのアプリケーションによって作成されたこれらのカスタムログをAzureStorageに直接転送することです。

java.exe、php.exe、pythonなどのカスタムアプリケーションがあるシナリオでは、「ローカルストレージ」フォルダーに直接ログファイルを作成し、ワーカーロール(WorkerRole.cs)でAzure Diagnosticsを初期化して、これらをエクスポートすることをお勧めします。カスタムログファイルをAzureVMからAzureBlobストレージに直接送信します。

ローカルストレージにカスタムログを作成する方法は、ここで説明されています

于 2012-05-31T04:52:48.617 に答える
1

簡単な戦略は、プログラムの出力をファイルにリダイレクトすることです。

<ProgramEntryPoint commandLine="run.bat >> app.log 2>&amp;1" ... "/>

これ&amp;は、XML パーサーを満足させるために重要です。

これを行うと、Windows Azure コンピューティング エミュレーターでログを表示できなくなることに注意してください。ログを確認するには、PowerShell を開いて次のように入力します。

cd E:\approot # or myapp.csx\roles\WorkerRole\approot if running locally
cat -wait app.log

また、この戦略では、ログを表示するために Azure インスタンスにリモート デスクトップする必要があることに注意してください。どちらかといえば、これはすぐに始めるのに最適な方法かもしれません。

于 2012-05-31T04:18:47.810 に答える