Kinesis 代理不解析文件
Posted
技术标签:
【中文标题】Kinesis 代理不解析文件【英文标题】:Kinesis agent not parsing the file 【发布时间】:2017-11-26 04:08:27 【问题描述】:我在agent.json中有以下内容
"cloudwatch.emitMetrics": true,
"kinesis.endpoint": "",
"firehose.endpoint": "",
"flows": [
"filePattern": "/home/ec2-user/ETLdata/contracts/Delta.csv",
"kinesisStream": "ETL-rawdata-stream",
"partitionKeyOption": "RANDOM",
"dataProcessingOptions": [
"optionName": "CSVTOJSON",
"customFieldNames": [ "field1", "field2"],
"delimiter": ","
]
]
当我将指定的文件添加到文件夹时,实际上什么也没有发生。我只在日志中看到以下内容。为什么它根本不解析文件。有人知道吗?
更新:当我将文件模式设置为 /tmp/delta.csv 时,它可以工作。看起来像是权限问题,但日志中没有错误。
Tailer 进度:Tailer 已解析 0 条记录(0 字节),已转换 0 记录,跳过 0 条记录,并已成功发送 0 条记录到 目的地。 2017-06-22 18:12:03.671+0000 (Agent.MetricsEmitter 正在运行) com.amazon.kinesis.streaming.agent.Agent [INFO] 代理:进度:0 已解析的记录(0 字节),0 条记录成功发送到 目的地。正常运行时间:300020ms
【问题讨论】:
【参考方案1】:我遇到了类似的问题,我可以通过执行以下操作来解决它:
将要发送到 kinesis firehose 流(一堆 CSV 文件)的数据从 ~/ec2-user/out-data 移动到另一个目录:
mv *.csv /tmp/out-data
编辑 agent.json 文件,以便代理从文件开头开始读取 - 这是我的 agent.json 文件:
"cloudwatch.emitMetrics": true,
"firehose.endpoint": "firehose.eu-west-1.amazonaws.com",
"flows": [
"filePattern": "/tmp/out-data/trx_headers_2017*",
"deliveryStream": "TestDeliveryStream",
"initialPosition": "START_OF_FILE"
]
我的猜测是您的 Delta.csv 文件正在被写入,因此 kinesis 代理正在检查文件末尾并没有找到新记录,如果您添加 "initialPosition" : "START_OF_FILE"
修复,它将在文件开头开始解析.
【讨论】:
【参考方案2】:将您的数据移动到 /tmp/logs,/var/logs 将解决此问题。不要将数据留在 /ec2-user 下。
问题链接:https://github.com/awslabs/amazon-kinesis-agent/issues/58
【讨论】:
【参考方案3】:我也有同样的问题。我通过执行以下操作解决了它。
-
将数据移动到
var/logs/<anyfolder or file>
确保文件在写入后关闭。我在使用python时将日志写入文件后使用了f.close()
。
【讨论】:
以上是关于Kinesis 代理不解析文件的主要内容,如果未能解决你的问题,请参考以下文章
aws kinesis firehose 中的复制命令不起作用
Boto3 Kinesis Video GetMedia 和 OpenCV
使用 AWS kinesis-firehose 将数据写入文件