Mou*_*wi7 8 php amazon-web-services amazon-cloudwatch
我有一个PHP工作者,我可以在那里记录事件到AWS.不幸的是,当我尝试提交它时,我收到以下错误.
InvalidSequenceTokenException在" https://logs.eu-west-1.amazonaws.com " 上执行"PutLogEvents"时出错; AWS HTTP错误:客户端错误:
POST https://logs.eu-west-1.amazonaws.com导致400 Bad Request响应:{"_ _ type":"InvalidSequenceTokenException","expectedSequenceToken":"999999999999990356407851919528174(截断...)InvalidSequenceTokenException(client):给定的sequenceToken无效.下一个预期的sequenceToken是: 495599999999988500356407851919528174642 - {"_ _ type":"InvalidSequenceTokenException","expectedSequenceToken":"495573099999999900356407851919528174642","message":"给定的sequenceToken无效.下一个预期的sequenceToken是:495579999999900356407851919528174642"}
这是我的代码
$date = new DateTime();
$instance= = new CloudWatchLogsClient([
'region' => 'eu-west-1',
'version' => 'latest',
'credentials' => [
'key' => 'XXX',
'secret' => 'XXXX'
]
]);
$instance->putLogEvents([
'logGroupName' => "WorkerLog",
'logStreamName' => "log",
'logEvents' => [
[
'timestamp' => $date->getTimestamp(),
'message' => "test log"
]
]
]);
Run Code Online (Sandbox Code Playgroud)
http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
您必须在请求中包含序列标记.如果您没有,则必须使用describeLogStreams(http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeLogStreams.html)来获取流序列.
当您调用putLogEvents时,您将在响应中获得nextToken.您还必须为其他人推送到流并使nextToken无效的情况做好准备.(在这种情况下,您需要再次描述流以获取更新的令牌).
不DescribeLogStreams支持与 相同的音量通话PutLogEvent。如果频繁调用,您可能会受到限制。
推荐的方法是PutLogEvents直接调用并捕获InvalidSequenceTokenException. 然后使用消息PutLogEvents中的序列令牌重试InvalidSequenceTokenException。
正确的序列token可以在expectedSequenceToken字段中找到InvalidSequenceTokenException
try {
$result = $client->describeLogStreams([
'logGroupName' => $logGroupName,
'logStreamNamePrefix' => $logStreamName,
]);
$uploadSequenceToken = $logStreams[0]['uploadSequenceToken'];
$client->putLogEvents([
'logGroupName' => $logGroupName,
'logStreamName' => $logStreamName,
'logEvents' => [
[
'timestamp' => $timestamp,
'message' => $message
],
],
'sequenceToken' => $uploadSequenceToken,
]);
} catch (\InvalidSequenceTokenException $e) {
$client->putLogEvents([
'logGroupName' => $logGroupName,
'logStreamName' => $logStreamName,
'logEvents' => [
[
'timestamp' => $timestamp,
'message' => $message
],
],
'sequenceToken' => $e->expectedSequenceToken,
]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4608 次 |
| 最近记录: |