Обідня Історії QA)
Коротше, моя Linux-машина в ремонті. І виявилось якщо треба почитати системний лог з лінукса на вінді, це та ще пригода.
А ситуація така: приходять до мене і кажуть, апка не працює, REST не відповідає.
Ну і я такий як завжди думати що не так
А Сертифікат живий?
Пішли перевіряти. За пару хвилин повертаються:
Та ні, просрочений. Вже кілька днів.
Ну я в шоці, TLS мав сам автоматом оновити. Значить десь щось пішло не так...
Окей, думаю, стягну логи з сервера, подивимось по acme, шо там і як.
Ну всі і так знають але нагадаю
Команда, щоб скачати лог з лінукса
scp user@server:/var/log/syslog ./syslog
(або
/var/log/journal/
якщо journald - тут треба дивитись, куди пише система)
Але тут почалось найвеселіше, як його глянути на вінді?
Бо журнал в journalctl-форматі, це не просто текстовий файл. Він у бінарному форматі systemd journal.
Як скачати логи з Linux на Windows (якщо твій комп тимчасово на Windows)?
вроді все легко, але коли ти це знаєшь, коротше робиться це через scp,
але треба або:
WSL (якщо в тебе встановлений), або OpenSSH client в PowerShell.
Якщо ще не встановлено то треба качать WSL
wsl --install
Після ребуту (або через Microsoft Store) постав Ubuntu. І тільки тепер можна юзати scp прямо з PowerShell або Ubuntu консолі у WSL.
Команда для завантаження логів з Linux-сервера
scp user@your-server:/var/log/syslog C:\Users\yourname\Downloads\
або якщо файл з journal:
scp user@your-server:/var/log/journal/remote/system.journal C:\Users\yourname\Downloads\
Ну якщо пароль не питає або каже "permission denied" можно зробити і додати ключ -i для ssh-ключа або зробити ssh-copy-id на Linux перед цим
Після того, як скачав лог (наприклад syslog або system.journal), треба подивитися, що там взагалі писалось про acme, certbot, або letsencrypt.
Якщо це простий .log файл (наприклад syslog,
/var/log/syslog, /var/log/letsencrypt/letsencrypt.log)
:
То можно просто юзати
cat syslog | grep acme
cat syslog | grep certbot
cat syslog | grep letsencrypt
або на вінді (через PowerShell):
Select-String -Path .\syslog -Pattern "acme"
можете побачити такий лог умовно,
acme: Attempting to renew cert...
acme: Renewal failed: Could not connect to http://yourdomain/.well-known/acme-challenge/...
або
certbot[12345]: Successfully received certificate.
certbot[12345]: Cert is not due for renewal
Тобто видно:
чи взагалі намагався оновлювати, чи пройшла валідація яка була помилка (80 закритий, DNS не той, або ще щось) або коли останній раз проходило успішно
Якщо у вас systemd journal (system.journal, journalctl), то фільтруєте так:
journalctl --file=./system.journal | grep acme
journalctl --file=./system.journal | grep certbot
або без grep:
journalctl --file=./system.journal -u certbot
Можна ще по часу:
journalctl --file=./system.journal --since "3 days ago" | grep acme
Якщо проблеми скоріше покаже щось типо того - вони типо за часту стандартні
acme: Renewing an existing certificate
acme: Could not connect to http://mydomain.com/.well-known/acme-challenge/
одразу зрозуміло: серт пробував оновити, але 80-й порт був закритий зовні. Сертифікат не зміг зробити HTTP-челендж.
Як результат, автоматичне оновлення впало, і ніхто не побачив. Сертифікат протух.
Ну і да Якщо у вас certbot з логами
/var/log/letsencrypt/letsencrypt.log
там теж все видно, навіть без journal. Можна просто відкрити й шукати ERROR, challenge, timeout, renewal.
Ось Тепер ви знаєте, як викачати і прочитати логи, навіть якщо ти тимчасово на Windows.
І ще раз переконався, що журнал це твій друг.
Може ви знаєте якісь другий спосіб або свидший то пишіть - мені це буде цікаво і актуально)