Zabbix + SoapUI = Webサービス監視

現在、一般的な問題を解決するために使用しているさまざまな開発者のアプリケーションとソフトウェアシステムが多数あります。 アプリケーション間のデータ交換と対話は、Webサービスによって提供されます。 多くのツールもリリースされており、作業をテストし、ツールとクライアントアプリケーション間の相互作用をデバッグします。 最も人気のあるものはSoapUIです。SOAP / WSDL、REST、HTTP(S)、JDBS、JMSをサポートし、テストをより簡単かつ視覚的にするツールセットを備えています。 SoapUIはテストサービスおよびテストクライアントとして機能し、サブシステムの統合をテストできます。 ツールの詳細については、開発者の公式Webサイトをご覧ください







1台のコンピューターと一連のアプリケーションを使用して問題を解決すると、PCの故障またはプログラムの1つの障害がすぐに検出されます。 しかし、組織に多くのハードウェアおよびソフトウェア製品がある場合はどうすればよいでしょうか? 監視することは物理的に難しく、非常に費用がかかります。また、すべての空き時間をチェックしてすべてが正常かどうかを確認します。 この問題を解決するために、専門のソフトウェアシステムが助けになります。インターネット上では、Zabbixがその1つです。



このソフトウェアパッケージは、さまざまなネットワークパラメータとハードウェアパフォーマンスを追跡するように設計されています。 監視要素が破損した場合、Zabbixは電子メールとSMSを介して関係者に通知できます。 Zabbixの詳細については、開発者の公式Webサイトをご覧ください



状況を想像してください。 同社は、Zabbixが監視する多くの技術ツールと、独自の設計ではなく他のIT企業のさまざまなアプリケーションを使用しています。 これらのソリューションの一部またはすべては互いに関連しており、1つの問題を解決します。 この一連の要素の障害をタイムリーに検出し、問題が発生した場所をすばやく見つけるために、Webサービスの監視を構成する必要があります。

オプションは何ですか?



最初のオプション-Zabbix機能を使用して、Web監視を設定します



このガイドは、Zabbixの使用方法に関するものではないため、手順を簡単に説明します。



スクリプトを作成します。

設定-Web-スクリプトの作成。







[スクリプト]タブで、[データ項目グループ]および[名前](スクリプト)フィールドに必ず入力してください。







[ステップ]タブに移動し、スクリプトステップを追加します。 フィールドに入力します:ステップ名、URL、応答コード。



「URL」に目的のWebサービスのアドレスを入力します: http:// Host:port / Service_name



「Answer Code」に「 200 OK ( "good")」と入力します。 すべてのHTTPステータスコードのリストはここにあります。







次に、作成したスクリプトのトリガーを構成します。







以下の図に示すように、必須フィールドにトリガー名と式を入力します。







その結果、何が得られましたか? スクリプトで指定されたアドレスでページをポーリングするWeb監視要素-「テスト」、およびWebサービスが利用できなくなるとすぐに動作するトリガーを作成しました(つまり、監視要素「テスト」は「200」以外のコードを受け取ります) )



Webサービスが利用可能であることを確認する以外に何も必要ない場合、これで十分です。 ただし、可用性だけでなく作業の正確さも追跡する必要がある場合、この方法は機能しません。



2番目のオプションは、ZabbixとSoapUIで「友達を作る」ことです。



すぐに明確にします:ZabbixサーバーはLinuxマシンに展開されます。



Zaapixサーバーが回転しているマシンにSoapUIがすでにインストールされていると想定しています。 たとえば、クライアントの要求に応じて特定のデータ構造(フィールド名を持つセクションとデータを持つセクション)を返す唯一のgetScoreメソッドを持つSoap Webサービスを使用します。







Webサービスが正しく機能していることを理解するには、基準を設定する必要があります。

A)メソッドは正しい答えを返します。

B)メソッドは、フィールドセクションのフィールドの正しい構成を返します。

B)メソッドは空でないデータセットを返します(データセクションがいっぱいです)。

D)フィールドとデータのセクション内のフィールドの数が等しい。



最初に行うことは、テスト自体を作成することです。これを使用して、Webサービスの正確性を確認する予定です。 SoapUIを使用すると、Webサービスを完全にテストするためのテストスクリプトを作成できます。







上記のスクリーンショットでわかるように、基準AおよびBによるチェックは、SoapUI標準ツールを使用して実装されています。 基準BおよびDに従ってチェックを実装するには、SoapUI要素「Groovy Scripts」を使用して「シャーマンをプレイ」する必要があります。







def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context ); step=context.testCase.getTestStepAt(1); def holder = groovyUtils.getXmlHolder(step.name+"#Response"); holder.declareNamespace("scor","http://xml.spss.com/scoring-v2") ; holder.declareNamespace("rem","http://xml.spss.com/scoring-v2/remote") ; def columnNamesNode = holder.getDomNodes("//scor:columnNames/scor:name"); def rowValuesNode = holder.getDomNodes("//scor:rowValues"); def ValuesNode = holder.getDomNodes("//rem:getScoreResponse[1]/scor:scoreResult[1]/scor:rowValues[1]/scor:value"); int countNames = columnNamesNode.size(); int countRowValues = rowValuesNode.size(); int countValues = ValuesNode.size(); assert   countRowValues>0 : log.error("The Node with name \"rowValues\" is not found in the Response"); assert   countNames==countValues : log.error ("The count of elements of the node \"columnNames\" doesn't coincide with count of  elements  of the node \"rowValues\"!");
      
      





これで、Webサービスの正確性を検証するためのテストスクリプトの準備ができました。 ZabbixとSoapUIが連携して動作するようにすることは残っています。



SoapUIテストはコンソールから実行できます。 この機会を利用してみませんか?



以下は、さまざまなサービスを監視するためのスクリプトのリストです。



 #!/bin/sh ##   SoapUI pathSoapUIDirectory=/usr/local/soapUI/bin/ ##    Zabbix pathZabbixDirectory=/etc/zabbix ## ,    SoapUI   - pathSoapUiProjectWithName=$pathZabbixDirectory/WebTest/"$2.xml" ##   ,      - pathParentReportDir=/var/www/zabbix/SoapReport ##   ,      - c     pathReportsDirectory=$pathParentReportDir/"$2" ##         .   ,     ,           pathReportsDirectoryForHost=$pathReportsDirectory/"$1" ##              -,         . if [ -d "$pathParentReportDir" ]; then chmod 666 "$pathParentReportDir" else mkdir "$pathParentReportDir" chmod 666 "$pathParentReportDir" fi if [ -d "$pathReportsDirectory" ]; then chmod 666 "$pathReportsDirectory" else mkdir "$pathReportsDirectory" chmod 666 "$pathReportsDirectory" fi if [ -d "$pathReportsDirectoryForHost" ]; then chmod 666 "$pathReportsDirectoryForHost" else mkdir "$pathReportsDirectoryForHost" chmod 666 "$pathReportsDirectoryForHost" fi ##   ,   SoapUI   ,    .     searchfile=$pathReportsDirectoryForHost/"alltests-fails.html" ## host:port/service_name endPoint="$3" ##   ,      ( Excel),   pathTestdataDirectory=$pathZabbixDirectory/WebTest/TestData/"$6" ##    - Excel workSpaceName="$7" ##      testSuiteName="$4" ##      testCaseName="$5" ##    ,       ,     SoapUI commandString="sh $pathSoapUIDirectory/testrunner.sh -e $endPoint -s $testSuiteName" if [ -n "$testCaseName" ] then commandString=${commandString}" -c $testCaseName" fi commandString=${commandString}" -r -j -f $pathReportsDirectoryForHost" if [ -n "$pathTestdataDirectory" ] then commandString=${commandString}" -P pathTestData=$pathTestdataDirectory -P varSpace=$workSpaceName" fi commandString=${commandString}" -I $pathSoapUiProjectWithName" ##     zabbix cd /home/zabbix $commandString > $pathReportsDirectoryForHost/"$2RunLogs.txt" ###For Debug### #errorString="### ErrorCode: 1 - error of start of the project, 2 - Error of assertions of the tests, 0 - All ok. The returned code:" #echo "$errorString "$? >> /tmp/"$2RunLogs.txt" if [ $? -ne 0 ]; then echo "ErrorOfRunProject" else if [ ! -f "$searchfile" ] then echo "FileNotFound" else if grep -w "Failure" "$searchfile" > /dev/null; then echo "TestFailure" else echo "OK" fi fi fi
      
      





このスクリプトは、Zabbixが表示するために/ externalscriptsフォルダーに配置する必要があります。これは、デフォルトでは外部スクリプトがこのフォルダーにある必要があるためです。 この場合、スクリプト「RunTestService.sh」は「/ etc / zabbix / externalscripts」にある必要があります。 実行するには、スクリプトにアクセス権を付与する必要があります。



 sudo chmod 755 /etc/zabbix/externalscripts/RunTestService.sh
      
      





このスクリプトで動作するようにZabbix自体を構成することは残っています。 これを行うには、「外部検証」タイプのデータ項目を作成する必要があります。







スクリプトはテキスト値を返すため、「情報タイプ」で「テキスト」を指定する必要があります。

「キー」は次のようになります。



 RunTestService.sh["{HOSTNAME}","ScoringProcessTests","{$SCORING.ENDPOINT}","getScoreTestSuite","getScoreTestCase"]
      
      





ここで:

「RunTestService.sh」-スクリプト。

「{HOSTNAME}」-異なるホスト上の同じサービスの個別のレポートにサービスがデプロイされるホストの名前。

「ScoringProcessTests」-WebサービスをテストするためのSoapUIプロジェクトの名前。

「{$ ENDPOINT}」-WebサービスのURL。

「GetScoreTestSuite」-SoapUIプロジェクト内のシナリオのテストスイートの名前。

「GetScoreTestCase」-SoapUIプロジェクトのテストスクリプトの名前。



Zabbixが検出されたWebサービス障害を報告するために、トリガーを設定する必要があります。







データアイテムが「OK」以外の値を受け取るとトリガーがトリガーされ、「Zabbix」はインターフェースに障害検出の事実を表示し、メール、SMS、またはその他の手段で関係者に通知します。 通知方法は、ユーザーのニーズによって異なります。



したがって、ZabbixとSoapUIはそれぞれ個別に膨大な機能セットを無料で提供します。 それとは別に、これらの製品は、連携して実行できるタスクを解決できません。 このバンドルを実装する他の方法は、誰もが自分で思い付くことができます。



PS:先日、Centos 7にゼロからZabbixを展開し、上記のアルゴリズムを使用して監視を設定していました。 私は多くの問題を解決できる多くの詳細を明らかにしました。



1.正常に動作するには、X11が必要です

2. SoaupUIPRO 5.1.1以降。 (リンクが必要な場合はPMに連絡してください))))

3.「ErrorOfRunProject」スクリプトの応答がzabbixに返されることがありますが、ユーザーzabbixの下のコンソールからはうまくいきます。 これは、ユーザーzabbixにsudoの下でSoapUIを実行する権限を付与することで解決します。これには、ファイルの最後に/ etc / sudoersの形式の行を追加します。

 zabbix ALL=(ALL) NOPASSWD: /usr/bin/java, /usr/local/SmartBear/SoapUI-Pro-5.0.0/bin/testrunner.sh, /usr/local/SmartBear/SoapUI-Pro-5.0.0/bin/soapui-pro.sh
      
      






All Articles