10

複数行のログ ステートメントを含む 2 つのログ ファイルがあります。どちらも、各ログ ステートメントの先頭で同じ日時形式になっています。構成は次のようになります。

state_file = /var/lib/awslogs/agent-state

[/opt/logdir/log1.0]
datetime_format = %Y-%m-%d %H:%M:%S
file = /opt/logdir/log1.0
log_stream_name = /opt/logdir/logs/log1.0
initial_position = start_of_file
multi_line_start_pattern = {datetime_format}
log_group_name = my.log.group


[/opt/logdir/log2-console.log]
datetime_format = %Y-%m-%d %H:%M:%S
file = /opt/logdir/log2-console.log
log_stream_name = /opt/logdir/log2-console.log
initial_position = start_of_file
multi_line_start_pattern = {datetime_format}
log_group_name = my.log.group

cloudwatch ログ エージェントは log1.0 ログを cloudwatch のログ グループに正しく送信していますが、log2-console.log のログ ファイルは送信していません。

awslogs.log は次のように述べています。

2016-11-15 08:11:41,308 - cwlogs.push.batch - WARNING - 3593 - Thread-4 - Skip event: {'timestamp': 1479196444000, 'start_position': 42330916L, 'end_position': 42331504L}, reason: timestamp is more than 2 hours in future.
2016-11-15 08:11:41,308 - cwlogs.push.batch - WARNING - 3593 - Thread-4 - Skip event: {'timestamp': 1479196451000, 'start_position': 42331504L, 'end_position': 42332092L}, reason: timestamp is more than 2 hours in future.

サーバー時間は正確ですが。また、奇妙なことに、プッシュされている実際のログ ファイルには、start_position と end_position に記載されている行番号が存在しません。

この問題が発生している他の人はいますか?

4

4 に答える 4

18

これを修正できました。

awslogs の状態が壊れていました。状態は、/var/awslogs/state/agent-state の sqlite データベースに保存されます。経由でアクセスできます

sudo sqlite3 /var/awslogs/state/agent-state

書き込みアクセスには sudo が必要です。

すべてのストリームを一覧表示する

select * from stream_state;

ログ ストリームを調べて、v 列の json データ構造の一部であるsource_idに注意してください。

次に、この source_id (私の場合は 7675f84405fcb8fe5b6bb14eaa0c4bfd) を持つすべてのレコードをpush_stateテーブルにリストします。

select * from push_state where k="7675f84405fcb8fe5b6bb14eaa0c4bfd";

結果のレコードには、batch_timestamp を含む v 列に json データ構造があります。そして、この batch_timestamp は間違っているようです。それは過去のものであり、新しい (2 時間以上の) ログ エントリは処理されなくなりました。

解決策は、このレコードを更新することです。v 列をコピーし、batch_timestamp を現在のタイムスタンプに置き換えて、次のように更新します。

update push_state set v='... insert new value here ...' where k='7675f84405fcb8fe5b6bb14eaa0c4bfd';

でサービスを再起動します

sudo /etc/init.d/awslogs restart

うまくいくことを願っています!

于 2016-12-14T12:44:11.110 に答える