在 Lambda 的索引名称中包含日志组名称

Include loggroup name in the indexname for Lambda

我正在将数据从云监视日志流式传输到 Elastic Search 集群,我希望索引模式包含日志组。下面是 lambda 代码。

默认 -

var source = buildSource(logEvent.message, logEvent.extractedFields);
source['@id'] = logEvent.id;
source['@timestamp'] = new Date(1 * logEvent.timestamp).toISOString();
source['@message'] = logEvent.message;
source['@owner'] = payload.owner;
source['@log_group'] = payload.logGroup;
source['@log_stream'] = payload.logStream;
var x = source['@log_group'];
console.log('hello');
        // 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 source = buildSource(logEvent.message, logEvent.extractedFields);
source['@id'] = logEvent.id;
source['@timestamp'] = new Date(1 * logEvent.timestamp).toISOString();
source['@message'] = logEvent.message;
source['@owner'] = payload.owner;
source['@log_group'] = payload.logGroup;
source['@log_stream'] = payload.logStream;
var x = source['@log_group'];
// index name format: cwl- myloggroup - YYYY.MM.DD
var indexName = [
    'cwl-' + x + '- ' + timestamp.getUTCFullYear(),              // year
    ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
    ('0' + timestamp.getUTCDate()).slice(-2)          // day,
].join('.');

编辑

  var indexName = [
            'cwl-' + x + '-' + timestamp.getUTCFullYear(),              // year
            ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
            ('0' + timestamp.getUTCDate()).slice(-2),source['@log_group'].toString()          // day,
        ].join('.');

但是随着这种变化,数据流失败了。我不确定是什么导致了这个问题。

硬编码文本

// index name format: cwl-YYYY.MM.DD
var indexName = [
    'cwl-' + 'test' + timestamp.getUTCFullYear(),              // year
    ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
    ('0' + timestamp.getUTCDate()).slice(-2)          // day
].join('.');

我不确定您为什么将日志组名称放在索引名称中,但是如果您想根据日志组过滤基于日志的您,您可以使用日志源名称即 log-group 进行过滤。

由于命名约定,在索引中追加日志组名称时,ELK 可能会创建索引失败,因为 AWS 日志组通常包含斜杠字符。

索引名称的规则编码在 MetaDataCreateIndexService 254 中。本质上:

Lowercase only
Cannot include \, /, *, ?, ", <, >, |, space (the character, not the word), ,, #
Indices prior to 7.0 could contain a colon (:), but that's been deprecated and won't be supported in 7.0+
Cannot start with -, _, +
Cannot be . or ..
Cannot be longer than 255 characters

其次,您可以看到硬编码的名称,因为您将其放在正确的位置,因为您第一次尝试在当天添加名称 section.The 日期时间处理器的目的是指向文档通过使用日期数学索引名称支持,根据文档中的日期或时间戳字段添加到基于正确时间的索引。

 var indexName = [
            'cwl-'+source['@log_group'].toString()+ '-' + timestamp.getUTCFullYear(),              // year
            ('0' + (timestamp.getUTCMonth() + 1)).slice(-2),  // month
            ('0' + timestamp.getUTCDate()).slice(-2),         // day,
        ].join('.');

或者您可以替换日志组名称中的所有特殊字符。

source['@log_group'].toString().replace(/[^A-Z0-9]+/ig, "-");