Amazon OpenSearch Service でログ分析ダッシュボードを作成してみた

AWS

2024.12.5

Topics

この記事は NHN テコラス Advent Calendar 2024 の 5 日目の記事です。

はじめに

AWS のベストプラクティスでは、障害やセキュリティインシデントなどに備えて、ログをいつでも分析できる状態にしておくことが推奨されています。
SEC04-BP02 ログ、結果、メトリクスを一元的に分析する – AWS Well-Architected Framework
OPS08-BP03 ワークロードメトリクスを収集および分析する – AWS Well-Architected Framework

そんなログ分析ツールの 1 つに OpenSearch があります。
今回は OpenSearch を利用したログダッシュボードの利用方法を紹介します!

かなり簡単にログを分析できるダッシュボードを作成できますので、「ダッシュボードを作成したことがない!」や「ダッシュボードの作成方法がよく分からない」といった方に特におすすめの内容となっています!

Amazon OpenSearch Service とは?

ダッシュボードの解説に入る前に OpenSearch について簡単に説明します。

Amazon OpenSearch Service は、 AWS クラウドでの OpenSearch クラスターのデプロイ、運用、スケーリングを容易にするマネージドサービスです。
OpenSearch は、ログ分析、リアルタイムアプリケーションモニタリング、クリックストリーム分析などのユースケース向けの、完全にオープンソースの検索および分析エンジンです。
Amazon OpenSearch Service とは – Amazon OpenSearch サービス

Amazon OpenSearch Service は OSS である OpenSearch をマネージドに利用できるサービスです。
OpenSearch では収集したログを可視化するダッシュボードを作成できます。
(全文検索エンジンとしても利用されますが、本記事ではそちらの用途には触れません。)

OpenSearch は EC2 にインストールして自由にカスタマイズしながら利用することもできますが、Amazon OpenSearch Service を利用することで OS やミドルウェアの管理を行う必要がなく運用の手間を少なくすることができます。

以下では、ややこしさ回避のため AWS のサービスである Amazon OpenSearch Service も OSS の OpenSearch どちらも OpenSearch と記載します。
本記事を読むにあたってはこれらの違いは意識しなくても大丈夫です。

ダッシュボード構築

ダッシュボードの構築は大きく分けて以下の 3 つの手順になります。

  1. OpenSearch ドメインの構築
  2. ログの転送設定
  3. ダッシュボードのセットアップ

今回は以下のような CloudWatch Logs のログを OpenSearch ダッシュボードで可視化してみます。

1. OpenSearch ドメインの構築

まずは、ダッシュボードをホストするための OpenSearch ドメインを作成します。

基本的に設定値はデフォルトのままで問題ありませんが、以下の設定は変更してください。
また、マスターユーザ名とマスターユーザパスワードは後で使うのでメモしておいてください。

  • ネットワーク: 「パブリックアクセス」を有効化
  • きめ細かなアクセスコントロール: 「きめ細かなアクセスコントロール」を有効化
  • ドメインアクセスポリシー: 「きめ細かなアクセスコントロールのみを使用」を有効化

15 分程度待つとリソースが作成されます。
OpenSearch Dashboards の URL からダッシュボードにアクセス可能になります。

2. ログの転送設定

ダッシュボードに表示したい CloudWatch Logs のロググループでサブスクリプションフィルターを作成します。

OpenSearch ドメインへ転送するように作成しますが、実際には自動的に作成された Lambda 関数を経由してから OpenSearch ドメインへ転送されます。
そのため、LogsToElasticsearch_ で始まる名前の Lambda 関数へログを転送するように設定できれば OK です。

3. ダッシュボードのセットアップ

手順 1 で作成した OpenSearch ドメインのダッシュボード URL にアクセスします。
ユーザ名とパスワードを要求されるので、設定したマスターユーザ名とマスターパスワードを入力しましょう。

ダッシュボードにて設定する項目は以下の 3 つです。

  • ログ転送権限の設定
  • インデックスパターンの作成
  • Visualization の作成・配置

3-1. ログ転送権限の設定

まずはログを転送することを許可するように権限を設定します。
OpenSearch ではきめ細かなアクセスコントロールが有効な場合、AWS 側からの許可と OpenSearch 側からの許可の両方が必要になります。

今回は Lambda 関数の実行ロールに all_access 権限を付与します。
all_access 権限を選択して Backend roles に Lambda 関数の実行ロールの ARN を入力します。

正常に権限を設定できれば cwl-yyyy.mm.dd (yyyy.mm.dd はインデックスの作成日時) の名前でインデックスが作成されます。

インデックスとは OpenSearch のデータを管理する単位です。
RDB のテーブルをイメージしてもらえれば問題ありません。
インデックスの管理 – OpenSearch ドキュメント

3-2. インデックスパターンの作成

続いて、インデックスパターンを作成します。
インデックスパターンを作成することで複数のインデックスのデータを一度に検索・参照することができます。
Index patterns – OpenSearch Documentation

CloudWatch Logs から転送されるログは cwl-yyyy.mm.ddというインデックスで管理されるので、複数日のログを参照できるように cwl-*というインデックスパターンを作成します。

インデックスパターンを作成したら「Discover」を見てみましょう。
Discover 画面では作成したインデックスパターンに対して検索することができます。

画面右下のテーブルにロググループ名・ログストリーム ID・ログメッセージが表示されるように、画面左のフィールドを選択しましょう。
BI ツールでよく見る感じのテーブルになりましたね!

3-3. Visualization の作成・配置

ここまでの手順でダッシュボード完成!としても良いのですが、OpenSearch ではさらにカスタマイズされたダッシュボードを作成することも可能です。
それが Visualization を利用したダッシュボードです。

Visualization とはインデックスパターンのデータを特定の形で可視化するオブジェクトです。
OpenSearch では 20 種類以上の Visualization がサポートされています。
Building data visualizations – OpenSearch Documentation

これらの一部を用いて作成したダッシュボードがこちらです!

今回のダッシュボードには「Controls」、「Metric」、「TSVB」という 3 つの Visualization を使用しています。
それぞれの Visualization の特徴は以下の通りです。

  • Controls
    • 指定したフィールドの値で表示するデータをフィルタリング
    • 今回はロググループ名とログストリーム ID でフィルタできるように設定

  • Metric
    • 特定の条件に該当するデータの数を表示
    • 今回はエラーログの数を表示

  • TSVB
    • 時間軸データを様々な方式で可視化
    • 今回はログ総数のグラフを作成

今回使用していない Visualization にも便利なものがあるので、自分だけのダッシュボードを作ってみてください!

最後に

今回は OpenSearch を利用してログを分析可能なダッシュボードを作成してみました!

手順の最初から最後まで GUI で操作することができ、OpenSearch に慣れていない方でも簡単にダッシュボードを作成することができます。
更にマネージドに OpenSearch を利用しており、インフラリソースも AWS 管理であるため、運用の手間も少なくすることができます。

そのため、今回の記事はダッシュボードの構築を初めて行うという方にはぴったりかと思います。
是非、ダッシュボードを作成してログを分析してみてください!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

henge

第二SAチームのhengeです。 ゲームとゴルフが好きなエンジニアです。 よろしくお願いします。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら