← All Articles

CLIを使ってLogsInsightsの情報を取得する。

Posted on

はじめに

LogsInsightsの情報の取得にAWS CLIが使用できます。

CloudShell上でログの日本語が文字化けしないかも気になったので 実際に実行して確認してみました。

やること

あらかじめロググループにログを準備しておき CloudShellからクエリ実行します。

やってみた。

1) ログを準備する。

コンソールからロググループ、ストリーム,イベントメッセージを登録します。

  • ロググループ : /loginsight/test
  • ストリーム : test
  • イベントメッセージ : これはテストです

20210224-1

2) Logs Insightsのクエリを実行する。

InsightsのクエリをCLIで実行します。 CLIの出力としてクエリのIDが返ってきます。

コマンドを少し補足すると スキャンするログの開始、終了時刻をUNIXタイムで指定する必要があります。

ここではあらかじめ現在の日時をTODAY,24時間前の日時をYESTERDAYに変数にいれて、 Insightsを実行するコマンドの引数に入れています。

■入力

TODAY=$(date +%s)
YESTERDAY=$(date +%s --date '1 days ago')

aws logs start-query \
--log-group-name '/loginsight/test' \
--start-time $YESTERDAY \
--end-time $TODAY \
--query-string 'fields @timestamp, @message | sort @timestamp desc| limit 4'

■出力

{
    "queryId": "775673be-bce4-4ef3-8152-e7e7d926fe3a"
}

3) クエリのIDを使って抽出結果を取得する。

先ほどのIDをquery-id の引数にしてCLIを実行します。

出力の @message のvalueがちゃんと[“これはテストです”]となっていることがわかります。

■入力

aws logs get-query-results \
--query-id 'd79c01e7-449f-46b5-9220-082a76b9d38d'

■出力

{
    "results": [
        [
            {
                "field": "@timestamp",
                "value": "2021-02-23 12:13:45.768"
            },
            {
                "field": "@message",
                "value": "これはテストです"
            },
            {
                "field": "@ptr",
                "value": "ClkKIQodOTczNDc5NTI5NTQyOi9sb2dpbnNpZ2h0L3Rlc3QQBhI0GhgCBgIuVfAAAAAAumF6TgAGA08UQAAAAAIgASioh732/C4wqIe99vwuOAFAN0iiClDQBhAAGAE="
            }
        ]
    ],
    "statistics": {
        "recordsMatched": 1.0,
        "recordsScanned": 1.0,
        "bytesScanned": 55.0
    },
    "status": "Complete"
}

まとめ

CloudShellからLogsInsightsのCLIが実行できること

日本語も文字化けしないことを確認できました。

UNIXタイムに変換するのがなかなか大変ですが、dateコマンドをうまく活用していけば大丈夫そうです。

参考サイト

Amazon CloudWatch Logs InsightsをCLIから使ってみた #reinvent

技術AWSLogs InsightsCLI