Larametrics - A self-hosted metrics and notifications platform for Laravel apps

Trước đây mình đã từng giới thiệu một số các bài viết về log management như:

Và hôm nay, mình sẽ tiếp tục giới thiệu tiếp một bài viết về log management nhưng đặc biệt là dành riêng cho thằng Laravel. Đó là Larametrics.

Larametrics cũng đơn giản chỉ là một thư viện hỗ trợ hiển thị log ứng dụng của Laravel như các thư viện khác (laravel-log-viewer, laravel-logger, ...). Ngoài việc đó, nó còn giúp chúng ta làm một số việc như:

  • Báo về email khi một log notice hay info được ghi
  • Cảnh báo chúng ta qua Slack và email khi một error log được ghi
  • Thông báo cho chúng ta biết khi model Admin được sử dụng (như create hay delete)
  • Thông báo cho chúng ta khi một ai đó truy cập vào một route nào đó (ví dụ: /auth/login)

Để có thể dễ hình dung. Chúng ta cùng đi thực hiện một demo xem sao nhé 😄! Yêu cầu đơn giản như sau:

  • PHP 5.6.4+
  • Laravel 5.2+
  • Thư viện guzzlehttp/guzzle nếu như bạn sử dụng chức năng notifications

Let's start

Giờ chúng ta đi khởi tạo một project Laravel đơn giản bằng lệnh:

composer create-project --prefer-dist laravel/laravel larametrics-demo

hoặc

laravel new larametrics-demo

Mặc định là bạn đã cài Laravel installer theo hướng dẫn ở đây rồi

Sau khi tạo project xong, chúng ta thực hiện tạo database cho ứng dụng bằng lệnh:

mysql -u<MySQL Username> -p<MySQL password> -e "CREATE DATABASE larametrics CHARACTER SET utf8 COLLATE utf8_general_ci;"

Tiếp đó, chúng ta vào thư mục larametrics-demo và sửa các thông số kết nối tới database trong file .env. Xong, chúng ta thực hiện sang phần cài đặt thư viện Larametrics cho ứng dụng:

composer require aschmelyun/larametrics

Tiếp, bạn cần phải thêm provider của Larametrics vào config/app.php

'providers' => [
    // Other providers
    Aschmelyun\Larametrics\LarametricsServiceProvider::class,

Sau khi cài xong thư viện, chúng ta lấy file config của Larametrics:

php artisan vendor:publish --provider="Aschmelyun\Larametrics\LarametricsServiceProvider"

Chạy migrate để tạo một số bảng cần thiết:

php artisan migrate

Tiếp theo, thực hiện thêm routes cho Larametrics tại file routes/web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// Other routes
// ...

\Aschmelyun\Larametrics\Larametrics::routes();

Mặc định, khi thêm Larametrics routes, nó có thể được truy cập tại /metrics. Nếu muốn (hoặc trường hợp sử dụng trên production), bạn có thể nhét nó vào một middleware nào đó (ví dụ như middleware auth) để thực hiện xác thực người dùng trước khi có thể truy cập vào trang, ví dụ:

// routes/web.php
Route::group(['middleware' => 'auth', 'prefix' => 'admin'], function() {
   \Aschmelyun\Larametrics\Larametrics::routes();
});

Vậy là xong. Giờ chúng ta thử nghiệm phát nhóe. Đầu tiên là log ứng dụng, thực hiện tạo thử một controller để test:

php artisan make:controller HomesController

Sau đó bạn thực hiện thêm method index cho HomesController tại app/Http/Controllers/HomesController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomesController extends Controller
{
    public function index(Request $request)
    {
        $percentage = 1 / 0;
        return view("welcome");
    }
}

Update lại root route trong file routes/web.php sang:

Route::get("/", "[email protected]");

Thực hiện chạy server:

php artisan serve

và bạn thử truy cập địa chỉ: http://localhost:8000. OK, bạn sẽ dính lỗi Division by zero. Oke, chủ đích của chúng ta mà 😄. Giờ bạn truy cập vào http://localhost:8000/metrics để xem. Kết quả bạn sẽ nhận được như sau:

Bạn có thể click vào View Details để xem chi tiết 😄! Giờ chúng ta đi thử nghiệm quả log model nhé. Dùng luôn cái Auth (có bao gồm Register/Login) của thằng Laravel.

php artisan make:auth

Giờ bạn thực hiện vào đường dẫn: http://localhost:8000/register và thực hiện đăng ký. Sau khi đăng ký xong, bạn quay lại Larametrics để xem kết quả 😄

Ngon rồi phải không ạ 😄? Giờ chúng ta đi thử phần notification nhá. Bạn cần có tài khoản tại MailTrap, thực hiện edit MAIL_USERNAMEMAIL_PASSWORD trong file .env cho phù hợp với thông tin mà MailTrap cung cấp rồi khởi động lại Artisan server. Truy cập vào http://localhost:8000/metrics/notifications và thực hiện thêm một notification để test:

Click Save Notifications để lưu lại và thực hiện về http://localhost:8000 để phát sinh lỗi Division by zero. Quay qua tab MailTrap để check email:

Rất ngon mà không sợ nóng 🤣!

Lời kết

Khi bạn đọc đến dòng này, có nghĩa là bài viết này đã kết thúc rồi 😃! Vậy là mình đã giới thiệu và demo xong thư viện Larametrics cho Laravel. Mình hy vọng với bài viết này nó sẽ có ích cho các bạn ở một tương lai không xa. Hẹn gặp lại mọi người ở những bài viết tiếp theo. Chào thân ái 👋!