Latest News
Đẩy log exception của spring boot lên elasticsearch
  • About
  • EmEditor
  • Register Google Adsense

Love Coding

Note anything I want

  • Home
  • Web Development
    • HTML
    • Javascript
    • jQuery
    • CSS
    • PHP
    • ASP
    • JSP
    • Fix Bug
  • Other Development
    • Desktop Java
    • Mobile J2ME
    • VBS
  • Operating System
    • Windows
    • Linux
  • Database
    • MySQL
    • Oracle
  • Software
Home » PHP » Technology » Love Coding: Setup Zipkin lấy log từ queue của RabbitMQ

Setup Zipkin lấy log từ queue của RabbitMQ

HuyPV
Add Comment
PHP , Technology
Friday, November 12, 2021

Đợt này làm về tracing: mục đích là xem các API gọi nhau lâu không, ràng buộc thế nào (cái nào gọi tới cái nào), cái nào bị tắc còn tối ưu, 1 đơn hàng từ lúc bắt đầu đến lúc kết thúc mất bao nhiêu thời gian... Ngắm được thằng Zipkin, làm các bước triển khai demo xem thế nào. Chọn kiểu chạy file JAR cho nó đơn giản

Mặc định chạy nó sẽ lưu log lên RAM, nên sẽ thay đổi để nó lưu log vào MySQL. À server tiến hành demo là Debian 9 (stretch) nhé. Tiện thì nói luôn check xem server đang chạy OS gì thì: cat /etc/os-release

Okie quay lại, chạy Zipkin nào

STORAGE_TYPE=mysql MYSQL_USER=huypv MYSQL_PASS=ahihi nohup java -jar zipkin.jar &

Chạy xong vào đây được là okie http://your.server:9411/zipkin/


Dùng thư viện PHP code đẩy log vào ngon choét: composer require openzipkin/zipkin
https://github.com/openzipkin/zipkin-php

Giờ muốn tùy chỉnh thêm đó là đẩy message (JSON) vào queue của RabbitMQ, Zipkin lấy log từ đó sang. Hay nói khác đi là dùng RabbitMQCollector thay vì HTTP Collector

Có ví dụ sẵn ở đây https://github.com/openzipkin/zipkin/tree/master/zipkin-collector/rabbitmq
Tạo 1 file JSON lưu thông tin log (spans) mẫu, nếu ko biết tạo thì lên lại http://your.server:9411/zipkin/  tìm rồi download 1 cái về và sửa text, time đi
Chạy lệnh: rabbitmqadmin publish exchange=amq.default routing_key=zipkin < sample-spans.json

À liên quan là phải cài đặt RabbitMQ nhé. Cứ theo hướng dẫn mà làm thôi, đang trên server cài Debian nên nhảy vô link này https://www.rabbitmq.com/install-debian.html
Đù mé, dài vãi lồng, thường thì có các kiểu cài ăn sẵn, build từ source. Thôi, ăn sẵn cho nó sướng mồm. Chọn cái này "Option A: using apt repositories on Cloudsmith (quick start script)" rồi làm theo
Sau khi start ngon nghẻ, chạy systemctl status rabbitmq-server sẽ thấy màu xanh active (running) là chuẩn rồi. Muốn vào link web quản trị http://your.server:15672/ thì làm như sau:

rabbitmq-plugins enable rabbitmq_management

Xong éo đăng nhập được, vì vào bằng tên miền (public internet) thì phải thêm user, gán nhóm gán quyền: (ở đây là huypv, mật khẩu là matkhauxxx)

rabbitmqctl add_user huypv matkhauxxx

rabbitmqctl set_user_tags huypv administrator

rabbitmqctl set_permissions -p / huypv ".*" ".*" ".*"

Vào lại và đăng nhập thử ngon ngay


Chạy lại Zipkin để dùng RabbitMQ Collector

RABBIT_ADDRESSES=localhost STORAGE_TYPE=mysql MYSQL_USER=huypv MYSQL_PASS=ahihi nohup java -jar zipkin.jar &

Quay lại lệnh đẩy message JSON mẫu vào RabbitMQ

rabbitmqadmin publish exchange=amq.default routing_key=zipkin < sample-spans.json

(nếu chạy cái này trước mà chưa chạy Zipkin phía trên thì sẽ bị báo "message published but NOT routed")
Ồ nhưng éo có file rabbitmqadmin rồi, lại phải kiếm, tải nó ở đây nè http://your.server:15672/cli/index.html - Nhớ download về xong chmod +x thì mới chạy được nhé

Tèn ten, mọi thứ cứ gọi là nuột. Từ JSON message ở RabbitMQ đã được đẩy vào log bên Zipkin.

Code PHP nên lại phải tìm hiểu xem nếu dùng PHP thì làm sao để nó giống cái lệnh mẫu kia. Okie, chiến tiếp nào, kiếm được lib này php-amqplib/php-amqplib rồi code 1 file send.php như thế này

require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection-&gt;channel();
$channel-&gt;queue_declare('zipkin', 'direct', false, false, false);# tham số thứ 2 là direct mới được nhé
$txtContent = file_get_contents('sample-spans.json');
$msg = new AMQPMessage($txtContent);
$channel-&gt;basic_publish($msg, '', 'zipkin');
echo 'Ngon nghe';
$channel-&gt;close();
$connection-&gt;close();

Chú ý cái 'zipkin' nó chính là giá trị của routing_key trong mẫu. Phù, cơ bản là ổn rồi đó

Tweet
Setup Zipkin lấy log từ queue của RabbitMQ Title: Setup Zipkin lấy log từ queue của RabbitMQ
Description: Cần tracing hệ thống, ngắm được Zipkin. Có hỗ trợ thư viện PHP. Tiến hành setup thử nghiệm code xem ok không. Kết quả duyệt! ...
Rating: 4

No comments :

Post a Comment

Newer Post Older Post Home
View mobile version
Subscribe to: Post Comments ( Atom )
Quảng cáo

Popular Posts

  • VBS - Upload file HTTP Post
    Source: http://www.ericphelps.com/scripting/samples/Reference/Web/HTTP_POST.txt   Sub Upload(strUploadUrl, strFilePath, strFileField, strD...
  • Add other collapse div to your forum
    Collapse <div style="height: 16px; padding-right: 4px; font-weight: bold;" class="blockhead"> <span style=...
  • Use the YouTube API with PHP
    Process and integrate data from YouTube into your PHP application with PHP's SimpleXML extension Summary:   The YouTube vide...
  • Check Laravel version
    Đối tác bảo đang code và dùng Laravel, giờ muốn biết version Laravel tương ứng là bao nhiêu để xem mà code theo. Làm sao check? Cách 1: Sử...
  • Hàm chuyển từ ngày dương lịch sang âm lịch (PHP)
    <?php function INT($d) {     return floor($d); } function jdFromDate($dd, $mm, $yy) {     $a = INT((14 - $mm) / 12);     $y = $yy + 4800 ...
  • Trong laravel thì queue:work với queue:listen khác nhau thế nào?
    Trong laravel thì queue:work với queue:listen đều chạy jobs trong queue. Vậy 2 cái này cũng phải có gì đó khác nhau chứ, nếu ko thì nó là ...
  • Character Set và Collation trong MySQL là gì? Tạo DB thì để UTF8_GENERAL_CI hay UTF8_BIN
    Character Set là một tập các ký tự và dạng số hóa của các ký tự đó Collation là một tập các luật để so sánh các xâu được sinh ra từ các ký ...
  • git checkout file from other branch
    Đang làm trên nhánh dev. Muốn lấy 1 file, ví dụ: xxx/helper.php ở trên nhánh master về dev thì làm thế nào? Cách 1: nông dân nhiều bước nh...
  • mysql_error: Undeclared variable: INF
    mysql_error: Undeclared variable: INF PHP Code: $limit = 10; $page = isset($_GET['p']) ? $_GET['p'] : 1; $offset = ($pa...
  • Download media files (video, audio) from VnExpress.Net
    Download media files (video, audio) from VnExpress.Net Example: http://vnexpress.net/GL/Vi-tinh/Giai-tri/2010/02/3BA18A0E/page_4.asp htt...
Back to top!
Copyright 2010 Love Coding - All Rights Reserved Design by Newbie_PC - Powered by Blogger