Есть ли способ для системного журнала газа
Мы используем Log4J с его SyslogAppender для отправки сообщений на центральный сервер syslog-ng, все они работают на машинах Unix.
Есть ли способ (будь то в Java или в Unix) регулировать количество отправляемых сообщений во избежание того, чтобы расстроенный сервер также нарушал работу сети?
Единственный вариант, который я могу придумать, - установить более высокий уровень журнала, чтобы на самом деле отправлялось меньше сообщений, но это не идеально, поскольку важные сообщения могут подавляться на машине, которая ведет себя иначе.
Я полагаю, что в идеальном мире динамически изменяющийся уровень был бы хорош: если число сообщений в секунду превышает определенный уровень, порог возрастает, но в то же время это звучит как избыточное убийство.
Есть идеи?
Спасибо
Богатые
4 ответа
Я думаю, что вопрос, вас волнует, если вы не получите все свои журналы на центральном сервере? То, о чем вы говорите, - это, по сути, удаление сообщений - в этом случае вы потеряете логи. Это нормально? Если это так, вы уже ответили на свой вопрос - поднимите уровень отладки, чтобы получать только те сообщения, которые вам действительно нужны.
Однако, если вы пытаетесь соответствовать, скажем, ограничению пропускной способности (например, месячный лимит обработки в Splunk), вам нужно написать промежуточный сервер, чтобы взять журналы из системного журнала и расставить их приоритеты. Это не сложно, но это очень специфично для вашего случая использования. Одним из преимуществ этого метода является то, что этот посредник может немедленно отправлять важные журналы на сервер агрегации и в конце дня / месяца отправлять журналы следующего наивысшего приоритета, которые не были отправлены изначально. Таким образом, вы можете точно заполнить квоту.
Если вы добавите более конкретные требования (например, зачем вам это нужно) и что вы подразумеваете под ограничением журналов (дублирующиеся строки? Пропускная способность? Пространство? Сервер агрегации не успевает? И т. Д.), То вы получите гораздо лучший ответ.
Удачи!
Если вы используете log4j правильно, использование более высокого уровня журнала не должно влиять на сообщения импорта, поскольку они должны иметь высокий уровень. Записывайте детали локально с локальным вращением.
Как вы сказали, это проблема пропускной способности, вы можете даже использовать сжатие (оно поддерживается в rsyslog, но я не уверен насчет syslog-ng). Кроме того, если вы не используете журналы для оповещений в реальном времени, вы можете создать скрипт, который будет считывать локальные журналы каждые несколько секунд и отправлять их сжатую агрегацию.
Если вы хотите распределенное решение, вы можете воспользоваться предложением выше. (Экономит трафик на многих ссылках). Но если вы предпочитаете что-то более централизованное (с немного большим трафиком, поскольку вам приходится отправлять бесполезные журналы на промежуточный сервер), тогда решение Redmumba будет намного лучше.
Единственное, что я знаю, что это близко к этому - это конфигурация для одинаковых сообщений без вывода сообщений, например, если сообщение журнала повторяется 200 раз, вы можете попросить syslog зарегистрировать его один раз, игнорировать остальные и только зарегистрировать сообщение, говорящее, что сообщение повторяется еще 199 раз. Регулирование журнала может привести к потере сообщений журнала, а это нежелательно.
Может быть, вы можете установить QOS/ трафик между вашим сервером и сервером журналов и использовать его для управления скоростью?