Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. ロボットフレームワークによる外形監視

Checkmk 合成監視は、商業版の Checkmk で利用できますが、追加のサブスクリプションが必要です。 ただし、最大 3 つのテストは、時間制限なく無料で機能を試すことができます。

Checkmk を使用すると、web サーバーなどの特定のサービスが正常に動作しているかどうかまで、自社のインフラストラクチャを非常に詳細に監視することができます。 Web サイトがサードパーティのクラウドサービスによって運営されている場合、サービス自体にアクセスすることはできませんが、HTTP チェックを使用して Web サイトにアクセスできるかどうかを検証することはできます。 しかし、それはユーザーエクスペリエンスについて何かを意味するのでしょうか?オンラインストアにアクセスできるからといって、ナビゲーションや注文プロセスなどがスムーズに機能しているとは限りません。

そこで、Checkmk 合成監視が役立ちます。 Checkmk は、Robotmk プラグインにより、真のエンドツーエンド監視、つまりユーザーの視点から実行中のアプリケーションを監視する機能を提供しています。 実際のテストは、オープンソースソフトウェアRobot Frameworkによって実行されますCheckmk GmbH もこのソフトウェアのメンバーです。

このオートメーションソフトウェアを使用すると、ユーザーの行動を完全に再現することができます。例えば、オンラインストアでの注文プロセスを「クリックごとに」シミュレートすることができます。 ロボットフレームワークの特別な点は、テストが本格的なプログラミング言語で記述されるのではなく、Open BrowserClick Button などの使いやすいキーワードを使用して定義されることです。Open Browser checkmk.com で Checkmk の web サイトを呼び出すことができます。 その後、複数のテストケースが、いわゆるテストスイート(.robot ファイル形式)にまとめられます。

Robotmk は、これらのロボットフレームワークのテストスイートをホストにデプロイし、Checkmk でサービスとしてその実行と結果を監視することができます。 Checkmk の web インターフェイスでは、ステータス、関連するパフォーマンスグラフ、およびロボットフレームワーク自体のオリジナル評価を確認できます。

1.1. コンポーネント

このエンドツーエンドの監視を実現するには、複数のコンポーネントが連携して動作しています。ここでは、その概要について簡単に説明します。

Checkmkサーバー

Checkmk 合成監視は、データコレクタとしてエージェントプラグインを使用する Robotmk と、Robot Framework プロジェクトをトリガーする Robotmk スケジューラ(監視対象ホスト上)によって実現されています。 合成監視は、Robotmk Scheduler ルールによって有効化および設定されます。 ここでは、実行するテストスイートと、Robot Frameworkがそれらをどのように開始するかを、プランとしてまとめて指定します デプロイが完了すると、ターゲットホスト上のRobotmkスケジューラが、Robot Frameworkスイートのスケジュールされた実行を確実に実行します。

監視では、いくつかの新しいサービスが生成されます。RMK Scheduler Status は、スケジューラ自体の状態、つまりテストスイートが正常に開始できたかどうかを表示します。 また、構成されたすべてのテストプラン(RMK MyApp1 Plan など)およびテストスイートの個々のテスト(RMK MyApp1 Test など)のサービスもあります。 個々のテストのサービスには、元の Robot Framework レポートも含まれます。

さらに、2 つのオプションのサービスルールがあります。Robotmk plan およびRobotmk test は、プランおよびテストサービスの微調整(たとえば、特定のランタイムでステータス変更を適用する)を可能にします。

最後に、KPI 監視用の 2 つのルールがあります。 KPI は Key Performance Indicator(主要業績評価指標)の略で、この文脈では個々のキーワードを意味します。Robotmk KPI discovery ルールを使用すると、キーワードを個別のサービスとして監視に組み込み、Robotmk KPI monitoring を使用して評価することができます。 キーワードの監視の仕組みについては、以下の章で詳しく説明します。

通常のルールとは少し異なりますが、Setup エリアには「Managed robots 」機能もあります。 簡単に説明すると、Checkmk サーバーで管理され、Checkmk エージェントを介して配備されるロボットです。この機能の詳細については、別の章で詳しく説明します。

Robotmk rules in the Setup menu.
Checkmk の Robotmk ルール

試験機

ロボットフレームワークのテストスイートは、Windows (Windows 10 または Server 2019 以降) または Linux ホストで提供できます。 実行するには、ロボットフレームワークは依存関係 (Python、ライブラリ、ブラウザ自動化用ドライバなど) へのアクセスが必要です。 この設定は Checkmk とは独立しており、ポータブルパッケージに宣言的に保存することができます。 これは、オープンソースのコマンドラインツールRCC を使用して実行されます。 このツールは、YAML 形式の設定ファイルを使用して、依存関係や Robot Framework 自体を含む仮想 Python 環境を構築します。 バックグラウンドプロセスとして実行されている Robotmk スケジューラがこの構築をトリガーし、テストを実行します。

パッケージ設定 (robot.yaml)、実行環境の定義 (conda.yaml)、およびテストスイート (tests.robot) を含むこのようなRCC 自動化パッケージもrobot と呼ばれます。 RCC およびスケジューラは Checkmk エージェントとともにデプロイされます。自動化パッケージは、ホスト上で利用可能である必要があります。

RCC の大きな利点は、実行テストホスト自体に Python 環境を設定する必要がないことです。

エージェント自体は、結果、ログ、およびスクリーンショットの転送にのみ必要です。 これにより、テストホストが対応する容量を備えている場合、非常に実行時間が長い、またはローカルで非常にリソースを消費するスイートの監視も可能になります。

テストホストで使用されるオペレーティングシステムについて一言 — Windows システムと Linux システムでは動作が若干異なります。 特に、定義されているファイルパスが異なることにご注意ください。以下の例では、明示的なパスが本当に必要な場合を除き、Windows ファイルパスのみを使用しています。 RCC がオフラインで動作しなければならない場合、Robotmk スケジューラのユーザーコンテキストと必要なコマンドにも違いがあります。ここでは、もちろん、両方のシステムについて明示的に説明します。

また、Checkmk とは直接関係はありませんが、 ロボットフレームワークのブラウザライブラリはPlaywright を使用しており、Playwright は Checkmk がサポートするすべての Linux システムで動作するわけではありません。 対応するシステム要件にご注意ください。

2. Robotmk によるテストスイートの監視

以下では、テストスイートを監視に含める方法について説明します。 例として、2 つの文字列を出力し、その間に少しの間待機するだけのシンプルな Hello World スイートを使用します。 もちろん、この記事ではロボットフレームワークの紹介はしません。ただし、監視でどのデータがどこに行くのかを理解するために、自動化パッケージとデモテストスイートについて簡単に説明します。

この例は RCC に基づいて実行されるため、Windows ホストを個別に設定する必要はありません。rcc.exe はエージェントとともにデプロイされ、C:\ProgramData\checkmk\agent\bin\ にあります。 サンプルスイートはGitHub から ZIP ファイルとしてダウンロードできます。 スイートのディレクトリ:

C:\robots\mybot\
conda.yaml
robot.yaml
tests.robot
Tip

RCC は、他の多くのプログラミング言語に基づくテストスイートも処理できますが、Checkmk で使用するには、ロボットフレームワークの宣言である必要があります。

スイートディレクトリには、2 つの重要なファイルが含まれています。 ファイルconda.yaml には実行に必要な環境の宣言が、ファイルtests.robot (スイート) には実際のテストが含まれています。robot.yaml ファイルは Checkmk では使用されませんが、RCC では必要です。

完全性を期すため、robot.yaml ファイルの内容を簡単に説明します:

C:\robots\mybot\robot.yaml
tasks:
  task1:
    # (task definitions are not required by Robotmk,
    but expected by RCC to be compatible with other Robocorp features)
    shell: echo "nothing to do"

environmentConfigs:
  - conda.yaml

artifactsDir: output

まず、tasks では、実行するタスク(ここではテスト)を定義します。 ただし、この部分は RCC では形式的に必要ですが、Robotmk では使用されません。

Tip

ロボットフレームワークでは、テストとタスク(自動化)が区別されます。 ただし、両者はまったく同じように使用されます。

environmentConfigs 領域では、実際の環境を管理するconda.yaml のみが参照されます。

この場合、環境には Python、Pip、およびロボットフレームワークの依存関係のみがインストールされます。 後で構築される環境は、監視に「RCC environment build status 」として表示されます。 環境が正常に構築されている場合にのみ、テストを処理し、その結果を監視することができます。

C:\robots\mybot\conda.yaml
channels:
  - conda-forge

dependencies:
  - python=3.10.12
  - pip=23.2.1
  - pip:
     - robotframework==7.1

実際のテストスイートは、次のように表示されます。

C:\robots\mybot\tests.robot
*** Settings ***
Documentation Template robot main suite.

*** Variables ***
${MYVAR}    Hello Checkmk!

*** Test Cases ***
My Test
    Log ${MYVAR}
    Sleep 3
    Log Done.

ここでは、MYVAR 変数の値のみが出力され、3 秒間の待機後にDone が出力されます。 変数の値は、後でCheckmkのwebインターフェイスで設定できます。そうしないと、ここで指定したデフォルトのHello Checkmk! が使用されます。

Tip

このテストスイートは手動で実行できます。 そのためには、エージェントと RCC がすでにインストールされている必要があります(または、RCC バイナリーを自分でダウンロードすることもできます)。 まず、tests.robot も置かれているテストスイートのディレクトリに移動します。 次に、C:\ProgramData\checkmk\agent\bin\rcc.exe task shell で RCC シェルを起動します。conda.yaml で定義された仮想環境が作成されます。 次に、robot tests.robot でスイートを起動します。

これは、エージェントプラグインがアクティブになると、Robotmk スケジューラが実行する操作とまったく同じです。

2.1. エージェントプラグインのルールを設定します

Robotmk スケジューラは、Setup > Agent rules > Robotmk scheduler (Windows) にあります。 ルールはかなり広範囲に及ぶため、ここでは空の設定を見てみましょう。

Empty Robotmk scheduler rule.
エージェントプラグインの設定

まず、スケジューラには、すべてのテストスイートが保存されているベースディレクトリが必要です。Base directory of suites に、任意の明確なファイルパスを入力してください。たとえば、C:\robots のように入力します。

Path for test suites.
すべてのロボットフレームワークプロジェクトのベースディレクトリ

現在表示されているParallel plan groups は、Checkmk固有の概念です。

これを説明するには、まず 1 階層下へ移動する必要があります。ここに、項目「Sequential plans 」があります。 このような連続したプランは、どのスイートをどのパラメータで実行するかを定義します。 ロボットフレームワークは、これらのスイートを順番に処理します。 その理由は簡単です。実際には、テストはデスクトップ上で実行される場合があり、複数のテストスイートが同時に実行されて互いに干渉する可能性があるからです(マウスカーソルの制御を奪い合うような状況です)。

プラングループは、順番に実行されるプランをカプセル化したものであり、それ自体は並行して実行されます。 ここでも、その理由は単純です。これにより、デスクトップに依存しないテストスイートを、遅延なく独自のプランで実行することができます。この記事で使用しているテストスイートは、このようなプロセスの良い例です。

ダイアログに戻ります。唯一の明示的な設定は、Group execution interval で設定する実行間隔です。

Execution interval for execution groups.
(並列) プラングループの実行間隔
Important

プラングループ内のプランには、当然ながらそれぞれ独自のランタイムがあります。これは、1 回の実行のタイムアウトと、テストが失敗した場合の繰り返し実行の最大回数によって決定されます。 したがって、プラングループのランタイムは、グループ内のすべてのプランの最大ランタイムの合計よりも長くする必要があります。 プランの最大ランタイムは、次のように計算されます。Limit per attempt × (1 +Maximum number of re-executions)。

それでは、最初のプランを設定しましょう。Application name に任意の名前を入力できます。 この名前は一意である必要はありません。 ここでは、監視するアプリケーションの名前、たとえばOnlineShop 、またはこの例では単にMyApplication という名前を使用するのが適切です。 もちろん、このオンラインストアは、他のテストスイートによって、あるいは同じテストスイートによって異なるパラメータで、複数回テストされる場合もあります。 そのような場合、Variant フィールドを使用すると、名前が同じでも明確な結果を得ることができます。 たとえば、アプリケーションOnlineShop をドイツ語で1回、英語で1回(対応するパラメータを使用して)テストする場合、ここでは対応する略語を使用することができます。 監視は、My OnlineShop_en およびMy OnlineShop_de の結果を返します。

ただし、Relative path to test suite file or folder の指定は必要です。 パスは、上記で指定したベースディレクトリからの相対パスです。たとえば、C:\robots\ の場合はmybot\test.robot となります。 あるいは、ディレクトリ(複数のrobot ファイルを含む)をここで指定することもできます。その場合は、単にmybot と指定します。

Name and path of the suite.
スイートの実行プラン

Execution configuration. Limit per attempt で、テストスイートを実行できる最大経過時間(1回の試行あたり)を定義します。Robot Framework re-executions を使用して、テストが失敗した場合にテストスイートを完全にまたは段階的に繰り返すよう、ロボットフレームワークに指示することができます。 テストスイート内の個々のテストが互いに独立している場合は、時間を節約するには増分戦略が最適です。 一方、テストスイートが「ログイン → 製品ページを呼び出す → ショッピングカートに製品を入れる → チェックアウト」などの論理的なシーケンスをテストする場合は、テストスイートを完全に再処理する必要があります。 最終的には、結果は 1 つだけになります。

完全な再実行の場合、最終結果には、自己完結型のスイートの結果のみが考慮されます。最終的な再実行でテストが失敗した場合、そのテストスイートは失敗とみなされます。 増分再試行の場合、最終結果は最良の部分結果で構成されます。一部のテストが 3 回目の試行で初めて成功した場合、最終結果も成功としてカウントされます。 注意:プラングループ内のすべてのプランの試行回数と最大実行時間の組み合わせによって、そのプラングループの最小実行間隔が決まります。

Configuration of execution runtimes and repetitions.
失敗したテスト/スイートは繰り返すことができます

デフォルトでは、Automated environment setup (via RCC) で RCC による実行が有効になっています。この設定では、2 つの値を入力する必要があります。 まず、RCC では、robot.yaml ファイルの場所を指定する必要があります。 このファイルの主な目的は、Python 環境の設定、つまり Python および依存関係のインストールを担当するconda.yaml ファイルを参照することです。 この指定は、Relative path to test suite file or folder で上記で設定したベースディレクトリを基準としています。 YAML ファイルはサブディレクトリに保存することもできますが、スイートのトップディレクトリに保存することをお勧めします。 上記のベースディレクトリC:\robot\ およびスイートディレクトリC:\robot\mybot に対して、それに応じてmybot\robot.yaml となります。

Python 環境の構築には、以下の時間制限があります。大量のデータをダウンロードして設定する必要がある場合があるため、ご注意ください。 特に、必要なブラウザの場合、数百メガバイトの容量がすぐに蓄積されますが、これは初回の実行時のみです。 RCC は、conda.yaml の内容に変更があった場合にのみ、環境を再構築します。

RCC configuration of the suite.
仮想環境の構築時間制限

Robot Framework parameters では、ロボットフレームワークのコマンドラインパラメータの一部を使用することができます(これらのパラメータは、コマンドrobot --help でも表示されます)。 追加のパラメータを使用する場合は、Argument files オプションを使用してください。 ここで指定したファイルには、任意のロボットパラメータを記述することができます。 個々のパラメータの詳細については、インラインヘルプをご覧ください。

このサンプルプロジェクトでは、Variables オプションのみが有効になっており、値My Value の変数MYVAR が設定されています。 ファイルtests.robot の先頭にあるコマンドLog ${MYVAR} を覚えていますか? これは、対応する参照です。

Command line parameters of Robot Framework.
robot コマンドのいくつかのオプション

Secret environment variables オプションは、ロボットフレームワークのオリジナル機能ではないため、特に注意が必要です。 ここでは、ロボットフレームワークのライブラリ「CryptoLibrary」と組み合わせてパスワード用に、秘密の環境変数を設定することができます。 ここで設定した変数はログには表示されませんが、それぞれのテストホストの Checkmk 設定ファイルにプレーンテキストで書き込まれます。

Option for secret environment variables in the Robotmk scheduler.
CryptoLibrary の秘密パスワード

スイート設定の最後に、3 つのほぼ自明のオプションがあります。

Execute plan as a specific user により、Robotmk を特定のユーザーアカウントのコンテキストで実行することができます。 背景:デフォルトでは、Robotmk は、デスクトップへのアクセス権限のない Checkmk エージェント(LocalSystem アカウント)のコンテキストで実行されます。 ここでは、デスクトップセッションに常にログインし、それに応じてグラフィカルデスクトップアプリケーションにアクセスできるユーザーを指定することができます。

Assign plan/test result to piggyback host を使用すると、プラン/テストの結果を別のホストに割り当てることができます。 たとえば、ロボットフレームワークがオンラインストアの注文プロセスをテストしている場合、その結果は対応する web サーバーに割り当てることができます。

各テスト実行では、C:\ProgramData\checkmk\agent\robotmk_output\working\suites\ にデータが保存されます。 デフォルトでは、過去 14 日間の結果が保持されますが、ここでは大量のデータがすぐに蓄積される可能性があることにご留意ください。 1 回の実行で少なくとも 500 キロバイトのデータが生成されます。たとえば、より複雑なテストスイートや埋め込みスクリーンショットを使用すると、すぐに数メガバイトのデータに膨れ上がる可能性があります。 実行間隔、レポートのサイズ、およびドキュメントの要件に応じて、このような状況では対応する必要があります。

Options for user context, host assignment and automatic cleanup
生成された大量データの自動削除

ここで、このプラングループまたはさらに別のプラングループで、さらにプランを作成することができます。

最後に、Robotmk スケジューラの完全な設定に関連する 2 つのオプションがあります。

RCC profile configuration では、除外するプロキシサーバーおよびホストを指定できます。

Grace period before scheduler starts も非常に便利です。スケジューラは、デスクトップのログオン前に Checkmk エージェントとともに起動します。もちろん、これはデスクトップでのテストはすべて失敗することを意味します。 開始は、猶予期間を使用して手動で遅らせることができます。

Options for proxy server and a grace period for the scheduler start.
「猶予期間」により失敗を防止

これで設定は完了です。プラグインを使用して新しいエージェントをベイクし、手動または自動エージェントアップデートによって配備することができます。

エージェント出力のデータ

エージェントの出力は非常に広範囲に及びます。 エラーメッセージ、ステータス、設定、テストデータは、いくつかのセクションに分けて送信されます。 後者は、robotmk_suite_execution_report セクションに記載されています。以下は、その抜粋です。

mysite-robot-host-agent.txt
<<<robotmk_suite_execution_report:sep(0)>>>
{
    "attempts": [
        {
            "index": 1,
            "outcome": "AllTestsPassed",
            "runtime": 20
        }
    ],
    "rebot": {
        "Ok": {
            "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n
			<robot generator=\"Rebot 6.1.1 (Python 3.10.12 on win32)\"
            generated=\"20240319 16:23:19.944\"
			rpa=\"true\"
            schemaversion=\"4\">\r\n<suite id=\"s1\"
            name=\"Mybot\"
            source=\"C:\\robots\\mybot\">\r\n<suite id=\"s1-s1\"
			name=\"Tests\"
            source=\"C:\\robots\\mybot\\tests.robot\">\r\n<test id=\"s1-s1-t1\"
            name=\"Mytest\"
            line=\"6\">\r\n<kw
			name=\"Sleep\"
            library=\"BuiltIn\">\r\n<arg>3 Seconds</arg>\r\n<doc>指定された時間だけテストの実行を一時停止します。</doc>\r\n<msg
			timestamp=\"20240319 16:23:02.936\"
            level=\"INFO\">3 秒間スリープしました</msg>\r\n<status
			status=\"PASS\"
            starttime=\"20240319 16:23:00.934\"
            endtime=\"20240319 16:23:02.936\"/>"
        }
    },
    "suite_id": "mybot",
    "timestamp": 1710861778
}...

"html_base64":"PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW ...

ここでは 2 つの領域が特に興味深いです。 まず、rebotrebot ツールは、いくつかの部分的な結果から Robot Framework の実際のステータスレポートを作成しました(したがって、re-bot)。 次に、最後の行html_base64 :Robot Framework からの HTML レポートは、base64 エンコードされます。 テストで撮影したスクリーンショットも、この方法で転送されます。したがって、エージェントの出力/データ量は、それに応じて膨大になる可能性があります。

監視のデータ

Robotmk スケジューラとテストスイートが実行されると、サービスディスカバリーによって3 つの新しいサービスが生成されます。

Robotmk-Services im Monitoring
新しく検出された Robotmk サービス

サービス「RMK Scheduler Status 」は、デプロイ直後に 1 つ存在します。 プランおよびテスト用のサービス(ここでは「RMK MyApplication_mybot Plan 」および「RMK MyApplication_mybot Test: /Test: My Test 」)は、関連するスイートが最初に実行されるとすぐに監視に追加されます。

2.2. サービスルールの設定

プランのステータスに関するルールの作成

注意:プランの最大ランタイムは、上記のエージェントルールで定義されています。 これらのランタイムは、Robotmk plan ルールで評価できます。 たとえば、計算されたタイムアウトの 90% に達したら、サービスを「CRIT 」に設定することができます。

Configuration dialog for threshold values for runtimes of test suites.
ランタイムに基づくステータス変更の閾値

[Conditions ] ボックスでは、ルールを特定のプランに制限するオプションがあります。

Dialog with restriction to the test suite 'mybot'.
特定のプランへの制限(オプション

テストステータスのルールを作成する

Robotmk test ルールを使用して、テストスイート内の個々のテストに関する追加データを取得することもできます。 ここでも、テストとキーワードの両方のランタイムを監視するオプションがあります。 キーワードの監視は、Checkmk独自の機能です。 そのため、テストスイートは最大許容ランタイム内で処理されたため、ロボットフレームワークレポートのスイート内部ステータスは「OK 」になる可能性がありますが、Checkmk では、最大許容ランタイムの 80% でステータス変更が発生するため、「WARN 」または「CRIT 」になります。

さらに、Enable metrics for high-level keywords オプションを使用すると、上位キーワードのメトリックを生成することができます。 これは、上位キーワードが「何」を、下位キーワードが「どのように」を記述するようなテスト構成の場合に特に有用です。これにより、より抽象的な評価が可能になります。

この例では、テストの最大ランタイムの閾値は 2 秒と 4 秒です。 その効果は、以下の「監視」の「Robotmk」の章で説明します。

Rule for monitoring keywords with example values.
キーワードメトリックを使用して監視を拡張できます

ここでも、Conditions ボックスに、個々のテスト用の明示的なフィルタオプションがあります。

Dialog with option to restrict to tests.
特定のテストへのオプションの制限

2.3. 監視における Robotmk

監視では、個別のサービスルールを作成していない場合でも、Robotmk スケジューラの状態、および個々のプランとテストのステータスに関するサービスを確認できます。

スケジューラのステータス

スケジューラが実行中で、実行環境を正常に構築している場合、サービス「RMK Scheduler Status 」は「OK 」となります。

Status of the scheduler in monitoring.
RCC は、わずか 1 秒で環境を構築することができました。

この画像では、「Environment build took 1 second.」という注記が表示されています。 Pip とロボットフレームワークを使用して、仮想 Python 環境を 1 秒で構築? これは、RCC の優れた機能によるものです。すでにダウンロード済みのファイルは再利用され、conda.yaml で変更が加えられた場合にのみ、新しい構築が実行されます。 最初の構築には 30 秒以上かかったでしょう。

プランのステータス

プランのステータスは、アプリケーション名とスイートで名付けられたサービス(例:RMK MyApplication_mybot Plan )に反映されます。

Status of the test suite in monitoring.
プランの実行 — 管理者にとって特に重要

テストのステータス

テストの評価は、非常に興味深い部分です。 この画像では、テストのランタイムに上記で設定した閾値(ここでは、WARN ステータスに 2 秒)が反映されていることがわかります。 テスト自体のSleep 3 Seconds 命令によって、より長いランタイムがすでに確保されているため、テストは成功したにもかかわらず、このサービスはWARN に移行しなければなりません。 テストが成功したことは、ロボットフレームワークのレポートで確認できます。このレポートは、ログアイコンからアクセスできます。

Status of the test in monitoring.
特定のスイートの結果 — 開発者にとって特に重要

レポートには、テストおよびテストスイートが正常に実行されたことが明確に表示されます。

Robot Framework report for 'Mybot' test suite.
ロボットフレームワークのログ、ここではオプションのダークモードで表示

データの下部には、個々のキーワードも表示されます。ここでは、たとえば「Log ${MYVAR} 」と、Checkmk でMYVAR に設定された値「My value 」が表示されています。

Robot Framework report at keyword level.
ログファイルは、細部まで展開することができます。

ダッシュボード

もちろん、通常どおり独自のダッシュボードを構築することもできますが、Monitor > Synthetic Monitoring には 2 つのビルトインダッシュボードも用意されています。

Robotmk dashboard in the web interface.
Checkmk 合成監視の概要 (短縮版)

前提条件:ダッシュボードを使用するには、対象のホストでHW/SW インベントリを有効にする必要があります。

3. 管理対象ロボット

これまで、テストスイートはテストホストで既に利用可能になっているというシナリオを想定していました。 しかし、managed robots 機能を使用すると、ロボットを Checkmk サーバーで一元管理し、Checkmk エージェントを介して分散することもできます。

上記の手順から、Robotmk scheduler (Windows|Linux) ルールを使用する既存のロボットの全体的な設定はすでに理解されていると思います。

さらに、パックされたロボットを含むアーカイブファイル(以下を参照)を入力するだけです。 このスクリーンショットでは、Plan Settings の下に、ロボットのアップロードフィールドが表示されています。これは、スケジューラと同じオプションです。Properties.の上部に表示されている名前に注意してください。 この名前は、後でスケジューラでロボットを設定する際に必要となるため、必ず入力してください。

Configuration of a managed robot.

このようなManaged robot を使用するには、再びRobotmk scheduler (Windows|Linux) ルールを使用します。 ただし、ここではロボットの実行をスケジュールする代わりに、Sequence of plans で、あらかじめ設定した目的のロボットを指定するだけです。 必要に応じて、このアプリケーション用に、あらかじめ設定したロボットのプランの設定をここで変更することもできます。 したがって、実際には、この機能は、既知の設定を外部委託し、エージェントによってロボットのアーカイブファイルを配布することに限定される場合がほとんどです。

Configuration of the scheduler with a managed robot.

その後、エージェントは指定されたアーカイブを目的のホストに転送し、robomk_output/managed のエージェントディレクトリに保存します。そこでアーカイブは解凍され、最終的に実行されます。

3.1. ロボットアーカイブの作成

原則として、標準ファイル (robot.yaml, conda.yaml, test.robot) を含むロボットディレクトリ全体を、Windows では ZIP 形式、Linux では tar.gz 形式でアーカイブするだけで済みます。

ただし、このようなテストは Git によって管理されることが多く、その結果、配布すべきではないファイルが定期的に発生します。これらのファイルは通常、gitignore ファイルによって管理されます。 アーカイブをクリーンに保つための補助として、無視するファイルを含まないアーカイブを作成する Windows および Linux 用の 2 つの小さなスクリプトを用意しています。 これらのスクリプトは補助としてのみ使用し、必ず事前にシステムで機能をテストしてください。

Windows:

C:\robots\myrobot>
$FolderName=(Get-Item .).Name
cp -r . "$env:TEMP\"
rm -r "$env:TEMP\$FolderName\$(git ls-files --others --ignored --exclude-standard)"
Compress-Archive "$env:TEMP\$FolderName" "../$FolderName.zip" -Force
rm -r -fo $env:TEMP\$FolderName

Linux:

user@host:~/robots/myrobot$>
folder_name=$(basename "$PWD") && \
temp_dir=$(mktemp -d)/"$folder_name" && \
mkdir -p "$temp_dir" && \
git ls-files --cached --others --exclude-standard | xargs -I{} cp --parents "{}" "$temp_dir" && \
tar -czf "../$folder_name.tar.gz" -C "$(dirname "$temp_dir")" "$folder_name" && \
rm -rf "$(dirname "$temp_dir")"

4. 主要業績評価指標 (KPI) の監視

上記では、上位キーワードのランタイムをテストの一部として監視できることを紹介しました。 しかし、任意のキーワードを個別のサービスとして監視に含めることもできます。 これは、高度に抽象化されたユーザーキーワードに特に有用です。このようなキーワードは、ClickLogなどの複数の単純な(標準的な)キーワードを呼び出す、つまりは基本的に機能として使用されます。 サービスディスカバリーには、Checkmk のパターンとテストスイートのマーカーの 2 つのバリエーションがあります。

パターンベースのディスカバリーでは、必要なキーワードが Checkmk ルールを使用して正規表現として保存されます。

マーカーベースのディスカバリーでは、マーカーはテスト自体のキーワードの直前に直接コード化されます。 これらのマーカーは、Robotmk 独自のライブラリを使用して処理されます。

キーワードデータが監視にどのように入力されるかに関係なく、Robotmk KPI monitoring サービスルールを使用して、そこで設定する必要があります。

4.1. バリエーション 1: パターンによるディスカバリー

このバリエーションでは、テスト自体に変更を加える必要はありません。Robotmk KPI discovery ルールを開き、監視するキーワードを正規表現または非常に具体的な名前として入力してください。

Configuration of keywords as separate services for Robotmk.
キーワードを個別のサービスとして設定する

注意:正規表現が同じテスト内の複数のキーワードと一致する場合、1 つのキーワードのみ認識され、そのサービス状態はUNKNOWNになります(Checkmk は、実際にどのキーワードが一致しているかを認識できないため)。

4.2. バリエーション 2: マーカーによるディスカバリー

マーカーによるディスカバリーを行うには、以下の手順を実行する必要があります。

  1. Robotmk ライブラリをインストールします。

  2. Robotmk ライブラリをスイートにインポートします。

  3. 関連するキーワードの前にマーカーキーワードを配置します。

インストールするには、上記のconda.yamlrobotframework-robotmklibrary を追加する必要があります。 上記のスイートとの変更点は、黄色で強調表示されています。

C:\robots\mybot\conda.yaml
channels:
  - conda-forge

dependencies:
  - python=3.10.12
  - pip=23.2.1
  - pip:
     - robotframework==7.0
     - robotframework-robotmklibrary

テストスイートtests.robot は、ライブラリ(Settings 領域)とマーカーで拡張する必要があります。 KPI は多くの場合、個々のユーザーキーワードを参照するため、キーワードFoobar がここに追加されます(これは、標準キーワードLog を呼び出すだけで、テストケースMy Test によって呼び出されます)。

C:\robots\mybot\tests.robot
*** Settings ***
Documentation       Template robot main suite.
Library             RobotmkLibrary

*** Variables ***
${MYVAR}    Hello Checkmk!

*** Test Cases ***
My Test
    Log      ${MYVAR}
    Sleep    3
    Log      Done.
    Monitor Subsequent Keyword Runtime  discover_as=My user keyword
    Foobar

*** Keywords ***
Foobar
    Log    The foo barred!

Robotmk キーワードMonitor Subsequent Keyword Runtime は、次のキーワード(Foobar )を監視(Checkmk を起動)するためのマーカーです。より正確には、そのランタイムを監視します。 オプションのdiscover_as 引数を使用して、監視するサービスに個別の名前を指定することができます。そのため、キーワードFoobar は、My user keyword というサービス名として監視に表示されます。

パターンベースのディスカバリーと比較した大きな利点は、1 つのテスト内で同じキーワードを明示的に複数回監視できることです。

上記の例に、2 つのFoobar 呼び出しを追加した例です:

C:\robots\mybot\tests.robot
*** Settings ***
Documentation       Template robot main suite.
Library             RobotmkLibrary

*** Variables ***
${MYVAR}    Hello Checkmk!

*** Test Cases ***
My Test
    Log      ${MYVAR}
    Sleep    3
    Log      Done.
    Monitor Subsequent Keyword Runtime  discover_as=My user keyword
    Foobar
    Monitor Subsequent Keyword Runtime  discover_as=Foobar_2
    Foobar
    Monitor Subsequent Keyword Runtime  discover_as=Foobar_3
    Foobar

*** Keywords ***
Foobar
    Sleep    3
    Log    The foo barred!

したがって、Foobar キーワードの 3 つの呼び出しは、監視にMy user keywordFoobar_2 、およびFoobar_3 として表示されます。

4.3. サービスルールの設定

キーワードを監視するためにどちらのバリエーションを使用する場合でも、次のステップは常に評価の設定です。 サービスは、どのランタイムでWARN またはCRIT に移行するべきでしょうか? これを行うには、Robotmk KPI monitoring ルールで対応するレベルを定義します。

Service rule for the evaluation of keywords.
キーワードの評価に関するサービスルール

4.4. 監視におけるキーワード

キーワードサービスは、監視において次の 2 つのパターンのいずれかで表示されます。

  1. パターンベース:RMK MyApplication_mybot Test: /Test: My Test KPI (cmk): Foobar

  2. マーカーベース:RMK MyApplication_mybot Test: /Test: My Test KPI (rf): Foobar

したがって、違いはキーワードの直前に括弧で囲まれた出所の表示のみです。

Pattern- and marker-based keywords in monitoring.
監視におけるパターンベースおよびマーカーベースのキーワード

2 つの Foobar キーワードサービスを含む上記のスクリーンショットに示すように、スイートを多少拡張する必要がありました。

C:\robots\mybot\tests.robot
*** Settings ***
Documentation       Template robot main suite.
Library             RobotmkLibrary

*** Variables ***
${MYVAR}    Hello Checkmk!

*** Test Cases ***
My Test
    Log      ${MYVAR}
    Sleep    3
    Log      Done.
    Foobar
    Monitor Subsequent Keyword Runtime  discover_as=Foobar
    Barfoo

*** Keywords ***
Foobar
    Sleep    3
    Log    The foo barred!

Barfoo
    Sleep    11
    Log    The End of Barfoo

2 つのキーワード「Foobar 」および「Barfoo 」は、監視では「Foobar 」という名前で表示されますが、括弧内の起源の表記によって区別することができます。

同じ名前でリストされている2 つの異なるキーワードの例は、主に起源情報を明確にするために使用されています。

前述のように、discover_as の実際の目的は、1 つのキーワードをテストで複数回呼び出すことができるようにしながら、それぞれの出現を個別に命名できるようにすることです。

5. テスト環境/RCC のオフラインモード

デフォルトでは、RCC は YAML 設定を読み込み、ネットワークから対応するパッケージおよび依存関係をダウンロードして、環境の設定を行います。

しかし、テストを実行するホストがインターネットにアクセスできない、またはアクセスが非常に制限されている場合はどうすればよいでしょうか?

Checkmk、より正確には Robotmk スケジューラは、インターネットに直接接続しなくても RCC 環境を作成できるため、このような場合に役立ちます。 簡単に説明すると、環境は任意のコンピュータで事前に構築され、ZIP アーカイブまたはリモートサーバーから配布されます。

2 つの方法の詳細については、以下をご覧ください。 ただし、これを理解するには、RCC に関する少しの知識が必要です。また、RCC の技術的な内部構造を説明し、この特定の状況では、通常行っているメーカーへの参照を行わない理由についても詳しく説明する必要があります。

5.1. RCC — 簡単な余談

RCC のヒストリー

このツールは、どこから来たのでしょうか? RCC は、もともと Robocorp 社(現在の Sema4.ai)によって開発されました。 Sema4.ai のビジネスモデルは、顧客が独自の スクリプトを実行してビジネスプロセスを自動化できるクラウドベースのプラットフォームです。 RCC は、顧客のサイトとクラウドの両方でまったく同じ仮想環境を作成するための基盤を形成しています。

Checkmk では、RCC を別のユースケースに使用しています。ここでは、ロボットフレームワークのスクリプトが、ローカル(開発)コンピュータと Robotmk テストホスト(Windows または Linux)の両方で実行できる必要があります。

2024年に Sema4.ai が Robocorp を買収する過程で、RCC はライセンスが再取得され、現在は専有ソフトウェアとなっています。 このプロセスは残念ながらあまり透明性が高くなかったため、ここで簡単に説明いたします。

Checkmk に付属のバージョンは、最終的なオープン RCC バージョンをベースにしており、弊社によってメンテナンスされています。 したがって、RCC フォークは現在 Checkmk の不可欠な部分となっており、Checkmk での使用に関連する部分については、こちらにも記載されています。

RCC 環境の配布を担当するツールである RCC リモートサーバーの場合は、少し事情が異なります。 これは RCC のコンポーネントにすぎず、コンパイル時にのみ作成されるもので、独立した製品ではありません。 そのため、Robocorp 社からは、Robocorp プラットフォームに関する非常に具体的なアプリケーション以外、実際のドキュメントは提供されていません。

RCC の内部構造

これらを理解するためには、以下の用語と概念に慣れている必要があります:

用語 説明

カタログ

環境の設計図

仮想環境構築用のテンプレート

Hololib

利用可能なカタログのコレクション

Hololibは、各ユニークなファイルが1回だけ保存され、複数のスペースを作成するために使用できるブループリントのリポジトリです。

スペース

環境のインスタンス

1つのカタログから複数のスペースを作成できます

(共有) Holotree

使用可能なスペースのコレクション

(共有) Holotreeはスペースのストレージであり、各一意のファイルは一度だけ保存され、複数のスペースから利用可能です。

ROBOCORP_HOME

環境変数

RCC が Hololib および Holotree を保存するパス。デフォルトでは、Windows では%HOME%/Appdata/Local/robocorp/ 、Linux では~/.robocorp です。

ROBOCORP_HOME - Checkmk

書き込みアクセスが制限されたセキュアなバリエーション

Checkmk-RCC が Hololib および Holotree を保存するパス。C:\robotmk\rcc_home または/opt/robotmk/rcc_home/

Holotree パス

絶対パス、ROBOCORP_HOME

このパスで、Hololib ブループリントは Holotree スペースにコンパイルされます。環境内のソースコンピュータとターゲットコンピュータで同一である必要があります。

RCCRemote

カタログを提供するサーバー。

通常は RCCRemote-Docker コンテナ経由で動作します。

ROBOCORP_HOME

ROBOCORP_HOME 詳しく確認する必要があります。 この環境変数は、RCC が Hololib および Holotree を保存するファイルパスを定義します。 Hololib 内のすべてのバイナリファイル、つまりテンプレートコレクションは、絶対パス(いわゆる 、 のサブフォルダ)にコンパイルされます。 これは、ロボットを後で実行するテストホストでも、ロボットを作成するコンピュータと同じファイルパスが利用可能である必要があることを意味します。holotree path ROBOCORP_HOME

このプロセスでも関連する項目:ユーザーコンテキスト。 Windows では、Robotmk スケジューラは、デフォルトで、LocalSystem アカウント(SYSTEM コンテキスト)の Checkmk エージェントのサブプロセスとして実行されます。 Linux では、スケジューラはエージェントと同じユーザー、つまりroot で実行されます。 ここでユーザーコンテキストを変更すると、Windows と Linux で動作が異なります。

Windows:スケジューラユーザーSYSTEM は変更できませんが、Execute plan as a specific user オプションを使用して、個々のロボット/プランの実行ユーザーを設定することができます。

Linux: Customize agent package (Unix) ルールとそのCustomize user オプションを使用して、エージェントのユーザーを変更することができますが、他のコンテキストで個々のロボット/プランを実行することはできません。

Checkmk では、Robotmk スケジューラにより、RCC に対する追加のセキュリティ対策が講じられています。 スケジューラと手動で設定されたユーザーだけがROBOCORP_HOME への書き込みアクセス権を確実に持つように、非常に具体的なファイルパスをここで定義する必要があります。これは、上記の表に加え、目的のユーザーコンテキストの階層レベルを追加して指定します(実際の例については、以下をご覧ください)。 これにより、悪意のあるファイルが Hololib/Holotree に侵入すること、つまりコードの注入を防ぐことができます(簡単に言えば、開発マシンのROBOCORP_HOMEC:\foobar のような設定になっていて、このディレクトリがテストホストにすでに存在し、マルウェアが含まれていた場合、そのマルウェアが実行されてしまう可能性があるということです)。

5.2. バリエーション 1: ZIP アーカイブ

この方法は、技術的な背景よりもはるかに簡単です。特に、ZIP アーカイブ(Linux では tar.gz アーカイブ)としてカタログを扱う場合はそうです。 基本的には、ROBOCORP_HOME 変数を指定してカタログを構築し、それをアーカイブとしてエクスポートしてから、手動で配布するだけです。 以下に、そのパスを詳しく示します。 以下の例のパスは Windows に限定されています。Linux で別のコマンドが必要な場合にのみ、そのコマンドを明示的に指定しています。

ROBOCORP_HOMEを設定します

カタログ(明示的に実装された環境(スペース)のテンプレート)は、どのコンピュータでも作成できます。

まず、ターミナルでROBOCORP_HOME を設定します。

Windowsの場合

LocalSystem アカウントでのヘッドレス実行の場合:

C:\robots> set ROBOCORP_HOME=C:\robotmk\rcc_home\current_user

デスクトップアクセスと対応するユーザーが必要なロボットの場合:

C:\robots> set ROBOCORP_HOME=C:\robotmk\rcc_home\HarryHirsch

Linuxの場合

標準ユーザーとしてヘッドレス実行する場合:

user@host:~$ export ROBOCORP_HOME=/opt/robotmk/rcc_home/current_user

デスクトップアクセスと対応するユーザーを必要とするロボットの場合:

user@host:~$ export ROBOCORP_HOME=/opt/robotmk/rcc_home/HarryHirsch

その後、ボットディレクトリを入力して、環境/カタログを構築できます。

C:\robots> cd myrobot
C:\robots\myrobot> rcc holotree vars

ZIP カタログの作成

カタログを ZIP としてエクスポートする必要があります。 まず、正しい Holotree ファイルパスを持つ Hololib カタログがすでに存在するかどうかを確認します。 これを行うには、conda.yaml のハッシュが必要です。

C:\robots\myrobot> rcc holotree hash conda.yaml

Blueprint hash for [conda.yaml] is 296bd91e514e7d1d

次に、利用可能なすべてのHololibカタログを表示します(ここでは短縮版を表示しています):

C:\robots\myrobot> rcc holotree catalogs

Blueprint         Platform       Dirs    Files    Size     Relocate  Holotree path
---------         --------       ------  -------  -------  --------  -------------
.296bd91e514e7d1d windows_amd64     358     4895     123M        28  c:\ProgramData\robocorp\ht
...

リストにハッシュが見つかったら、エクスポートできます。

C:\robots\myrobot> rcc holotree export -r robot.yaml --zipfile myrobot-env.zip

ZIP カタログのデプロイ

ZIP 形式のカタログのデプロイは簡単です。 アーカイブをテストホストに手動でコピーします(例:C:\robotmk\holotrees\myrobot-env.zip )。

Robotmk Scheduler (Windows|Linux) ルール (またはManaged robots) で、Environment dependency handling オプションをLoad from ZIP file に設定し、ZIP 形式のカタログのファイルパス (この例ではC:\robotmk\holotrees\myrobot-env.zip) を入力します。 このパスをholotree path と混同しないでください。 これは、インポートする Hololib カタログの ZIP ファイルのリポジトリとしてのみ機能します。

Information on handling a zipped catalog.

後でスケジューラが起動すると、すべての Hololib カタログ ZIP がインポートされ、これらのテンプレートからスペース、つまり実際に使用される環境が構築されます。 したがって、pip および Conda を使用してインターネットからすべての依存関係をダウンロードする代わりに、アーカイブが解凍されるだけです。これはオフラインであるだけでなく、はるかに高速です。

誤解のないように申し上げますが、ロボット自体は、もちろんテストホスト上で利用可能であるか、管理対象ロボットとしてデプロイされている必要があります。これは、環境に関する説明のみです。

5.3. バリエーション 2: RCCRemote サーバー

まず、RCCRemote はスタンドアロンのツールではなく、Robocorp/Sema4 からドキュメントや製品ページは提供されていません。 リモートサーバーは RCC の一部であり、RCC のコンパイル時に構築されます。 サーバーは通常、コンテナを介して動作します。 コンテナでの動作については、Robotmk プラグインの開発者である Elabit の GitHub ページに、RCCRemote-Dockerというプロジェクトがありますただし、RCCRemote および RCCRemote-Docker は Checkmk 合成監視の一部ではなくCheckmk サポートの対象外です

この配布パスのカタログは 2 つの方法で作成できます。ZIP ファイルとしてエクスポートされたカタログ(上記を参照)は、Windows と Linux の両方で使用できます。 Linux のみの場合、RCCRemote-Docker コンテナ内でカタログを直接構築することも可能で、手動での操作がまったく必要ありません。

RCCRemote-Docker の設定方法、証明書のハンドル方法、カタログのインポート方法については、プロジェクトページをご覧ください

Checkmk 側の設定は、今回も(通常どおり)非常に簡単です。Environment dependency handling オプションは、今回はFetch from RCC remote server に設定し、サーバーのアドレスを指定します。

Specification for handling RCCRemote.

RCCRemote サーバーが自己署名証明書を使用するか、CA 署名証明書を使用するかによって、もう 1 つ設定が必要です。 どちらの場合も、通常、Robotmk scheduler (Windows|Linux) オプションのRCC profile configurationCustom profile に設定する必要があります。

自己署名証明書の場合は、Validate TLS certificates ボックスをオフのままにしておけば十分です。

Inactive TLS validation for self-signed certificates.

ただし、CA 署名付き証明書の場合は、このオプションを有効にし、署名機関からの証明書をRoot CA (PEM 形式) に保存する必要があります。

”Stored certificate from the CA.

6. トラブルシューティング

6.1. スケジューラレポートNo Data

スケジューラがデータを受信しない場合は、環境の構築が正常に行われていない可能性があります。 この原因としてよくあるのは、ネットワークの問題により、特定の依存ファイルがロードできない場合です。 この場合は、C:\ProgramData\checkmk\agent\robotmk_output\working\environment_building にある対応するログファイルを確認してください。

6.2. 環境構築に失敗しました:post-install script execution

これは、新しい Windows システムで発生しやすい、特に興味深いエラーです。conda.yaml には、依存関係のインストール後に実行すべき指示(たとえば、ロボットフレームワークブラウザの初期化)が含まれている場合もあります。 そのため、ここでは Python コマンドを実行する必要があります。 デフォルトでは、Windows 11 には、Microsoft Store を指すpython.exe およびpython3.exe のエイリアスがあります。 これらのエイリアスは、『設定/アプリ実行のエイリアス』で無効にする必要があります。

7. ファイルとディレクトリ

7.1. Windows

ファイルパス 説明

C:\ProgramData\checkmk\agent\robotmk_output\working\suites\

スイートのログファイルおよび結果

C:\ProgramData\checkmk\agent\robotmk_output\working\environment_building

仮想環境を構築するためのログファイル

C:\ProgramData\checkmk\agent\robotmk_output\working\rcc_setup

RCC 実行からのメッセージ

C:\ProgramData\checkmk\agent\logs\robotmk_scheduler_rCURRENT.log

エージェントプラグインのログファイル

C:\ProgramData\checkmk\agent\bin\

rcc.exe およびrobotmk_scheduler.exe

C:\ProgramData\checkmk\agent\plugins\

エージェントプラグインrobotmk_agent_plugin.exe

7.2. Linux

ファイルパス 説明

/var/lib/check_mk_agent/robotmk/scheduler/plans

スイートのログファイルおよび結果

/var/lib/check_mk_agent/robotmk/scheduler/environment_building

仮想環境を構築するためのログファイル

/var/lib/check_mk_agent/robotmk/scheduler/rcc_setup

RCC 実行からのメッセージ

/usr/lib/check_mk_agent/robotmk/

rcc およびrobotmk_scheduler

/usr/lib/check_mk_agent/plugins/

エージェントプラグインrobotmk_agent_plugin

/var/lib/check_mk_agent/robotmk/scheduler/managed/

管理対象ロボットの実行場所

/usr/lib/check_mk_agent/managed_robots/

管理対象ロボットのアーカイブの保存場所

注意:Linux では、Robotmk スケジューラは独自のログファイル(Windows ではrobotmk_scheduler_rCURRENT.log )を作成せず、エージェントおよび syslog 経由でログを記録します。 対応するコマンドは次のとおりです。

user@host:~$ journalctl -xu robotmk-scheduler-daemon.service
このページでは