Amazon Athena에서 사전 정의된 쿼리 사용 - AWS 애플리케이션 검색 서비스

AWS Application Discovery Service는 더 이상 신규 고객에게 공개되지 않습니다. 또는 유사한 기능을 AWS Transform 제공하는를 사용합니다. 자세한 내용은 AWS Application Discovery Service 가용성 변경을 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Athena에서 사전 정의된 쿼리 사용

이 단원에는 TCO 분석 및 네트워크 시각화와 같은 일반 사용 사례에 대한 미리 정의된 쿼리가 포함되어 있습니다. 이러한 쿼리를 있는 그대로 사용하거나 필요한 대로 수정할 수 있습니다.

사전 정의된 쿼리를 사용하려면 다음을 수행합니다.
  1. AWS Migration Hub 콘솔의 탐색 창에서 서버를 선택합니다.

  2. Amazon Athena 콘솔을 열려면 Amazon Athena에서 데이터 탐색을 선택합니다.

  3. 쿼리 편집기 페이지에서 탐색 창의 데이터베이스 아래에 application_discovery_service_database가 선택되어 있는지 확인합니다.

  4. Query Editor(쿼리 편집기)에서 더하기(+) 기호를 선택하여 새 쿼리를 위한 탭을 생성합니다.

  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 주소에 대해서만 트래픽을 필터링합니다. 즉, 192, 10 또는 172로 시작하는 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 테이블이 생성되었으면 아웃바운드 트래픽을 추적하기 위한 두 가지 보기 헬퍼 함수를 생성합니다. 뷰를 생성하는 방법에 대한 자세한 내용은 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 테이블과 두 가지 헬퍼 함수를 생성한 후에는 다음 쿼리를 실행하여 포트 번호 및 프로세스 세부 정보와 함께 각 서비스의 아웃바운드 트래픽에 대한 세부 정보를 얻을 수 있습니다.

    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 테이블이 생성되었으면 인바운드 트래픽을 추적하기 위한 두 가지 보기 헬퍼 함수를 생성합니다. 뷰를 생성하는 방법에 대한 자세한 내용은 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 테이블과 두 가지 헬퍼 함수를 생성한 후에는 다음 쿼리를 실행하여 포트 번호 및 프로세스 세부 정보와 함께 각 서비스의 인바운드 트래픽에 대한 세부 정보를 얻을 수 있습니다.

    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 포트 레지스트리 가져오기 테이블 생성

미리 정의된 쿼리 중 일부에는 IANA(Internet Assigned Numbers Authority)에서 다운로드한 정보가 포함된 iana_service_ports_import 테이블이 필요합니다.

iana_service_ports_import 테이블을 생성하려면
  1. iana.org 서비스 이름 및 전송 프로토콜 포트 번호 레지스트리에서 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");