お問い合わせ

メールでのお問合せ

メール

admin@foliates.biz

電話でのお問合せ

電話050-1741-0103
2025.03.04

SAP Basis観点でSAP ERPと外部APIの通信トラブル発生時の調査方法 ITコンサルタント馮 壮

サムネイル

SAP Basis観点でSAP ERPと外部APIの通信トラブル発生時の調査方法(OSレイヤ含む)について少しお話したいと思います。

SAP ERPと外部APIの通信トラブルを調査する際は、OSレイヤ・ネットワーク・SAPレイヤ・アプリケーションログ の順に問題を特定することが重要です。

1. まずは「どこで問題が発生しているか」切り分ける

通信トラブルは クライアント側(外部API)・ネットワーク・サーバー側(SAP ERP) のどこで問題が発生しているかを特定するのが重要です。

チェック項目/調査ポイント

・通信自体が失敗しているか? 
 ping, telnet, traceroute, netstatなどのコマンドを使用してポートなどが開いているかを確認
 AWS環境ならもし、通信ができない場合、セキュリティーポリシーの設定が正しいかを確認

・SAPがリクエストを受信しているか? 
 SAPの ICMログ(SMICM), SAP Gatewayログ(SMGW)を確認

・アプリケーションエラーが発生しているか?    
 SAPトランザクションログ(SM21, ST22, SLG1)を確認

・APIレスポンスが異常か?    
 APIレスポンスのHTTPステータスコードを確認

 2. OSレイヤの調査(Linux/Windows)

通信の問題がある場合、まずはOSレベルでの接続確認を行います。

■ネットワーク接続の確認

1) ping で通信可能か確認(ICMP)
 ping <SAPサーバーのIPアドレス>
     •応答がない場合 → ネットワーク障害、ファイアウォール制限の可能性あり
     •応答があるが接続できない場合 → ポート制限の可能性あり

2) telnet で特定のポートに接続できるか確認
 telnet <SAPサーバーのIPアドレス> <ポート番号>
 例)SAP Gatewayの8443ポートに接続できるか確認
 telnet 192.168.1.100 8443
     •成功(画面が黒くなる) → ネットワーク的には問題なし
     •失敗(接続エラー) → ポート制限 or SAPサービスが起動していない

telnetが実装していない場合、powershellのコマンドtest-netconnectionを使用して、確認可能
例)SAP Gatewayの8443ポートに接続できるか確認
test-netconnection 192.168.1.100 -port 8443

3) traceroute で通信経路を確認
 traceroute <SAPサーバーのIPアドレス>  # Linux
 tracert <SAPサーバーのIPアドレス>    # Windows
     •途中で途切れている場合 → その地点のルーターやファイアウォールで通信がブロックされている可能性あり

■ファイアウォール・ポートの確認

1) OSのファイアウォール設定確認(Linux)
 例)sudo iptables -L -n
 例)sudo firewall-cmd --list-all   # RHEL/CentOSの場合
     •必要なポート(443, 8443, 33xx など)が開放されているか確認
     •もしブロックされていたら、ポートを開放

 例)sudo iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
 例)sudo systemctl restart firewalld

2) Windowsのファイアウォール設定確認
 Get-NetFirewallRule -DisplayGroup "SAP"
     •必要なポートが開放されているか確認
     •ポート開放
  例)New-NetFirewallRule -DisplayName "Allow SAP" -Direction Inbound -Protocol TCP -LocalPort 8443 -Action Allow

3) netstat でポートの使用状況を確認
 netstat -tulnp  # Linux
 netstat -ano    # Windows
     •SAPのサービス(ICM, Gateway)がリスニング状態になっているか確認

■DNS・名前解決の確認
SAPシステムにホスト名で接続する場合、DNSが正しく設定されているか確認
nslookup <SAPサーバーのホスト名>
host <SAPサーバーのホスト名>  # Linux
    •解決できない場合 → /etc/hosts に直接記述するか、DNS設定を修正
    •もし、AD環境の場合、ドメイン参加しているか

 例)echo "192.168.1.100 sapserver" | sudo tee -a /etc/hosts

3. SAPレイヤの調査

OS・ネットワークレベルで問題がなければ、SAP側のログを確認する。

■SAP ICMログ(SAP Webサービス, OData)
ICM(Internet Communication Manager)が正しく動作しているか確認する
SAP GUI で SMICM を実行 → ログ(Shift+F6) を開く
    •HTTP error 500 → SAPアプリケーション側のエラー(ST22をチェック)
    •Connection refused → SAP ICMがリスニングしていない → icm/server_port_0 の設定を確認する
※HTTPSの通信を利用する場合、下記のパラメータのコンフィグ設定が必要
例)icm/server_port_1= PROT=HTTPS,PORT=443$$,TIMEOUT=90,PROCTIMEOUT=1800

■SAP Gatewayログ(RFC通信エラー)
RFC通信が失敗する場合、SMGW でログを確認する
SAP GUIで SMGW → トレース(Shift+F5) を開く

■SAPのシステムログ
SAP GUIで SM21 を実行
    •Connection error → ネットワーク問題
    •RFC_NO_AUTHORITY → 認証エラー(ユーザー権限を確認)

■ABAPダンプログ
SAP GUIで ST22 を実行し、エラーダンプを確認
    •TIME_OUT → 通信の応答が遅すぎる(タイムアウト設定を増やす)
    •SYSTEM_FAILURE → SAPの処理エラー(プログラム側を修正)

4. APIのレスポンス確認

外部APIの通信が成功しているが、期待通りのレスポンスが返ってこない場合は、HTTPステータスコードを確認する。
例)curl -v -k -X GET "https://sapserver:8443/sap/opu/odata/SAP/ZAPI_SRV/"

HTTPステータス説明
200 OK    正常
401 Unauthorized 認証エラー(OAuth, Basic認証の確認)
403 Forbidden ユーザー権限エラー
404 Not Found APIのURLが間違っている
500 Internal Server Error SAP側のエラー(ST22で詳細を確認)

 トラブルシューティング手順まとめ

1: OSレイヤ(Linux/Windows)
 ping, telnet, traceroute でネットワーク確認
 netstat, iptables, firewall-cmd でポート確認
2: SAPレイヤ(ICM, Gateway)
 SMICM, SMGW, SM21, ST22 でログ確認
3: APIレスポンス確認
 curl, Postman でステータスコード確認

この手順に沿って調査すれば、SAP ERPと外部APIの通信トラブルを効率的に特定できます。
しかし、プロジェクトごとにシステム構成が異なる為、(例えば外部APIとSAP ERPシステムの間にDispatcherが存在する場合)DispatcherでのHttpsなどの許可と設定確認も必要です。

以前私が経験したプロジェクトで、外部APIとSAP ERP間の通信エラーが発生したことがありました。
その際ERP側に原因があると考え、SAP Basisに調査を依頼しましたが、結果、外部APIの設定が足りないことが原因でした。
ERPのみならず、外部APIの設定も確認することが肝要です。