Удосконалення та налагодження php-додатків за допомогою syslog

Програмування - стомлююче, але в той же час захоплююче заняття. Одним з цікавих аспектів є вивчення нових способів використання старих засобів. Нещодавно я була прийнята, щоб знайти помилки в великої і складної LAMP-системі (Linux®, Apache, MySQL, і Linux, Apache, MySQL, PHP / Perl) - системі керування вмістом (Content-Management System - CMS). Архітектура CMS представляла собою стандартну LAMP-модель на Enterprise Red Hat Linux з Apache V2.0. Код Web-сайтів складався з декількох сотень PHP-модулів, розкиданих по 30 підкаталогам каталогу Apache document root. В Apache і MySQL зміни не потрібні були, тому всі мої зусилля були зосереджені на PHP.

Витративши багато часу на вивчення роботи CMS і оцінивши її витонченість, я зрозумів, що в самій зрілої програмному середовищі ця система використовувала лише невелика кількість доступних PHP-функцій (тут бал правлять тіні старого правила 80/20 - 80% роботи виконується за допомогою 20% доступних функцій). У даній статті демонструється, як процес налагодження невідомої складної системи допомагає дізнатися про рідко використовуються функції, а також наводяться приклади застосування цих нових знань в використанні багатих можливостей функції syslog ().

під мікроскопом

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

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

Відома методика полягає в тому, щоб вставити код, який просто виводить ці рядки і значення. На жаль, працюючи з такими інструментами, як PHP або будь-які Web-додатки, можна засмітити природну вихідну інформацію системи (тобто HTML-код, який надсилав в браузер) налагоджування, особливо якщо досліджувана система є працюючим сервером.

Купуючи нові знання і підвищуючи свою кваліфікацію, ви починаєте бачити різні способи зробити що-небудь, і який-небудь один з них стане очевидним при вирішенні задачі. Але завжди майте на увазі: те, що очевидно для вас, зовсім не очевидно для інших. Те, що просто для вас, може доставити купу неприємностей іншим.

Застосування функції syslog () дозволяє взяти складність під контроль і забезпечує додаткову перевагу - зручні настройки за допомогою конфігураційних файлів, таких як syslog.conf. Наприклад, можна вставити код для форматування SQL-твердження, записи його в syslog () і передачі в MySQL для виконання. Потім невелика модифікація файлу syslog.conf пошле текст в інший системний журнал або, можливо, просто в бітопріемнік. Тижні або місяці по тому, якщо знову буде потрібно побачити, що сталося, ще одне просте зміна в файлі syslog.conf відновить функціональність.

У світі UNIX у syslog багата і яскрава історія. Розроблений спочатку як частина проекту Sendmail, syslog виявився настільки корисним, що в його функціональність було включено багато інших інструментів; тим самим було доведено, що іноді найбільш прості ідеї є найбільш потужними.

Коротко кажучи, syslog дозволяє додаткам записувати помічені повідомлення в загальний набір системних журналів, які можуть зберігатися там, де це найбільш зручно для програмістів і мережевих адміністраторів. Це означає, наприклад, що можна налаштувати syslog на Web-сервері на запис системних повідомлень на інший сервер, який, можливо, знаходиться на кілька рівнів глибше (за брандмауерами), і до нього легше отримати доступ. Але для моїх цілей досить поведінки за замовчуванням файлів, що записуються в каталог / var / log.

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

Кожне правило складається з двох полів: селектора (selector) та дії (action). Селектор вказує, які повідомлення будуть реєструватися (наприклад, ядра, користувача, пошти, принтера), а також пріоритет. Поле пріоритету містить ключові слова, такі як debug (налагодження), info (інформація), notice (повідомлення) або warning (попередження). Поле дії визначає, що робити з повідомленнями, відповідними вмісту селектора. Правила можуть визначати файл для запису повідомлення, механізм відправки реєстрованого повідомлення, що відправив повідомлення користувача (у вигляді консольних повідомлень) і т.д.

запис інформації

Вивчіть інформацію і керівництва по syslog, щоб налаштувати систему відповідно до своїх вимог. У моєму випадку потрібно було знати значення різних PHP-змінних в різний час виконання CMS. Крім того, я повинен був знати, коли були запущені і зупинені різні модулі, а також значення різних проміжних змінних. Перш ніж приступити до специфічних подробиць, давайте здійснимо налаштування.

Лістинг 1. test.php

Тепер відкрийте вікно X-терміналу і введіть наступну команду, щоб побачити, що було записано в файл / var / log / messages:

Якщо все пройшло добре, в кінці лістингу ви повинні побачити наступну рядок:

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

що записувати

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

Важливо знати, які модулі роблять щось понад те, що написано в документації. Тому я люблю записувати повідомлення, що відзначають початок і кінець модулів. Таким чином, можна погратися зі сторінками Web-сайту, спостерігаючи за додатковим вікном X-терміналу, де виконується команда tail -f / var / log / messages. Ви побачите, які модулі виконуються, а також в якому порядку кожен раз браузер запитує нову сторінку.

Я також люблю реєструвати кордону між різними програмами, що викликаються в процесі виконання PHP-коду. Наприклад, коли зроблені MySQL-запити або викликані зовнішні програми, які змінюють форматування даних (Extensible Stylesheet Language Transformation (XSLT) механізми, наприклад). Практика систематичного розміщення таких контрольних точок в коді кожного модуля допоможе звикнути до назв і розташування модулів. У той же самий час, коли код відправляє повідомлення, які відображаються в додатковому X-терміналі, ви переглядаєте різні сторінки, маючи, таким чином, важливий зворотний зв'язок, що полегшує і поглиблює ваше розуміння системи.

висновок

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

Ресурси для скачування

Схожі теми