Kinesis Data Firehose: ストリーミングデータ(ログ等)をS3/Elasticsearch/Redshift/Splunk等に送信 †
ログ分析 †
td-agent-bit(fluent-bit)からの利用 †
AWSの最近の対応(Fargate, docker image提供)を見ると、この選択肢が良さそう
td-agent(fluentd)からの利用 †
aws-kinesis-agent: EC2等へインストールしてデータを送信する †
- aws-kinesis-agenton EC2 -> Kinesis Firehose -> S3やElasticsearchへ転送等ができる
- 対象のログは aws-kinesis-agent-user ユーザで読み取る権限が必要。
- deliveryStream:だと、Firehose が使われる。間違って kinesisStream: を指定すると、kinesis Streamが使われるので注意。
- /etc/sysconfig/aws-kinesis-agent
- aws access key等を記載する。EC2の場合はIAM roleの方が良い。
- AGENT_LOG_LEVEL="TRACE" とすると、送信できない場合にログが出る
- /etc/aws-kinesis/agent.json
- jsonの行頭にスペースが存在してもエラーにはならない
- v1.1.5.1: flows: []が必須。存在しないと、NullPointerExceptionが発生した。
{
"cloudwatch.emitMetrics": false,
"cloudwatch.endpoint": "monitoring.ap-northeast-1.amazonaws.com",
"firehose.endpoint": "firehose.ap-northeast-1.amazonaws.com",
"kinesis.endpoint": "",
"flows": [
]
}
- /etc/aws-kinesis/agent.d/
- /var/run/aws-kinesis-agent/checkpoints
- SQLite形式で、kinesis-agentが読んだファイル等を保存している
aws-kinesis-agent: logrotateでcopytruncateの場合、Exceptionが発生しつづける †
正規表現 †
ログフォーマットサンプル †
- SYSLOGフォーマット(/var/log/messages, secure等)
- /etc/aws-kinesis/agent.d/messages.json
{
"flows": [
{
"dataProcessingOptions": [
{
"logFormat": "SYSLOG",
"optionName": "LOGTOJSON"
}
],
"deliveryStream": "yourdeliverystream",
"filePattern": "/var/log/messages*"
}
]
}
複数行のログ †
EC2 metadataをログに追加する †
- /etc/aws-kinesis/agent.d/messages.json
{
"flows": [
{
"dataProcessingOptions": [
{
"logFormat": "SYSLOG",
"optionName": "LOGTOJSON"
},
{
"logFormat": "SYSLOG",
"optionName": "ADDEC2METADATA"
}
],
"deliveryStream": "yourdeliverystream",
"filePattern": "/var/log/messages*"
}
]
}