Получение SerializationException при попытке PutLogEvents на облачные часы с помощью golang - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь добиться следующих результатов с помощью моей программы: Создать log-группу на облачных часах aws Создать log-поток под вышеуказанной log-группой Поместить log-события под вышеуказанный log-stream

Все это с помощью go lang

package main

import (
    "time"
    "fmt"
    "github.com/jcxplorer/cwlogger"
    "github.com/aws/aws-sdk-go/service/cloudwatchlogs"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws"
)

func main() {
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))

    svc := cloudwatchlogs.New(sess)
    logGroupName := "my-log-group";
    logStreamName := "my-log-stream";
    logGroupInput := cloudwatchlogs.CreateLogGroupInput{LogGroupName: &logGroupName}
    svc.CreateLogGroup(&logGroupInput);
    logStreamInput := cloudwatchlogs.CreateLogStreamInput{LogGroupName: &logGroupName, LogStreamName: &logStreamName}
    svc.CreateLogStream(&logStreamInput)

    logevents := make([]*cloudwatchlogs.InputLogEvent, 1)

    logevents = append(logevents, &cloudwatchlogs.InputLogEvent{
        Message:   aws.String("Simple log message"),
        Timestamp: aws.Int64(111),
    })

    p := cloudwatchlogs.PutLogEventsInput{LogEvents: logevents, LogGroupName: &logGroupName, LogStreamName: &logStreamName}
    resp, err := svc.PutLogEvents(&p)
    if err != nil {
        panic(err)
    }
    fmt.Print("Next Token: {}", resp.NextSequenceToken)
}

Теперь, когда я запускаю приведенный выше код, он успешно создает log-group и log-stream, и я могу убедиться в этом в aws cloudwatch. Но по какой-то причине PutLogEvents завершается ошибкой:

panic: SerializationException: 
    status code: 400, request id: 0685efcc-47e3-11e9-b528-81f33ec2f468

Я не уверен, что здесь может быть не так. Любое предложение или направление будет действительно полезным.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 марта 2019

Причиной исключения SerializationException было: logevents := make([]*cloudwatchlogs.InputLogEvent, 1) с последующим добавлением, которое создало первую пустую запись в слайсе. Я заменил код на logevents := make([]*cloudwatchlogs.InputLogEvent, 0) и это решено.

Кроме того, во время отладки, чтобы выяснить, почему журналы не заполняются, я выяснил, что используемое значение метки времени недопустимо. В соответствии с документацией aws, отметка времени для каждого события не может быть старше 14 дней и не должна превышать 2 часов в будущем. Вот ссылка: https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html

Надеюсь, что в будущем это поможет кому-то, кто столкнется с подобной проблемой.

...