Wikis - Page

ESM の MySQL からのデータの抽出について

1 Likes

ESM の MySQLデータベースからデータを抽出したいというお問い合わせをいただくことがあります。

ESMには arcdt runsql というArcSight コマンドがあり、こちらのご利用をお勧めしております。

次の資料は arcdt runsql の簡単な使用例を記載したものです。

PDF

なお、arcdt につきましては Administrator's Guide の次のご参照をお願い致します。

https://www.microfocus.com/documentation/arcsight/arcsight-esm-7.6/ESM_AdminGuide/#ESM_AdminGuide/AppA/arcdt.htm?Highlight=runsql

ご参考になれば幸いです。

Labels:

Support Tips/Knowledge Docs
Comment List
  • arc_eventテーブルの dest_addressやsrc_addressのIPアドレスの表示について


    ESM 6.11からdest_addressやsrc_addressで IPv6 アドレスがサポートされるようになり、 これらは次のデータ型でデータベースに格納されています。

    | dest_address | varbinary(16) |
    | src_address | varbinary(16) |

    SQLで dest_addressやsrc_address を選択した場合、このままでは判読可能な値が表示されないのですが、
    次の様なMySQLの関数をお使いいただけます。

    dev.mysql.com/.../miscellaneous-functions.html


    以下はTest Alert Connectorから次のイベントを送付した場合です。

    inet6_ntoa という関数を使用していますが、IPv4 アドレスの場合は頭に ::ffff: が入ってしまうようです。
    ----------------------------------------------------------------------
    mysql> select inet6_ntoa(src_address), inet6_ntoa(dest_address) from arc_event where name = 'Test Alert Event';
    +-------------------------+--------------------------+
    | inet6_ntoa(src_address) | inet6_ntoa(dest_address) |
    +-------------------------+--------------------------+
    | ::ffff:1.1.1.1 | ::ffff:1.1.1.2 |
    +-------------------------+--------------------------+
    1 row in set (0.26 sec)

    次は substring を使用して頭の ::ffff: を除いて、8文字目から最後まで表示しています。

    mysql> select substring(inet6_ntoa(src_address),8), substring(inet6_ntoa(dest_address),8) from arc_event where name = 'Test Alert Event';
    +--------------------------------------+---------------------------------------+
    | substring(inet6_ntoa(src_address),8) | substring(inet6_ntoa(dest_address),8) |
    +--------------------------------------+---------------------------------------+
    | 1.1.1.1 | 1.1.1.2 |
    +--------------------------------------+---------------------------------------+
    1 row in set (0.21 sec)

    mysql>

  • 例えば直前の10分間のイベントを確認されたい場合、
    データソースでイベントが発生(終了時刻)してからESMに到着するまでの時刻(マネージャ受信時刻)に差があると、
    「-type EndTime」 では遅く到着したイベントが見逃されてしまう可能性があるかと思います。

    次の様にして「マネージャ受信時刻」での指定もできますので、こちらもご検討いただければと考えます。

    「-type mrt -ss 2023-02-20-15-50-00-000-JST -se 2023-02-20-16-00-00-000-JST」


    なお、添付は簡単なテストを実施した結果となります。

    [arcsight@esm003jp ~]$ /opt/arcsight/manager/bin/arcsight arcdt runsql -f /tmp/dummy.sql -type EndTime -ss 2023-02-20-15-50-00-000-JST -se 2023-02-20-16-00-00-000-JST
    
    Assuming ARCSIGHT_HOME: /opt/arcsight/manager
    Assuming JAVA_HOME: /opt/arcsight/java/esm/current/jre
    
    ArcSight Diagnostics Tool starting ...
    
    RunSQL sessionId: 524288186
    
    executing sql statement: set arc_logger_usersessionId =524288186;
    Input startDate and endDate values:
    startDate: Mon Feb 20 15:50:00 JST 2023    1676875800000
    endDate: Mon Feb 20 16:00:00 JST 2023    1676876400000
    RunSQL sessionId: 524288186
    
    [arcsight@esm003jp ~]$ /opt/arcsight/logger/current/arcsight/bin/mysql -D arcsight -uarcsight -p                                      Enter password:
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 862
    Server version: 5.7.33 Source distribution
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> set arc_logger_usersessionId =524288186;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select end_time, manager_receipt_time from arc_event where name = 'Test Alert Event';
    Empty set (0.27 sec)
    
    mysql> exit
    Bye
    [arcsight@esm003jp ~]$ /opt/arcsight/manager/bin/arcsight arcdt runsql -f /tmp/dummy.sql -type mrt -ss 2023-02-20-15-50-00-000-JST -se 2023-02-20-16-00-00-000-JST
    
    Assuming ARCSIGHT_HOME: /opt/arcsight/manager
    Assuming JAVA_HOME: /opt/arcsight/java/esm/current/jre
    
    ArcSight Diagnostics Tool starting ...
    
    RunSQL sessionId: 524288198
    
    executing sql statement: set arc_logger_usersessionId =524288198;
    Input startDate and endDate values:
    startDate: Mon Feb 20 15:50:00 JST 2023    1676875800000
    endDate: Mon Feb 20 16:00:00 JST 2023    1676876400000
    RunSQL sessionId: 524288198
    
    [arcsight@esm003jp ~]$ /opt/arcsight/logger/current/arcsight/bin/mysql -D arcsight -uarcsight -p                                      Enter password:
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 879
    Server version: 5.7.33 Source distribution
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> set arc_logger_usersessionId =524288198;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select end_time, manager_receipt_time, event_type from arc_event where name = 'Test Alert Event' and event_type = 0 ;
    +-------------------------+-------------------------+------------+
    | end_time                | manager_receipt_time    | event_type |
    +-------------------------+-------------------------+------------+
    | 2023-02-20 06:40:00.000 | 2023-02-20 06:54:12.970 |          0 |
    +-------------------------+-------------------------+------------+
    1 row in set (0.26 sec)
    
    mysql>
    

    簡単に説明しますと、テストアラートコネクタから15時54分頃、終了時刻が15時40分のイベント(名前が Test Alert Event のイベント)を送付しています。

    例えば16時の時点で直前の10分間のイベントを検索する場合、次の終了時刻の設定ではこのイベントが出力されませんでした。
    >-type EndTime -ss 2023-02-20-15-50-00-000-JST -se 2023-02-20-16-00-00-000-JST

    しかし、次のマネージャ受信時刻の設定ではこのイベントが出力されています。
    >-type mrt -ss 2023-02-20-15-50-00-000-JST -se 2023-02-20-16-00-00-000-JST


    なお、EndTimeは終了時刻で、データソースでイベントの発生が終了した時刻となります。
    詳しくは次のコミュニティの記事をご参照いただければと考えます。

    community.microfocus.com/.../esm

    また、終了時刻はCEFのフィールドで、ESMのMySQLにはarc_event テーブルの end_timeというカラムに格納されています。

  • 「-type EndTime -ss <範囲開始時刻> -se <範囲終了時刻>」 の意味について

    こちらは session id で検索できる終了時刻 (EndTime) の範囲を指定しています。

    実機で確認してみました。

    1.範囲開始 -ss に遠い過去を指定した場合

    「-type EndTime -ss 1900-01-01-00-00-00-000-JST -se 2023-02-18-00-00-00-000-JST」

    結果
    Input startDate and endDate values:
    startDate: Mon Jan 01 00:00:00 JST 1900 -2209021200000
    endDate: Sat Feb 18 00:00:00 JST 2023 1676646000000

    mysql> select min(end_time), max(end_time) from arc_event;
    +-------------------------+-------------------------+
    | min(end_time) | max(end_time) |
    +-------------------------+-------------------------+
    | 2023-01-26 05:48:55.310 | 2023-02-17 05:52:00.002 |
    +-------------------------+-------------------------+

    今回のテストで使用したESMのイベントデータの終了時刻の最小値は2023-01-26 05:48:55.310となっています。

    この状態で SQL 文の where 句に end_time を指定して次の検索が可能です。

    mysql> select min(end_time), max(end_time) from arc_event where end_time > '2023-02-01 00:00:00.000';
    +-------------------------+-------------------------+
    | min(end_time) | max(end_time) |
    +-------------------------+-------------------------+
    | 2023-02-01 09:32:32.451 | 2023-02-17 05:54:00.001 |
    +-------------------------+-------------------------+


    2.次に範囲を次の様にしてみました

    「-type EndTime -ss 2023-02-01-00-00-00-000-JST -se 2023-02-18-00-00-00-000-JST」

    結果
    Input startDate and endDate values:
    startDate: Wed Feb 01 00:00:00 JST 2023 1675177200000
    endDate: Sat Feb 18 00:00:00 JST 2023 1676646000000

    mysql> select min(end_time), max(end_time) from arc_event;
    +-------------------------+-------------------------+
    | min(end_time) | max(end_time) |
    +-------------------------+-------------------------+
    | 2023-02-01 09:32:32.451 | 2023-02-17 05:55:06.675 |
    +-------------------------+-------------------------+

    SQL文の where 句に end_time の指定をしておりませんが、
    終了時刻の最小値は 2023-02-01 09:32:32.451 となっています。

    従って、「-type EndTime -ss <範囲開始時刻> -se <範囲終了時刻>」 は、
    session id で検索できる終了時刻 (End_Time) の範囲を指定しておりますのでご注意ください。

  • 添付は MySQL クライアントで arc_event テーブルにアクセスする方法の例です。

    PDF

Related
Recommended