Azure アプリケーション整合性スナップショット (AzAcSnap) ツールのトラブルシューティング
この記事では、Azure NetApp Filesと Azure L インスタンスの Azure アプリケーション 整合性スナップショット (AzAcSnap) ツールを使用する場合のイシューのトラブルシューティング方法について説明します。
AzAcSnap コマンドを実行するときに、いくつかの一般的なイシューが発生する可能性があります。 次の手順に従って、イシューのトラブルシューティングを行います。 イシューが解決しない場合は、Microsoft Azure portalからMicrosoft サポートのサービス要求を開き、SAP HANA Large インスタンスキューに要求を割り当てます。
AzAcSnap コマンドが実行されない
ユーザーの環境が原因で AzAcSnap が開始されない場合があります。
CoreCLR を作成できませんでした
AzAcSnap は .NET で記述され、CoreCLR は .NET アプリの実行エンジンであり、IL バイト コードの読み込み、マシン コードへのコンパイル、ガベージ コレクションなどの機能を実行します。 この場合、CoreCLR エンジンの起動を妨げている環境上の問題があります。
一般的な原因は、AzAcSnap オペレーティング システム ユーザー (通常は "azacsnap") のアクセス許可または環境設定が制限されていることです。
エラー Failed to create CoreCLR, HRESULT: 0x80004005
は、azacsnap ユーザーがシステムの TMPDIR
に書き込みアクセスできないことが原因で発生する可能性があります。
Note
先頭が #
のすべてのコマンド ラインは、root
として実行され、先頭が >
のすべてのコマンド ラインは azacsnap
ユーザーとして実行されます。
/tmp
の所有権とアクセス許可を確認します (この例では、root
ユーザーのみが /tmp
に対して読み取りと書き込みを行うことができます)。
# ls -ld /tmp
drwx------ 9 root root 8192 Mar 31 10:50 /tmp
一般的な /tmp
には次のアクセス許可があります。これにより、azacsnap ユーザーは azacsnap コマンドを実行できます。
# ls -ld /tmp
drwxrwxrwt 9 root root 8192 Mar 31 10:51 /tmp
/tmp
ディレクトリのアクセス許可を変更できない場合は、ユーザー固有の TMPDIR
を作成します。
azacsnap
ユーザーの TMPDIR
を作成します。
> mkdir /home/azacsnap/_tmp
> export TMPDIR=/home/azacsnap/_tmp
> azacsnap -c about
WKO0XXXXXXXXXXXNW
Wk,.,oxxxxxxxxxxx0W
0;.'.;dxxxxxxxxxxxKW
Xl'''.'cdxxxxxxxxxdkX
Wx,''''.,lxxxxdxdddddON
0:''''''.;oxdddddddddxKW
Xl''''''''':dddddddddddkX
Wx,''''''''':ddddddddddddON
O:''''''''',xKxddddddoddod0W
Xl''''''''''oNW0dooooooooooxX
Wx,,,,,,'','c0WWNkoooooooooookN
WO:',,,,,,,,;cxxxxooooooooooooo0W
Xl,,,,,,,;;;;;;;;;;:llooooooooldX
Nx,,,,,,,,,,:c;;;;;;;;coooollllllkN
WO:,,,,,,,,,;kXkl:;;;;,;lolllllllloOW
Xl,,,,,,,,,,dN WNOl:;;;;:lllllllllldK
0c,;;;;,,,;lK NOo:;;:clllllllllo0W
WK000000000N NK000KKKKKKKKKKXW
Azure Application Consistent Snapshot Tool
AzAcSnap 7a (Build: 1AA8343)
重要
ユーザーの TMPDIR
の変更は、ユーザーのプロファイル ($HOME/.bashrc
や $HOME/.bash_profile
など) を変更して永続的にする必要があります。 また、システムの再起動時に TMPDIR
をクリーンアップする必要があります。これは通常、/tmp
の場合は自動です。
ログ ファイル、結果ファイル、syslog を確認する
AzAcSnap のイシューを調査するための最適な情報のソースの一部には、ログ ファイル、結果ファイル、システム ログがあります。
ログ ファイル
AzAcSnapログ ファイルは、AzAcSnap 構成ファイル内で logPath
パラメーターごとに構成されたディレクトリに保存されます。 デフォルトの構成ファイル名は azacsnap.json であり、logPath
の既定値は./logsです、つまり、azacsnap
コマンドの実行場所へ./logsディレクトリ関連にログ ファイルは書き込まれます。 /home/azacsnap/logs などのlogPath
を絶対場所に作成すると、azacsnap
をコマンド実行 する場所に関係なく、 azacsnap
常に /home/azacsnap/logsへのログが 出力されます。
ログ ファイル名は、backup
、test
などのアプリケーション名、azacsnap
コマンドの実行-c
に基づいて、またはdetails
、azacsnap.json などのデフォルトの構成ファイル名に基づいてます。 この-c backup
コマンドでは、デフォルトのログ ファイル名は azacsnap-backup-azacsnap.log で、logPath
により構成された ディレクトリに書き込まれます。
この名前付け規則により、複数の構成ファイル (データベースごとに 1 つ) を使用して、関連付けられているログ ファイルを見つけることができます。 構成ファイル名が SID.json の場合、azacsnap -c backup --configfile SID.json
オプションを使用するときのログ ファイル名は azacsnap-backup-SID.log です。
結果ファイルと syslog
-c backup
コマンドを指定すると、AzAcSnap では *.result ファイルへの書き込みが行われます。 *.result ファイルの目的は、成功/失敗の概要を確認することです。 *.result ファイルが空の場合は、失敗と見なします。 *.result ファイルに書き込まれた出力は、logger
コマンドを使用してシステム ログ (たとえば /var/log/messages
) にも出力されます。 *.result ファイル名はログ ファイルと同じベース名を持つため、結果ファイルと構成ファイルおよびバックアップ ログ ファイルを照合できます。 *.result ファイルは他のログ ファイルと同じ場所に置かれ、単純な 1 行の出力ファイルです。
正常に完了した場合の例。
*.result ファイルへの出力。
Database # 1 (PR1) : completed ok
/var/log/messages
への出力。Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
エラーが発生し、AzAcSnap によってエラーがキャプチャされた出力例:
*.result ファイルへの出力。
Database # 1 (PR1) : failed
/var/log/messages
への出力。Dec 19 09:00:30 azacsnap-rhel azacsnap: Database # 1 (PR1) : failed
失敗した 「test storage」 コマンドのトラブルシューティング
コマンド azacsnap -c test --test storage
が正常に完了しないかもしれません。
ネットワーク ファイアウォールを確認する
Azure NetApp Files との通信を検証するときに、通信が失敗するか、タイムアウトになることがあります。問題解決のため、AzAcSnap を実行しているシステムから次のアドレスと TCP/IP ポートへのアウトバウンド トラフィックがファイアウォール規則によってブロックされていないことを確認してください:
https://management.azure.com:443
https://login.microsoftonline.com:443
Azure Cloud Shellを使用して構成ファイルを検証する
サービス プリンシパルが正しく構成されていることをテストするには、Azure portal から Azure Cloud Shell を使用します。 Azure Cloud Shellテストを使用して正しい構成を行い、仮想ネットワークまたは仮想マシン (VM) 内のネットワークコントロールをバイパスします。
Azure portal で Azure Cloud Shell セッションを開きます。
たとえば
mkdir azacsnap
、テスト ディレクトリを作成します。azacsnapディレクトリに 変換 し、最新バージョンの AzAcSnapをダウンロードします。
wget https://aka.ms/azacsnapinstaller
たとえば
chmod +x azacsnapinstaller
、インストーラを実行可能にします。テスト用のバイナリを抽出します。
./azacsnapinstaller -X -d .
結果は次のようにな出力になります。
+-----------------------------------------------------------+ | Azure Application Consistent Snapshot Tool Installer | +-----------------------------------------------------------+ |-> Installer version '5.0.2_Build_20210827.19086' |-> Extracting commands into .. |-> Cleaning up .NET extract dir
Azure Cloud Shell アップロード/ダウンロード アイコンを使用して、テスト用のサービス プリンシパル ファイル、azureauth.json、とAzAcSnap 構成ファイル (azacsnap.json など) をアップロードします。
storage
テストを実行する。./azacsnap -c test --test storage
Note
テスト コマンドが完了するまで約 90 秒かかる場合があります。
Azure Large インスタンスでテストに失敗しました
次のエラーの例は、Azure Large インスタンス 上の azacsnap
を実行したものです:
azacsnap -c test --test storage
The authenticity of host '172.18.18.11 (172.18.18.11)' can't be established.
ECDSA key fingerprint is SHA256:QxamHRn3ZKbJAKnEimQpVVCknDSO9uB4c9Qd8komDec.
Are you sure you want to continue connecting (yes/no)?
このエラーのトラブルシューティングを行うには、yes
に応答しないでください。 ストレージ IP アドレスが確実に正しくなるようにしてください。 ストレージ IP アドレスは、Microsoft 操作チームで確認できます。
このエラーは、通常、AzureLargeインスタンス ストレージ ユーザーが基になるストレージにアクセスできない場合に表示されます。 ストレージ ユーザーがストレージへのアクセス権があるか決定するには、ssh
コマンドを実行してストレージ プラットフォームとの通信を検証します。
ssh <StorageBackupname>@<Storage IP address> "volume show -fields volume"
次の例は、予想される出力を示しています:
ssh clt1h80backup@10.8.0.16 "volume show -fields volume"
vserver volume
--------------------------------- ------------------------------
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00001_t020_vol
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00002_t020_vol
Azure NetApp Files を使用した テストの失敗
次の例は、Azure NetApp Files を使用して azacsnap
を実行したものです:
azacsnap --configfile azacsnap.json.NOT-WORKING -c test --test storage
BEGIN : Test process started for 'storage'
BEGIN : Storage test snapshots on 'data' volumes
BEGIN : 1 task(s) to Test Snapshots for Storage Volume Type 'data'
ERROR: Could not create StorageANF object [authFile = 'azureauth.json']
このエラーのトラブルシューティングを行うには:
azacsnap.json構成ファイルに設定されているサービス プリンシパル ファイル azureauth.json が存在するかどうか確認します。
ログ ファイル、例えば、logs/azacsnap-test-azacsnap.logなどを調べて、サービス プリンシパル ファイルに正しいコンテンツがあるかどうかを確認します。 次のログ ファイルの出力は、クライアントシークレットキーが無効であることを示しています。
[19/Nov/2020:18:39:49 +13:00] DEBUG: [PID:0020080:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000215: Invalid client secret is provided.
ログ ファイル を調べて、サービス プリンシパルの有効期限が切れているかどうかを確認します。 次のログ ファイルの例は、クライアント シークレットキーの有効期限が切れていることを示しています。
[19/Nov/2020:18:41:10 +13:00] DEBUG: [PID:0020257:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000222: The provided client secret keys are expired. Visit the Azure Portal to create new keys for your app, or consider using certificate credentials for added security: https://learn.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials
ヒント
新しいサービス プリンシパルの生成の詳細については、「Azure アプリケーション整合性スナップショット ツールをインストールする」ガイドの「ストレージとの通信を有効にする」セクションを参照してください。
失敗した 「test hana」 コマンドのトラブルシューティング
コマンド azacsnap -c test --test hana
が正常に完了しないかもしれません。
コマンドが見つからない
SAP HANA との通信を設定するときは、セキュリティで保護された通信設定を作成するために、hdbuserstore
プログラムが使用されます。 AzAcSnap には、SAP HANAとのすべての通信にhdbsql
プログラムも必要です。 これらのプログラムは通常 /usr/sap/<SID>/SYS/exe/hdb/ または /usr/sap/hdbclient の下にあり、ユーザーの $PATH
中に存在する必要があります。
次の例では、
hdbsql
コマンドはユーザーの$PATH
の中にありません。hdbsql -n 172.18.18.50 - i 00 -U AZACSNAP "select version from sys.m_database"
If 'hdbsql' is not a typo you can use command-not-found to lookup the package that contains it, like this: cnf hdbsql
次の例では、
hdbsql
コマンドを ユーザーの$PATH
のコマンドに一時的に追加して、azacsnap
が正しく実行できるようにします。export PATH=$PATH:/hana/shared/H80/exe/linuxx86_64/hdb/
インストーラによってこれらのファイルの場所が AzAcSnap ユーザーの $PATH
場所に追加されていることを確認します。
Note
ユーザーの $PATH
に永続的に追加するには、ユーザーの $HOME/.profile ファイルを更新します。
キー に対して無効な値です
このコマンド出力は、接続キーがhdbuserstore Set
コマンドで正しく設定されていないことを 示しています。
hdbsql -n 172.18.18.50 -i 00 -U AZACSNAP "select version from sys.m_database"
* -10104: Invalid value for KEY (AZACSNAP)
hdbuserstore
のセットアップの詳細については、AzAcSnap での概要を参照してください。
失敗したテスト
azacsnap -c test --test hana
でテストを実行して SAP HANA との通信を検証すると、次のエラーが表示されます:
> azacsnap -c test --test hana
BEGIN : Test process started for 'hana'
BEGIN : SAP HANA tests
CRITICAL: Command 'test' failed with error:
Cannot get SAP HANA version, exiting with error: 127
このエラーのトラブルシューティングを行うには:
azacsnap.jsonなどの各 HANA インスタンスの構成ファイルを確認し、SAP HANA データベースの値が確実に正しくなるようにします。
次のコマンドを実行することで、
hdbsql
コマンドがパス内に存在し、SAP HANA サーバーに接続できるかどうかを確認してみてください。hdbsql -n 172.18.18.50 - i 00 -d SYSTEMDB -U AZACSNAP "\s"
次の例は、コマンドが正しく実行されたときの出力を示しています:
host : 172.18.18.50 sid : H80 dbname : SYSTEMDB user : AZACSNAP kernel version: 2.00.040.00.1553674765 SQLDBC version: libSQLDBCHDB 2.04.126.1551801496 autocommit : ON locale : en_US.UTF-8 input encoding: UTF8 sql port : saphana1:30013
十分な権限がないエラー
実行中 azacsnap
に* 258: insufficient privilege
のようなエラーが表示される場合は、 ユーザーは、インストール ガイドに従って適切な AZACSNAP データベース ユーザー特権が設定されていることを確認します。 次のコマンドを使用して、ユーザーの現在の権限を確認します:
hdbsql -U AZACSNAP "select GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE from sys.granted_privileges " | grep -i -e GRANTEE -e azacsnap
このコマンドからは次の出力が返されるはずです:
GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE
"AZACSNAP","USER","BACKUP ADMIN","TRUE","FALSE"
"AZACSNAP","USER","CATALOG READ","TRUE","FALSE"
"AZACSNAP","USER","CREATE ANY","TRUE","TRUE"
エラーによって、Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000
のような、必要な SAP HANA 権限を判断するのに役立つ詳細情報が提供される場合もあります。 この場合は、SAP ヘルプ Portalの GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS の手順に従い、ここでは次の SQL クエリを使用して、必要な権限の詳細を確認することが推奨されています:
CALL SYS.GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS ('99X9999X99X9999X99X99XX999XXX999', ?)
GUID,CREATE_TIME,CONNECTION_ID,SESSION_USER_NAME,CHECKED_USER_NAME,PRIVILEGE,IS_MISSING_ANALYTIC_PRIVILEGE,IS_MISSING_GRANT_OPTION,DATABASE_NAME,SCHEMA_NAME,OBJECT_NAME,OBJECT_TYPE
"99X9999X99X9999X99X99XX999XXX999","2021-01-01 01:00:00.180000000",120212,"AZACSNAP","AZACSNAP","DATABASE ADMIN or DATABASE BACKUP ADMIN","FALSE","FALSE","","","",""
前の例では、DATABASE BACKUP ADMIN
の権限を SYSTEMDB の AZACSNAP ユーザーに追加することで、権限の不足エラーが解決されます。