Настраиваю связку для передачи access логов NGINX в Clickhouse при помощи Vector.
В NGINX сразу использую лог в формате JSON, Vector берет этот файл на вход, парсит JSON и отправляет в sink Clickhouse
При запуске Vector в консоли на выходе в своем логе он выплевывает корректную инфу по запросу, которая совпадает с логом NGINX
{"args":"","body_bytes_sent":"548","http_referer":"","http_user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36","http_x_forwarded_for":"","remote_addr":"37.252.90.111","remote_user":"","request_id":"e45499dd84d036eb3dbdf3bc2197105f","request_method":"GET","request_time":"0.000","request_uri":"/vector","scheme":"https",""server_protocol":"HTTP/1.1","size":0,"ssl_cipher":"TLS_AES_128_GCM_SHA256","ssl_protocol":"TLSv1.3",
"status":404,"time_iso8601":"2023-09-01T13:11:57+00:00","time_local":"01/Sep/2023:13:11:57 +0000","timestamp":"2023-09-01T13:12:02.401320582Z"}
При этом в Clickhouse в поля с временем и статусом записываются некорректные значения. 404 статус превращается в 148, при этом если запрос был 200, то прилетает также 200. Вместо даты timestamp = 0
request_id: e45499dd84d036eb3dbdf3bc2197105f
remote_addr: 37.252.90.111
remote_user:
<b>datetime: 1970-01-01 01:00:00
</b>request:
request_uri: /vector
args:
<b>status: 148
</b>body_bytes_sent: 548
http_referer:
http_user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
http_x_forwarded_for:
request_time: 0
ssl_protocol: TLSv1.3
ssl_cipher: TLS_AES_128_GCM_SHA256
scheme: https
request_method: GET
server_protocol: HTTP/1.1
Конфиг Vector
[sources.track]
type = "file"
include = ["/var/log/nginx/access.json.log"]
read_from = "end"
[transforms.log_json]
type = "remap"
inputs = ["track"]
source = '''
. = parse_json!(.message)
.status = to_int!(.status)
.size = to_int!(.size)
'''
# Print parsed logs to stdout
[sinks.print]
type = "console"
inputs = ["log_json"]
encoding.codec = "json"
[sinks.clickhouse]
type = "clickhouse"
inputs = ["log_json"]
endpoint = "http://<IP>:8123"
database = "default"
table = "ii_access_log"
skip_unknown_fields = true
auth.strategy = "basic"
auth.user = "юзер"
auth.password = "пароль"
Собственно, почему наблюдаются проблемы с статусом и datetime?
Есть предположение, что нужно попробовать какую-то другую переменную для времени, типа сейчас прилетает пустой timestamp в clickhouse и он по умолчанию ставит unix timestamp 0, т.е. 1970-01-01 01:00:00. А вот со статусом вообще не понятно.
Также принимаются инструкции по поводу правильной настройки блока с учетными данными. Сейчас по http передаются логин и пароль в открытом виде, это тоже нужно исправить.