2015-01-06 29 views
8

1)フィルタリングし、2)Cloudwatchから生ログデータをAPIまたはCLI経由で取得する方法はありますか?分析のためにCloudwatchからログイベントのサブセットを抽出する必要があります。Amazon Cloudwatchから生ログイベントデータをフィルタリングして抽出する方法

メトリックなどを作成する必要はありません。これは、特定のイベントの歴史的調査のためのものです。

私はコンソールのログビューアに行ってきましたが、特定の時間についての話をするために特定の行を引き出そうとしています。ログビューアは、この目的のために使用することは不可能です。実際のログファイルがあれば、私はgrepして約3秒で完了します。しかし、私はしません。 Cloudwatch Logsの説明では

明確化

、それはあなたが元のログデータを見ることができます」、と言う(だけでWeb表示に?)必要であれば、問題の原因を確認してください。ログデータあなたはハードドライブをいっぱいにすることを心配する必要がないように、耐久性があり、低コストのストレージを使用する必要がある限り、(ウェブビューでのみ)を保存してアクセスすることができます。 - 本体が鉱山です

このコンソールビューがソースデータを取得する唯一の方法である場合、Cloudwatch経由でログを保存することは、私の目的には受け入れられない解決方法です。私はパターンを検索するのに十分な柔軟性を持って実際のデータを取得する必要があります。数十ページの行をクリックしたり、コピー/貼り付けしたりする必要はありません。しかし、ソースデータにアクセスするより良い方法は利用できないようです。

答えて

26

AWSCLI:AWSログフィルタログ・イベント

AWSCLIは、AWSサービスのためのCLI公式で、今ではあまりにもログをサポートしています。

ヘルプを表示するには:

$ aws logs filter-log-events help 

フィルタがに基づいてすることができます。

  • ログ・グループ名--log-group-name(最後のもののみが使用されている)
  • ログ・ストリーム名--log-stream-name(指定することができます複数回)
  • 開始時刻--start-time
  • 終了時刻--end-time(ない--stop-time
  • フィルタパター--filter-pattern

のみ--log-group-name必須です。

時間はミリ秒(秒ではない)を使用してエポックとして表されます。

呼び出しは次のようになります。

$ aws logs filter-log-events \ 
    --start-time 1447167000000 \ 
    --end-time 1447167600000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text 

それは、タブ区切りテキストの6列を出力します。

  • 第一:EVENTSは(表すために、ラインは、ログレコードやその他のない情報であり、 eventId
  • 第三:第2回)
  • timestamp(時間はイベント時刻として記録によって宣言)
  • 第4回:logStreamName
  • 第5回:message
  • 6位:だからingestionTime

お手元にLinuxのコマンドラインユーティリティを持っているとはわずか約2015-11-10T14:50:00Zから2015-11-10T15:00:00Zに間隔の記録ログメッセージを気にしている場合、あなたは可能次のようにそれを得る:プラグインcwlogsと

$ aws logs filter-log-events \ 
    --start-time `date -d 2015-11-10T14:50:00Z +%s`000 \ 
    --end-time `date -d 2015-11-10T15:00:00Z +%s`000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text| grep "^EVENTS"|cut -f 5 

AWSCLI

cwlogs AWSCLIプラグインが使用する方が簡単です:

$ aws logs filter \ 
    --start-time 2015-11-10T14:50:00Z \ 
    --end-time 2015-11-10T15:00:00Z \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR 

それは、人間が読める日時を期待し、常に(スペース区切り)の列でテキスト出力を返します。

  • 第一:logStreamName
  • 第2:date
  • 第3:time
  • 第4番目まで終了:一方message

、それは(プラス現在pipを行うには、さらにいくつかの手順は、信頼できるものとしてインストールドメインを宣言する必要があります)少し難しくインストールすることです。 jorgebastida/awslogs

から

$ pip install awscli-cwlogs --upgrade \ 
--extra-index-url=http://aws-cloudwatch.s3-website-us-east-1.amazonaws.com/ \ 
--trusted-host aws-cloudwatch.s3-website-us-east-1.amazonaws.com 
$ aws configure set plugins.cwlogs cwlogs 

(あなたが最後のコマンドでタイプミスをする場合は、ちょうど~/.aws/configファイルでそれを修正)

awslogsコマンドこの1私のお気に入りになって - 、インストールが簡単に強力、使いやすいです。

インストール:

$ pip install awslogs 

使用可能なログ・グループを一覧表示するには:

$ awslogs groups 

ログレコードを取得し、それらに従って

$ awslogs streams /var/log/syslog 

ストリーム一覧表示するには(彼らのように新しいものを参照してください来る):

$ awslogs get --watch /var/log/syslog 

そして、あなたは、時間帯によってレコードをフィルタリングすることができる:バージョンが--filter-patternオプションもそこに持っている0.2.0以来

$ awslogs get /var/log/syslog -s 2015-11-10T15:45:00 -e 2015-11-10T15:50:00 

出力は列があります。

  • 第一:あなたが最初の二つを切り替えること--no-stream--no-groupを使用してmessage

と:

  • 第三ストリーム名をログに記録:
  • 第二グループ名をログに記録列はオフになります。

    --no-colorを使用すると、出力にカラーコントロール文字がなくなることがあります。

    編集awslogsバージョン0.2.0は、--filter-patternを追加します。

  • 0

    それを自分自身を使用しますが、ここで私はGitHubの上で出会ったExcelの輸出国へのオープンソースのCloudWatchのではないか。

    https://github.com/petezybrick/awscwxls

    ジェネリックAWS CloudWatchのスプレッドシートの輸出業者には CloudWatchのは」doesnのエクスポートユーティリティを提供しません。 awscwxlsは、ネームスペース/ディメンション/メトリック/統計量 仕様の汎用セットに基づいてスプレッドシート を作成します。 AWSが 名前空間/次元/メトリック/統計パターンに従い続ける限り、awscwxlsは既存および将来の名前空間(サービス)の で動作するはずです。仕様の各セット はプロパティファイルに格納されているため、各プロパティファイルは、特定のAWSサービスおよびリソースセットに対して に設定できます。完全な例は、 のrun/properties/template.propertiesを参照してください。

    +0

    私は私の質問を明確にしました。我々はメトリクスを必要とせず、必要とせず、各ログラインは自由形式の文字列です。私はログインをカウントしたり、コードを返そうとしていません。デバッグ出力が他の多くの出力に散在している特定の時点から特定の問題をデバッグしようとしています。そしてこの問題は数分続いたので、ウェブビューからコピーアウトするのは一般的に実行可能な解決策ではありません。 – Zach

    0

    データを取得する最適なオプションは、APIに記載されていると考えられます。 https://github.com/jorgebastida/awslogs参照awslogs Pythonのコマンドラインユーティリティのhttp://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

    :AWSCLI(プレーン1と同様cwlogsプラグイン付き)({JSON syntax}ほど[space separated]plain text)パターン構文についてhttp://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SearchDataFilterPattern.html

    を見るを使用するため

    1

    Python Boto3ライブラリを使用してAWSクラウドウォッチログを抽出している場合。 get_log_events()の関数は、開始時刻と終了時刻をミリ秒単位で受け付けます。参考のため

    :このためhttp://boto3.readthedocs.org/en/latest/reference/services/logs.html#CloudWatchLogs.Client.get_log_events

    あなたはUTC時刻の入力を取り、日時とtimegmモジュールを使用することにより、ミリ秒単位に変換し、あなたが行ってもいいですができます。

    from calendar import timegm 
    from datetime import datetime, timedelta 
    
    # If no time filters are given use the last hour 
    now = datetime.utcnow() 
    start_time = start_time or now - timedelta(hours=1) 
    end_time = end_time or now 
    start_ms = timegm(start_time.utctimetuple()) * 1000 
    end_ms = timegm(end_time.utctimetuple()) * 1000 
    

    だから、あなたは

    python flowlog_read.py '2015-11-13 00:00:00' '2015-11-14 00:00:00' 
    
    1

    1月の回答は素晴らしいと思いますが、おそらく著者が望んでいたものですプログラムにアクセスするには、subscriptions経由でログにアクセスする追加の方法があります。

    これは、常にデータが(通常はKinesisストリームに)フェッチされ、さらに処理される常時ストリーミングシナリオを対象としています。

    関連する問題