Amazon OpenSearch Serviceを使用してApacheログ分析をしてみた

2022.01.27

Amazon OpenSearch Serviceとは?

Amazon OpenSearch Service はAmazon ElasticSearch Service の後継サービスです。Amazon OpenSearch Service は、OpenSearch クラスターのデプロイ、オペレーション、およびスケーリングを容易にするサービスです。OpenSearch は完全なオープンソースの検索および分析エンジンです。

ユースケース:

  • ログ分析
  • リアルタイムのアプリケーションモニタリング
  • クリックストリーム分析

この記事では、Kinesis Firehoseを使用してApacheログをAmazon OpenSearch Serviceに送信し、OpenSearchでこのログを分析してみました。

 

 

やってみた

EC2 インスタンスの作成

  • この設定でEC2 インスタンスを作成しておきます。
    • AMI : Amazon Linux 2 AMI
    • インスタンスタイプ : t2.micro
    • Security Group :
      •  Inbound :SSH, HTTP, HTTPS
  • EC2 インスタンスに接続して、Apache ウェブサーバーをインストールしておきます。

 

sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd

 

  • インスタンスのパブリックIPを使用してWebサーバーをテストします。これにより、アクセスログが作成されます。
  • Apacheログは /var/log/httpd/ にあります。

 

Amazon OpenSearch Serviceの作成

  • OpenSearchコンソールで、Create domainを選択します。
  • ドメイン名を入力して、デプロイタイプでDevelopment and testingを選択しておきます。

 

 

  • データノードの設定
    • インスタンスタイプ : Default (r6g.large.search)
    • ノードの数 : 1
    • ストレージタイプ : EBS
    • EBS ボリュームタイプ : General Purpose SSD
  • ネットワークでパブリックアクセスを選択しておきます。
  • アクセスポリシーで[ドメインレベルのアクセスポリシーの設定]を選択しておきます。
    • タイプ : IPv4 address
    • プリンシパル : MyIP address
    • アクション : Allow
  • これらの設定でDomainを作成しておきます。

 

 

Kinesis Data Firehose Delivery Streamの作成

  • Kinesis Data Firehoseのコンソールで、Create Delivery Streamを選択します。
  • SourceでDirect PUTを選択して、 DestinationでAmazon OpenSearch Serviceを選択して、Deliveryストリーム名入力しておきます。

 

 

  • Transform recordsでEnableを選択して、[Create function]をクリックして関数を作成します。

 

  • Lambda blueprintsでApache Log to JSONを選択して、関数名とテーブル名を入力して、[Deploy]をクリックしておきます。

 

  • Transform recordsのLambda Functionで上記で作成したLambda関数を選択しておきます。
  • Destinationの設定:
    • OpenSearch Domain : 前の手順で作成しDomainを選択します。
    • Index : Lambda関数テーブル名と同じ名前。
    • Index rotation : 毎日

 

 

  • S3バケットを作成して、バックアップバケットとしてバケットを選択して、Delivery Streamを作成しておきます。

 

Kinesis Agentをインストールして設定する

  • EC2 インスタンスに接続して、次のコマンドを実行してKinesis Agentをインストールしておきます。
sudo yum install –y aws-kinesis-agent

 

  • エージェントを設定しておきます。

#Open agent.json file using some editor
sudo vi /etc/aws-kinesis/agent.json

#Add Firehose details in the file
{
    "cloudwatch.emitMetrics": true,
    "kinesis.endpoint": "", 
    "firehose.endpoint": "firehose.us-east-1.amazonaws.com", 
    
    # Specify Access KeyId and Secret AccessKey if you get credentials error while running Kinesis agent.
    #"awsAccessKeyId": "your access key Id",
    #"awsSecretAccessKey": " your secret access key",

    "flows": [
        {
            "filePattern": "/var/log/httpd/access_log",
            "deliveryStream": "your firehose delivery stream name",
            "initialPosition": "START_OF_FILE" 
        }
    ] 
}

 

  • エージェントを開始しておきます。
#start Kinesis agent
sudo service aws-kinesis-agent start

#You can check Kinesis logs for more details and errors
sudo tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log

#stop Kinesis agent
sudo service aws-kinesis-agent stop

#restart Kinesis agent
sudo service aws-kinesis-agent restart

 

  • ログファイルがOpenSearchに送信されていることをOpenSearchコンソールでみることができます。

 

OpenSearchダッシュボードを使用してログを分析および視覚化する

  • OpenSearchコンソールでドメインを選択して、OpenSearch Dashboards URLをクリックしておきます。
  • Explore on my ownを選択しておきます。

 

  • ホームページでManageをクリックしておきます。

 

  • Create index patternを選択して、インデックスパターン名を入力して、Nextを選択しておきます。

 

  • Time fieldで timestampを選択して、Index patternを作成しておきます。

 

  • Index patternを作成した後、ログのさまざまなフィールドを確認できます。

 

  • メニューで[Discover]を選択して、ログが作成された時間範囲を変更しておきます。
  • これで、個々のログとグラフを見ることができます。

 

 

  • メニューで[Visualize]を選択して、[Create new visualization]を選択しておきます。

 

  • 必要なVisualizationのタイプを選択しておきます。

 

  • フィルタとaxisパラメータを追加して、視覚化グラフをみることができますできます。

 

まとめ

Kinesis Firehoseを使用してApacheログをAmazon OpenSearch Serviceに送信し、OpenSearchでこのログを分析してみました。さまざまなフィールドとフィルターを使用してデータを視覚化できます。

Reference : Kinesis Agent Configuration

Amazon OpenSearch Service