調査のための 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'
)