AWSではCloudWatch LogsからElasticsearch Serviceにログを送ってKibanaで見るという運用ができるが、デフォルトだとインデックス名が「cwl-YYYY.MM.DD」固定になる。
複数のログを送る時など、インデックス名を変えたいこともあると思うのでその時のための覚書。
インデックス名はLambdaで定義
CloudWatch Logs -> Elasticsearch Serviceのログ送信は裏側でLambdaを走らせている。
セットアップをした時に勝手にLambdaファンクションが作られているので、それのコードを書き換えればOK
設定箇所
60〜70行目あたりに該当コードがあります。
payload.logEvents.forEach(function(logEvent) {
var timestamp = new Date(1 * logEvent.timestamp);
// 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」がそのままファイル名になるので、ここを任意の名前に書き換えればインデックス名を分けることが可能です。
その下のコードを見ると「payload.logGroup」からは「ロググループ」が「payload.logStream」からは「ログストリーム」の値が取れる様子なので、その辺りでif分岐かければいいんじゃないかなと思います。
if分岐に使えそうな値一覧
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;```