Amazon S3 の Apache Iceberg テーブルへの Amazon Data Firehose ストリームの配信はプレビュー中であり、変更される可能性があります。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Kinesis エージェント
Amazon Kinesis エージェントは、データを収集して Firehose に送信する方法を示すリファレンス実装として機能するスタンドアロン Java ソフトウェアアプリケーションです。エージェントは一連のファイルを継続的にモニタリングし、新しいデータを Firehose ストリームに送信します。エージェントは、ファイルローテーション、チェックポイント、および障害発生時の再試行を処理する方法を示します。これは、信頼性が高く、タイムリーでシンプルな方法でデータを配信する方法を示しています。また、ストリーミングプロセスのモニタリングとトラブルシューティングを改善するためにメトリクスを出力 CloudWatchする方法も示します。詳細については、awslabs/amazon-kinesis-agent
デフォルトでは、レコードは改行文字 ('\n'
) に基づいて各ファイルから解析されます。しかし、複数行レコードを解析するよう、エージェントを設定することもできます (エージェント設定を参照)。
このエージェントは、ウェブサーバー、ログサーバーおよびデータベースサーバーなど、Linux ベースのサーバー環境にインストールできます。エージェントをインストールしたら、モニタリングするファイルと Firehose ストリームを指定してデータを設定します。エージェントは、設定後、ファイルから永続的にデータを収集し、Firehose ストリームに確実に送信します。
トピック
-
オペレーティングシステムは Amazon Linux、または Red Hat Enterprise Linux バージョン 7 以降でなければなりません。
-
エージェントバージョン 2.0.0 以降は、JREバージョン 1.8 以降を使用して実行されます。エージェントバージョン 1.1.x は 1.7 JRE 以降を使用して実行されます。
-
Amazon を使用してエージェントEC2を実行している場合は、EC2インスタンスを起動します。
-
指定するIAMロールまたは AWS 認証情報には、エージェントが Firehose ストリームにデータを送信するために Amazon Data Firehose PutRecordBatchオペレーションを実行するアクセス許可が必要です。エージェント CloudWatch のモニタリングを有効にする場合は、 オペレーションを実行する CloudWatch PutMetricDataアクセス許可も必要です。詳細については、Amazon Data Firehose によるアクセスの制御「」、Kinesis Agent のヘルスをモニタリングする「」、および「Amazon の認証とアクセスコントロール CloudWatch」を参照してください。
次のいずれかの方法を使用して AWS 認証情報を管理します。
-
カスタム認証情報プロバイダーを作成します。詳細については、「カスタム認証情報プロバイダーを作成する」を参照してください。
-
EC2 インスタンスを起動するときに IAMロールを指定します。
-
エージェントを設定するときに AWS 認証情報を指定します (「」の設定表
awsSecretAccessKey
のawsAccessKeyId
「」と「」のエントリを参照してくださいエージェント設定)。 -
を編集
/etc/sysconfig/aws-kinesis-agent
して、 AWS リージョンと AWS アクセスキーを指定します。 -
EC2 インスタンスが別の AWS アカウントにある場合は、Amazon Data Firehose サービスへのアクセスを提供する IAMロールを作成します。エージェントを設定するときに、そのロールを指定します (assumeRoleARN「」とassumeRoleExternal「ID」を参照)。前述の方法のいずれかを使用して、このロールを引き受けるアクセス許可を持つ他のアカウントのユーザーの AWS 認証情報を指定します。
カスタム認証情報プロバイダーを作成し、そのクラス名と jar パスを Kinesis エージェントに渡すことができます。これらを渡すための構成設定として userDefinedCredentialsProvider.classname
と userDefinedCredentialsProvider.location
を使用します。これら 2 つの構成設定の説明については、「エージェント設定」を参照してください。
カスタム認証情報プロバイダーを作成するには、次の例に示すように、AWS CredentialsProvider
インターフェイスを実装するクラスを定義します。
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; public class
YourClassName
implements AWSCredentialsProvider { publicYourClassName
() { } public AWSCredentials getCredentials() { return new BasicAWSCredentials("key1
", "key2
"); } public void refresh() { } }
このクラスは、引数を取らないコンストラクターを必要とします。
AWS は更新メソッドを定期的に呼び出して、更新された認証情報を取得します。認証情報プロバイダーからその存続期間中に常に異なる認証情報を提供する場合は、このメソッドに認証情報を更新するためのコードを含めます。または、静的な (変わらない) 認証情報を提供する認証情報プロバイダーを必要とする場合は、このメソッドを空のままにすることもできます。
最初に、インスタンスに接続します。詳細については、「Amazon ユーザーガイド」の「インスタンスに接続する」を参照してください。 EC2 接続に問題がある場合は、「Amazon EC2 ユーザーガイド」の「インスタンスへの接続のトラブルシューティング」を参照してください。
次に、次のいずれかの方法を使用して、エージェントをインストールします。
-
Amazon Linux リポジトリからエージェントをセットアップするには
このメソッドは Amazon Linux インスタンスでのみ機能します。以下のコマンドを使用します。
sudo yum install –y aws-kinesis-agent
エージェント v 2.0.0 以降は、オペレーティングシステム Amazon Linux 2 () を搭載したコンピュータにインストールされますAL2。このエージェントバージョンでは、Java 1.8 以降が必要です。必要な Java バージョンがまだ存在しない場合は、エージェントのインストールプロセスによってインストールされます。Amazon Linux 2 の詳細については、「」を参照してくださいhttps://aws.amazon.com/amazon-linux-2/
。 -
Amazon S3 リポジトリからエージェントをセットアップするには
このメソッドは、Red Hat Enterprise Linux と Amazon Linux 2 インスタンスでも機能します。これは、パブリックに利用可能なリポジトリからエージェントをインストールするからです。次のコマンドを使用して、エージェントバージョン 2.x.x の最新バージョンをダウンロードしてインストールします。
sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn2.noarch.rpm
特定バージョンのエージェントをインストールするには、そのバージョン番号をコマンドで指定します。たとえば、次のコマンドはエージェント v 2.0.1 をインストールします。
sudo yum install –y https://streaming-data-agent.s3.amazonaws.com/aws-kinesis-agent-2.0.1-1.amzn1.noarch.rpm
Java 1.7 を持っていて、それをアップグレードしたくない場合は、Java 1.7 と互換性があるエージェントバージョン 1.x.x をダウンロードできます。たとえば、エージェント v1.1.6 をダウンロードするには、次のコマンドを使用します。
sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-1.1.6-1.amzn1.noarch.rpm
最新のエージェント v1.x.x は、次のコマンドを使用してダウンロードできます。
sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm
-
リポジトリから GitHubエージェントを設定するには
-
まず、エージェントのバージョンに応じて、必要な Java バージョンがインストールされていることを確認します。
-
awslabs/amazon-kinesis-agent
GitHub repo からエージェントをダウンロードします。 -
ダウンロードしたディレクトリまで移動し、次のコマンドを実行してエージェントをインストールします。
sudo ./setup --install
-
-
Docker コンテナにエージェントをセットアップするには
Kinesis Agent は、amazonlinux コンテナベースを使ってコンテナで実行することもできます。次の Docker ファイルを使用し、
docker build
を実行します。FROM amazonlinux RUN yum install -y aws-kinesis-agent which findutils COPY agent.json /etc/aws-kinesis/agent.json CMD ["start-aws-kinesis-agent"]
エージェントを設定して開始するには
-
(デフォルトのファイルアクセス許可を使用している場合、スーパーユーザーとして) 設定ファイル (
/etc/aws-kinesis/agent.json
) を開き、編集します。この設定ファイルで、エージェントがデータを収集するファイル (
"filePattern"
) と、エージェントがデータを送信する Firehose ストリームの名前 ( )"deliveryStream"
を指定します。ファイル名はパターンで、エージェントはファイルローテーションを確認します。1 秒あたりに一度だけ、ファイルを交替または新しいファイルを作成できます。エージェントはファイル作成タイムスタンプを使用して、Firehose ストリームを追跡してテールするファイルを決定します。新しいファイルを作成したり、1 秒に 1 回を超える頻度でファイルをローテーションしたりしても、エージェント間で適切に区別することはできません。{ "flows": [ { "filePattern": "
/tmp/app.log*
", "deliveryStream": "yourdeliverystream
" } ] }デフォルトの AWS リージョンは です
us-east-1
。別のリージョンを使用する場合は、設定ファイルにfirehose.endpoint
設定を追加してリージョンのエンドポイントを指定します。詳細については、「エージェント設定」を参照してください。 -
エージェントを手動で開始する:
sudo service aws-kinesis-agent start
-
(オプション) システムスタートアップ時にエージェントを開始するように設定します。
sudo chkconfig aws-kinesis-agent on
エージェントは、システムのサービスとしてバックグラウンドで実行されます。指定されたファイルを継続的にモニタリングし、指定された Firehose ストリームにデータを送信します。エージェント活動は、/var/log/aws-kinesis-agent/aws-kinesis-agent.log
に記録されます。
エージェントは、2 つの必須設定、filePattern
と deliveryStream
、さらに追加機能としてオプションの設定をサポートしています。必須およびオプションの設定を /etc/aws-kinesis/agent.json
で指定できます。
設定ファイルを変更した場合は、次のコマンドを使用してエージェントを停止および起動する必要があります。
sudo service aws-kinesis-agent stop
sudo service aws-kinesis-agent start
または、次のコマンドを使用できます。
sudo service aws-kinesis-agent restart
全般設定は次のとおりです。
構成設定 | 説明 |
---|---|
assumeRoleARN |
ユーザーが引き受けるロールの Amazon リソースネーム (ARN)。詳細については、「 IAMユーザーガイド」のIAM「ロールを使用した AWS アカウント間のアクセスの委任」を参照してください。 |
assumeRoleExternalId |
ロールを引き受けることができるユーザーを決定するオプションの ID。詳細については、「 ユーザーガイド」の「外部 ID の使用方法IAM」を参照してください。 |
awsAccessKeyId |
AWS デフォルトの認証情報を上書きする アクセスキー ID。この設定は、他のすべての認証情報プロバイダーに優先されます。 |
awsSecretAccessKey |
AWS デフォルトの認証情報を上書きする シークレットキー。この設定は、他のすべての認証情報プロバイダーに優先されます。 |
cloudwatch.emitMetrics |
設定されている場合、エージェントがメトリクスを に出力 CloudWatch できるようにします (true)。 デフォルト: true |
cloudwatch.endpoint |
のリージョンエンドポイント CloudWatch。 デフォルト: |
firehose.endpoint |
Amazon Data Firehose のリージョンエンドポイント。 デフォルト: |
sts.endpoint |
AWS セキュリティトークンサービスのリージョンエンドポイント。 デフォルト: |
userDefinedCredentialsProvider.classname |
カスタム認証情報プロバイダーを定義する場合、この設定を使用してその完全修飾クラス名を指定します。クラス名の末尾に .class を含めないでください。 |
userDefinedCredentialsProvider.location |
カスタム認証情報プロバイダーを定義する場合、この設定を使用して、カスタム認証情報プロバイダーが含まれている jar の絶対パスを指定します。エージェントは、この jar ファイルを /usr/share/aws-kinesis-agent/lib/ でも検索します。 |
フロー設定は次のとおりです。
構成設定 | 説明 |
---|---|
aggregatedRecordSizeBytes |
エージェントにレコードを集約させ、1 回のオペレーションで Firehose ストリームに配置するには、この設定を指定します。エージェントが Firehose ストリームに配置する前に、集約レコードに保持させたいサイズに設定します。 デフォルト: 0 (集約なし) |
dataProcessingOptions |
Firehose ストリームに送信される前に、解析された各レコードに適用される処理オプションのリスト。処理オプションは指定した順序で実行されます。詳細については、「エージェントを使用してデータを前処理する」を参照してください。 |
deliveryStream |
〔必須] Firehose ストリームの名前。 |
filePattern |
[必須] エージェントによってモニタリングされる必要があるファイルの glob このパターンに一致するすべてのファイルは、エージェントによって自動的に選択され、モニタリングされます。このパターンに一致するすべてのファイルで、読み取りアクセス許可を 重要エージェントは、このパターンに一致するファイルをすべて取得します。エージェントが意図しないレコードを取得しないように、このパターンは慎重に選択してください。 |
initialPosition |
ファイルの解析が開始される最初の位置。有効な値は、 デフォルト: |
maxBufferAgeMillis |
Firehose ストリームに送信する前にエージェントがデータをバッファする最大時間をミリ秒単位で指定します。 値の範囲: 1,000~900,000 (1 秒~15 分) デフォルト: 60,000 (1 分) |
maxBufferSizeBytes |
エージェントが Firehose ストリームに送信する前にデータをバッファするバイト単位の最大サイズ。 値の範囲: 1~4,194,304 (4 MB) デフォルト: 4,194,304 (4 MB) |
maxBufferSizeRecords |
Firehose ストリームに送信する前にエージェントがデータをバッファするレコードの最大数。 値の範囲: 1~500 デフォルト: 500 |
minTimeBetweenFilePollsMillis |
エージェントが新しいデータのモニタリング対象ファイルをポーリングし、解析する時間間隔 (ミリ秒単位)。 値の範囲: 1 以上 デフォルト: 100 |
multiLineStartPattern |
レコードの開始を識別するパターン。レコードは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。有効な値は正規表現です。デフォルトでは、ログファイルのそれぞれの改行は 1 つのレコードとして解析されます。 |
skipHeaderLines |
モニタリング対象ファイルの始めにエージェントが解析をスキップするの行数。 値の範囲: 0 以上 デフォルト: 0 (ゼロ) |
truncatedRecordTerminator |
レコードサイズが Amazon Data Firehose レコードサイズ制限を超えたときに、エージェントが解析されたレコードを切り捨てるために使用する文字列。(1,000 KB) デフォルト: |
複数のフロー設定を指定することによって、エージェントが複数のファイルディレクトリを監視し、複数のストリームにデータを送信するように設定できます。次の設定例では、エージェントは 2 つのファイルディレクトリをモニタリングし、それぞれ Kinesis データストリームと Firehose ストリームにデータを送信します。Kinesis Data Streams と Amazon Data Firehose に異なるエンドポイントを指定して、データストリームと Firehose ストリームが同じリージョンに存在する必要がないようにすることができます。
{ "cloudwatch.emitMetrics":
true
, "kinesis.endpoint": "https://your/kinesis/endpoint
", "firehose.endpoint": "https://your/firehose/endpoint
", "flows": [ { "filePattern": "/tmp/app1.log*
", "kinesisStream": "yourkinesisstream
" }, { "filePattern": "/tmp/app2.log*
", "deliveryStream": "yourfirehosedeliverystream
" } ] }
Amazon Kinesis Data Streams でのエージェントの使用の詳細については、「Kinesis エージェントを使用した Amazon Kinesis Data Streams への書き込み」を参照してください。
エージェントは、モニタリング対象ファイルから解析されたレコードを Firehose ストリームに送信する前に前処理できます。ファイルフローに dataProcessingOptions
設定を追加することで、この機能を有効にできます。処理オプションを 1 つ以上追加することができます。また、指定の順序で実行されます。
エージェントは、次の処理オプションに対応しています。エージェントはオープンソースであるため、処理オプションを開発および拡張できます。Kinesis エージェント
処理オプション
SINGLELINE
-
改行文字、先頭のスペース、末尾のスペースを削除することで、複数行レコードを単一行レコードに変換します。
{ "optionName": "SINGLELINE" }
CSVTOJSON
-
レコードを区切り文字で区切られた形式からJSON形式に変換します。
{ "optionName": "CSVTOJSON", "customFieldNames": [ "
field1
", "field2
",...
], "delimiter": "yourdelimiter
" }customFieldNames
-
〔必須] 各キーと値のペアのJSONキーとして使用されるフィールド名。たとえば、
["f1", "f2"]
を指定した場合は、レコード「v1、v2」は{"f1":"v1","f2":"v2"}
に変換されます。 delimiter
-
レコードで区切り記号として使用する文字列。デフォルトはカンマ (,) です。
LOGTOJSON
-
レコードをログ形式からJSON形式に変換します。サポートされているログ形式は、Apache Common Log、Apache Combined Log、Apache Error Log、および RFC3164 Syslog です。
{ "optionName": "LOGTOJSON", "logFormat": "
logformat
", "matchPattern": "yourregexpattern
", "customFieldNames": [ "field1
", "field2
",…
] }logFormat
-
[必須] ログエントリ形式。以下の値を指定できます。
-
COMMONAPACHELOG
— Apache Common Log 形式。各ログエントリは、デフォルトで次のパターン%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}
になります。 -
COMBINEDAPACHELOG
— Apache Combined Log 形式。各ログエントリは、デフォルトで次のパターン%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}
になります。 -
APACHEERRORLOG
— Apache Error Log 形式。各ログエントリは、デフォルトで次のパターン[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}
になります。 -
SYSLOG
— Syslog RFC3164 形式。各ログエントリは、デフォルトで次のパターン%{timestamp} %{hostname} %{program}[%{processid}]: %{message}
になります。
-
matchPattern
-
指定されたログ形式のデフォルトパターンを上書きします。カスタム形式を使用する場合は、この設定を使用してログエンティティから値を抽出します。
matchPattern
を指定する場合は、customFieldNames
も指定する必要があります。 customFieldNames
-
各キーと値のペアのJSONキーとして使用されるカスタムフィールド名。
matchPattern
から抽出した値のフィールド名を定義するために、または事前定義されたログ形式のデフォルトのフィールド名を上書きするために、この設定を使用できます。
例 : LOGTOJSON設定
JSON 形式に変換された Apache 共通ログエントリLOGTOJSON
の設定例を次に示します。
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" }
変換前:
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
変換後:
{"host":"64.242.88.10","ident":null,"authuser":null,"datetime":"07/Mar/2004:16:10:02 -0800","request":"GET /mailman/listinfo/hsdivision HTTP/1.1","response":"200","bytes":"6291"}
例 : カスタムフィールドによるLOGTOJSON設定
こちらは LOGTOJSON
設定の別の例です。
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "customFieldNames": ["f1", "f2", "f3", "f4", "f5", "f6", "f7"] }
この設定では、前の例と同じ Apache Common Log エントリが次のようにJSON形式に変換されます。
{"f1":"64.242.88.10","f2":null,"f3":null,"f4":"07/Mar/2004:16:10:02 -0800","f5":"GET /mailman/listinfo/hsdivision HTTP/1.1","f6":"200","f7":"6291"}
例 : Apache Common Log エントリの変換
次のフロー設定は、Apache 共通ログエントリを JSON形式の 1 行レコードに変換します。
{ "flows": [ { "filePattern": "
/tmp/app.log*
", "deliveryStream": "my-delivery-stream
", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
例 : 複数行レコードの変換
次のフロー設定は、最初の行が[SEQUENCE=
で開始している複数行レコードを解析します。各レコードはまず単一行レコードに変換されます。次に、値はタブの区切り記号に基づいたレコードから取得されます。抽出された値は、指定されたcustomFieldNames
値にマッピングされ、 JSON 形式で 1 行のレコードを形成します。
{ "flows": [ { "filePattern": "
/tmp/app.log*
", "deliveryStream": "my-delivery-stream
", "multiLineStartPattern": "\\[SEQUENCE=
", "dataProcessingOptions": [ { "optionName": "SINGLELINE" }, { "optionName": "CSVTOJSON", "customFieldNames": [ "field1
", "field2
", "field3
" ], "delimiter": "\\t
" } ] } ] }
例 : 一致パターンによるLOGTOJSON設定
Apache Common Log エントリLOGTOJSON
の設定例を JSON形式に変換し、最後のフィールド (バイト) を省略します。
{ "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG", "matchPattern": "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3})", "customFieldNames": ["host", "ident", "authuser", "datetime", "request", "response"] }
変換前:
123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] "GET /java/javaResources.html HTTP/1.0" 200
変換後:
{"host":"123.45.67.89","ident":null,"authuser":null,"datetime":"27/Oct/2000:09:27:09 -0400","request":"GET /java/javaResources.html HTTP/1.0","response":"200"}
システム起動時にエージェントを自動的に起動します。
sudo chkconfig aws-kinesis-agent on
エージェントのステータスの確認:
sudo service aws-kinesis-agent status
エージェントの停止:
sudo service aws-kinesis-agent stop
この場所からエージェントのログファイルを読む:
/var/log/aws-kinesis-agent/aws-kinesis-agent.log
エージェントのアンインストール:
sudo yum remove aws-kinesis-agent
Windows 用の Kinesis Agent はありますか?
Windows 用 Kinesis Agent は Linux プラットフォーム用 Kinesis Agent とは異なるソフトウェアです。
Kinesis Agent の速度が低下したり、RecordSendErrors
が増加したりするのはなぜですか?
通常、これは Kinesis のスロットリングが原因です。Kinesis Data Streams の WriteProvisionedThroughputExceeded
メトリクスまたは Firehose ストリームの ThrottledRecords
メトリクスを確認します。これらのメトリクスが 0 を超えている場合は、ストリームの上限を引き上げる必要があることを意味します。詳細については、「Kinesis Data Stream の制限」と「Firehose Streams」を参照してください。
スロットリングが原因ではないことがわかったら、Kinesis Agent が大量の小規模ファイルをテーリングするように設定されているかどうかを確認してください。Kinesis Agent が新しいファイルをテーリングするときには遅延が発生するため、少量の大きなファイルをテーリングするようにします。ログファイルを大きなファイルに統合してみてください。
java.lang.OutOfMemoryError
の例外が発生するのはなぜですか?
Kinesis Agent に、現在のワークロードを処理するための十分なメモリがないためです。/usr/bin/start-aws-kinesis-agent
で JAVA_START_HEAP
と JAVA_MAX_HEAP
を増やしてエージェントを再起動してみてください。
IllegalStateException : connection pool shut down
の例外が発生するのはなぜですか?
Kinesis エージェントに、現在のワークロードを処理するための十分な接続がないためです。/etc/aws-kinesis/agent.json
の一般的なエージェント設定で maxConnections
と maxSendingThreads
を増やしてみてください。これらのフィールドのデフォルト値は、使用可能なランタイムプロセッサの 12 倍です。エージェント設定の詳細については、AgentConfiguration「.java
Kinesis Agent に関する別の問題をデバッグする方法を教えてください。
DEBUG
レベルログは /etc/aws-kinesis/log4j.xml
で有効にできます。
Kinesis Agent はどのように設定するとよいですか?
maxBufferSizeBytes
の値が小さいほど、Kinesis Agent がデータを送信する頻度が高くなります。そのため、レコードの配信時間が短縮されますが、Kinesis への 1 秒あたりのリクエスト数も増えます。
Kinesis Agent が重複レコードを送信するのはなぜですか?
これはファイルテーリングの設定ミスが原因です。各 fileFlow’s filePattern
が それぞれ 1 つのファイルのみと一致するようにします。また、使用されている logrotate
モードが copytruncate
モードになっている場合にも発生することがあります。重複を避けるため、モードをデフォルトか作成モードに変更してみてください。重複レコードの処理に関する詳細は、「Handling Duplicate Records」を参照してください。