LINUX.ORG.RU

Nerdlog: быстрый TUI-просмотрщик логов с удалённых хостов с таймлайном

 , , ,

Nerdlog: быстрый TUI-просмотрщик логов с удалённых хостов с таймлайном

5

4

Терминальное приложение Nerdlog позволяет удобно просматривать логи с одного или сразу нескольких серверов Linux и FreeBSD. Поддерживает как обычные текстовые лог-файлы (например, /var/log/messages или /var/log/syslog), так и вывод journalctl.

Визуально отображает активность в виде интерактивной псевдографической таймлайн-гистограммы, аналогично таким инструментам, как Graylog, Kibana или Splunk.

Ключевые особенности:

  • Без центрального сервера: Nerdlog подключается по ssh к каждому хосту напрямую.
  • Минимум передаваемых данных: фильтрация и анализ логов выполняется на удаленных хостах, клиенту передаётся только результат для отображения: данные для гистограммы и последние логи из выбранного периода, с возможностью постраничной подгрузки. Данные от всех хостов объединяются и отображаются в одном интерфейсе.
  • Без установки на серверах: для фильтрации и анализа логов используется только стандартный набор GNU-утилит, присутствующих в большинстве современных Linux-дистрибутивов по умолчанию (bash, gawk, tail, head и др.)
  • Данные с удаленных хостов передаются в сжатом виде для экономии трафика.
  • Фокус на производительность: работает быстро даже с большими лог-файлами (более 1 GB) и с большим количеством серверов (регулярно использовался на кластере из 20+ хостов).

Первоначальный прототип был разработан еще в 2022г. как альтернатива Graylog, подробнее об истории возникновения можно прочитать на Хабре.

Программа написана на Go и распространяется на условиях BSD-2-Clause license.

>>> GitHub проекта



Проверено: CrX ()
Последнее исправление: hobbit (всего исправлений: 18)

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

ChAnton ★★
()
Последнее исправление: ChAnton (всего исправлений: 1)
Ответ на: комментарий от ChAnton

Ну ключевые особенности (отсутствие необходимости что-то устанавливать на серверах, минимум передаваемых данных) и скриншот выглядят хорошо. Но пробовать надо.

CrX ★★★★★
()

А можно по сети сислог на один сервер скидывать и всё вместе анализировать. syslog-ng может сразу в sql-базу писать в разобранном виде.

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

Можно, конечно. Можно и Graylog настроить или подобные инструменты, и в этом нет ничего неправильного. Вариантов много.

Но, во-первых - это настраивать надо. Фишка Nerdlog в том, чтобы использовать максимально стандартное окружение, и получить впечатляющие результаты с помощью стандартных GNU-утилит, которым уже не один десяток лет. KISS и все такое. Т.е. если даже сервер был настроен кем-то другим и вы его впервые видите, то Nerdlog, скорее всего, заработает с ним прямо из коробки.

Чтобы раскрыть немного тему про «впечатляющие результаты»: при работе с 24-мя удаленными хостами, где на каждом хосте около 1 GB логов, запрос логов за последний час занимал у нас обычно не более 2 секунд. Это было даже чуть быстрее, чем Graylog. В вышеупомянутой статье на Хабре более подробно написано.

Ну и во-вторых, насчет «все вместе анализировать» - чем именно анализировать? Можно взять традиционный lnav например, но для меня лично, гистограмма - очень удобно, и мне неизвестны подобные терминальные просмотрщики логов с гистограммой активности. Если знаете такой - подскажите.

dimonomid
() автор топика

Как оно с большими файлами (скажем гигабайтов в 15-20)? Glogg вот единственное что в них умеет из того что я знаю. Но то GUI.

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

С файлами 15-20 GB, первоначальная индексация (которую Nerdlog делает один раз после ротации логов) займет порядочно времени, пару-тройку минут наверное. Потом - в зависимости от запрашиваемого промежутка времени. То есть, например, если файл логов 20GB, но это за 24 часа, а мы запрашиваем только 1 час, то такой запрос около 5-10 секунд может занять.

dimonomid
() автор топика
Ответ на: комментарий от zabbal

Насчет сравнения с systemd-journal-remote - смысл Nerdlog в том, чтобы удобно просматривать логи сразу с нескольких серверов, ну и опять-таки таймлайн-гистограмма и удобная навигация по ней.

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

Ну в защиту Sol, ElasticSearch, Graylog скажу, что там очень хорошо реализованы пре-процессоры, на сервер может литься терабайты в день, а в базу в итоге падает пару гигабайт, а все из-за pipeline, regex( и прочих радостей жизней). Большинство полей в логах одинаковые, можно разбить сообщение по шаблону, из одной строки сделать структуру. А если к этому комбайну добавить еще и отсылку сообщений сперва в kafka, затем в elasticsearch, то сообщения вообще не будут пропадать.

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

Да я и не спорю, что Graylog хорош. На самом деле, производительность и интерфейс Graylog (таймлайн гистограмма в частности) были вообще основными вдохновителями для Nerdlog, как в статье на Хабре указано: мы Graylog использовали в течение пары лет, а потом его у нас «отобрали» по различным политическим и другим причинам внутри компании, и перевели на Splunk, который оказался возмутительно медленным (по крайней мере в нашей конфигурации). Мне хотелось скорости как у Graylog, у нас был доступ к текстовым лог-файлам на серверах - так и появился Nerdlog.

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

Насчет сравнения с systemd-journal-remote - смысл Nerdlog в том, чтобы удобно просматривать логи сразу с нескольких серверов

Так и у systemd-journal-remote смысл именно в этом. При этом не нужно ради такой тривиальной задачи палить ssh ключи. Ну а просматривать логи и гистограммы можно любым приглянувшимся инструментом - хоть Kibana, хоть Grafana. Unix-way всё-таки, как и принято в проекте systemd.

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

а можно предварительную фильтрацию делать для ускорения? условно grep 'host":"example.com' /var/log/nginx/*.json.log и дальше уже рисовать выхлоп? Ну и вообще читать из stdin, а не из конкретных файлов? а так выглядит интересно с учетом того, что из требований только ssh доступ и не надо ничего ставить на хосты

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

Как я уже отвечал на чей-то комментарий выше: конечно, можно все настроить, и заливать логи на какой-то централизованный сервер, и настроить с Kibana, или с Grafana, или просто Graylog - вариантов много, кому что по душе. И опять-таки, в них нет ничего «неправильного»: если есть желание и время, то конечно. Рабочие, проверенные временем инструменты.

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

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

Ну и еще мне лично шустрый TUI с клавиатурной навигацией нравится больше, чем web UI, но это, конечно, дело вкуса.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)
Ответ на: комментарий от user_undefined

Фильтрация, конечно, реализована - посредством awk. Почему именно awk - рассказано в FAQ.

Читать из stdin - нет, т.к. это не сочетается с идеей выборки по времени. Nerdlog-у нужны данные логов, из которых он выбирает определенную часть в соответствии с запросом (например, последний час), потом прогоняет это через awk-фильтры, и в результате получаем гистограмму и логи в соответствии с этим запросом.

Если читать из stdin, то это просто поток, к которому мы не можем потом делать запросы типа «последний час логов», или «с 15 до 17 часов», если не сохранять данные куда-то.

Если хочется просто смотреть поток логов, то на это есть старый добрый lnav.

dimonomid
() автор топика
Ответ на: комментарий от hobbit

А что Go это экзотика? Сейчас больше Groovy экзотика нежели Go.

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

Да, ssh доступ нужен, действительно. Только эта настройка, чтобы сгенерировать ssh ключи, не относится напрямую к Nerdlog - ssh доступ и для других вещей используется (очевидные вещи говорю, но уж какой вопрос, такой ответ).

Ну и если мы говорим про виртуальные инстансы, типа того что на AWS EC2 или Digital Ocean, то там это тоже настраивать не нужно: на этапе создания инстанса просто чекбоксы отметить нужно, какие ключи туда хотим положить, и все.

Если у вас к серверам нет ssh доступа, то, конечно, Nerdlog не для вас.

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

эта настройка, чтобы сгенерировать ssh ключи, не относится напрямую к Nerdlog

Так если мне всё-равно надо настраивать что-то, то можно сразу и удалённый логгинг настроить. Какая разница для чего генерить файл конфига - для ssh иди для systemd-journal-remote?

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

Как я сказал выше, предполагается, что ssh все равно будет нужен, для других вещей. Это не так? По крайней мере у меня ко всем серверам, которые я конторолирую, есть ssh-доступ.

И даже если это не так: вы опять-таки про systemd-journal-remote говорите. Это же не совсем сопоставимые вещи: как я уже говорил, мне для комфортной жизни нужна гистограмма и удобная навигация по логам, так что голый systemd-journal-remote недостаточен. Нужно еще что-то, типа Kibana или Grafana, как вы сами сказали. Настроить все это - это же на порядок более трудоемко, чем настроить ssh.

dimonomid
() автор топика

Что-то нихрена не фурычит с удаленным хостом под фряхой:

          ╔════════════════════════════════════════════Log query error═════════════════════════════════════════════╗           
          ║                                                                                                        ║           
          ║ root@bk:22:/var/log/messages: agent exited with non-zero code '1'                                      ║           
          ║ ------                                                                                                 ║           
          ║ stderr:                                                                                                ║           
          ║ debug:prev logfile /var/log/messages.1 doesn't exist, using a dummy empty file /tmp/nerdlog-empty-file ║           
          ║ debug:index file doesn't exist or is empty, gonna refresh it                                           ║           
          ║ debug:the from 2025-05-26-23:05 is found: 8917 (910110)                                                ║           
          ║ debug:Getting logs from offset 910110 until the end of latest /var/log/messages.                       ║           
          ║ debug:Command to filter logs by time range:                                                            ║           
          ║ debug: bash -c 'tail -c +910110 /var/log/messages'                                                     ║           
          ║ gawk: cmd. line:21:   !(:q) {numFilteredOut++; next}                                                   ║           
          ║ gawk: cmd. line:21:     ^ syntax error                                                                 ║           
          ║                                                                                                        ║           
          ║                                                   OK                                                   ║           
          ║                                                                                                        ║           
          ╚════════════════════════════════════════════════════════════════════════════════════════════════════════╝           
iron ★★★★★
()
Ответ на: комментарий от iron

Обработка ошибок, конечно, может быть и лучше, но вы тут ввели :q в поле awk pattern, и он вам закономерно говорит syntax error.

В это поле awk pattern вводятся строки для поиска, вроде /foo/ или /foo/ && /bar/.

Ну а чтобы :q вводить, нужно сначала переместить фокус на какой-нибудь другой элемент (нажав, например, Tab, или Esc), и тогда уже : нажимать, чтобы перейти в командный режим. Ну а для выхода, вместо команды :q, можно просто Ctrl+C нажать.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)
  • долго вкуривал доку чтоб понять, как с консоли прописать хост к которому подключаться. Как оказалось, через параметр --lstreams. Не уже ли сложно было прописать примеры для удаленных хостов отдельным пунктом?
  • если в Edit query params оставить Time range пустым, то вываливается ошибка: time: invalid 'from' duration: parsing time "" as "Jan2 15:04": cannot parse "" as "Jan". Если я хочу открыть лог, в котором не известно за какой период времени логи или вообще нет временной метки, как это сделать?
  • почему нет хотя бы даже примитивного просмотрщика удаленных файлов/каталогов? Перед открытием лога, в соседней консоли лезть на сервер чтоб достать абсолютный путь к файлу лога – очень не удобно.
iron ★★★★★
()
Ответ на: комментарий от dimonomid

Обработка ошибок, конечно, может быть и лучше

Таки да, как минимум не падать, если --time ввели в неправильном формате:

# ./bin/nerdlog --lstreams 'bk:22:/var/log/messages' --time '-1d'
NOTE: X Clipboard is not available: clipboard is only supported on Linux, MacOS and Windows
panic: time: invalid 'from' duration: parsing time "-1d" as "Jan2 15:04": cannot parse "-1d" as "Jan"

goroutine 1 [running]:
main.newNerdlogApp({{{0x7fffffffe9f1, 0x17}, {0x7fffffffea10, 0x3}, {0x0, 0x0}, {0x765903, 0x20}}, 0x1, {0x7e4da0, ...}, ...}, ...)
	/tmpfs/nerdlog/cmd/nerdlog/app.go:163 +0x7bb
main.main()
	/tmpfs/nerdlog/cmd/nerdlog/main.go:139 +0xe1d
iron ★★★★★
()

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

Правда как задать формат временной метки – не понятно. К примеру, в логе nginx айпишник клиента идет первым, а дата в формате [$time_local] вторым. Пример:

2001:8b0:fe::101 [27/May/2025:00:57:55 +0300] "GET /get-all HTTP/2.0" 200 14966 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" "-"

Надеюсь автор не закинет свое детище и продолжит развивать. Все таки, у проги есть своя изюминка. Так что удачи ему.

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

долго вкуривал доку чтоб понять, как с консоли прописать хост к которому подключаться. Как оказалось, через параметр --lstreams. Не уже ли сложно было прописать примеры для удаленных хостов отдельным пунктом?

Несложно, действительно; просто я не думал что это будет удобнее чем просто запустить nerdlog без параметров и там уже в интерфейсе указать, куда подключаться. Но ок, добавлю в readme.

если в Edit query params оставить Time range пустым, то вываливается ошибка: ...... Если я хочу открыть лог, в котором не известно за какой период времени логи или вообще нет временной метки, как это сделать?

Если не известно за какой период времени логи - просто ввести какой-то очень большой промежуток времени, типа -999h. Поддержку запроса типа «дай все логи что есть», в принципе, реализовать можно, но я боюсь, что это будет слишком легким способом сделать реально тяжелый запрос, если файлы логов огромные (у нас они обычно в гигабайтах измерялись, ну или по крайней мере в сотнях мегабайт). Еще принимайте во внимание, что главным вдохновителем интерфейса был Graylog и подобные системы; там тоже нельзя запросить «дай все логи», нужно указать временной промежуток. Но реализовать в принципе можно, если сильно нужно.

А если вообще нет временной метки - это не поддерживается. Что в гисторамме-то рисовать, если неизвестно время каждого сообщения? Тут lnav или даже просто текстовый редактор будут более подходящими инструментами.

почему нет хотя бы даже примитивного просмотрщика удаленных файлов/каталогов? Перед открытием лога, в соседней консоли лезть на сервер чтоб достать абсолютный путь к файлу лога – очень не удобно.

Потому что пока не нужно было. Для нас, основной use case был - читать /var/log/syslog, и изредка еще /var/log/auth.log, так что пути к ним хорошо известны. Некоторым еще journalctl нравится. Все.

Ну и перед тем, как реализовывать браузер удаленных файлов, нужно сначала будет реализовать более гибкую поддержку разных форматов. Пока что формат syslog вот поддерживается, и еще парочка форматов, и все. Добавлять поддержку новых форматов - не всегда просто, из-за принципов работы (awk скрипт должен распарсить временную метку). В общем, с не-syslog форматами тут еще работы много.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)
Ответ на: комментарий от iron

Хехе, да уж, как я уже сказал, этим флагам --lstreams, --time и т.д. пока не было уделено особо много внимания. Спасибо, panic уж точно нужно будет исправить.

dimonomid
() автор топика
Ответ на: комментарий от iron

Спасибо на добром слове, и за обратную связь тоже спасибо.

Насчет формата временной метки: как я упомянул в другом сообщении, поддержка форматов - это не всегда просто, к сожалению. В текущей версии, жесткое правило - это иметь все компоненты временной метки (год, месяц, день, час, минута) на фиксированных смещениях от начала строки. Если в формате все это фиксированно, то добавить его поддержку - просто. Но если как у nginx, сначала идет IP адрес, который может иметь разную длину - то увы, пока что это не поддерживается. Такие ограничения из-за того, что временная метка парсится на стороне сервера (в awk скрипте), где все не так удобно, и все должно быть максимально быстро. В принципе реализовать можно, но сложнее и пока руки не дошли.

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

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

предполагается, что ssh все равно будет нужен

Так и я о том же - на удалённую машину каким-то образом должен попасть файл с ключом ssh. Ровно тем же самым образом туда может попасть и файл конфига systemd-journal-remote. В современном мире это делается каким-нибудь IaC - Ansible, Puppet, Chef… то есть это одинаковые по трудоёмкости задачи: для playbook без разницы какой файл ему раскатывать.

голый systemd-journal-remote недостаточен. Нужно еще что-то, типа Kibana или Grafana

Что поделать - издержки unix-way. Впрочем оно того стоит.

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

Поддержку запроса типа «дай все логи что есть», в принципе, реализовать можно, но я боюсь, что это будет слишком легким способом сделать реально тяжелый запрос, если файлы логов огромные

А в чем ложность? При открытии файла можно читать его размер и рисовать прогресс-бар, с указанием в процентах количества прочитанного. Если пользователь видит что это будет слишком долго, может нажать Ctrl-c и прервать загрузку. Кстати, можно заэмбедить pv, который в очень удобном виде будет отображать прогресс загрузки со всеми подробностями.

А если вообще нет временной метки - это не поддерживается. Что в гисторамме-то рисовать, если неизвестно время каждого сообщения?

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

Добавлять поддержку новых форматов - не всегда просто, из-за принципов работы (awk скрипт должен распарсить временную метку).

А в чем сложность добавить отдельный параметр, где пользователь сможет задать формат даты/времени в формате шаблона date? По этому шаблону потом можно будет переконвертить формат в любой нужный для awk формат.

# date '+%Y/%m/%d/%H:%M:%S'
2025/05/27/02:54:42
iron ★★★★★
()

взял отпуск на неделю и устроил себе личный хакатон

Взял отпуск, чтобы работать?

Кстати, почему весь код на Го такое говно? Вот пример. Для тех, кто не понял, почему layout1 = "2006-01-02 15:04:05", это такая магическая строка. Ну, говно же!

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

оставляя в стороне какого сорта органика golang;

адвоДьяво:

дык наглядность не формат с %Y и прочим format-string не известного(с полной точностью) для хомячка версии

а вот экземпляр без долей секунд в нисходящем с такими разделителями

крч а как по феншую?

[upd] т.е магия не в буквальном значении и там и 2007 за место года подходящий представитель множества нужного расклада - а в задаче эталона - или у тя претезия к такому api ?

qulinxao3 ★☆
()
Последнее исправление: qulinxao3 (всего исправлений: 1)

Не умеет такое, что совсем печаль: /var/lib/docker/containers/*/*.log

kirezz
()

А если я например сделаю запуск того самого awk скрипта через ansible это как не круто?

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

А в чем ложность? При открытии файла можно читать его размер и рисовать прогресс-бар, с указанием в процентах количества прочитанного. Если пользователь видит что это будет слишком долго, может нажать Ctrl-c и прервать загрузку.

Я вроде не говорил про сложность тут, только сказал, что пользователю будет очень легко сделать тяжелый запрос. Но да, прервать можно, конечно. А индикатор прогресса уже есть, как вы наверное видели, раз пробовали его запускать (не прогресс-бар, но проценты пишет).

В общем, согласен, что может быть полезно иногда. Сделаю, когда руки дойдут.

А если вообще нет временной метки - это не поддерживается. Что в гисторамме-то рисовать, если неизвестно время каждого сообщения?

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

Если так, то как тогда комбинировать с другими файлами (точнее, логстримами)? Когда у каждой записи в логе есть временная метка, то записи из разных файлов можно скомбинировать на единой временной шкале, и все будет на своих местах. А без временных меток уже нет такого разумного способа.

А в чем сложность добавить отдельный параметр, где пользователь сможет задать формат даты/времени в формате шаблона date? По этому шаблону потом можно будет переконвертить формат в любой нужный для awk формат.

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

dimonomid
() автор топика
Ответ на: комментарий от rupert

Взял отпуск, чтобы работать?

Да, приходится иногда. Вообще, как это часто бывает с open source проектами, весь nerdlog написан то в отпусках, то на выходных. А что делать.

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

dimonomid
() автор топика
Ответ на: комментарий от mx__

А если я например сделаю запуск того самого awk скрипта через ansible это как не круто?

Я не понял, что вы именно имеете в виду, поясните.

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

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html

(без понятия если у ансибля спец-модуль для парсенига логов …)

или вот: https://pypi.org/project/ansible-role-collect-logs/

mx__ ★★★★★
()
Последнее исправление: mx__ (всего исправлений: 1)

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

Попробовал зайти на удаленный сервер, nerdlog -h server.com - не коннектится.

Если просто открыть и в менюшках прописать user@server.com то коннектится, но почему без логина не заходит? У меня логин прописан в конфиге ssh.

Ну подконнектится подконнектился, говорит - нет никуда доступа, читать логи не могу (оно и понятно, я под своим пользователем). Перелогиниться, использовать sudo или еще какой polkit не предложило.

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

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

Я знаю, что такое ansible, но не понял как это может быть заменой nerdlog, который не только запрашивает логи, но и аггрегирует их, и интерактивную временную шкалу рендерит.

Но если все вам это не нужно, и хочется вручную awk скрипты запускать, то конечно.

dimonomid
() автор топика
Ответ на: комментарий от masa

Попробовал зайти на удаленный сервер, nerdlog -h server.com - не коннектится. Если просто открыть и в менюшках прописать user@server.com то коннектится, но почему без логина не заходит? У меня логин прописан в конфиге ssh.

Не видел вашего конфига ssh, но пока что его поддержка весьма ограничена: как минимум, не поддерживается Include и Match (нет на Go хорошей либы для этого пока, nerdlog использует эту). Если в вашем конфиге этот хост указан где-то в Include или Match, то, наверное, именно поэтому и не работает, к сожалению.

Если же просто как Host, без фокусов прямо в ~/.ssh/config:

Host myhost
  User myuser
  HostName myserver.com
  Port 1234

То будет работать. Чтобы обойти ограничение с Include, можно пока --ssh-config ему передать, чтобы сразу читал файл, который вам нужно.

Ну и также можно использовать и собственный конфиг nerdlog: ~/.config/nerdlog/logstreams.yaml; там можно и файлы логов указать для каждого логстрима.

Ну подконнектится подконнектился, говорит - нет никуда доступа, читать логи не могу (оно и понятно, я под своим пользователем). Перелогиниться, использовать sudo или еще какой polkit не предложило.

Мои юзеры (на Debian и подобных) состоят в группе adm, так что как вариант. У вас же можно, наверное, добавить юзера в какую-то группу, чтобы был доступ к логам?

Ну и на крайний случай можно законфигурить Nerdlog чтобы использовал sudo для конкретного логстрима (но пока что будет работать только если sudo пароль не требует), тут написано как.

Но я согласен, что было бы хорошо реализовать это удобнее, с интерактивным запросом пароля sudo, если необходимо. Когда-нибудь…

При открытии тебя встречает страшная плашка с кучей текста и полей, непонятно что куда вводить

Раздел Usage в readme первым делом показывает скриншот этого диалога, и объясняет, что есть что.

Почему сервера называются каналами?

Скорее потоками. Опять-таки, и в том же разделе readme это объясняется, и еще более подробно в доках. Вкратце: потому, что логстрим - это не просто «сервер», это, упрощенно говоря, конкретный файл логов на этом сервере. То есть, если нужно одновременно читать, например, /var/log/syslog и /var/log/auth.log с одного и того же сервера, то это будут два отдельных логстрима, хотя они и на одном сервере. Ну и почему же все таки «логстрим» а не просто файл тогда - потому, что логстрим может состоять из нескольких последовательных файлов - например, когда мы читаем логи из /var/log/syslog, это обычно не только этот единственный файл, а два: /var/log/syslog.1 + /var/log/syslog. Или вообще может читаться не из файлов, а из journalctl. В целом, как общий термин - поток логов (logstream).

В общем непонятная поделка для админов, которые везде сидят под рутом и логинятся на сервера рутом.

Зачем под рутом? На некоторых дистрибутивах можно просто юзера в группу adm добавить. Не во всех, к сожалению.

dimonomid
() автор топика
Ответ на: комментарий от mx__

а так: https://github.com/grafana/loki https://grafana.com/go/webinar/getting-started-with-logging-and-grafana-loki/?pg=oss-loki&plcmt=featured-videos-1

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

dimonomid
() автор топика
Ответ на: комментарий от Gonzo

Щас уписяюсь. Нет, чессно, прекрати.

Энурез не приговор - тебя никто не осуждает.

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

Спасибо за подробный ответ.

Прога выглядит красиво, поэтому и решил попробовать, но вот эти UX приколы отбили желание пользоваться.

Не видел вашего конфига ssh

Логин у меня прописан так

Host *.server.com
    User me

Группу adm наверно можно настроить, но честно говоря, первый раз про такой способ слышу, обычно есть доступ к sudo или пароль другого пользователя с правами, но возможности логиниться этими пользователями напрямую нет.

Сходу абстракции совсем неясные. Если стрим это файл или несколько файлов, то дефолтный стрим 'localhost' сбивает с толку, по идее он дожен быть localhost:/var/log/syslog? из всего это непонятно как указать стрим journalctl определенного юнита?

masa ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.