Какие логи смотреть и где они?

Здравствуйте!
По ходу форума вижу предложения от разработчиков то одни логи скинуть, то другие. К сожалению, не часто вижу далее в темах, чем все заканчивается.
Меня очень, как бы сказать… ну очень на грани приличного начинает слегка)) напрягать, то одни зависоны, то другие. Причем вчера все работало, сегодня запускаю, чтобы двигаться дальше - зависает, начинаются перезагрузки, рестарты правил, mqtt, всякая муть, отнимающая кучу времени и все больше почти-почти напрягать и опять топтание на одном месте, когда есть очень много работы…
Есть ли исчерпывающая информация, какие логи в каких случаях смотреть, чтобы я мог хоть как-то ориентироваться?
Вот, например, я знаю /var/log/messages
что-то туда постоянно пишется…
Помню, были еще места, которые не могу теперь по веткам найти…
Как я полагаю, надо логи работы правил, наверное mqtt брокера, может еще что, что пользователи спрашивают часто.
Вам, разработчикам, часто приходится писать просьбы прислать то одни логи, то другие. Может, кто из пользователей уже узнал где что надо в каких случаях смотреть.
Предлагаю тут агрегировать эти знания, и, быть может, много вопросов будет отсекаться, если люди просто посмотрят и проанализируют логи, относящиеся к своему вопросу.
Извините, что так много написал, сил уже нет бороться на ощуп…

жесть какая) несколько раз поудалял “проблемное” правило, поперезаписывал - все делал одно и тоже. и несколько раз зависало, а теперь работает. Застрелиться…

polygon, добрый день! Грустно, что вам приходится столько “долбиться” в разные двери для достижения результата. Давайте попробую помочь систематизировать поиск неисправностей.

  1. Основной лог – /var/log/messgaes. В него пишет большинство программных компонентов, включая wb-mqtt-serial и wb-rules . У mosquitto – собственный лог: /var/log/mosquitto/mosquitto.log. У nginx – /var/log/nginx

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

  3. Иногда удобно (особенно это касается движка правил) посмотреть комангдой ps -ef точную команду запуска процесса, остановить соответствующий сервис и запустить команду вручную, с теми же аргументами, которые показал ps, добавив, возможно, дополнительный уровень отладки.

  4. Конкретно про движок правил.

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

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

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

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

1 лайк

вот похоже у меня что-то подобное происходит. Т.о. как я понял для надежности надо:

  1. создавать вирт устройства в отдельных файлах-скриптах
  2. все те скрипты, которые должны работать с вирт. устройствами, должны запускаться с задержкой, так получается?
  3. Если я правлю скрипты и сами вирт. девайсы, лучше не исп. вэб интерефейс, а из консоли
    отключить правила - service wb-rules stop,
    отключить брокера - service mosquitto stop, (морда отвалится)
    под вопросом - очистить очередь mqtt-delete-retained “/devices/#”
    затем через файловый менеджер внести изменения в правило, а потом рестарт москито (сколько ждать восстановления?) и через неск. сек. рестарт правил. Так?

я выполнил эту команду, и вот что увидел:


я не могу пока что (знаний не хватает) однозначно идентифицировать эти сообщения.
Понимаю, что это линуксовская тема, и в Вашу работу не может входить разъяснение этих моментов, может я оплачу Ваши консультации по этим вопросам и мы по тимвиверу и скайпу это обсудим? Мне кажется, так будет быстрее, ведь всё мне не нужно, а только то, что касается конкретного вопроса. И, быть может, по аналогии я смогу разобраться и новыми непонятками…

Отвечу в теле сообщения:

У вас терминал обрезает строки, похоже.
Вот синтаксис запуска самой команды движка правил:
image

А запускается она так:
/usr/bin/wb-rules -syslog -queue-len 2048 -editdir /etc/wb-rules /usr/share/wb-rules-system/rules/ /etc/wb-rules /usr/share/wb-rules/

К сожалению, у нас нет возможности оказывать платную поддержку, но на форуме есть опытные пользователи, попробуйте описать задачу в разделе форума “Услуги”. Возможно, кто-то откликнется.

я опытным путем к этому пришел, чтобы 100% (как мне кажется) избавиться от рудиментов, которые возникают при написании программы. Также это помогает когда что-то зависает и не могу через вэб к скриптам попасть.

Я решил добить на этом контроллере свою локальную задачу, и тогда уже решить, готов ли я разбираться дальше с нюансами работы операционной системы и т.д. Мне кажется, что я должен всзять контроллер, написать правило согласно документации и оно должно работать. Если создаю вирт девайс по документации в теле скрипта (а другого “безопасного” с точки зрения работоспособности системы я не нашел) то он должен работать, и я не должен искать логи по системе. Я же не хакаю девайс, не делаю что-то постороннее… Я, как мне кажется, пытаюсь реализовать элементарные задачи.

Мне пока что никуда не деться, я должен сделать и сдать в рабочем виде систему. Менять что-то уже потом. Скажите, если вирт устройства, обращения к ним, дают такие сбои, а у меня судя по всему так и происходит, как мне поступать? Проблема с одним файлом, где это вирт устр и к нему конечно идет обращение из скрипта. Я проверяю его состояние (вкл или выкл) отправляю на него данные, чтобы отображались в интерфейсе.
Вы можете четко указать порядок его создания, что с ним можно делать, а что нельзя? Может, опрашивать через время(про это уже говорили), может рестартовать москиту эту каждый раз после обновления правила или наоборот заранее её рестартануть, потом правило добавить и не дышать на контроллер… Пожалуйста, у вас большой опыт, я думаю, что коллеги мне наврядли смогут помочь, ведь я теперь представляю через что им пришлось пройти, чтобы оседлать вашу лошадку. Контроллер по концепции очень хороший, очень нравится. Я его выбирал не из-за цены, я готов и в 2 и в 3 раза больше заплатить… Был бы признателен за разъяснения.

вот вы это знаете, как с этим бороться мне пока не понятно. Но наверное было бы логично, если бы на уровне ядра вы бы исключили такую ситуацию? Есть ли безопасный способ обратиться, не вызывающий сбой системы? Какой-нибудь try catch?
Еще я иногда слышу, что на рейке с контроллеров что-то клацнет, релюха какая-то, но я в это время ничего с ним не делаю, индикация не меняется, это что-то где -то пролетает…
Конечно, логи теперь буду смотреть более системно, благодаря вашей помощи, но все это дело не очень воодушевляет…

polygon, смотрите.

  1. Совершенно точно не надо чистить очередь mqtt-сообщений. Это создает какие-то искусственные условия для запуска ваших правил.
  2. Движок правил подписывается на mqtt-брокере очередь сообщений (и веб-интерфейс тоже). Каждое новое сообщение в очереди как-то обрабатывается тем, кто на него подписался.
  3. Важно (из документации): Не следует использовать объект dev вне кода правил. Не следует присваивать значения параметрам через dev вне then -функций правил и функций обработки таймеров (коллбэки setInterval / setTimeout ). В обоих случаях последствия не определены.
  4. Виртуальное устройство с точки зрения – это, условно говоря, тоже набор сообщений в mqtt-очереди.
  5. В расширенной документации на движок правил (https://github.com/contactless/wb-rules) обратите внимание на разделы “Определение виртуальных устройств” и “Просмотр и выполнение правил”, возможно, это внесет дополнительную ясность.

Вот код, который делает вот это “Проблема с одним файлом, где это вирт устр и к нему конечно идет обращение из скрипта. Я проверяю его состояние (вкл или выкл) отправляю на него данные, чтобы отображались в интерфейсе” можно посмотреть? Только в виде файла, пожалуйста, не в виде текста сообщения.

WatchDog.txt (3.4 КБ)

понял! Изучу.переделаю на правило, посмотрю как. Сейчас подключу контроллер к wb и займусь. Спасибо за ваше участие!

Извините, добавлю свои 5 копеек, хотя уже писал как-то…
После длительного гемороя с rules на WB5 (хотя и успешного), с энтузиазмом принял WB6 на arm7,на которой встает штатно nodejs LTS. Ставьте, пользуйтесь всей базой библиотек и мощью красивого языка. Убейте - не понимаю разработчиков, создавших прекрасную концепцию и приборы (у меня трудятся без продыху уже 3-й год несколько WB), при этом зачем-то тратящих силы на убогий клон JS.

1 лайк

Подскажите, пожалуйста, как настроить глубину логгирования? Я вижу, что файл messages перетирается по утру. в 6:25, например. А можно настроить, чтобы логи за месяц хранились? Пусть бы на день файл с датой в названии… Такое возможно?

И как настроить таймзону логов? А то какая-то ерунда получается. Даже если я выставляю таймзону, то все-равно логи пишутся в GMT. Наверное, это кашерно, но в морде я вижу одно, в логах вижу другое. Хотелось бы чтобы не кашерно, а по-человечески было.

Логи при ротации просто переименовывается в /var/log/messages.1

Про таймзону: проверьте, что она у вас сохраняется после перезагрузки. Если не сохраняется, то нужно обновить пакет wb-configs :

apt update && apt install wb-configs
1 лайк

а что это значит? Я должен правило создать, которое в условленное время логи переименовывает или как? Или настройка есть конфиг какой-то?

Добрый день!

По умолчанию контроллер настроен на автоматическую ротацию логов по превышению размера. То есть размер лога стал больше заданного, от него отделяется кусок такого размера, архивируется и сохраняется. Файл называются /var/log/messages.1, а тот, что был /var/log/messages.1 до этого архивируется и сохраняется как /var/log/messages.2.gz, и так далее. Сколько таких кусочков будет храниться, и какого они будут размера, можно задать.

Это делается стандартным для Linux способом - утилитой logrotate https://linux.die.net/man/8/logrotate

спасибо! буду разбираться. Эх, не думал не гадал, что взяв контроллер с интересными интерфейсами и запланировав в определенные сроки сдать объект на нем, нарвусь на то, что надо стать стандартным линухоидом) Если меня не закопают за задержки, доведу до релиза))

1 лайк

получив не странную коробку с интересным интерфейсом и непонятными кишками,
а стандартный компьютер с линухом (стандартным, в отличие от MOXA например)
вы получили на порядок больше пользы и свободы, чем… :wink:

1 лайк

на перспективу - да, надеюсь :smiley:
на реальный момент - :confounded:

1 лайк