在 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, "-");
我正在将数据从云监视日志流式传输到 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, "-");