0
0

More than 5 years have passed since last update.

CloudWatch Logs InsightsとFlowLogs+Athenaでログ分析(準備編)

Last updated at Posted at 2019-05-30

CloudWatch

  • 目的
    • 監視
    • ログ取得
  • 用途
    • ホストに入らずログを確認できる
    • ログを保存期間を定めて、その期間ログの消失を防ぐ
    • 障害発生時、起動しないEC2のログをS3に保存する設定をしておくことで確認できる
    • ログを改ざんに気づける
    • ログローテーションされてもログを見るられる

SystemsManager(SSM)

  • SystemsManagerとは
    • AWSのインフラストラクチャを可視化し、制御する
    • AWSサービスの運用データを確認でき、運用タスクを自動化できる
  • 自動化ツール
    • インベントリ
    • オートメーション
    • ランコマンド
    • パッチマネージャー
    • メンテナンスウィンドウ
    • ステートマネージャー
    • パラメータストア

Run Command

  • 対象
    • Windows/Linux
  • 用途
    • ログインせずにコマンド実行
    • 実行をCloudTrailで追跡可能
    • タイムアウトやリトライ回数制御
    • 実行対象はタグ、インスランス指定
    • 実行内容はドキュメントとしてJSONで定義
  • デフォルトで用意されているドキュメント
    • SSMAgentアップデート
    • EC2Configアップデート
    • コマンド実行(Shell/powershell)
    • Dockerアクション
    • AD参加
    • Windowsアップデート
    • msiインストール
    • など...
  • 備考
    • 実行結果が2500文字までしか見れない(それ以上全てみる場合はS3に保存する)

パラメータストア

  • 用途
    • 値の一元管理
    • パスワード、ライセンスキー等を管理
    • 文字列またはリストを指定可能
    • 暗号化も可能
    • {{ssm変数名}}

SSMからパラメータストアを作成し、保存する

  • 作成手順

    • 左ペインの最下部に移動して[パラメータストア]を選択
    • オレンジ色の[パラメータの作成]をクリック image.png
    • [名前]と[値]を入力し、オレンジ色の[パラメータの作成]をクリック
    • ※値の入力例は画像以下の「パラメータの値」を参考にしてください。 image.png
  • パラメータの値

{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/httpd/*-access_log",
                        "log_group_name": "isftest.ml",
                        "log_stream_name": "{instance_id}-access_log",
                        "timezone": "Local",
                        "timestamp_format": "%b %d %H:%M:%S"
                    },
                    {
                        "file_path": "/var/log/httpd/*-error_log",
                        "log_group_name": "isftest.ml",
                        "log_stream_name": "{instance_id}-error_log",
                        "timezone": "Local",
                        "timestamp_format": "%b %d %H:%M:%S"
                    },
                    {
                        "file_path": "/var/log/messages",
                        "log_group_name": "/var/log/messages",
                        "timezone": "Local",
                        "timestamp_format": "%b %d %H:%M:%S"
                    },
                    {
                        "file_path": "/var/log/secure",
                        "log_group_name": "/var/log/secure",
                        "timezone": "Local",
                        "timestamp_format": "%b %d %H:%M:%S"
                    }
                ]
            }
        }
    }
}

EC2にCloudWatchエージェントをインストール

CloudWatch Logs Insights クエリ構文

Amazon Athena

  • AmazonAthenaとは
    • 標準SQLを使用してアドホッククエリの実行を開始できる
    • サーバーレスであり、インフラストラクチャの設定管理は不要
    • 実行したクエリのみに課金される
    • 自動的にスケールするため大規模なデータセットや複雑なクエリでも結果が早い
  • 用途
    • S3に保存された非構造化・構造化データを分析できる
    • CSV 形式、JSON 形式、列データ形式に対応
    • AthenaはAmazonQuickSightと統合しているため、データを簡単に可視化できる
    • DBCやODBCを介してBIツールやSQLクライアントに接続し、レポート生成・データ探索を行う
    • AthenaはAWSGlueデータカタログを統合することで永続的なメタデータストアを提供
  • アクセス
    • AWS マネジメントコンソール (JDBC または ODBC 接続経由)
    • Athena API
    • Athena CLI
  • テーブル、データベース、およびデータカタログの理解
    • テーブルのメタデータはS3内のデータ保存先と列名、データ型、テーブル名のデータ構造を指定
    • クエリ対象のデータセットごとに基となるテーブルが必要
    • テーブルに取得したクエリの結果が返される
    • 事前にAthenaにテーブルを登録しておく必要があり、手動か自動で行う

テーブルの手動作成方法

VPCFlowLogsのS3に保存したものを基にAthenaでテーブル作成

  • 手順

    • S3バケットを作成する(作成手順は省略) image.png
    • 任意のVPCをクリックし、[アクション]>[フローログの作成]をクリックする。
      image.png
    • 送信先を[S3バケットへの送信]に変更し、[S3バケットARN]を入力し、[作成]をクリック image.png
    • 指定したS3バケット内にファイルがされることを確認
    • サービス名[Athena]を選択 image.png
  • [新しいクエリ]に以下のDLLステートメントをコピーし、一部各自環境に併せて修正する。
    image.png

CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs (
  version int,
  account string,
  interfaceid string,
  sourceaddress string,
  destinationaddress string,
  sourceport int,
  destinationport int,
  protocol int,
  numpackets int,
  numbytes bigint,
  starttime int,
  endtime int,
  action string,
  logstatus string
)  
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://your_log_bucket/prefix/AWSLogs/{subscribe_account_id}/vpcflowlogs/{region_code}/'
TBLPROPERTIES ("skip.header.line.count"="1");
  • [prefix]と[{subscribe_account_id}]、[{region_code}]の情報は以下の写真を参照
      スクリーンショット 2019-05-30 11.04.30.png

  • S3の[location]を変更し、[新しいクエリ]にコピーして実行する

    ALTER TABLE vpc_flow_logs
    ADD PARTITION (dt='YYYY-MM-dd')
    location 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';

    image.png

  • ドキュメント

用語

  • ビジネスインテリジェンスツール(BIツール)
    • 企業に蓄積された大量のデータを集めて分析し、迅速な意思決定を助けるツール
  • アドホッククエリ
    • Facebookが公開した新しい分散処理基盤,Presto
    • 超大規模なデータセットに対してインタラクティブに結果を返せるようにと開発
    • 中間データをメモリが持つことで高速化しているため、メモリキャパシティエラーの原因
    • 一回のクエリ内で,複数のデータソースからデータを参照できる
      • 複数データソース(HBase, Cassandra, MySQL, etc...)
  • ODBC (Open Database Connectivity)
    • 関係データベース管理システム (RDBMS) にアクセスするための共通インタフェース (API)
  • JDBC (Java Database Connectivity)
    • Javaアプリケーションからデータベースを操作するAPI
    • JDKのコアAPIとしてjava.sqlパッケージに実装されています
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0