У меня есть два URL-адреса one.example.com и two.example.com, есть ли способ в системном журнале захвата, какой URL-адрес был использован для попадания на сервер?

Мне нужно изменить базу данных, основанную на этой информации.

Обновить

У меня есть устройство, на котором установлены busybox и syslogd. Я могу установить адрес на устройстве для системного журнала, например, 1.1.1.1:514. Но я не могу больше делать на устройстве, кроме этого.

У меня есть, например, 100 устройств, 50 типа A и 50 типа B. Проблема в том, что при использовании 1.1.1.1:514 на каждом устройстве в качестве адреса сервера системного журнала, при получении информации об устройстве на удаленном сервере системного журнала, я не могу чтобы определить, относится ли устройство к типу А или типу В.

Я имею в виду следующее решение, хотя может быть и другой способ добиться этого. Если я создаю два субдомена и указываю на них один и тот же адрес, т.е. typea.example.com и typeb.example.com, то теоретически в устройствах с типом AI для удаленного системного журнала будет задан тип typea.example.com:514 и для типа B введите b.example.com:514. Оба эти поддомена будут указывать на 1.1.1.1, поэтому информация системного журнала теперь принимается устройствами типа A и устройствами типа B.

Теперь мне нужно выяснить, как в файле syslog.conf на удаленном сервере выяснить, была ли информация получена устройством с использованием typea.example.com или typeb.example.com.

На сервере не установлен apache и т.д., Однако в PHP, например, мы можем использовать $_SERVER и обычно я могу получить эту информацию из $_SERVER['HTTP_HOST'] . Есть ли способ сделать это в syslog.conf на удаленном сервере syslog.

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

Я знаю, что могу также установить системный журнал, выполнив, скажем,

syslogd -R 1.1.1.1:514

Есть ли здесь я могу включить дополнительную информацию, например:

syslogd -R 1.1.1.1:514 type=a

Тогда я мог бы сказать, использовать $TYPE для получения значения или альтернативно добавить пользовательский заголовок с системным журналом.

Как вы, вероятно, можете сказать, я ломаю голову над решениями и бью кирпичные стены. Любое решение или документы, которые могут указать мне в правильном направлении, будет принята с благодарностью.

В заключение я хотел бы упомянуть, что я также смотрю на перенаправление информации системного журнала на PHP-скрипт или C (я скажу скрипт, но я знаю, что ошибаюсь), чтобы проверить информацию там и затем вставить в БД.

Проще говоря, мне нужен способ дифференциации по типу А или типу В. Надеюсь, это проясняет ситуацию, и это не просто бред сумасшедшего.

2 ответа2

1

Удаленный сервер syslogd должен указать имя хоста (или IP-адрес) в качестве следующего поля сразу после даты и времени. Вот пример записи в файле системного журнала. Имя хоста /ip машины, отправляющей запись, в этом случае - "пицца"

Jun 16 15:45:01 pizza auth.info sshd[26861]: Failed password for user from 123.45.67.89 port 59903 ssh2

Даже если вы передаете -R 1.1.1.1:514 каждому клиенту, это адрес, по которому они все отправляют. Каждое из клиентских устройств должно иметь свой уникальный IP-адрес ... в противном случае они не могут существовать в одной сети. Этот уникальный адрес должен быть записан в записи удаленного системного журнала. Вы должны быть в состоянии сделать вывод, что есть что.

1

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

Запустите их на двух разных портах (скажем, 30001 и 30002) и попросите их записать свои журналы в два разных файла. Направьте клиентов "типа A" на порт 30001 на сервере, который регистрирует записи в файле типа A, и укажите клиентов "типа B" на порту 30002 на сервере системного журнала, который регистрирует записи в файле typeB.

Выбранные выше порты являются произвольными, но не конфликтуют с другими существующими сервисами. Он также отделяет его от обычного системного журнала на сервере, чтобы ваш вывод не смешивался с сообщениями с этого компьютера.

Это предполагает, что вы запускаете полный дистрибутив linux на сервере, который имеет полный syslogd, который может читать его настройки из файла конфигурации (а не ограниченный syslogd, встроенный в busybox, как на клиентах). Вы также должны убедиться, что соответствующие порты открыты, если на сервере используется брандмауэр. Точные детали того, как это сделать на сервере, зависят от варианта системного журнала на сервере и ОС сервера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .