コンテンツにスキップ

調査のための Presto の設定

概要

Presto は、HDFS や S3 などのデータ ストレージ プラットフォームに格納されているデータを、SQL を使ってクエリするオープンソースアプリケーションです。Presto を使用して、Sophos Linux Sensor (SLS) の調査データを HDFS から直接クエリできます。

要件

  • HDFS クラスタ
  • Hive メタストアの設定
  • Presto がインストールされている
  • Presto コーディネーターサーバーとワーカーサーバーへの SSH アクセス
  • Hadoop を使用した調査の設定の完了

Hive の設定

最初の手順は、Hive メタデータストアに接続するように Presto クラスタを設定することです。これは、次のように Hive コネクタを使用して実行できます。https://prestodb.io/docs/current/connector/hive.html.さらに、カタログ設定に、hive.recursive-directories=true が設定されている必要があります。これによって、Hive パーティション分割されたフォルダに、SLS によって 書き込まれたデータを Presto でスキャンできます。

テーブルの作成

2番目の手順は、データベースを作成することです。これは、Presto CLI で次のように実行できます。

CREATE SCHEMA hive.presto;

次に、デフォルトのデータベースを設定します。

USE hive.presto;

データベースの作成が完了したら、次の手順はテーブルを追加することです。これには、Presto CLI で次の DDL ステートメントを入力します。

hadoop-nn はデフォルトの NameNode で、クエリ対象のファイルを含む HDFS クラスタの NameNode で置き換える必要があります。

ALERT テーブル

CREATE TABLE hive.presto.alerts (
  unix_nano_timestamp bigint,
  alert_id varchar,
  sensor_id varchar,
  priority varchar,
  process_uuid varchar,
  incident_id varchar,
  policy_type varchar,
  strategy_name varchar,
  audit_group_id varchar,
  messages array(varchar)
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/alerts',
  format = 'PARQUET'
)

CONNECTIONS テーブル

CREATE TABLE hive.presto.connections (
  unix_nano_timestamp bigint,
  process_uuid varchar,
  process_pid integer,
  monotime_nanos bigint,
  dst_addr varchar,
  dst_port integer,
  incident_id varchar,
  success boolean,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/connections',
  format = 'PARQUET'
)

CONTAINER_EVENTS テーブル

CREATE TABLE hive.presto.container_events (
  container_id varchar,
  unix_nano_timestamp bigint,
  incident_id varchar,
  sensor_id varchar,
  process_uuid varchar,
  event_type integer,
  container_name varchar,
  image_id varchar,
  image_name varchar,
  pod_name varchar,
  namespace varchar,
  event_type_name varchar,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/container_events',
  format = 'PARQUET'
)

FILE_EVENTS テーブル

CREATE TABLE hive.presto.file_events (
  unix_nano_timestamp bigint,
  sensor_id varchar,
  process_uuid varchar,
  pid integer,
  container_id varchar,
  path varchar,
  source_path varchar,
  event_type integer,
  incident_id varchar,
  event_type_name varchar,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/file_events',
  format = 'PARQUET'
)

LOST_RECORDS テーブル

CREATE TABLE hive.presto.lost_records (
  unix_nano_timestamp bigint,
  event_type integer,
  action_type integer,
  reason varchar,
  lost_count bigint,
  event_type_name varchar,
  action_type_name varchar,
  sensor_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/lost_records',
  format = 'PARQUET'
)

PROCESS_EVENTS テーブル

CREATE TABLE hive.presto.process_events (
  unix_nano_timestamp bigint,
  event_type integer,
  process_uuid varchar,
  sensor_id varchar,
  pid integer,
  container_id varchar,
  parent_process_uuid varchar,
  parent_pid integer,
  gid integer,
  group varchar,
  uid integer,
  username varchar,
  euid integer,
  effective_username varchar,
  fsuid integer,
  fs_username varchar,
  fsgid integer,
  fs_group varchar,
  login_uid integer,
  login_username varchar,
  login_gid integer,
  login_group varchar,
  path varchar,
  arguments array(varchar),
  incident_id varchar,
  child_pid integer,
  child_process_uuid varchar,
  egid integer,
  effective_group varchar,
  tid integer,
  return_value integer,
  event_type_name varchar,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/process_events',
  format = 'PARQUET'
)

SENSORS テーブル

CREATE TABLE hive.presto.sensors (
  unix_nano_timestamp bigint,
  sensor_id varchar,
  sensor_pid integer,
  hostname varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/sensors',
  format = 'PARQUET'
)

SENSOR_METADATA テーブル

CREATE TABLE hive.presto.sensor_metadata (
  sensor_id varchar,
  key varchar,
  value varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/sensor_metadata',
  format = 'PARQUET'
)

SHELL_COMMANDS テーブル

CREATE TABLE hive.presto.shell_commands (
  unix_nano_timestamp bigint,
  program_filename varchar,
  program_arguments array(varchar),
  process_uuid varchar,
  process_pid integer,
  shell_process_uuid varchar,
  shell_process_pid integer,
  exec_event_id varchar,
  monotime_nanos bigint,
  container_id varchar,
  sensor_id varchar,
  uid integer,
  username varchar,
  gid integer,
  group varchar,
  euid integer,
  effective_username varchar,
  egid integer,
  effective_group varchar,
  suid integer,
  saved_username varchar,
  sgid integer,
  saved_group varchar,
  fsuid integer,
  file_system_username varchar,
  fsgid integer,
  file_system_group varchar,
  incident_id varchar,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/shell_commands',
  format = 'PARQUET'
)

TTY_DATA テーブル

CREATE TABLE hive.presto.tty_data (
  unix_nano_timestamp bigint,
  data varchar,
  is_input boolean,
  monotime_nanos bigint,
  shell_process_uuid varchar,
  incident_id varchar,
  audit_group_id varchar
)
WITH (
      external_location = 'hdfs://hadoop-nn:9000/c8/tty_data',
  format = 'PARQUET'
)