Отслеживание цифрового отпечатка пользователя NGINX + RSYSLOG + POSTGRES12 Jsonb

Сформулировали для себя задачу отслеживать цифровой отпечаток пользователей систем для адресного информирования через сайт. Задача интересная но как бы ее решить махом не встраивая отслеживания в каждый сайт, благо все идет через один NGINX

Теперь как все собрали
!PG 14 не захотел принимать логи от rSYSlog

Заставили NGINX писать лог в формате JSON

install nginx-plus-module-njs

nano /etc/nginx/nginx.conf

#подключаем установленный модуль
load_module modules/ngx_http_js_module.so;
# импортируем js файл с нашими фциями формирования тела лога
js_import json_log.js;
# дефайним переменную с фцией
js_set $json_debug_log json_log.debugLog;
#определяем формат лога который формируется нашей фцией
log_format access_debug escape=none $json_debug_log;
# направляем лог в сервис rsyslog
access_log syslog:server=127.0.0.1 access_debug;

Проверяем может rsyslog работать по сети

nano /etc/rsyslog.conf

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Настраиваем rsyslog для работы с базой данных через модуль :ompgsql
!!!скрипт создания БД тут /usr/local/share/doc/rsyslog/plugins/ompgsql/createDB.sql
!!! поменяйте тип данных для поля message c TEXT на JSONB — потом будет приятно работать с логом

nano /etc/rsyslog.d/pg.conf

# подключили модуль , можно и с новым синтаксисом module(load="ompgsql")
# а можно еще и в MQ писать module(load='omrabbitmq') !!!!!
$ModLoad ompgsql

#пишем лог в базу — local7 так лог классифицирует NGINX
local7.* :ompgsql:127.0.0.1,Syslog,postgres,secret

# хотел новым синтаксисом воспользоваться, что-бы писать в бд но он не заработал
#action(type=»ompgsql» server=»localhost»
# user=»rsyslog» pass=»test1234″
# db=»syslog»)

вроде все!
{
"connection": {
"elapsed_time": 0.6,
"pipelined": false,
"request_count": 2,
"serial": 3258,
"ssl": {
"cipher": "ECDHE-RSA-AES128-GCM-SHA256",
"client_cert": {
"status": "NONE"
},
"protocol": "TLSv1.2",
"session_reused": false
}
},
"request": {
"bytes_received": 840,
"client": "192.168.1.33",
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
"Connection": "keep-alive",
"Content-Type": "application/json",
"Cookie": "_ym_uid=158011233788161853; _ym_d=1627933671; _ym_isad=2; remember-me=VERBT1RMSy5SVToxNjMzOTQ4MjczOTYxOjJlNWY2YzJlYTJlM2MwM2ZiNzJhZTI3ODFkYjE2YWZj; LABELISSUER=E193BA28A2789D221A7778EEE08",
"DNT": "1",
"Host": "gtin.sklad.today",
"Referer": "https://gtin.sklad.today/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"sec-ch-ua": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\""
},
"host": "gtin.sklad.today",
"http_version": 1.1,
"method": "GET",
"port": 443,
"uri": "/charts/marked/gtins"
},
"response": {
"bytes_sent": 257923,
"headers": {
"Cache-Control": "no-cache, no-store, max-age=0, must-revalidate",
"Content-Encoding": "gzip",
"Content-Type": "application/json;charset=UTF-8",
"Expires": "0",
"Pragma": "no-cache",
"Strict-Transport-Security": "max-age=31536000 ; includeSubDomains",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "DENY",
"X-XSS-Protection": "1; mode=block"
},
"status": 200
},
"timestamp": "2021-10-06T14:51:35+03:00",
"upstreams": [
{
"bytes_received": 3893110,
"bytes_sent": 915,
"connect_time": 0,
"header_time": 0.268,
"response_time": 0.6,
"server_addr": "192.168.1.61",
"server_port": 8444,
"status": 200
}
]
}