LINUX.ORG.RU

The Journal: жизнь после syslog

 , ,


1

2

В своей новой статье Леннарт Поттеринг (Lennart Poettering), известный разработкой звукового сервера PulseAudio и системы загрузки systemd, объяснил, чем его не устраивает syslog, и предложил свою универсальную реализацию системного журнала в Linux.

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

Поскольку данная разработка Леннарта войдёт в Fedora 17 и далее, скорее всего, разойдётся по всем дистрибутивам, я взял на себя труд перевести и предложить вашему вниманию эту статью.

>>> Перевод статьи

★★★★★

Проверено: timur_dav ()
Последнее исправление: JB (всего исправлений: 2)
Ответ на: комментарий от OldFatMan

>Позволь узнать, а где ознакомиться с этим «определением»?

Ты тупой? Вообще структура логов как таковых полностью соответствует законам реляционной алгебры, и ВНЕЗАПНО для таких структур данных были специально разработаны базы данных! Да-да, мой юный дружок, с такими структурами удобнее, быстрее и эффективнее работать именно как с базами данных, а не как с неунифицированными по полям и содержанию плэйнтекстовыми полотнами.

oguretz
()
Ответ на: комментарий от oguretz

>Вообще структура логов как таковых полностью соответствует законам реляционной алгебры
Пруф? Тебя не смущает то, что логи зачастую нужны для тех случаев, когда целостность нарушена?

Tark ★★
()
Ответ на: комментарий от oguretz

И тебе «до свидания»! Хами дальше - у тебя это здорово получается.

OldFatMan
()
Ответ на: комментарий от oguretz

Вы - безграмотный бармалей, который, непонятно по какой причине, вставляет свои две копейки в серьезный спор серьезных людей. От тебя в ходе дискуссии только летала слюна во все стороны.

Не перехожу на личности, но Вы - глупый собеседник, а с такими, как Вы - неинтересно общаться.

Так вот, я считаю, что plain text - самый лучший вариант. И патриарх подтвердил бы это! Вы - закоренелый виндузятник, которому нужно дать readonly доступ к святому святых - ЛОРу.

P.S. Обращаю внимание - я совершенно не ставил целью Вас оскорбить, любезный. Я просто выразил свое скромное мнение. За сим удаляюсь.

bk_ ★★
()
Ответ на: комментарий от oguretz

>Вообще структура логов как таковых полностью соответствует законам реляционной алгебры

facepalm.sql

r ★★★★★
()
Ответ на: комментарий от oguretz

Вообще структура логов как таковых полностью соответствует законам реляционной алгебры, и ВНЕЗАПНО для таких структур данных были специально разработаны базы данных!

ты и в базах данных не шаришь.

cab ★★★★
()
Ответ на: комментарий от cab

Да оставь ты его в покое, он только хамить и слюной брызгать умеет. Да он уже «самослился».

OldFatMan
()
Ответ на: комментарий от oguretz

Вообще структура логов как таковых полностью соответствует законам реляционной алгебры, и ВНЕЗАПНО для таких структур данных были специально разработаны базы данных!

Не пори чушь, ей больно. Единственное общее, что есть у записей логов разных программ, это «когда, на каком хосте, какой процесс, какой юзер, важность». И всё, что ты можешь сделать для реализации логов в базе, это одну большую таблицу с указанными полями и одним большим CLOB/BLOB под всё остальное. :-)

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

> Единственное общее, что есть у записей логов разных программ, это «когда, на каком хосте, какой процесс, какой юзер, важность». И всё, что ты можешь сделать для реализации логов в базе, это одну большую таблицу с указанными полями и одним большим CLOB/BLOB под всё остальное.

Так это и есть основное преимущество ))) еще хост может именоваться начиная с сети: local.finland.helsinki.espoo.user_vasya

Тогда можно посмотреть какие события уровня ВАЖНО произошли со всеми компами в офисе, расположенном в Espoo, Финляндия в определенный период времени.

SELECT * FROM data WHERE date between " and " AND host like 'local.finland.helsinki.espoo.%' AND lever > WARNING

На grep или perl это довольно хитровыебнуто реализуется.

VoDA ★★
()
Ответ на: комментарий от VoDA

> SELECT * FROM data WHERE date between " and " AND host like 'local.finland.helsinki.espoo.%' AND lever > WARNING

На grep или perl это довольно хитровыебнуто реализуется.

Напиши функцию date_between, и всё станет тривиально. И да, хранение записей лога в БД достигается и без поттерлога.

tailgunner ★★★★★
()
Ответ на: комментарий от VoDA

Тогда можно посмотреть какие события уровня ВАЖНО произошли со всеми компами в офисе, расположенном в Espoo, Финляндия в определенный период времени.

Раскладывать по файлам нормальным образом образом не пробовал? Говорят, помогает.

Я не имею ничего против новой системы логгирования, ЕСЛИ ОНА БУДЕТ РЕАЛИЗОВАНА НОРМАЛЬНЫМ РАСШИРЯЕМЫМ ОБРАЗОМ! Тот же rsyslog - он умеет не только тупо писать поток событий в файл, но и производить некоторый первичный анализ сообщения, отдавать сообщения сразу в базу, отдавать их на через пайпы другим программам, рассылать SNMP трапы и много чего еще - просто потому, что он плагинный. Хоть что-то из этого будет реализовано в поттерлоге? Хрен там.

Так что лучше бы поттеринг заткнулся, сделал нормальный API для нового логгера, написал бы расширяемый логгер с плагинной архитектурой и, если уж ему так вперлось сделать бинарный лог, сделал бы его. Через plugin. А более разумные люди сделали бы другие плагины. И самое главное - не прибивать ЭТО гвоздями к systemd. Потому, что прибитый к systemd он автоматом прибивается к линуксу, а это плохо.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

> И самое главное - не прибивать ЭТО гвоздями к systemd. Потому, что прибитый к systemd он автоматом прибивается к линуксу, а это плохо.

Не говоря уже о том, что systemd уже слишком толстый.

tailgunner ★★★★★
()
Ответ на: комментарий от no-dashi

> Потому, что прибитый к systemd он автоматом прибивается к линуксу

Не используйте systemd - и наступит счастье!

Только вот, походу, у дистростроителей нынче оно в моде.

Мало, видать, всем было траходрома с первым (avahi) и вторым (pulseaudio) поделиями поттеринга... Нет, еще один зонд себе засунули.

Пусть попаболь, зато как у всех! ;-)

sergv
()
Ответ на: комментарий от tailgunner

и будет еще толще.. Т.к. не KISS.

И этот клоун хвалится, что именно его система минималистична:
-->8--

Systemd is bloated. It apparently attempts to take over the roles of

init, cron, at, inet, ConsoleKit, sethostname, modprobe, mount -a, and


probably others. The result is that you end up running 50000 lines of


C code as PID 1, as compared to the 8000 lines of SV init or the 6000


lines of runit.



Seriously?

You have a pretty bogus definition of bloat.

If you want to compare systemd in lines-of-code with sysvinit, then you
need to sum everything up: inetd, the numerous rcS scripts and
even the enourmous duplication that sysv init scripts are. And yes,
systemd will easily win if you do: it will be much shorter.
-->8--

Человек в упор не видит, что 100% этого «кода на shell», системные утилиты (mount, etc) и т.д. - все это работает не только при инициализации, все эти тонны _отлаженного_ С-кода. А сугубо ради инициализации - работают только строчки на достаточно высокоуровневом языке. Самая оптимистичная оценка у меня получилась в 10k такого... С шахматами и поэтессамикомментариями и пустыми строками.

myhand
()
Ответ на: комментарий от no-dashi

> Так что лучше бы поттеринг заткнулся, сделал нормальный API для нового логгера, написал бы расширяемый логгер с плагинной архитектурой и, если уж ему так вперлось сделать бинарный лог, сделал бы его. Через plugin. А более разумные люди сделали бы другие плагины. И самое главное - не прибивать ЭТО гвоздями к systemd. Потому, что прибитый к systemd он автоматом прибивается к линуксу, а это плохо.

тут согласен. с учетом, что systemd может работать в journald сразу со старта ядра. плагинистость это позитивно, хотя основной плагин хранения ИМХО это БД-подобное.

С другой стороны не станет ли эта плагинистость бутылочным горлышком? MySQL хранит данные через плагины (движки хранения) и это создало больше проблем, чем преимуществ. PostgreSQL обладая одним хранилищем обладает заметно большим функционалом.

VoDA ★★
()
Ответ на: комментарий от tailgunner

> Напиши функцию date_between, и всё станет тривиально.

вменяемые люди пишут дату в лог так, чтобы сравнение дат было простым сравнением строк

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Nov 23 21:47:04 artem-eee ovpn-client[1945]: Options error: option 'keepalive' cannot be used in this context Nov 23 21:47:04 artem-eee ovpn-client[1945]: OPTIONS IMPORT: timers and/or timeouts modified Nov 23 21:47:04 artem-eee ovpn-client[1945]: OPTIONS IMPORT: --ifconfig/up options modified Nov 23 21:47:04 artem-eee ovpn-client[1945]: OPTIONS IMPORT: route options modified

Ноябрь на первом месте... Очень удобно сравнивать строки, да.

farafonoff ★★
()
Ответ на: комментарий от farafonoff

> Ноябрь на первом месте... Очень удобно сравнивать строки, да.

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

хинт: 2011.11.23 21:47:04

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от farafonoff

> Кто-то вызывает mount -a кроме как при старте системы?

Да кто угодно. Отмонтировал, изменил размер раздела, примонтировал.

Кому-то нужны эти shell скрипты кроме как для старта сервисов?

Кому-то нужен systemd, кроме как для старта сервисов?

myhand
()
Ответ на: комментарий от www_linux_org_ru

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

farafonoff ★★
()
Ответ на: комментарий от myhand

Я отвечал на возможности повторного использования. И то и другое нужно только для старта системы, я предпочту systemd тому зоопарку глючных init.d скриптов, который есть сейчас. При недоступности интернета какой-нибудь bind или openvpn может задержать загрузку системы на 10 минут, что я считаю недопустимым.

farafonoff ★★
()
Ответ на: -k от mumpster

И не задолбаешься считать на пальцах поля? Сейчас чтобы найти что-то в сислоге приходится less'ом пролистывать файлы в поисках нужных дат.

farafonoff ★★
()
Ответ на: комментарий от qnikst

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

farafonoff ★★
()
Ответ на: комментарий от farafonoff

> И то и другое нужно только для старта системы

Вам объяснили, что 99% кода в этих скриптах - используется и в других местах. Все эти вызовы grep/sed/awk/mount/ionice/etc. Большая часть C кода systemd - специально написана для этого чуда. В сравнении с init получается примерно 50k строк vs 8k (причем последние - не только собственно сам init, но и всякие telinit, shutdown).

И эти 50k строк - не предел, т.к. у разработчика нет абсолютно никакой идеи чем _не должен_ заниматься systemd. Вот появится в ядре новая крутилка для ограничения процессов (как сейчас есть rlimit, приоритет/класс IO шедулера, etc) - попусту добавят какие-нибудь новые ублюдочные параметры в INI-файл.

При недоступности интернета какой-нибудь bind или openvpn может задержать загрузку системы на 10 минут, что я считаю недопустимым.

Пардон, зачем Вам bind/openvpn без интернета?

myhand
()
Ответ на: комментарий от farafonoff

> При недоступности интернета какой-нибудь bind или openvpn может задержать загрузку системы на 10 минут, что я считаю недопустимым.

УМВР, ЧЯДНТ?

geekless ★★
()
Ответ на: комментарий от myhand

Мне всю остальную систему без интернета надо. А не дожидаться по 10 минут пока эта парочка осознает что интернета нет и не будет.

Очень удобно использовать grep/sed/awk чтобы проверить наличие бинарного файла демона, а также проверить запущен ли он. Именно это меня и выбешивает в текущем init-е - базовые вещи start-stop демона написать _надежно_ очень не тривиально. Надеюсь systemd исправил эту проблему. Впрочем я уже пополнил зоопарк скриптов еще одним скриптом, который создает сессии screen для разных программ и позволяет запускать/останавливать их.

farafonoff ★★
()
Ответ на: комментарий от myhand

примерно 50k строк vs 8k

хорошая идея - сравнивать количество строк на C и на Bash. дна из задачи systemd - не тратить время на бесконечные fork->exec->парсинг скрипта

Divius ★★
()
Ответ на: комментарий от Divius

Необходимость перезагружать систему каждые пять минут нужна не всем, и более того выключение компьютера навязанная привычка. А вот отлаживаемость и гибкость этих fork->exec->парсинг гораздо выше ваших хваленых systemd ибо без половины скриптов можно будет худо бедно систему запустить, а без systemd нет.

toon
()
Ответ на: комментарий от farafonoff

В мире найдётся рынок для сбыта хотя-бы трёх компьютеров. Мы не сомневаемся в этом. (c) Какой-то шишка их IBM

toon
()
Ответ на: комментарий от Divius

> хорошая идея - сравнивать количество строк на C и на Bash.

Я вообще-то строки на C сравнил. 8k - приблизительный объем кода sysvinit (не только собственно init в 1000 строк, но и кучи утилит). Сравните с 90k (сейчас!) у systemd. И тварь эта только пухнуть собирается.

Даже если добавить к 8k еще и «строки на bash» (вообще-то на sh ;)) из /etc/init.d/ - увы, все равно по 100 тысяч строк не наберется.

дна из задачи systemd - не тратить время на бесконечные fork->exec->парсинг скрипта


Ну, стало быть:
1) Он с этой задачей не справился (см. ExecStartPre/Post - они нужны для мало-мальски нетривиального сервиса)
2) Задача глупа в общем случае. Это оптимизация, интересная в некоторых ситуациях. Большинство разумных людей не считают _это_ существенным недостатком SysV init.

myhand
()
Ответ на: комментарий от farafonoff

Мне всю остальную систему без интернета надо. А не дожидаться по 10 минут пока эта парочка осознает что интернета нет и не будет.

Ну настройте систему нормально. Init-то причем? Проверил: выдернул шнурок, перегрузился. Бинд был несчастлив, но система это как-то пережила без драматизму. Debian. ЧЯДНТ?

Очень удобно использовать grep/sed/awk чтобы проверить наличие бинарного файла демона, а также проверить запущен ли он.

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

Именно это меня и выбешивает в текущем init-е - базовые вещи start-stop демона написать _надежно_ очень не тривиально.

-->8--
        log_daemon_msg «Starting OpenBSD Secure Shell server» «sshd»
        if start-stop-daemon --start --quiet --oknodo --pidfile /var/run/sshd.pid --exec /usr/sbin/sshd — $SSHD_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
...
        log_daemon_msg «Stopping OpenBSD Secure Shell server» «sshd»
        if start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/sshd.pid; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
-->8--

Что тут нетривиального?

myhand
()
Ответ на: комментарий от AVL2

> А если процесс умирает уже после старта?

А как systemd поможет от этого?

А если пид не создает?

Помним что мешает некоторым танцорам?

- Отправить очередного песателя делать что-то более полезное. Лес валить, например...

myhand
()
Ответ на: комментарий от toon

без половины скриптов можно будет худо бедно систему запустить, а без systemd нет

Опять сравнил! Systemd надо сравнивать с init, без него ты тоже далеко не уйдёшь.

Divius ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.