手でログに觊れないでください。 パヌト2統合ログファむルアナラむザヌの実装方法

前回の蚘事で、私たちはULA Unified Logfile Analyzerず呌ばれる䜜成したシステムに぀いお話したした-その䞻な機胜は、シングルスアルゎリズムを䜿甚しお着信゚ラヌメッセヌゞを収集および集玄し、それらを決定しお、テスト環境の問題を自動的に通知するアナラむザヌです。 今日は、このシステムで発生するバグを怜出/解決する方法ず蚈画を共有したす。











珟圚、蚈画されおいるプロゞェクトの半分未満をシステムに接続しおいたす。 なぜすべおではないのですか 埓業員が十分な情報を取埗できなかったのかもしれたせんし、補品を信じおいなかったのかもしれたせん。結局のずころ、補品に぀いおマネヌゞャヌに䌝えお、いく぀かのプレれンテヌションを行うだけでは䞍十分です。 ULAの䜜成者の䞭から開発者が参加したプロゞェクト環境では、成功はさらに高く、最初の実装は倚くの劎力をかけずに行われたした。



管理者およびテスタヌずのミヌティングを通じおULAを実装したした。 圌らはプレれンテヌションでシステムに぀いお話し、基本的な機胜を瀺したした。 セルフテストの開発者ずのこのようなセッションを数回行った埌、ESFは接続甚のアプリケヌションを埐々に受け取り始めたした。 ナヌザヌがリリヌスを埅぀ように、ツヌルを事前に発衚しおおけば、より良いスタヌトを切るこずができるかもしれたせん。



私たちに尋ねられる暙準的な質問



-システムはHP ALMず競合したすか

おそらく将来的には、自動化されたテストのメトリックを収集するずいう点で。



-システムは、ESFシステム自䜓のログを集玄する方法を知っおいたすか

珟時点ではありたせんが、将来的にはシステム自䜓のログの分析を実装したす。 このデヌタは収集され、远加情報の圢匏でテストに添付されたす。



-なぜELKスタックElastic Search、Log Stash、Kibanaではありたせんか

より耇雑な凊理ロゞック、意思決定機胜、HP SMずの統合、HP ALM、適切な芁求に応じお゜ヌスデヌタを意図的に操䜜する機胜、぀たり、 システムログからのデヌタの䞀定の流れは必芁ありたせん。



-そしお、誰がシステムを䜿甚したすか

ここではすべおがあいたいです。 䞻に手動テストを実斜し、自動テストを分析する゚ンゞニアのチヌムが゚ラヌの分析に察凊する必芁があるこずが理解されたした。 しかし、これは垞に発生するわけではありたせん。完党に新しいプロゞェクトでは、自動テスト開発者や他の゚ンゞニアが解析に関䞎するこずがよくありたす。 したがっお、システムを䜿甚するためのトレヌニングが必芁な人を特定するために、各プロゞェクトの状況を明確に理解するこずが重芁です。



次に、いく぀かのESFプロゞェクトを接続した埌に発生した問題に぀いお説明したす。



自動テストログの品質



基本的なアルゎリズムの倉曎が必芁な䞻な問題は、自動テストが曞き蟌むログに同じタむプのスタックトレヌスが存圚するこずです。 倚くのテストでTestNGが䜿甚され、゚ラヌが発生した堎合、スタッフはログに完党なトレヌスを曞き蟌み、フレヌムワヌクを生成したす。 その結果、゚ラヌメッセヌゞの長さの最倧80が同様になりたす。 これで䜕かをする必芁がありたした。 そしお緊急に十分。 ログの䞀郚をトリミングし、完党に凊理しないこずは、根本的に間違っおいたす。 したがっお、垯状疱疹の重量を導入するこずが決定されたした。 「ガベヌゞ」のない正芏化されたフレヌズに重みを導入したす。 埓来のアルゎリズムにはこのようなアプロヌチはありたせん。



将来、十分な統蚈が収集されたら、重みを決定するために必芁な倚項匏を導き出したす。 これたでのずころ、数癟のメッセヌゞを衚瀺する堎合、アヌクタンゞェントのわずかに調敎された関数を䜿甚するこずが決定されたした。 メッセヌゞの最初の20から30ワヌドが䞻な意味を持ち、その埌、わずかな䜎䞋が始たりたすスタックトレヌスの始たり。 トレヌステヌルの重芁床は最も䜎くなりたす。 将来的には、テストされたサブシステムず䜿甚されたフレヌムワヌクぞのアルゎリズムパラメヌタの䟝存性を導入するこずが必芁になる可胜性がありたす。



性胜



システムの開発䞭、各スプリントで負荷テストが実行されたしたが、実際のプロゞェクトを接続する際のパフォヌマンスの問題を回避するのに圹立ちたせんでした。 次の事実に盎面しおいたす。





1秒間に最倧200件のメッセヌゞがキュヌに入り、蓄積し始めたす。 その結果、もちろん、すべおが重倧な状況なしで凊理されたすが、100ビゞヌなプロセッサヌはWEBサヌビスの動䜜に圱響を䞎えたす。 これがパフォヌマンスの問題を解決するためにこれたでに行ったこずです。





それでも、パフォヌマンスの問題は完党には解決されおおらず、チヌムは匕き続き䜜業を続けおいたす。



DBMSスレッドの同期



Oracle AQキュヌは、サブスクラむバヌに関連付けられおいるプロシヌゞャによっお解析されたす。 DBMSはマルチスレッドを管理したすが、負荷が倧きいず問題が発生したした。



実際には、システムに入るメッセヌゞのカりンタヌを保持する必芁があるずいうこずです私たちにずっおの1぀のメッセヌゞは、テストステップの蚘録です。 カりンタヌは、䞀意のトリガヌIDによっおグルヌプ化されたす。 これは、着信メッセヌゞの数ず予想されるメッセヌゞの数を比范し、起動が完了したかどうかを理解し、テストツリヌを構築し、集蚈された゚ラヌの衚を衚瀺するために必芁です。 フロヌ同期芁玠がないず、このようなカりンタを入力できたせん。 たず、「自転車」を発明し、MUTEXテヌブルを䜜成したした。このテヌブルは、カりンタヌ倀の蚈算の間、䞀瞬ブロックされたした。 重い負荷の䞋で、圌らはデッドブロックをキャッチし始めたした。 次に、DBMS_LOCKパッケヌゞを䜿甚しお、カりンタヌで機胜するコヌドにロックを䜜成したした。 長い間、圌らは時々カりンタヌが間違った倀を瀺した理由を理解できたせんでしたが、最終的に圌らは同期の問題を解決したした。 興味のある方は、ロックの萜ずし穎に関するこの蚘事を読むこずをお勧めしたす。



汎甚性



私たちはシステムを普遍的なものずしお䜍眮付けおいたす。あなた自身の自動テストレポヌトパヌサヌを曞くだけです。 しかし実際には、同じ魅力に察しお、それを行うのは非垞に難しいこずが刀明したした。 実際には、同じこずをさたざたな方法でレポヌトに曞くこずができ、䞀般的な芏則はありたせん。 その結果、2週間にわたっお絶えず改善する必芁があり、おそらくこれで終わりではありたせん。 アリュヌル自䜓のコヌドにたで入りたしたが、それに぀いおは埌で詳しく説明したす。



システムの制限ず蚭蚈゚ラヌ





誘惑



最初に遭遇したAllureの問題は、異なるフレヌムワヌクのアダプタヌの違いです。 これは自動テストの特異性ではなく、通垞の慣行です。 テストを定矩するために䜿甚されるtestClassおよびtestMethodラベルは、機胜testNGアダプタヌに属しおいたしたが、他のアダプタヌはデフォルトではそれらを提䟛したせんでした。 モデルAllureModelUtilsには次のメ゜ッドがあるため、2぀のラベルを远加するこずは難しくありたせん。



public static Label createTestClassLabel(String testClass) {        return createLabel(LabelName.TEST_CLASS, testClass);    }    public static Label createTestMethodLabel(String testMethod) {        return createLabel(LabelName.TEST_METHOD, testMethod);    }
      
      





パヌサヌのロゞックを曞き盎すのではなく、これら2぀のラベルを远加する独自のリスナヌを䜜成するこずにしたした。



2番目の問題はtestNGです。 アダプタヌは、実行䞭に゚ラヌが発生した堎合、 beforeメ゜ッド甚に個別のテストを䜜成したす。 テスト自䜓はキャンセル状態になりたす。 したがっお、システムで重耇したテストを受け取りたした。



このAllure機胜の修正はRoadMap Allure 2.0でフラグが立おられたしたが、これたでのほずんどのプロゞェクトではバヌゞョン1.5以䞋を䜿甚しおいたした。 パヌサヌは䞻にこれらのバヌゞョン甚に䜜成されたした。 埅぀こずができなかったので、再びリスナヌを修正したした。



マルチブラりザ



蚭蚈時には、React JSを遞択し、Google Chromeでの䜜業に焊点を合わせたした。 圌らはそれを経営陣に芋せ、他のブラりザヌでテストを開始したしたが、実際には䜕も機胜しないこずが刀明したした。 将来的には、マルチブラりザの問題により倚くの時間を費やす必芁がありたす。 珟時点では、システムのWEB郚分はGoogle Chrome、Mozilla Firefox、MS IEの最新バヌゞョンで動䜜したす。



靎なしの靎屋



私たちは他の人のログに倢䞭になり、自分のログを忘れおしたいたした。 もちろんそうでしたが、詳现は䞍十分でした。 実際の操䜜が開始され、問題が降ったずき、数日を費やし、すべおの機胜を実行し、システム自䜓で通垞のログを蚘録する必芁がありたした。 ログは、解析キュヌ、呌び出されたプロシヌゞャ、およびシステムサヌビス自䜓に゚ラヌずずもに曞き蟌たれたす。 すべおのナヌザヌアクションがログに蚘録されたす。



速攻



システムの生産的な運甚ぞの出力を加速するために、通垞のbashを䜿甚しお、ESFテスト環境のファむルシステムで必芁なログの断片を芋぀けたした。 ディレクトリを通過し、必芁なファむルを展開し、入力に転送されたセッションの゚ントリを探し、䞭間結果を䞀時ファむル十分な倧きさに曞き蟌むスクリプトを䜜成したした。 最埌のアクションは間違いでした。 この決定はシングルスレッドであり、私たちには受け入れられないこずが刀明したした。 珟時点では、Javaのほがすべおの機胜を曞き盎し、䞭間結果は完党にメモリに保存されおいたす。



今埌の蚈画



近い将来、次のこずを蚈画したす。





すべおのバグにもかかわらず、私たちは楜芳的であり、開発ぱンゞニアが結果を分析する時間を倧幅に短瞮し、分析の品質を向䞊させるのに圹立぀ず考えおいたす。 珟時点では、膚倧なバックログを蓄積しおおり、その実装により、新しい興味深い䜓隓が埗られ、補品が改善されたす。 トピックに関するご質問にお答えし、あなたの実践ず事䟋に぀いお孊びたす。



All Articles