Tengo dos grupos de registro generados por dos lambda diferentes. Cuando suscribo un grupo de registro a mi servicio de búsqueda elástica, está funcionando. Sin embargo, cuando agrego el otro grupo de registro, tengo el siguiente error en el registro generado por cloudwatch:
"responseBody": "{\"took\":5,\"errors\":true,\"items\":[{\"index\":{\"_index\":\"cwl-2018.03.01\",\"_type\":\"/aws/lambda/lambda-1\",\"_id\":\"33894733850010958003644005072668130559385092091818016768\",\"status\":400,\"error\": {\"type\":\"illegal_argument_exception\",\"reason\":\"Rejecting mapping update to [cwl-2018.03.01] as the final mapping would have more than 1 type: [/aws/lambda/lambda-1, /aws/lambda/lambda-2]\"}}}]}"¿Cómo puedo resolver esto y seguir teniendo ambos grupos de registros en mi servicio de Elasticsearch y visualizar todos los registros?
Gracias.
El problema es que ElasticSearch 6.0.0 realizó un cambio que permite que los índices solo contengan un solo tipo de mapeo. ( https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html ) Supongo que está ejecutando una instancia de servicio de ElasticSearch que usa la versión 6.0.
El archivo Lambda JS predeterminado, si se crea a través de la consola de AWS, establece el tipo de índice en el nombre del grupo de registro. Un ejemplo del archivo JS está en esta esencia ( https://gist.github.com/iMilnb/27726a5004c0d4dc3dba3de01c65c575 )
Línea 86: action.index._type = payload.logGroup;
Personalmente, tengo una versión modificada de ese script en uso y cambié esa línea para que sea:
action.index._type = 'cwl';
Tengo registros de varios grupos de registros diferentes que se transmiten a través de la misma instancia de ElasticSearch. Tiene sentido que todos sean del mismo tipo, ya que todos son registros de CloudWatch en lugar de que el tipo sea el nombre del grupo de registros. El nombre también se establece en el campo @log_group para que las consultas puedan usarlo para filtrar.
En mi caso, hice lo siguiente:
cwl-2018.03.07 por ejemplo) para cambiar el tipo de documentos antiguos de <log group name> a cwlTambién puede modificar el código Lambda generado como se muestra a continuación para que funcione con varios grupos de registro de CW. Si la función Lambda puede crear un índice ES diferente para los diferentes flujos de registros que se encuentran en los mismos grupos de registros, podemos evitar este problema. Por lo tanto, debe encontrar la función de Lambda LogsToElasticsearch_<AWS-ES-DOMAIN-NAME> , luego la función de function transform(payload) y, finalmente, cambiar la parte de formación del nombre del índice como se muestra a continuación.
// index name format: cwl-YYYY.MM.DD //var indexName = [ //'cwl-' + timestamp.getUTCFullYear(), // year //('0' + (timestamp.getUTCMonth() + 1)).slice(-2), // month //('0' + timestamp.getUTCDate()).slice(-2) // day //].join('.'); var indexName = [ 'cwl-' + payload.logGroup.toLowerCase().split('/').join('-') + '-' + timestamp.getUTCFullYear(), // log group + year ('0' + (timestamp.getUTCMonth() + 1)).slice(-2), // month ('0' + timestamp.getUTCDate()).slice(-2) // day ].join('.');¿Es posible reenviar todos los grupos de registro de CloudWatch a un solo índice en ES? Como tener un índice "rds-logs-*" para transmitir registros de todas mis instancias de RDS disponibles. ejemplo: los registros de errores, los registros de consultas lentas, los registros generales, etc., de todas las instancias de RDS, ¿deberían insertarse en el mismo índice (rds-logs-*)?
Intenté el cambio de código mencionado anteriormente, pero solo envía el último grupo de registro que había configurado.
Desde AWS: de forma predeterminada, solo 1 grupo de registro puede transmitir datos de registro al servicio ElasticSearch. Si intenta transmitir dos grupos de registros al mismo tiempo, los datos de registro de un grupo de registros anularán los datos de registro del otro grupo de registros.
Quería comprobar si tenemos una solución alternativa para lo mismo.