3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI Logging カスタムログのタイムゾーンについて

Last updated at Posted at 2024-12-19

Loggingのログ・レコードの日時は、UTCで管理されています。カスタムログでOS内のログを収集する場合は、ログの日時がタイムゾーンから正しくUTC変換されているかどうかを意識する必要があります。

ここでは、タイムゾーンを指定する方法をいくつかご紹介します。

TomcatのアクセスログをREGEXPパーサーで取得する

以下のようなTomcatのデフォルトのアクセスログ(JST)に対してカスタムログのREGEXP(正規表現)パーサーを設定する場合の方法

116.82.XX.XX - - [18/Dec/2024:09:51:27 +0900] "GET /test/ HTTP/1.1" 200 6 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"

LoggingのカスタムログからREGEXPパーサーを作成する

image.png

#式
^(?<host>[^ ]*) (?<remotelog>[^ ]*) (?<user>[^ ]*) \[(?<logtime>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<size>[^ ]*)

#時間書式
%d/%b/%Y:%H:%M:%S %z

#時間キー
logtime

#時間キーの維持
True

以下の通り、JSTのアクセスログは、UTC変換されてLoggingに収集される
logtime = 18/Dec/2024:09:51:27 +0900 <---アクセスログ・レコードにある日時(JST)
time = 2024-12-18T00:51:27Z <--- logtimeをUTCに変換
ingestedtime = 2024-12-18T00:54:29.692979884Z <---Loggingに取り込んだ日時(UTC)
image.png

時間書式で%Z(タイムゾーン)を指定することで、時差が計算されてUTCとして格納され、Logging上で検索や表示が正しく行われます。

では、タイムゾーンがないログはどうすれば良いのか? 
方法としてすぐに思いつくのはfluent.confのparseにタイムゾーンを直接指定することですが、LoggingのカスタムログはOCIコンソールでの設定しかサポートされていません。(直接記述してもコンソール設定に上書きされる)
方法としては、以下の二つが考えられます。

  • OSのタイムゾーンを使う
  • Grokパーサーでタイムゾーンを指定する

タイムゾーンを持っていないログを取り込む場合、LoggingはOSのタイムゾーンに合わせてログを取り込む挙動を行います。例えば、OSがJSTの場合、時差は-9時間なので、以下のようにLoggingのTimeフィールドは-9時間のUTC時刻に変換されます。

ログの日時(JST): 2024/12/18 17:56:30 --> LoggingのTimeフィールド: 2024-12-18T08:56:30Z

OSがUTCの場合は、ログの日時はそのまま取り込まれます。

ログの日時(JST): 2024/12/18 17:56:30 --> LoggingのTimeフィールド: 2024-12-18T17:56:30Z

私がテストしたREGEXPパーサーでは上記のような動作になっています。しかし、実際に期待したUTCへの変換になっているかどうかは、対象とするログやパーサーの種類・設定によって異なるかもしれませんので動作確認をお願いします。

Grokパーサーでタイムゾーンを指定する

Grokパーサーでは、コンソールから明示的にタイムゾーンを指定することができます。Grokパーサーの使い方や対応する日時のパターンは、Fluentdのドキュメント等で確認して下さい。ここでは、タイムゾーンがないDATESTAMP_EVENTLOGのパターンを使います。

DATESTAMP_EVENTLOGが検出する日時のフォーマットは、"YYYYMMDDHHMMSS"となるので、それに合わせるようにアクセスログの日時を以下のように書き換える

152.42.XX.XX - - [20241218175630] "GET /cdn-cgi/trace HTTP/1.1" 404 768

カスタムログで、Grokパーサーを構成する
image.png

パターン:
%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{DATESTAMP_EVENTLOG:timestamp}\] "%{WORD:method} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response_code} %{NUMBER:bytes}.*$

フィールド時間書式:
%Y%m%d%H%M%S

フィールド時間キー:
timestamp

フィールドタイムゾーン
Asia/Tokyo

タイムゾーンのないJSTのtimestampは、-9時間されてLoggingに収集されている
timestamp = 20241218175630 <---ログレコードにある日時
time = 2024-12-18T08:56:30Z <--- timestampをUTCに変換
image.png

Grokパーサーのパターンで指定しているIPORHOST,DATESTAMP_EVENTLOGなどは、fluentdで定義済みのパターンを使用しています。本来は、ユーザー独自のパターンも使用することもできるのですが、Loggingのコンソールからはその設定ができないので、Logggingでは現状サポートされないと思ったほうが良いです。

そもそもログ自体にタイムゾーンが出力されていれば問題にならないので、まずは、ログ出力側でタイムゾーンを含むログ設定ができないかどうかを確認し、なければOSのタイムゾーンで取り込んだ際に時刻の不一致が出ていないかを順に確認していくと良いかと思います。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?