Як найкраще відстежувати та сповіщати про відсутність події в журналах?

Якщо журнали відображаються в syslog-ng, я хотів би мати можливість автоматично контролювати журнали та отримувати попередження, якщо з'являються події журналу NO , які відповідають певним критеріям. Наприклад, для веб-сайту на основі підписки, якщо пройшло 6 годин без замовлень, то надсилайте або надсилайте цю особу чи групу людей.

Що є хорошим способом зробити це?

3
Дивіться це питання. serverfault .com/questions/101744/& hellip; . Дивіться приклади там і розширте їх для пошуку та підрахунку відповідностей у певний часовий діапазон.
додано Автор jammus, джерело
Ви також можете звернутися до повідомлень MARK, щоб також забезпечити роботу syslog.
додано Автор Sirex, джерело

8 Відповіді

Zabbix - це інше рішення для моніторингу, подібне до Nagios. Zabbix має можливість відстежувати файли для різних рядків і ініціювати спрацьовування попередження на основі вказаних критеріїв (знайдено або не знайдено). Zabbix також підтримує "перегляд" назад або з різного часу у журналі, що допомагає запобігти помилковим спрацьовуванням старих подій. Сповіщення можна налаштувати на надсилання електронних листів або SMS.

Zabbix Website: http://www.zabbix.com/

Some of Zabbix's Log Monitoring Docs: http://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/log_items

2
додано
На жаль, я уточнив трохи більше, що Zabbix може шукати рядок або відсутність рядка, заданого конфігурацією користувача для елемента/тригера.
додано Автор bx2, джерело
Щоб додати до мого повідомлення, ви також можете створювати обгортки (скрипти) і визначати те, що Zabbix позначає як UserParameters, які є спеціальними елементами. У мене є декілька на різних серверах для моніторингу нетрадиційних процесів або завдань. Можна записати обгортку, яка виконує і виводить результат у журнал, який потім контролюється Zabbix і повідомляє про це.
додано Автор bx2, джерело
Чи робить це те, що вимагає питання - надсилати сповіщення про відсутність події? Тому що ваша відповідь не включає цю інформацію.
додано Автор mfinni, джерело

Оскільки інформація про те, що певна подія повинна відбуватися принаймні кожні шість годин, є специфічною для запису програми в журнал, найкраще було б, щоб вона могла контролювати себе і писати запис журналу, якщо подія не відбувається так, як повинна. Якщо програма написання журналу розробляється локально, я рекомендую це рішення.

Якщо це неможливо, я б зберігав механізм, який гарантує, що подія відбулася якомога ближче до програми. Можливо, сторожовий таймер можна запустити у фоновому режимі з того самого початкового сценарію, що запускає програму, що виконує журнали. Після зупинки програми сценарій також зупиняє сторожовий таймер.

Інший варіант, у випадку, якщо ви хочете зберегти скрипт запуску в його початковому стані з якоїсь причини, це створити cron-завдання, яке виконує перегляд журналу.

В будь-якому випадку. Переконайтеся, що рівень запису в журналі є достатньо серйозним, щоб вас попередили, щоб поглянути на нього, використовуючи будь-який інструмент, який ви використовуєте для контролю журналів. Це краще, більш доказове майбутнє і всеохоплююче для речей, які ви не думали, але повинні контролювати, а потім слухати рівень журналу, ніж конкретний запис журналу. Це означає щонайменше рівень попередження.

2
додано

http://labs.consol.de/nagios/check_logfiles is a Nagios plugin which is used to monitor logfiles. Usually you check, if there is a certain pattern (error message). But it's alos possible to reverse this. For example, if you run check_logfiles --logfile /var/log/mybackup.log --criticalpattern '!backup succeeded' every morning, you will get an alert if there was no 'backup succeeded' message entry since the last run of check_logfiles.

Герхард

2
додано

Nagios може зробити це для вас з легкістю. Особисто мені подобається будь-яка річ, яку я можу легко запустити на командному рядку та/або легко налаштувати через Nagios або Crontab.

LOGROBOT can do exactly what the OP is asking for...in one simple command line entry:

./logrobot autonda/prod/apps/mylogfile 60 м "замовлення надіслано" "."

Просто змініть сміливі рядки і, звичайно, шлях до файлу журналу, щоб відповідати вашим потребам.

В основному, ця команда попередить як попередження, якщо не буде знайдено принаймні 1 запиту "поданих замовлень" у файлі журналу/prod/apps/mylogfile. Він буде попереджати як критичний, якщо не буде знайдено принаймні 2 записів "поданих замовлень" у журналі.

1
додано

Яким чином я підходив до цього в минулому, пересилаючи трафік syslog до бази даних, а потім просто запитуючи базу даних для останнього отриманого повідомлення журналу від певного імені хосту, з його міткою часу.

Що є лише однією з позитивних переваг входу в базу даних.

0
додано

Для виконання цього завдання можна використовувати сценарії Shell/Perl. Ви можете запустити сценарії Shell/Perl через Cron.

Nagios було б кращим рішенням. Це інструмент з відкритим вихідним кодом, тому не потрібно платити нічого, але для цього потрібно боротися з ним. ;)

Якщо ви бажаєте отримати комерційний продукт, Splunk відомий аналіз файлів журналів

0
додано
Якщо вам потрібно "боротися" з конфігурацією, це означає, що ви не змогли прочитати документацію.
додано Автор John Gardeniers, джерело

Ми зробили щось подібне, коли ми отримуємо попередження, якщо ми не отримаємо нове замовлення на веб-сайті протягом останніх N годин. URL-адресу PushMon було створено з розкладом "кожні 3 години". Потім ми називаємо URL-адресу PushMon на нашій сторінці подяки (JavaScript). Якщо ми не отримаємо замовлення, PushMon помітить відсутній виклик і надішле оповіщення.

PushMon добре працює для попередження про події, які не відбуваються.

0
додано

Я вважаю, що найпростішим способом подбати про це є написання дуже простих сценаріїв мовою за вашим вибором. Вам просто потрібно grep через syslog для певних повідомлень і відправити електронну пошту, якщо їх не знайдено. Включаючи деякі перевірки розумності, я не можу уявити більше 20 рядків. Дотримуйтеся цього cron, і ви все налаштовані. Недоліком є ​​те, що за допомогою цього методу завдання cron має виконуватися як root, щоб читати журнали.

Ви також можете звернутися до LogAnalyzer . На жаль, я не пам'ятаю, чи здатна вона відправляти електронні листи. Тим не менш, він використовує MySQL і зберігає інформацію журналу там. З налаштуванням LogAnalyzer ви маєте дві копії ваших журналів, оскільки вони йдуть паралельно - один у системному журналі, один у БД. Якщо у вас є користувач для цієї БД, здатний читати її вміст, ви можете уникнути виконання вищезазначеного завдання cron. Це може бути не набагато краще, але можна додати ще один захисний шар.

0
додано