linux中Sentry事件記錄實戰

來源:互聯網
上載者:User


不管你用什麼程式設計語言,都會面臨如何處理錯誤記錄檔的問題。很多程式員對錯誤記錄檔放任自流,直到出現故障了才追悔莫及,如果問我怎麼辦,我會推薦 Sentry!


Sentry 是一個錯誤記錄和彙總的平台,只要看看它漂亮的介面就會喜歡上它:

sentry
sentry

關於如何安裝 Sentry,官方文檔裡已經給出了詳細的說明,建議大家仔細閱讀,一般通過 Virtualenv 來安裝 Sentry,具體可以參考:學習搭建Python環境。

提醒:我在安裝 7.5 的時候,測試有迴圈重新導向,如果你也是可以安裝 7.4:

pip install sentry==7.4.3
安裝完畢後,假設我們要監控 PHP 錯誤記錄檔,那麼通常是在我們的業務代碼裡嵌入官方的 PHP SDK,不過這樣肯定會影響到效能,好在我們可以通過錯誤記錄檔曲線救國,只要定期掃描錯誤記錄檔,把新產生的資料發送給 Sentry 就好了。

BTW:如果發現 Sentry 中的錯誤計數器始終是一,即便有新的錯誤也不更新,那麼多半是因為沒有許可權產生 celerybeat-schedule 檔案,預設是產生在進程的 cwd 目錄中。

如何才能發現新產生的資料呢?需要記錄掃描到了哪個位置,可以通過 Logcheck 中提供的 logtail 或者 logtail2 來實現這個功能,至於它倆的區別,可以參見 man 文檔,簡單點兒說,如果日誌被 rotate 的話,logtail 可能會丟失舊日誌中的資料,而 logtail2 不會。

<?php

require_once __DIR__ . '/raven-php/lib/Raven/Autoloader.php';

Raven_Autoloader::register();

$dsn = 'http://your/dsn';

$options = array(
    'tags' => array(
        'php_version' => phpversion(),
    ),
    'trace' => false,
);

$pattern_content = '^\[([^]]+)] PHP ([^:]+):\s+(.+)';

$parrern_level = implode('|', array(
    'debug',
    'info',
    'warning',
    'error',
    'fatal',
));

$client = new Raven_Client($dsn, $options);

while (($line = fgets(STDIN)) !== false) {
    if (!preg_match("/{$pattern_content}/", $line, $match)) {
        continue;
    }

    list($line, $timestamp, $level, $message) = $match;

    $timestamp = gmdate('Y-m-d\TH:i:s\Z', strtotime($timestamp));

    preg_match("/{$parrern_level}/i", $level, $match);

    $level = isset($match[0]) ? $match[0] : 'error';

    $client->captureMessage($message, array(), array(
        'timestamp' => $timestamp,
        'level' => $level,
    ));
}

?>
做好了以上這些準備工作,剩下的只要通過管道把新資料傳遞給 PHP 指令碼即可:

shell> logtail2 -f /path/to/php/error/log | php /path/to/script
建議通過 crontab 定時運行此命令,但是需要注意用 flock 保護一下,以免擁堵

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.