I was hoping there's is some "append only" or "mostly append" service by amazon that is designed for logging.
Como o Amazon Kinesis, talvez?
With Amazon Kinesis you can have producers push data directly into an Amazon Kinesis stream. For example, system and application logs can be submitted to Amazon Kinesis and be available for processing in seconds. This prevents the log data from being lost if the front end or application server fails. Amazon Kinesis provides accelerated data feed intake because you are not batching up the data on the servers before you submit them for intake."
Eu ainda não tentei isso, porque eu tenho um processo supervisório homebrew que usa S3 e SQS ... no início de um fluxo, ele cria nomes exclusivos para os arquivos temporários (na instância) que irão capturar o arquivo. registra e envia uma mensagem via SQS que resulta na informação sobre o processo e seus locais de arquivo de log serem armazenados em um banco de dados; quando o processo é interrompido (estes são planejados ou orientados a eventos, em vez de executar continuamente tarefas), outra mensagem SQS é enviada, que contém informações redundantes sobre onde os arquivos temporários estavam e me fornece o status de saída do processo; então ambos os logs (out e error) são compactados e enviados para o S3, com cada um desses processos gerando mensagens SQS adicionais relatando o status de upload do S3 ...
As mensagens do SQS, como você pode observar, são em grande parte redundantes, mas isso é projetado para praticamente eliminar a chance de que eu não conheça algo sobre a existência do processo, já que todas as 4 mensagens (start, stop, stdout-upload-info, stderr-upload-info) contêm informações suficientes para identificar o host, o processo, os argumentos e para onde os arquivos de log irão, se foram ou deveriam ter sido, no S3. É claro que toda essa redundância foi quase totalmente desnecessária, já que o processo e o SQS / S3 são muito estáveis, mas a redundância existe se for necessária.
Eu não preciso de registro em tempo real para esses trabalhos, mas se o fizesse, outra opção seria modificar o coletor de logs para que, em vez de salvar os logs e enviá-los em bloco para o S3, eu pudesse, para cada "x" bytes de log coletados ou a cada "y" segundos de tempo de execução - o que ocorrer primeiro - "liberar" os dados acumulados em uma mensagem SQS ... não haveria necessidade de enviar uma mensagem SQS para cada linha.