Open2

apache2のログをjsonにする

モッモッ

現状

        # X-Forwarded-For を記録するカスタムログフォーマット
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\" %D" custom
        CustomLog ${APACHE_LOG_DIR}/access.log custom

        #LogFormat "{ \"remote_host\": \"%h\", \"ident\": \"%l\", \"user\": \"%u\", \"time\": \"%t\", \"request\": \"%r\", \"status\": %>s, \"bytes\": %b, \"referer\": \"%{Referer}i\", \"user_agent\": \"%{User-Agent}i\", \"forwarded_for\": \"%{X-Forwarded-For}i\", \"request_time\": %D }" json_custom
        LogFormat "{ \"remote_host\": \"%h\", \"ident\": \"%l\", \"user\": \"%u\", \"time\": \"%{%Y-%m-%dT%H:%M:%SZ}t\", \"request\": \"%r\", \"status\": %>s, \"bytes\": %b, \"referer\": \"%{Referer}i\", \"user_agent\": \"%{User-Agent}i\", \"forwarded_for\": \"%{X-Forwarded-For}i\", \"request_time\": %D }" json_custom


        CustomLog ${APACHE_LOG_DIR}/access.log json_custom
ar/log/apache2# cat /var/log/apache2/access.log
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:38:27Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 706 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:38:35Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 613 }
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:38:57Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 603 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:39:05Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 678 }
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:39:27Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 574 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:39:35Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 555 }
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:39:57Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 582 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:40:05Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 599 }
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:40:27Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 595 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:40:35Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 582 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:40:47Z", "request": "HEAD /Core/Skin/Login.aspx HTTP/1.1", "status": 404, "bytes": -, "referer": "-", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", "forwarded_for": "101.32.218.31", "request_time": 735 }
{ "remote_host": "172.31.27.218", "ident": "-", "user": "-", "time": "2025-02-20T07:40:57Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 607 }
{ "remote_host": "172.31.15.188", "ident": "-", "user": "-", "time": "2025-02-20T07:41:05Z", "request": "GET / HTTP/1.1", "status": 200, "bytes": 3041, "referer": "-", "user_agent": "ELB-HealthChecker/2.0", "forwarded_for": "-", "request_time": 582 }
root@ip-172-31-0-139:/var/log/apache2# cat /var/log/apache2/access.log | jq .
{
  "remote_host": "172.31.27.218",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:38:27Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 706
}
{
  "remote_host": "172.31.15.188",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:38:35Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 613
}
{
  "remote_host": "172.31.27.218",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:38:57Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 603
}
{
  "remote_host": "172.31.15.188",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:39:05Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 678
}
{
  "remote_host": "172.31.27.218",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:39:27Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 574
}
{
  "remote_host": "172.31.15.188",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:39:35Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 555
}
{
  "remote_host": "172.31.27.218",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:39:57Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 582
}
{
  "remote_host": "172.31.15.188",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:40:05Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 599
}
{
  "remote_host": "172.31.27.218",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:40:27Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 595
}
{
  "remote_host": "172.31.15.188",
  "ident": "-",
  "user": "-",
  "time": "2025-02-20T07:40:35Z",
  "request": "GET / HTTP/1.1",
  "status": 200,
  "bytes": 3041,
  "referer": "-",
  "user_agent": "ELB-HealthChecker/2.0",
  "forwarded_for": "-",
  "request_time": 582
}
parse error: Invalid numeric literal at line 11, column 169

普通に壊れる

LogFormat "{ \"remote_host\": \"%h\", \"ident\": \"%l\", \"user\": \"%u\", \"time\": \"%{%Y-%m-%dT%H:%M:%SZ}t\", \"request\": \"%r\", \"status\": %>s, \"bytes\": %{bytes}B, \"referer\": \"%{Referer}i\", \"user_agent\": \"%{User-Agent}i\", \"forwarded_for\": \"%{X-Forwarded-For}i\", \"request_time\": %D }" json_custom