すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:取り込みプロセッサシナリオ

最終更新日:Jan 06, 2025

取り込みプロセッサを使用して、ログがLogstoreに書き込まれる前にログを処理できます。 たとえば、インジェストプロセッサを使用して、フィールドの変更、フィールドの解析、データのフィルタリング、データのマスクを行うことができます。 このトピックでは、取り込みプロセッサを設定する方法について説明します。 このトピックでは、取り込みプロセッサが使用されるシナリオについても説明します。

前提条件

プロジェクトと標準ログストアが作成され、ログ収集設定が構成されます。 詳細については、参照プロジェクトの作成,Logstoreの作成、およびデータ収集の概要.

シナリオ

生ログからrequest_methodrequest_uri、およびstatusフィールドを抽出するには、次の操作を実行します。

生ログ

body_bytes_sent: 22646
host: www.example.com
http_protocol: HTTP/1.1
remote_addr: 192.168.31.1
remote_user: Elisa
request_length: 42450
request_method: GET
request_time: 675
request_uri: /index.html
status: 200
time_local: 2024-12-04T13:47:54+08:00

手順

  1. 取り込みプロセッサを作成します。

    1. にログインします。Simple Log Serviceコンソール.

    2. [プロジェクト] セクションで、表示するプロジェクトをクリックします。

    3. 左側のナビゲーションウィンドウで、[リソース] > [データプロセッサ] を選択します。

    4. [プロセッサの取り込み] タブで、[作成] をクリックします。 [プロセッサの作成] パネルで、[プロセッサ名][SPL][エラー処理] パラメーターを設定し、[OK] をクリックします。 下表に、各パラメーターを説明します。

      パラメーター

      説明

      プロセッサ名

      取り込みプロセッサの名前。 例: nginx-logs-text

      説明

      取り込みプロセッサの説明。

      SPL

      Simple Log Service Processing Language (SPL) ステートメント。 例:

      * | project request_method, request_uri, status

      詳細については、「SPL instructions」をご参照ください。

      エラー処理

      SPLベースのデータ処理障害が発生したときに実行されるアクション。 有効な値:

      • 生データの保持

      • 生データの破棄

      説明
      • このトピックでは、SPLベースのデータ処理の失敗とは、SPLステートメントの実行の失敗を指します。 例えば、SPL文は、無効なデータ入力のために実行されないことがある。 無効なSPL構文によって引き起こされるSPLベースのデータ処理の失敗は含まれません。

      • 無効なSPL構文設定のためにデータの解析に失敗した場合、生データはデフォルトで保持されます。

  2. 取り込みプロセッサをLogstoreに関連付けます。

    1. 管理するプロジェクトの左側のナビゲーションウィンドウで、[ログストレージ] をクリックし、管理するログストアにポインターを移動してから、[変更] を選択します。

    2. Logstore属性ページの右上隅にある [変更] をクリックします。 編集モードで、取り込みプロセッサドロップダウンリストからLogstoreに関連付ける取り込みプロセッサを選択し、[保存] をクリックします。image

      説明

      関連付けられた取り込みプロセッサは、増分ログに対してのみ有効です。 取り込みプロセッサを有効にするには約1分かかります。

  3. Logstoreのクエリと分析ページで、[検索と分析] をクリックして、収集したログを照会します。image

他のシナリオ

  • フィールドの変更

    フィールドを管理するには、projectproject-awayproject-renameextendのSPL手順を使用できます。 Raw log:

    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456
    status: 200
    time_local: 2024-12-04T13:47:54+08:00

    シナリオ

    要件の説明

    SPLステートメント

    結果

    特定のフィールドを保持する

    次のフィールドのみを保持します。

    • request_method

    • request_uri

    • status

    * | project request_method, request_uri, status
    request_method: PUT
    request_uri: /request/path-1/file-6?query=123456
    status: 200

    次のフィールドのみを保持し、結果フィールドの名前を変更します。

    • request_methodフィールドの名前をmethodに変更します。

    • request_uriフィールドの名前をuriに変更します。

    • ステータスを使用します。

    * | project method=request_method, uri=request_uri, status
    method: PUT
    uri: /request/path-1/file-6?query=123456
    status: 200

    名前がrequest_ で始まるすべてのフィールドを保持します。

    * | project -wildcard "request_*"
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456

    特定のフィールドの削除

    次のフィールドを削除します。

    • http_protocol

    • リファラー

    • remote_addr

    • remote_user

    * | project-away http_protocol, referer, remote_addr, remote_user
    body_bytes_sent: 22646
    host: www.example.com
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456
    status: 200
    time_local: 2024-12-04T13:47:54+08:00

    名前がrequest_ で始まるすべてのフィールドを削除します。

    * | project-away -wildcard "request_*"
    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    status: 200
    time_local: 2024-12-04T13:47:54+08:00

    フィールドの作成

    appという名前のフィールドを作成し、そのフィールドの値をtest-appに設定します。

    * | extend app='test-app'
    app: test-app
    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456
    status: 200
    time_local: 2024-12-04T13:47:54+08:00

    request_queryという名前のフィールドを作成し、request_uriフィールドの値からrequest_queryフィールドの値を抽出します。

    * | extend request_query=url_extract_query(request_uri)
    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    request_length: 42450
    request_method: PUT
    request_query: query=123456
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456
    status: 200
    time_local: 2024-12-04T13:47:54+08:00

    フィールド名の変更

    time_localフィールドの名前をtimeに変更します。

    * | project-rename time=time_local
    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6?query=123456
    status: 200
    time: 2024-12-04T13:47:54+08:00

    フィールド値の変更

    request_uriフィールドのパスを保持し、クエリパラメーターを削除します。

    * | extend request_uri=url_extract_path(request_uri)

    または

    * | extend request_uri=regexp_replace(request_uri, '\?.*', '')
    body_bytes_sent: 22646
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.31.1
    remote_user: Elisa
    request_length: 42450
    request_method: PUT
    request_time: 675
    request_uri: /request/path-1/file-6
    status: 200
    time_local: 2024-12-04T13:47:54+08:00
  • Parseフィールド

    parse-regexpparse-JSONparse-csvのSPL命令と正規表現関数やjson関数などのSQL処理関数を使用して、フィールドを解析および抽出できます。

    シナリオ

    生データ

    要件の説明

    SPLステートメント

    結果

    正規表現モードでのデータ解析

    content: 192.168.1.75 - David [2024-07-31T14:27:24+08:00] "PUT /request/path-0/file-8 HTTP/1.1" 819 21577 403 73895 www.example.com www.example.com "Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1"

    NGINXアクセスログから正規表現を使用してフィールドを抽出し、生データのcontentフィールドを破棄します。

    * 
    | parse-regexp content, '(\S+)\s-\s(\S+)\s\[(\S+)\]\s"(\S+)\s(\S+)\s(\S+)"\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\S+)\s(\S+)\s"(.*)"' as remote_addr, remote_user, time_local, request_method, request_uri, http_protocol, request_time, request_length, status, body_bytes_sent, host, referer, user_agent
    | project-away content
    body_bytes_sent: 73895
    host: www.example.com
    http_protocol: HTTP/1.1
    referer: www.example.com
    remote_addr: 192.168.1.75
    remote_user: David
    request_length: 21577
    request_method: PUT
    request_time: 819
    request_uri: /request/path-0/file-8
    status: 403
    time_local: 2024-07-31T14:27:24+08:00
    user_agent: Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1
    request_method: PUT
    request_uri: /request/path-0/file-8
    status: 200

    request_uriフィールドから文字列file-8を抽出し、文字列fileに名前を付けます。

    * | extend file=regexp_extract(request_uri, 'file-.*')

    file: file-8
    request_method: PUT
    request_uri: /request/path-0/file-8
    status: 200

    JSONモードでのデータ解析

    headers: {"Authorization": "bearer xxxxx", "X-Request-ID": "29bbe977-9a62-4e4a-b2f4-5cf7b65d508f"}

    JSONモードでheadersフィールドを解析し、生データのheadersフィールドを破棄します。

    *
    | parse-json headers
    | project-away headers

    Autorization: bearer xxxxx
    X-Request-ID: 29bbe977-9a62-4e4a-b2f4-5cf7b65d508f

    headersフィールドから特定のフィールドを抽出します。 たとえば、ヘッダーフィールドからAuthorizationフィールドを抽出し、Authorizationフィールドの名前をtokenに変更します。

    * | extend token=json_extract_scalar(headers, 'Authorization')

    headers: {"Authorization": "bearer xxxxx", "X-Request-ID": "29bbe977-9a62-4e4a-b2f4-5cf7b65d508f"}
    token: bearer xxxxx

    request: {"body": {"user_id": 12345, "user_name": "Alice"}}

    JSONモードでrequestフィールドのbodyフィールドを解析します。

    * | parse-json -path='$.body' request
    request: {"body": {"user_id": 12345, "user_name": "Alice"}}
    user_id: 12345
    user_name: Alice

    区切り文字モードでのデータ解析

    content: 192.168.0.100,"10/Jun/2019:11:32:16,127 +0800",www.example.com

    コンマ (,) を使用してフィールドを分割し、生データのcontentフィールドを破棄します。

    *
    | parse-csv -quote='"' content as ip, time, host
    | project-away content
    host: www.example.com
    ip: 192.168.0.100
    time: 10/Jun/2019:11:32:16,127 +0800
    content: 192.168.0.100||10/Jun/2019:11:32:16,127 +0800||www.example.com

    区切り文字 | | を使用してフィールドを分割し、生データのcontentフィールドを破棄します。

    *
    | parse-csv -delim='||' content as ip, time, host
    | project-away content
    host: www.example.com
    ip: 192.168.0.100
    time: 10/Jun/2019:11:32:16,127 +0800

  • フィルターデータ

    where命令を使用してデータをフィルタリングできます。

    SPLベースのデータ処理中は、生データのすべてのフィールドがデフォルトでテキストとして使用されることに注意してください。 数値を処理する前に、データ型変換関数を使用して、必要なフィールドの値を変換する必要があります。 詳細については、「データ型変換関数」をご参照ください。

    生データ

    要件の説明

    SPLステートメント

    結果

    request_id: ddbde824-7c3e-4ff1-a6d1-c3a53fd4a919
    status: 200
    
    ---
    
    request_id: 7f9dad20-bc57-4aa7-af0e-436621f1f51d
    status: 500

    statusフィールド値が200のログのみを保持します。

    * | where status='200'

    または

    * | where cast(status as bigint)=200
    request_id: ddbde824-7c3e-4ff1-a6d1-c3a53fd4a919
    status: 200
    request_id: ddbde824-7c3e-4ff1-a6d1-c3a53fd4a919
    status: 200
    
    ---
    
    request_id: 7f9dad20-bc57-4aa7-af0e-436621f1f51d
    status: 500
    error: something wrong

    errorフィールドを含まないログのみを保持します。

    * | where error is null
    request_id: ddbde824-7c3e-4ff1-a6d1-c3a53fd4a919
    status: 200

    errorフィールドを含むログのみを保持します。

    * | where error is not null
    request_id: 7f9dad20-bc57-4aa7-af0e-436621f1f51d
    status: 500
    error: something wrong
    method: POST
    request_uri: /app/login
    
    ---
    
    method: GET
    request_uri: /user/1/profile
    status: 404
    
    ---
    
    method: GET
    request_uri: /user/2/profile
    status: 200

    request_uriフィールド値が /user/ で始まるログのみを保持します。

    * | where regexp_like(request_uri, '^\/user\/')
    method: GET
    request_uri: /user/1/profile
    status: 404
    
    ---
    
    method: GET
    request_uri: /user/2/profile
    status: 200

    request_uriフィールド値が /user/ で始まり、statusフィールド値が200のログのみを保持します。

    * | where regexp_like(request_uri, '^\/user\/') and status='200'
    method: GET
    request_uri: /user/2/profile
    status: 200
  • マスクデータ

    extend命令と、正規表現関数、文字列関数、URL関数などのSQL関数を使用して、データをマスクできます。

    regexp_replace関数を使用してフィールド値を置き換える場合、キャプチャグループを使用できます。 \1\2、および \Nを使用して、1番目、2番目、およびN番目のキャプチャグループの値を表すことができます。

    たとえば、regexp_replace('192.168.1.1 ', '(\d +)\.(\d +)\.\d +. \\d + ', '\1.\2.*.*.* ') 関数の結果は192.168.* です。

    生データ

    要件の説明

    SPLステートメント

    結果

    request_uri: /api/v1/resources?user=123&ticket=abc
    status: 200

    request_uriフィールドから機密情報を削除します。

    * | extend request_uri=url_extract_path(request_uri)

    または

    * | extend request_uri=regexp_replace(request_uri, '\?.*', '')
    request_uri: /api/v1/resources
    status: 200
    client_ip: 192.168.1.123
    latency: 100

    IPアドレスの中央の2オクテットをアスタリスク (*) でマスクします。

    * | extend client_ip=regexp_replace(client_ip, '(\d+)\.\d+\.\d+\.(\d+)', '\1.*.*.\2')
    client_ip: 192.*.*.123
    latency: 100
    sql: SELECT id, name, config FROM app_info WHERE name="test-app"
    result_size: 1024

    sqlフィールドには機密情報が含まれます。 この場合、操作とテーブル名のみを保持します。

    *
    | extend table=regexp_extract(sql, '\bFROM\s+([^\s;]+)|\bINTO\s+([^\s;]+)|\bUPDATE\s+([^\s;]+)', 1)
    | extend action=regexp_extract(sql,'\b(SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)\b', 1)
    | project-away sql
    action: SELECT
    table: app_info
    result_size: 1024