Amazon Athena でのデータ探索の使用 - AWS アプリケーション検出サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Athena でのデータ探索の使用

Amazon Athena でのデータ探索を有効にしたら、エージェントが検出した詳細な最新データを Athena で直接クエリすることによって、そのデータの探索と使用を開始できます。このデータを使用して、スプレッドシートの作成、コスト分析の実行、視覚化プログラムへのクエリの移植などを行うことができます。

このセクションのトピックでは、ローカル環境への移行を評価および計画するために、計画するために、計画するために、計画するために、計画するために、Athena でデータを使用する方法を説明します。AWS。

Amazon Athena でのデータの直接探索

次の手順では、エージェントデータを直接探索Athena。Athena にデータがない、または Amazon Athena でのデータ探索をまだ有効にしていない場合は、「」で説明されているように Amazon Athena でのデータ探索を有効化することを求めるダイアログボックスが表示されます。Amazon Athena でのデータ探索の有効化

Athena でエージェントが検出したデータを直接検索する
  1. AWS Migration Hub コンソールを開き、ナビゲーションペインで [Servers (サーバー)] を選択します。

  2. Amazon Athena コンソールを開くには、[Explore data in Amazon Athena] (Amazon Athena でのデータ探索) を選択します。

  3. [Query Editor (クエリエディタ)] ページのナビゲーションペインの [Database (データベース)] で、application_discovery_service_database が選択されていることを確認します。

    注記

    [Tables (テーブル)] で、以下のテーブルは、エージェントによってグループ化されたデータセットを表しています。

    • os_info_agent

    • network_interface_agent

    • sys_performance_agent

    • processes_agent

    • inbound_connection_agent

    • outbound_connection_agent

    • id_mapping_agent

  4. Athena クエリエディタで SQL クエリを記述して実行することによって、Amazon Athena コンソールでデータをクエリします。たとえば、以下のクエリを使用して、検出されたすべてのサーバー IP アドレスを確認できます。

    SELECT * FROM network_interface_agent;

    クエリの例については、「Athena で使用する事前定義されたクエリ」を参照してください。

Amazon Athena データの視覚化

データを視覚化するには、Amazon などの視覚化プログラムにクエリを移植できます。 QuickSight または、Cytoscape、yEd、Gelphi などのオープンソースの視覚化ツール ネットワーク図、要約グラフなどのグラフィカルな表現をレンダリングするには、これらのツールを使用します。この方法を使用するときは、視覚化プログラム経由で Athena に接続して、Athena がビジュアライゼーションを生成するためのソースとして収集されたデータにアクセスできるようにします。

Amazon Athena データを視覚化する QuickSight
  1. にサインインします。アマゾン QuickSight

  2. [Connect to another data source or upload a file (別のデータソースに接続するか、ファイルをアップロードします)] を選択します。

  3. [Athena] を選択します。[New Athena data source] (新しい Athena データソース) ダイアログボックスが表示されます。

  4. [Data source name (データソース名)] フィールドに名前を入力します。

  5. [Create data source (データソースを作成)] を選択します。

  6. Select the あるgents-servers-osのテーブルテーブルの選択ダイアログボックスを開き、選択

  7. [Finish data set creation (データセット作成の終了)] ダイアログボックスで、[Import to SPICE for quicker analytics (SPICE にインポートしてクイック分析)] を選択して、[Visualize (視覚化)] を選択します。

    ビジュアライゼーションがレンダリングされます。

Athena で使用する事前定義されたクエリ

このセクションでは、TCO 分析やネットワークの可視化などの一般的なユースケースを実行する、一連の事前定義されたクエリを示します。これらのクエリをそのまま、あるいは必要に応じて変更して使用できます。

事前定義されたクエリを使用するには
  1. AWS Migration Hub コンソールを開き、ナビゲーションペインで [Servers (サーバー)] を選択します。

  2. Amazon Athena コンソールを開くには、[Explore data in Amazon Athena] (Amazon Athena でのデータ探索) を選択します。

  3. [Query Editor (クエリエディタ)] ページのナビゲーションペインの [Database (データベース)] で、application_discovery_service_database が選択されていることを確認します。

  4. クエリエディタでプラス記号 (+) を選択して、新しいクエリのタブを作成します。

  5. 事前に定義されたクエリ」からいずれかのクエリをコピーします。

  6. 作成した新しいクエリタブのクエリウィンドウにそのクエリを貼り付けます。

  7. [Run Query] (クエリの実行) をクリックします。

事前に定義されたクエリ

タイトルを選択すると、クエリに関する情報が表示されます。

このビューヘルパー関数では、特定のサーバーの IP アドレスとホスト名を取得します。このビューは他のクエリで使用できます。ビューを作成する方法については、Amazon Athena ユーザーガイドの「CREATE VIEW」を参照してください。

CREATE OR REPLACE VIEW hostname_ip_helper AS SELECT DISTINCT "os"."host_name" , "nic"."agent_id" , "nic"."ip_address" FROM os_info_agent os , network_interface_agent nic WHERE ("os"."agent_id" = "nic"."agent_id");

このクエリは、データ検証を実行するのに役立ちます。ネットワーク内の多数のサーバーにエージェントをデプロイした場合は、このクエリを使用して、エージェントが配置されていない他のサーバーがネットワーク内にあるかどうかを確認できます。このクエリでは、インバウンドとアウトバウンドのネットワークトラフィックを調べ、プライベート IP アドレスについてのみトラフィックをフィルタリングします。つまり、19210172 で始まる IP アドレスです。

SELECT DISTINCT "destination_ip" "IP Address" , (CASE WHEN ( (SELECT "count"(*) FROM network_interface_agent WHERE ("ip_address" = "destination_ip") ) = 0) THEN 'no' WHEN ( (SELECT "count"(*) FROM network_interface_agent WHERE ("ip_address" = "destination_ip") ) > 0) THEN 'yes' END) "agent_running" FROM outbound_connection_agent WHERE ((("destination_ip" LIKE '192.%') OR ("destination_ip" LIKE '10.%')) OR ("destination_ip" LIKE '172.%')) UNION SELECT DISTINCT "source_ip" "IP ADDRESS" , (CASE WHEN ( (SELECT "count"(*) FROM network_interface_agent WHERE ("ip_address" = "source_ip") ) = 0) THEN 'no' WHEN ( (SELECT "count"(*) FROM network_interface_agent WHERE ("ip_address" = "source_ip") ) > 0) THEN 'yes' END) "agent_running" FROM inbound_connection_agent WHERE ((("source_ip" LIKE '192.%') OR ("source_ip" LIKE '10.%')) OR ("source_ip" LIKE '172.%'));

このクエリを使用して、エージェントがインストールされているオンプレミスサーバーのシステムパフォーマンスと使用パターンデータを分析できます。このクエリでは、system_performance_agent テーブルと os_info_agent テーブルを組み合わせて、各サーバーのホスト名を識別します。このクエリでは、エージェントが稼働しているすべてのサーバーの時系列の使用状況データ (15 分間隔) が返ります。

SELECT "OS"."os_name" "OS Name" , "OS"."os_version" "OS Version" , "OS"."host_name" "Host Name" , "SP"."agent_id" , "SP"."total_num_cores" "Number of Cores" , "SP"."total_num_cpus" "Number of CPU" , "SP"."total_cpu_usage_pct" "CPU Percentage" , "SP"."total_disk_size_in_gb" "Total Storage (GB)" , "SP"."total_disk_free_size_in_gb" "Free Storage (GB)" , ("SP"."total_disk_size_in_gb" - "SP"."total_disk_free_size_in_gb") "Used Storage" , "SP"."total_ram_in_mb" "Total RAM (MB)" , ("SP"."total_ram_in_mb" - "SP"."free_ram_in_mb") "Used RAM (MB)" , "SP"."free_ram_in_mb" "Free RAM (MB)" , "SP"."total_disk_read_ops_per_sec" "Disk Read IOPS" , "SP"."total_disk_bytes_written_per_sec_in_kbps" "Disk Write IOPS" , "SP"."total_network_bytes_read_per_sec_in_kbps" "Network Reads (kbps)" , "SP"."total_network_bytes_written_per_sec_in_kbps" "Network Write (kbps)" FROM "sys_performance_agent" "SP" , "OS_INFO_agent" "OS" WHERE ("SP"."agent_id" = "OS"."agent_id") limit 10;

このクエリでは、ポート番号とプロセスの詳細と共に、各サービスのアウトバウンドトラフィックの詳細が返されます。

クエリを実行する前に、まだ行っていない場合は、IANA からダウンロードした IANA ポートレジストリデータベースを含む iana_service_ports_import テーブルを作成する必要があります。このテーブルを作成する方法については、「IANA ポートレジストリのインポートテーブルの作成」を参照してください。

iana_service_ports_import テーブルが作成されたら、アウトバウンドトラフィックを追跡する 2 つのビューヘルパー関数を作成します。ビューを作成する方法については、Amazon Athena ユーザーガイドの「CREATE VIEW」を参照してください。

アウトバウンド追跡ヘルパー関数を作成するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. 個別のアウトバウンド送信先 IP アドレスのすべてをリストする以下のヘルパー関数を使用して、valid_outbound_ips_helper ビューを作成します。

    CREATE OR REPLACE VIEW valid_outbound_ips_helper AS SELECT DISTINCT "destination_ip" FROM outbound_connection_agent;
  3. アウトバウンドトラフィックの通信頻度を決定する以下のヘルパー関数を使用して、ビュー outbound_query_helper を作成します。

    CREATE OR REPLACE VIEW outbound_query_helper AS SELECT "agent_id" , "source_ip" , "destination_ip" , "destination_port" , "agent_assigned_process_id" , "count"(*) "frequency" FROM outbound_connection_agent WHERE (("ip_version" = 'IPv4') AND ("destination_ip" IN (SELECT * FROM valid_outbound_ips_helper ))) GROUP BY "agent_id", "source_ip", "destination_ip", "destination_port", "agent_assigned_process_id";
  4. iana_service_ports_import テーブルと 2 つのヘルパー関数を作成したら、以下のクエリを実行して、各サービスのアウトバウンドトラフィックの詳細をポート番号とプロセスの詳細と共に取得できます。

    SELECT hip1.host_name "Source Host Name", outbound_connections_results0.source_ip "Source IP Address", hip2.host_name "Destination Host Name", outbound_connections_results0.destination_ip "Destination IP Address", outbound_connections_results0.frequency "Connection Frequency", outbound_connections_results0.destination_port "Destination Communication Port", outbound_connections_results0.servicename "Process Service Name", outbound_connections_results0.description "Process Service Description" FROM (SELECT DISTINCT o.source_ip, o.destination_ip, o.frequency, o.destination_port, ianap.servicename, ianap.description FROM outbound_query_helper o, iana_service_ports_import ianap WHERE o.destination_port = TRY_CAST(ianap.portnumber AS integer)) AS outbound_connections_results0 LEFT OUTER JOIN hostname_ip_helper hip1 ON outbound_connections_results0.source_ip = hip1.ip_address LEFT OUTER JOIN hostname_ip_helper hip2 ON outbound_connections_results0.destination_ip = hip2.ip_address

このクエリでは、ポート番号とプロセスの詳細と共に、各サービスのインバウンドトラフィックに関する情報が返されます。

このクエリを実行する前に、まだ行っていない場合は、IANA からダウンロードした IANA ポートレジストリデータベースを含む iana_service_ports_import テーブルを作成する必要があります。このテーブルを作成する方法については、「IANA ポートレジストリのインポートテーブルの作成」を参照してください。

iana_service_ports_import テーブルが作成されたら、インバウンドトラフィックを追跡する 2 つのビューヘルパー関数を作成します。ビューを作成する方法については、Amazon Athena ユーザーガイドの「CREATE VIEW」を参照してください。

インポートの追跡ヘルパー関数を作成するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. すべての個別のインバウンド元 IP アドレスのリストを取得する以下のヘルパー関数を使用して、ビュー valid_inbound_ips_helper を作成します。

    CREATE OR REPLACE VIEW valid_inbound_ips_helper AS SELECT DISTINCT "source_ip" FROM inbound_connection_agent;
  3. インバウンドトラフィックの通信頻度を決定する以下のヘルパー関数を使用して、ビュー inbound_query_helper を作成します。

    CREATE OR REPLACE VIEW inbound_query_helper AS SELECT "agent_id" , "source_ip" , "destination_ip" , "destination_port" , "agent_assigned_process_id" , "count"(*) "frequency" FROM inbound_connection_agent WHERE (("ip_version" = 'IPv4') AND ("source_ip" IN (SELECT * FROM valid_inbound_ips_helper ))) GROUP BY "agent_id", "source_ip", "destination_ip", "destination_port", "agent_assigned_process_id";
  4. iana_service_ports_import テーブルと 2 つのヘルパー関数を作成したら、以下のクエリを実行して、各サービスのインバウンドトラフィックの詳細をポート番号とプロセスの詳細と共に取得できます。

    SELECT hip1.host_name "Source Host Name", inbound_connections_results0.source_ip "Source IP Address", hip2.host_name "Destination Host Name", inbound_connections_results0.destination_ip "Destination IP Address", inbound_connections_results0.frequency "Connection Frequency", inbound_connections_results0.destination_port "Destination Communication Port", inbound_connections_results0.servicename "Process Service Name", inbound_connections_results0.description "Process Service Description" FROM (SELECT DISTINCT i.source_ip, i.destination_ip, i.frequency, i.destination_port, ianap.servicename, ianap.description FROM inbound_query_helper i, iana_service_ports_import ianap WHERE i.destination_port = TRY_CAST(ianap.portnumber AS integer)) AS inbound_connections_results0 LEFT OUTER JOIN hostname_ip_helper hip1 ON inbound_connections_results0.source_ip = hip1.ip_address LEFT OUTER JOIN hostname_ip_helper hip2 ON inbound_connections_results0.destination_ip = hip2.ip_address

このクエリでは、ポート番号に基づいて実行中のソフトウェアが識別されます。

このクエリを実行する前に、まだ行っていない場合は、IANA からダウンロードした IANA ポートレジストリデータベースを含む iana_service_ports_import テーブルを作成する必要があります。このテーブルを作成する方法については、「IANA ポートレジストリのインポートテーブルの作成」を参照してください。

以下のクエリを実行して、ポート番号に基づき、実行中のソフトウェアを識別します。

SELECT o.host_name "Host Name", ianap.servicename "Service", ianap.description "Description", con.destination_port, con.cnt_dest_port "Destination Port Count" FROM (SELECT agent_id, destination_ip, destination_port, Count(destination_port) cnt_dest_port FROM inbound_connection_agent GROUP BY agent_id, destination_ip, destination_port) con, (SELECT agent_id, host_name, Max("timestamp") FROM os_info_agent GROUP BY agent_id, host_name) o, iana_service_ports_import ianap WHERE ianap.transportprotocol = 'tcp' AND con.destination_ip NOT LIKE '172%' AND con.destination_port = ianap.portnumber AND con.agent_id = o.agent_id ORDER BY cnt_dest_port DESC;

IANA ポートレジストリのインポートテーブルの作成

事前定義されたクエリによっては、Internet Assigned Numbers Authority (IANA) からダウンロードした情報を含む iana_service_ports_import という名前のテーブルが必要になる場合があります。

iana_service_ports_import テーブルを作成するには
  1. iana.orgService Name and Transport Protocol Port Number Registry から IANA ポートレジストリデータベース CSV ファイルをダウンロードします。

  2. このファイルを Amazon S3 にアップロードします。詳細については、「S3 バケットにファイルとフォルダをアップロードする方法」を参照してください。

  3. Athena で iana_service_ports_import という名前の新しいテーブルを作成します。手順については、Amazon Athena ユーザーガイドの「テーブルを作成する」を参照してください。以下の例では、my_bucket_name を、前の手順で CSV ファイルをアップロードした S3 バケットの名前に置き換える必要があります。

    CREATE EXTERNAL TABLE IF NOT EXISTS iana_service_ports_import ( ServiceName STRING, PortNumber INT, TransportProtocol STRING, Description STRING, Assignee STRING, Contact STRING, RegistrationDate STRING, ModificationDate STRING, Reference STRING, ServiceCode STRING, UnauthorizedUseReported STRING, AssignmentNotes STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'quoteChar' = '"', 'field.delim' = ',' ) LOCATION 's3://my_bucket_name/' TBLPROPERTIES ('has_encrypted_data'='false',"skip.header.line.count"="1");