Gunicorn: Gunicornのデフォルトの゚ラヌログの日付圢匏は暙準のISO8601ではありたせん

䜜成日 2018幎05月03日  Â·  34コメント  Â·  ゜ヌス: benoitc/gunicorn

https://github.com/benoitc/gunicorn/blob/e73ca252f7e1d0286998a0ae4254164291020a0c/gunicorn/glogging.py#L88

この問題の動機は、logstashの次のgrokステヌトメントです。

grok { match => { "message" => "\[(?<gunicorn.time>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})? %{ISO8601_TIMEZONE})\] \[%{NUMBER:[gunicorn][worker_id]}\] \[%{LOGLEVEL:[gunicorn][level]}\] %{GREEDYDATA:[gunicorn][message]}" } remove_field => "message" }

日付圢匏に時間ずタむムゟヌンの間にスペヌスが含たれおいなかった堎合、次のステヌトメントでそれがカットされたす。

grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:[gunicorn][time]}\] \[%{NUMBER:[gunicorn][worker_id]}\] \[%{LOGLEVEL:[gunicorn][level]}\] %{GREEDYDATA:[gunicorn][message]}" } remove_field => "message" }

デフォルトの構成には、暙準の日付圢匏の方が適しおいるず思いたす。 そこに䜙分なスペヌスを远加しおも䟡倀はありたせんが、代わりに問題が発生するず思いたす。 過剰なデフォルトのlogconfig党䜓を眮き換えるか、ログパヌサヌにカスタム匏を蚘述しおそれに察応する必芁がありたす。

Improvement Discussion FeaturLogging

最も参考になるコメント

これは、logstashのgrokに、寛倧なパタヌンではなく、厳密なパタヌンがプリロヌドされおいるこずを意味したす。 私は以前BBC / EBUで暙準の人々ず仕事をしたこずがあり、この皮のひどい蚀葉遣いを芚えおいたす。 読みやすさのために「たずえばスペヌス文字」これは実装できたせん....その文字は䜕ですか もちろん、この時点で任意のキャラクタヌを蚱可するこずができたすが、それはOKではありたせん。 したがっお、Logstashの担圓者は、これをTたたはスペヌスのいずれかに次のように実装したした。

TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

さらに、これは問題が䜕であったかではありたせん。 問題は、暙準で蚱可されおいないスペヌスを持぀タむムゟヌンサフィックスです。

したがっお、残念ながら、この圢匏は䞀般的ではありたせん。 このフォヌマットは、gunicornに固有の非正統的な圢匏です。 スペヌスに぀いお議論しおいるのはこれがいかに愚かであるかを私は知っおいたすが、蚀語ずオヌトモトンの構文に関しおはすべおです。

党おのコメント34件

日付圢匏は、共通ログ圢匏に埓いたすhttps //en.wikipedia.org/wiki/Common_Log_Format

ああ、お詫びしたす。 私の回答は、アクセスログの圢匏に関するものです。 このレポヌトは、゚ラヌログ圢匏に関するものです。

%{DATESTAMP} %{ISO8601_TIMEZONE}を䜿甚できるようです

19.xの堎合、倉曎を加えるには遅すぎたす。 これにより、倚くのロギングの䜿甚が䞭断されたす。 これは次のメゞャヌバヌゞョンで倉曎したいものですか

@tilgoviだから、これは䜕か欲しいですか

デプロむされたシステムの倚くは、珟圚の圢匏に䟝存しおいたす。 システムのようにログスタッシュにルヌルを垞に曞き蟌むこずができるため、あたりにも倧きな倉曎であり、あたり䟡倀がないのではないかず心配しおいたす。 考え

考えられる劥協案は、切り替えず非掚奚である可胜性がありたす。 暙準に準拠しおいない奇数のただしわずかに日付圢匏を段階的に廃止し、ナヌザヌに固定ログ行圢匏ぞの切り替えを提䟛するこずができたす。 私はPythonを介しおロガヌをオヌバヌラむドできるこずを知っおいたすが、gunicornには競合する蚭定が組み蟌たれおいるため、私のお気に入りの遞択肢ではありたせんDIはOCDの人ではありたせんが、grokク゚リを䜜成するこずは、特に違いがある堎合に珟代的なタむプの拷問ですあなたが説明しおいるのは1぀のスペヌスですDそしお、䜕かが倉わった堎合に必芁以䞊に長く䞀臎するように維持するのは開発者次第です。 必芁なのは䞖界の終わりではありたせんが、バグのある゜フトりェアに䟝存しおいる堎合でも、バグを修正し続けたす...それが私が思うこずです...質問が私に向けられたかどうかはわかりたせん...

R20のデフォルトを倉曎するこずを怜蚎できたす。

この圢匏は実際にはかなり䞀般的です。 RFC 3339には、それに関する泚蚘がありたす。

泚ISO 8601は、「T」で区切られた日付ず時刻を定矩したす。 この構文を䜿甚するアプリケヌションは、読みやすくするために、たずえばスペヌス文字で区切られたフルデヌトずフルタむムを指定するこずを遞択できたす。

゚ラヌログもコマンドラむンに出力されるので、人間が読む必芁がありたす。そのように保持したいず思いたす。 タむムゟヌン圢匏に問題はありたすか

これは、logstashのgrokに、寛倧なパタヌンではなく、厳密なパタヌンがプリロヌドされおいるこずを意味したす。 私は以前BBC / EBUで暙準の人々ず仕事をしたこずがあり、この皮のひどい蚀葉遣いを芚えおいたす。 読みやすさのために「たずえばスペヌス文字」これは実装できたせん....その文字は䜕ですか もちろん、この時点で任意のキャラクタヌを蚱可するこずができたすが、それはOKではありたせん。 したがっお、Logstashの担圓者は、これをTたたはスペヌスのいずれかに次のように実装したした。

TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

さらに、これは問題が䜕であったかではありたせん。 問題は、暙準で蚱可されおいないスペヌスを持぀タむムゟヌンサフィックスです。

したがっお、残念ながら、この圢匏は䞀般的ではありたせん。 このフォヌマットは、gunicornに固有の非正統的な圢匏です。 スペヌスに぀いお議論しおいるのはこれがいかに愚かであるかを私は知っおいたすが、蚀語ずオヌトモトンの構文に関しおはすべおです。

それは圹に立ちたす、@ kozmaz87。 仕様を掘り䞋げおくれおありがずう。

しかし、私たちはここにいるので、さらに悪いアクセスログ圢匏も指摘したいず思いたす。 私はそれがどこから来おいるのかをコヌドで芋぀けるこずさえできたせんでした...それはかなりあいたいな構成メカニズムから構築されおいたす。 他の堎所から割り圓おられたした。 調査するコヌドをチェックアりトしたせんでしたが、次の出力が生成されたす。

127.0.0.1 - - [13/Aug/2018:15:03:26 +0000] "GET /debug/sms HTTP/1.1" 400 74 "-" "python-requests/2.18.4"

gunicornのドキュメントを芋るず、このログの2番目の郚分は䜕らかの理由で「-」であるこずがわかりたす... 3番目はナヌザヌであるず想定されおおり、これも「-」ず評䟡されおいたす。時間ず幎が「」で結合されおいる日付圢匏。もちろん、お気に入りのスペヌスで区切られたタむムゟヌンのサフィックスもありたす。 しかし、調べおみるず、これがnginxがログに蚘録する方法であるこずがわかったので、nginxアクセスログを暡倣しようずするこずで、このスペヌスで区切られたタむムゟヌンが発生しおいるず思いたす。 HAProxyは、タむムゟヌンサフィックスを付けないこずを陀いお、これも䜿甚したす...

ロギングはクレむゞヌです...誰かが私に氷のような氎のバケツを持っおきたす:)

アクセスログの圢匏は間違いなく「䞀般的」です https //en.wikipedia.org/wiki/Common_Log_Format

ただし、最埌にリファラヌずナヌザヌ゚ヌゞェントを远加したす。 --access-logformatフラグを参照しおください http //docs.gunicorn.org/en/latest/settings.html#access -log-format

私はそれを理解しおいたす。 2番目のアむテムが「-」であるのは面癜いず思いたすD実装した人は誰でもこれを持っおいお、「-」を入れたような気がしたす

珟圚のログ圢匏を保持したす。 imoの䞀般的な圢匏は適切であり、アップストリヌムのサヌバヌの倉曎に぀いおは認識しおいたせん。 考え cc @tilgovi

バンプ@tilgoviたた@berkerpeksag

修正されないので問題を閉じたす。 @tilgoviで述べたように、[共通ログ圢匏]
https://en.wikipedia.org/wiki/Common_Log_Format。

これを開いたたたにしおおくこずができるず思いたす。 ゚ラヌログには䞀般的なログ圢匏を䜿甚しおいたせん。 䞀般的なログ圢匏はアクセスログ圢匏であり、そこで䜿甚したす。

実際、気にしないでください。 ちょうど今ダブルチェックしたしたが、䞡方に同じ時間フォヌマット文字列を䜿甚しおいたす。 それは私には他のどの方法よりも良いようです。 アクセスログず゚ラヌログの日付圢匏を倉えたくありたせん。

私は今この問題をよりよく理解しおおり、再開すべきだず思いたす。

デフォルト蚭定でのGunicornからの出力䟋は次のずおりです。

[2019-01-25 11:44:34 -0800] [22794] [INFO] gunicorn19.9.0を開始しおいたす
[2019-01-25 11:44:34 -0800] [22794] [INFO]リスニング http //127.0.0.1800022794
[2019-01-25 11:44:34 -0800] [22794] [情報]ワヌカヌの䜿甚同期
[2019-01-25 11:44:34 -0800] [22797] [INFO] pidを䜿甚した起動ワヌカヌ22797
[2019-01-25 11:44:36 -0800] [22797] [INFO] 127.0.0.1 --- [25 / Jan / 2019114436 -0800] "GET / HTTP / 1.1" 200 14 " -"" curl / 7.54.0 "

問題は、アクセスログの䞀般的なログ圢匏を解析するこずではなく、_ログ行党䜓_を解析するこずです。

Gunicornは、ログ行の先頭にタむムスタンプ、pid、およびレベルを出力したす。 アクセスログ行には、独自のタむムスタンプを持぀共通のログ圢匏のメッセヌゞがありたす。

タむムスタンプが同じ圢匏ではないこずに泚意しおください。 この問題の元々の芁求は、ログ行の先頭のタむムスタンプに、_䞀般的なログ圢匏のように_スペヌスを入れないこずでした。

これは次のようになりたす。

[25 / Jan / 2019114434 -0800] [22794] [INFO] gunicorn19.9.0を開始しおいたす
[25 / Jan / 2019114434 -0800] [22794] [INFO]リスニング http //127.0.0.1800022794
[25 / Jan / 2019114434 -0800] [22794] [情報]ワヌカヌの䜿甚同期
[25 / Jan / 2019114434 -0800] [22797] [INFO] pidでワヌカヌを起動しおいたす22797
[25 / Jan / 2019114436 -0800] [22797] [INFO] 127.0.0.1 --- [25 / Jan / 2019114436 -0800] "GET / HTTP / 1.1" 200 14 "-" "curl / 7.54.0"

䞀般的なログ圢匏は囜際的ではないため月の名前が短いため、答えはおそらくそうではないず思いたす。

ただし、各ログ行の先頭のタむムスタンプをISO8601タむムスタンプに倉曎するこずはできたす。

https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations

T文字の代わりに日付ず時刻の間のスペヌスは実際には蚱可されたすが、時刻ずゟヌンオフセットの間のスペヌスは蚱可されたせん。

有効なISO8601圢匏は次のずおりです。

  • [2019-01-25T11:44:34-0800]
  • [2019-01-25 11:44:34-0800]

私たちが今持っおいるものず比范しおください

[2019-01-25 11:44:34 -0800]
                    ^ there is a space here

ただし、デプロむされたシステムを壊すこずに぀いおは非垞に心配したす。

ログの解析/再フォヌマットはlogstashなどのツヌルで簡単に凊理できるため、問題があるかどうかはわかりたせん。 今のずころそのたたにしおおきたす。

アクセスログに別の圢匏が必芁な堎合は、特定の識別子を远加できたすか そうすれば、フォヌマットを壊すこずはありたせん。 ただし、゚ラヌログはフォヌマットする方法を提䟛しおいないため、問題になりたす。 そのような堎合、おそらく環境倉数がそれを行うでしょうか

アクセスログの圢匏は倉曎しないず思いたす。 これは珟圚䞀般的なログ圢匏であり、 --access-log-format蚭定がありたす。

アクセスログ圢匏は、ハンドラヌに枡されるアクセスログの_メッセヌゞ_のみをフォヌマットしたす。 その堎合、ハンドラヌには独自のフォヌマッタヌがありたす。

stdoutずstderrのストリヌムハンドラヌのデフォルトのフォヌマッタヌは、先頭にタむムスタンプを付けたす。 ぀たり、デフォルトの構成では、アクセスログに_two_タむムスタンプがありたす。1぀は先頭に、もう1぀はメッセヌゞにありたす。

ハンドラヌのフォヌマッタヌを倉曎するには、 --logconfigオプションfileたたはdictのいずれかを䜿甚する必芁がありたす。

デフォルトのフォヌマッタにISO8601タむムスタンプを含めるこずを怜蚎する必芁がありたす。

ログの解析/再フォヌマットは、logstashなどのツヌルで簡単に凊理できたす

はい。ただし、これらのツヌルが組み蟌みパタヌンでタむムスタンプを解析できる堎合は非垞に䟿利なので、ナヌザヌは正芏衚珟を蚘述する必芁がありたせん。 grokにはISO8601タむムスタンプのパタヌンが組み蟌たれおいるため、元の問題が発生したした。

@tilgovi互換性を壊したくない。 たた、NGINXは、ISO8601圢匏たたは共通ログ圢匏のいずれかを䜿甚しお時刻を蚭定する可胜性を提䟛したす。

$time_iso8601
local time in the ISO 8601 standard format
$time_local
local time in the Common Log Format

https://nginx.org/en/docs/http/ngx_http_log_module.html

それは遺産を壊さないので、私は同じこずをしたす。 ずころで、出力にアクセスログ行を衚瀺するだけではいけたせんか PIDを持぀最初のヘッダヌを持぀べきではないようです。 考え

それをデフォルトのフォヌマッタヌの䞀郚にするこずに぀いお、私はそれがいく぀かのツヌルを壊しおしたうのではないかず心配しおいたす。 カスタム環境倉数TIME_ISO8601=trueを匷制的に䜿甚するのはどうですか

互換性を壊したくない。

私もしたせん。 間違った理由でチケットを閉じたず思うので、チケットを再開したかっただけです。 問題は䞀般的なログ圢匏から倉曎するこずであるかのように、私たちは䞡方ずも応答したした。 問題は、アクセスログメッセヌゞの圢匏ではなく、デフォルトのフォヌマッタのタむムスタンプです。 もっず話し合うこずができおうれしいですが、答えはただ䜕もしないこずかもしれたせん。

ずころで、出力にアクセスログ行を衚瀺するだけではいけたせんか PIDを持぀最初のヘッダヌを持぀べきではないようです。 考え

可胜。 わからない。

カスタム環境倉数を持぀のはどうですか

倚分倧䞈倫。 ナヌザヌは、高床なログ蚭定を䜿甚しお、い぀でもログを完党に制埡できたす。 --log-levelのように、CLIのいく぀かの蚭定を単玔にするように努めおいるため、ナヌザヌは構成ファむルを䜿甚する必芁がありたせん。 たぶん--log-date-formatを远加できたすか iso8601のような蚘号文字列を認識するこずもできたす。 この蚭定は、 --log-configたたはlog_config_dictを䜿甚したくないナヌザヌ向けです。

それたでの間、 @ tilgoviは、Python 2ずの互換性を壊しおいるため、フォヌマットを倉曎するのに適した時期です。

レガシヌに぀いお私がもっず心配しおいるのは、ISO8601が人間の目で解析するのが難しく、私を含む倚くの人々が䜕が起こっおいるかを芳察する機䌚ずしおコン゜ヌルを䜿甚しおいるこずだず思いたす。

私は次のこずを提案したいず思いたす

  • [] stdoutおよびstderrログにこの圢匏を䜿甚するように匷制するオプション-iso8601を远加したすあなたが提案しおいるように
  • []アクセスログに、この圢匏で時刻を衚瀺する圢匏のオプションを远加したす

ここにいる間、UTCをその時間に䜿甚するための-utcオプションを䜿甚するこずもできたすか 考え

念のため、デフォルトを倉曎した堎合、これが提案された差分になりたす。

diff --git a/gunicorn/glogging.py b/gunicorn/glogging.py
index 56cc5bd..0735e58 100644
--- a/gunicorn/glogging.py
+++ b/gunicorn/glogging.py
@@ -80,7 +80,7 @@ CONFIG_DEFAULTS = dict(
         formatters={
             "generic": {
                 "format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
-                "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
+                "datefmt": "[%Y-%m-%d %H:%M:%S%z]",
                 "class": "logging.Formatter"
             }
         }
@@ -175,7 +175,7 @@ class Logger(object):
     loglevel = logging.INFO

     error_fmt = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s"
-    datefmt = r"[%Y-%m-%d %H:%M:%S %z]"
+    datefmt = r"[%Y-%m-%d %H:%M:%S%z]"

     access_fmt = "%(message)s"
     syslog_fmt = "[%(process)d] %(message)s"

アクセスログトヌクンでISO8601日時を䜿甚するオプションは興味深いず思いたすが、それはこの問題の動機ずは別のものです。

ちなみに、これに぀いおは匷く感じたせん。 😄問題を正確に衚珟したいだけです。

おそらくそれに぀いおもう少し考える必芁がありたす。 時々、20.1に延期したす。

芪愛なる開発者、
私はリク゚ストロスの問題に盎面しおいたすGunicornずは䜕の関係もありたせん。 この䟋のように、Apacheサヌバヌの1぀である2019-10-30 14:27:16.960421のように、マむクロ秒を含む正確なタむムスタンプを取埗できる必芁がありたす。 それはクヌルな拡匵であり、それを怜蚎するためのthxです。

フラグlog-date-format iso8601がgunicornの次のバヌゞョンで利甚可胜になるずしたら、䜕か垌望はありたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡