非構造化テキストを JSON に変換

IBM® Cloud Logsでは、 「構文解析」 ルールを使用して、非構造化テキストを 1 つ以上の JSON フィールドに変換できます。

開始前に

語句解析ルールは、 *「ルール・グループ」*内に編成されています。 各グループには、名前とルールのセットがあり、それらの間に論理関係があります。 ログは、ルール・グループの順序 (最初から最後まで) に従って処理されます。 その後、ルール・グループ内のルールの順序、およびルール・グループ間の論理演算子 (AND/OR) に従って処理されます。 ルールは、ログ・データを処理、解析、および再構成して、モニターおよび分析の準備をするのに役立ちます。 詳しくは、 ルール・グループの操作 を参照してください。

名前付き取り込みグループを使用した新規フィールドの定義

解析ルールは、 RegEx 名前付きキャプチャー・グループを使用して、新規フィールドを定義します。

  • キャプチャーされたグループは、解析されたログ・フィールドになります。
  • 各グループに関連付けられている値がフィールドの値になります。
  • RegEx は、ログ全体と一致する必要はありません。
  • RegEx という名前のキャプチャー・グループ ( < > 内の値) とそれらがキャプチャーする値のみが、再構成されたログの一部になります。

解析ルールの構成

1 つの解析ルールを持つルール・グループを作成するには、以下のステップを実行します。

  1. 「データ・パイプライン」 アイコン 「データ・パイプライン」アイコン > 「ルールの構文解析」 をクリックし、 「新規ルール・グループ」 をクリックします。

  2. 「詳細」 セクションで、 「ルール・グループ名」 および *「ルール・グループの説明」*を入力します。

  3. 「ルール・マッチャー」 セクションで、ルール・グループに含まれるルールを適用するログを定義するアプリケーション、サブシステム、および重大度を構成します。

  4. 「ルール」 セクションで、 「構文解析」 「構文解析ルール」アイコン を選択します。

    1. 名前を入力します。

    2. オプションで、説明を入力します。

    3. ソース・フィールドを選択する。 これは、 RegEx が適用されるフィールドです。

    4. 宛先フィールドを選択します。 これは、 RegEx 式を適用した結果が設定されるフィールドです。

    5. 「正規表現」 (RegEx) を入力します。

    6. ルールを有効にする場合は、状況を 「アクティブ」 に切り替えます。

  5. さらにルール・グループを追加するには、 「ルールの追加」 をクリックし、目的のルール・タイプを選択します。 「AND/OR」 を切り替えて、追加ルールの処理方法を選択します。

  6. ルールグループの作成 ]をクリックします。

ログ変換の例

以下の例では、非構造化ログとして Heroku L/H タイプのエラーログを受け取り、JSON ログに変換します。

元のログは以下のとおりです。

sock=client at=warning code=H27 desc="Client Request Interrupted" method=POST path="/submit/" host=myapp.herokuapp.com fwd=17.17.17.17 dyno=web.1 connect=1ms service=0ms status=499 bytes=0

RegEx は以下のとおりです。

^(sock=)?(?P<sock>(\S*))\s*at=(?P<severity>\S*)\s*code=(?P<error_code>\S*)\s*desc="(?P<desc>[^"]*)"\s*method=(?P<method>\S*)\s*path="(?P<path>[^"]*)" host=(?P<host>\S*)\s* (request_id=)?(?P<request_id>\S*)\s*fwd="?(?P<fwd>[^"\s]*)"?\s*dyno=(?P<dyno>\S*)\s*connect=(?P<connect>\d*)(ms)?\s*service=(?P<service>\d*)(ms)?\s*status=(?P<status>\d*)\s* bytes=(?P<bytes>\S*)\s*(protocol=)?(?P<protocol>[^"\s]*)$

フォーマットされたログは以下のとおりです。

{
    "sock": "client",
    "severity": "warning",
    "error_code": "H27",
    "desc": "Client Request Interrupted",
    "method": "POST",
    "path": "/submit/",
    "host": "myapp.herokuapp.com",
    "request_id": "",
    "fwd": "17.17.17.17",
    "dyno": "web.1",
    "connect": "1",
    "service": "0",
    "status": "499",
    "bytes": "0",
    "protocol": ""
}