国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

TransferStatistics v2 應用監(jiān)控系統

hsk99

TransferStatistics v2

TransferStatistics v2 使用webman開發(fā)的一個應用監(jiān)控系統,用于查看應用調用記錄、請求量、調用耗時、調用分析等。

系統使用 HTTP 接收上報數據;使用 Redis 進行數據匯總統計;使用 MySql 存儲統計數據和上報信息

項目地址

所需環(huán)境

PHP版本不低于7.2,并安裝 Redis 拓展

安裝

composer安裝

創(chuàng)建項目

composer create-project hsk99/transfer-statistics

下載安裝

1、下載 或 git clone https://github.com/hsk99/transfer-statistics

2、執(zhí)行命令 composer install

導入數據庫

  • sql文件位置:database/transfer.sql

配置修改

1、修改文件 config/redis.php 設置 Redis

2、修改文件 config/server.php 設置 HTTP

3、修改目錄 config/plugin/webman/redis-queue/ 設置 RedisQueue 相關信息

4、修改文件 config/thinkorm.php 設置 MySql 相關信息

運行

執(zhí)行命令 php start.php start

查看統計

  • 瀏覽器訪問 http://ip地址:8788

  • 默認賬號:admin

  • 默認密碼:admin888

  • 相關信息可在 系統管理--系統設置 中進行設置

上報數據

<?php

declare(strict_types=1);

namespace app\middleware;

class Transfer
{
    /**
     * 處理請求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        $startTime = microtime(true);  // 開始時間
        $project   = 'tp6';            // 應用名
        $ip        = '127.0.0.1';      // 請求IP
        $transfer  = 'test';           // 調用入口

        $response = $next($request);

        $finishTime = microtime(true);           // 結束時間
        $costTime   = $finishTime - $startTime;  // 運行時長

        $code    = mt_rand(2, 5) * 100;  // 狀態(tài)碼
        $success = $code < 400;          // 是否成功
        // 詳細信息,自定義設置
        $details = [
            'time'     => date('Y-m-d H:i:s.', (int)$startTime) . substr((string)$startTime, 11),   // 請求時間(包含毫秒時間)
            'run_time' => $costTime,                                                                // 運行時長
            // .....
        ];

        // 執(zhí)行上報
        try {
            // 數據打包 多條 換行 隔開
            $data = json_encode([
                'time'     => date('Y-m-d H:i:s.', (int)$startTime) . substr((string)$startTime, 11),
                'project'  => $project,
                'ip'       => $ip,
                'transfer' => $transfer,
                'costTime' => $costTime,
                'success'  => $success ? 1 : 0,
                'code'     => $code,
                'details'  => json_encode($details, 320),
            ], 320) . "\n";

            $client = new \GuzzleHttp\Client(['verify' => false]);
            $client->post(
                // 上報地址
                'http://127.0.0.1:8788/report/statistic/transfer',
                [
                    'headers' => [
                        // 上報認證,不設置默認為當前年份的md5值
                        'authorization' => md5(date('Y'))
                    ],
                    'form_params' => [
                        // 上報數據
                        'transfer' => $data
                    ],
                ]
            );
        } catch (\Throwable $th) {
            //throw $th;
        }

        return $response;
    }
}

更新日志

  • v2.0.3 - 2022-07-24

    1、新增 Elasticsearch全局搜索并高亮展示

    2、新增 調用記錄同步至Elasticsearch

    3、新增 MySql數據同步至Elasticsearch,可多進程處理

    4、新增 db搜索并關鍵字高亮展示

    5、新增 調用記錄列表數據篩選、刷新、導出等操作

    6、新增 應用管理 可刪除并清空應用數據

    7、優(yōu)化 數據緩存,進程關閉時存儲其緩存數據

    8、優(yōu)化 頁面展示

  • v2.1.1 - 2022-08-31

    1、去除 redis-queue

    2、重構 上報數據處理方式

    3、優(yōu)化 統計數據同步MySql邏輯

    4、重構 調用記錄存儲MySql、Elasticsearch

圖片展示

截圖
截圖
截圖
截圖
截圖

備注

v1 版本介紹:https://hsk99.com.cn/blog/4

10703 43 31
43個評論

Tinywan

大贊!

  • 暫無評論
walkor

我去,你這個賊帥?。。。?/h1>

  • 暫無評論
evilk

666
太棒了
感謝大佬分享
但不知道能否監(jiān)控到SQL耗時

  • hsk99 2021-12-24

    上報客戶端已更新,SQL監(jiān)控(ThinkORM 示例)文章已更新

10bang

6666,很贊啊

  • 暫無評論
yzh52521

666666 威武

  • 暫無評論
不敗少龍

帥 帥

  • 暫無評論
evilk

問一下
如果一直監(jiān)控著
redis里面的數據,是不是會一直增長下去?

  • 暫無評論
小陽光

作者做的不錯,其實還可以用tideways收集到每個函數的耗時,以及每條sql的耗時,繪制火焰圖,一眼看出哪里比較慢

寧采陳

看了一下,很棒。就是layuiadmin不是壓縮版,可能涉及版權問題

  • 暫無評論
qq285567309

windows下支持嗎

  • 暫無評論
mlyykk

還在用在webman1.0版本,沒想到社區(qū)現在都這么熱鬧了. 新版界面看起來也清爽多了.

  • 暫無評論
ab0029

666

  • 暫無評論
tanxinchong

很贊 學習了

  • 暫無評論
zjcyjj

win client 服務端可以運行 客戶端發(fā)送過去 服務端收不到 linux還沒試試

  • 暫無評論
owenzhang

我寫了一篇使用實例 大家可以參考看看
TransferStatistics使用實例:應用和SQL監(jiān)控系統workerman
https://my.oschina.net/owenzhang24/blog/5522317

  • wskgmy520 2022-06-28

    為什么$response = $next($request);放在上面,就監(jiān)聽不了mysql,而是要放在監(jiān)聽下面

  • owenzhang 2022-08-06

    @wskgmy520 啥?

evilk

非常棒!
如果可以將請求和請求中的SQL綁定就好了

  • owenzhang 2022-05-06

    那里可以在請求的Statistic類內$details-》response_body內填寫你的sql即可啊

  • wskgmy520 2022-06-28

    有具體方法嗎?

沒茅臺

能否說一下 加上自定義進程UDP進行傳輸有什么好處呢,跟直接執(zhí)行redis有什么區(qū)別呢。

  • li914 2022-05-15

    方便其他應用程序進行上報數據吧

  • ziyoren 2022-05-16

    微服務,分布式,transfer-statistics是一個獨立服務;其他應用只需要一個StatisticClient就可以把采集數據上報到這個服務中。直接執(zhí)行Redis不就融合到某個應用一起了

  • 沒茅臺 2022-05-18

    受教

ziyoren
ErrorException: Undefined array key 0 in /path/vendor/workerman/workerman/Protocols/Http/Response.php:396
Stack trace:
#0 /path/vendor/workerman/workerman/Protocols/Http/Response.php(396): {closure}(2, 'Undefined array...', '/Users/ziyoren/...', 396)
#1 /path/vendor/workerman/workerman/Protocols/Http.php(254): Workerman\Protocols\Http\Response->__toString()
#2 /path/vendor/workerman/workerman/Connection/TcpConnection.php(321): Workerman\Protocols\Http::encode(Object(Webman\Http\Response), Object(Workerman\Connection\TcpConnection))
#3 /path/vendor/workerman/webman-framework/src/App.php(396): Workerman\Connection\TcpConnection->send(Object(Webman\Http\Response))
#4 /path/vendor/workerman/webman-framework/src/App.php(166): Webman\App::send(Object(Workerman\Connection\TcpConnection), Object(Webman\Http\Response), Object(support\Request))
#5 /path/vendor/workerman/workerman/Connection/TcpConnection.php(638): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
#6 /path/vendor/workerman/workerman/Events/Select.php(295): Workerman\Connection\TcpConnection->baseRead(Resource id #210)
#7 /path/vendor/workerman/workerman/Worker.php(2431): Workerman\Events\Select->loop()
#8 /path/vendor/workerman/workerman/Worker.php(1555): Workerman\Worker->run()
#9 /path/vendor/workerman/workerman/Worker.php(1397): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))
#10 /path/vendor/workerman/workerman/Worker.php(1371): Workerman\Worker::forkWorkersForLinux()
#11 /path/vendor/workerman/workerman/Worker.php(549): Workerman\Worker::forkWorkers()
#12 /path/start.php(108): Workerman\Worker::runAll()
#13 {main}
worker[wechatpay:52968] exit with status 64000

只要加上中間件,就報錯。不知道為什么?請問如何排查?

<?php
namespace app\middleware;

use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
use app\services\StatisticClient; //客戶端類放在這里

class Statistic implements MiddlewareInterface
{
    public function process(Request $request, callable $next) : Response
    {
        $ip         = $request->getRealIp();
        $controller = $request->controller;
        $action     = $request->action;
        $transfer   = $controller . '::' . $action;

        // 開始計時
        $unique = StatisticClient::tick('project', $ip, $transfer); //只要調用到這里就會報錯

        $response = $next($request);

        $code    = $response->getStatusCode();
        $success = $code < 400;
        $details = [
            'ip'              => $ip ?? '',   // 請求客戶端IP
            'url'             => $request->fullUrl() ?? '',                      // 請求URL
            'method'          => $request->method() ?? '',                       // 請求方法
            'request_param'   => $request->all() ?? [],                          // 請求參數
            'request_header'  => $request->header() ?? [],                       // 請求頭
            'cookie'          => $request->cookie() ?? [],                       // 請求cookie
            'session'         => $request->session()->all() ?? [],               // 請求session
            'response_code'   => $response->getStatusCode() ?? '',               // 響應碼
            'response_header' => $response->getHeaders() ?? [],                  // 響應頭
            'response_body'   => $success ?: (string)$response->rawBody(),       // 響應數據(發(fā)生異常)
        ];
        // 數據上報
        StatisticClient::report($unique, 'project', $ip, $transfer, $success, $code, json_encode($details, 320));

        return $response;
    }

}
  • ziyoren 2022-05-16

    Workerman version:4.0.31 PHP version:8.0.8
    Webman-framework v1.3.4

  • ziyoren 2022-05-16

    原因:PHP8報錯了,導致后面的程序無法按預期的運行。

    StatisticClient類的tick方法,第一個參數給了默認值,函數的參數帶有默認值時,如果不再參數最后,PHP8會提示deprecated。

        public static function tick(string $project = '', string $ip, string $transfer = ''): string
        {
            $unique = uniqid();
    
            self::$timeMap[md5($project . $ip . $transfer . $unique)] = microtime(true);
    
            return $unique;
        }

    將上面的代碼改一下

        public static function tick(string $project, string $ip, string $transfer = ''): string
        {
            $unique = uniqid();
    
            self::$timeMap[md5($project . $ip . $transfer . $unique)] = microtime(true);
    
            return $unique;
        }

    注意:其他幾個方法也要修改。

    代碼還是要規(guī)范啊!?。。?/p>

  • ziyoren 2022-05-16

    @walkor 老大,這個php8的報錯webman好像沒捕獲到啊

kinross

  • 暫無評論
hungmou

帥,能否整合 一個windows版

  • 暫無評論
hungmou

測試了php7.2.24也能運行正常

  • 暫無評論
zhanqi123

這個TP框架可以使用嗎? 是否可以用在分布式中

  • 暫無評論
江月閑談

在mac上有權限問題?
php start.php start時提示PHP Warning: mkdir(): Read-only file system in /path/to/my/projects/transfer-statistics/start.php on line 36

  • 暫無評論
zhanqi123

這里面有個登錄 帳號和密碼是多少呀

  • hsk99 2022-06-23

    默認賬號:admin 默認密碼:admin888 文章已更新

zhanqi123

在請教下,這個是獨立部署嗎?還是放在TP框架里運行。 假如我想獨立部署的話。怎么監(jiān)控獨立的TP框架應用?

  • 暫無評論
zhanqi123

這個在windows本地環(huán)境下是不是不會生效呀。

  • 暫無評論
abei

這個會不會影響程序運行

  • 暫無評論
zhanqi123

用這個怎么監(jiān)聽TP6 框架的MYSQL 日志呀

  • 暫無評論
xianrenqh

好 嗨呦 ~~~

  • 暫無評論
cuixuefeng

怎么才能設置redis 的過期時間呢 這樣會把redis干滿

  • hsk99 2022-07-07

    默認過期時間為第二天 12:50 ;修改過期時間 文件地址:app/queue/redis/statistic/Statistic.php

  • cuixuefeng 2022-07-07

    謝謝看到了

cuixuefeng

有封裝好的上報的 類嗎 我看1.0版本有 2.0版本我沒看到

  • 暫無評論
cuixuefeng

感覺不如1.0版本好用 這個版本上報數據是用的http 會導致很慢 之前的udp的 很快

  • 暫無評論
evilk

v2版本,安裝好以后,中間有生效,但查看后臺,沒有內容顯示

  • 暫無評論
zhangbo

StatisticClient類在什么地方啊

  • 暫無評論
99hz8

按照文檔安裝后,瀏覽器執(zhí)行l(wèi)ocalhost:8788
報404,怎么解決?或者從哪查問題?

  • hsk99 2022-08-19

    執(zhí)行 composer require workerman/webman-framework 1.3.21 降級webman-framework 版本,或重新安裝 已發(fā)布 v2.0.4 限制了 webman-framework 版本

  • 99hz8 2022-08-19

    降級webman-framework 版本未解決問題,但重新安裝v2.0.4成功了

  • efnic 2022-08-31

    帥氣

webmanchin

php 8.1.9 運行報錯

[2022-09-02 11:02:57]   Worker?ync.statistics.to.mysql
ErrorException: Implicit conversion from float 1662087777.472007 to int loses precision in /root/transfer-statistics/support/hsk99/bootstrap/ThinkOrmLog.php:29
Stack trace:
#0 [internal function]: {closure}()
#1 /root/transfer-statistics/support/hsk99/bootstrap/ThinkOrmLog.php(29): date()
#2 /root/transfer-statistics/vendor/topthink/think-orm/src/db/Connection.php(264): support\hsk99\bootstrap\ThinkOrmLog::support\hsk99\bootstrap\{closure}()
#3 /root/transfer-statistics/vendor/topthink/think-orm/src/db/PDOConnection.php(776): think\db\Connection->trigger()
#4 /root/transfer-statistics/vendor/topthink/think-orm/src/db/connector/Mysql.php(66): think\db\PDOConnection->getPDOStatement()
#5 /root/transfer-statistics/vendor/topthink/think-orm/src/db/PDOConnection.php(422): think\db\connector\Mysql->getFields()
#6 /root/transfer-statistics/vendor/topthink/think-orm/src/db/PDOConnection.php(362): think\db\PDOConnection->getTableFieldsInfo()
#7 /root/transfer-statistics/vendor/topthink/think-orm/src/db/PDOConnection.php(409): think\db\PDOConnection->getSchemaInfo()
#8 /root/transfer-statistics/vendor/topthink/think-orm/src/db/PDOConnection.php(459): think\db\PDOConnection->getTableInfo()
#9 /root/transfer-statistics/vendor/topthink/think-orm/src/db/Query.php(291): think\db\PDOConnection->getPk()
#10 /root/transfer-statistics/vendor/topthink/think-orm/src/db/concern/WhereQuery.php(442): think\db\Query->getPk()
#11 /root/transfer-statistics/vendor/topthink/think-orm/src/db/concern/WhereQuery.php(422): think\db\BaseQuery->whereEq()
#12 /root/transfer-statistics/vendor/topthink/think-orm/src/db/concern/WhereQuery.php(386): think\db\BaseQuery->parseWhereItem()
#13 /root/transfer-statistics/vendor/topthink/think-orm/src/db/concern/WhereQuery.php(41): think\db\BaseQuery->parseWhereExp()
#14 /root/transfer-statistics/app/common/service/SyncStatisticsToMySql.php(49): think\db\BaseQuery->where()
#15 /root/transfer-statistics/process/SyncStatisticsToMySql.php(18): app\common\service\SyncStatisticsToMySql::run()
#16 /root/transfer-statistics/vendor/workerman/workerman/Events/Select.php(238): process\SyncStatisticsToMySql->process\{closure}()
#17 /root/transfer-statistics/vendor/workerman/workerman/Events/Select.php(299): Workerman\Events\Select->tick()
#18 /root/transfer-statistics/vendor/workerman/workerman/Worker.php(2463): Workerman\Events\Select->loop()
#19 /root/transfer-statistics/vendor/workerman/workerman/Worker.php(1574): Workerman\Worker->run()
#20 /root/transfer-statistics/vendor/workerman/workerman/Worker.php(1416): Workerman\Worker::forkOneWorkerForLinux()
#21 /root/transfer-statistics/vendor/workerman/workerman/Worker.php(1390): Workerman\Worker::forkWorkersForLinux()
#22 /root/transfer-statistics/vendor/workerman/workerman/Worker.php(557): Workerman\Worker::forkWorkers()
#23 /root/transfer-statistics/start.php(117): Workerman\Worker::runAll()
  • 暫無評論
zkchuck

應用監(jiān)控里面,調用ip和調用入口那里(因為一進去就卡住了不太確定,應該是這里),不知道出于什么考慮沒有分頁 數據量一多了頁面就崩了

aimuc

期待發(fā)布應用插件 這樣就不用再創(chuàng)個項目單獨跑啦??

龍正哲

php8.1 跑不起來 ??

  • 暫無評論
wanyuwei

請問下這個插件怎么監(jiān)聽所有應用的請求,現在好像只監(jiān)聽了主應用的,plugin下的其他應用的請求都沒有

  • hsk99 2023-04-06

    在應用插件 中間件配置文件里面加上 \Hsk99\WebmanStatistic\Middleware::class

  • wanyuwei 2023-04-06

    好像只能每個插件單獨都配置下才行,這樣插件一多配置上會比較麻煩,有辦法可以支持一次配置所有插件都生效么

  • hsk99 2023-04-06

    應用插件是獨立的 最好是單獨配置

  • wanyuwei 2023-04-06

    好的,明白了,謝謝

深藍

centos7.9 php 8.1.10報錯

"require": {
    "php": ">=7.2",
    "workerman/webman-framework": "^1.5.0",
    "monolog/monolog": "^2.0",
    "tinywan/exception-handler": "^1.1",
    "webman/think-orm": "^1.0",
    "psr/container": "^2.0",
    "illuminate/redis": "^10.5",
    "symfony/cache": "^6.2",
    "webman/console": "^1.2",
    "google/apiclient": "^2.13",
    "topthink/think-log": "^2.0",
    "workerman/crontab": "^1.0",
    "kreait/firebase-php": "^7.2",
    "zjkal/time-helper": "^1.1",
    "tinywan/validate": "^0.0.6",
    "ext-openssl": "*",
    "yzh52521/webman-lock": "^1.0",
    "vlucas/phpdotenv": "^5.5",
    "ext-pdo": "*",
    "hsk99/webman-statistic": "^2.0"
  },
ErrorException: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in D:\Web\webman-test\config\plugin\hsk99\statistic\route.php:28
Stack trace:
#0 [internal function]: support\App::{closure}(8192, 'strtolower(): P...', 'D:\\Web\\webman-t...', 28)
#1 D:\Web\webman-test\config\plugin\hsk99\statistic\route.php(28): strtolower(NULL)
#2 D:\Web\webman-test\vendor\workerman\webman-framework\src\App.php(159): Webman\Route::{closure}(Object(support\Request))
#3 D:\Web\webman-test\vendor\workerman\workerman\Connection\TcpConnection.php(646): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
#4 D:\Web\webman-test\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead(Resource id #373)
#5 D:\Web\webman-test\vendor\workerman\workerman\Worker.php(1479): Workerman\Events\Select->loop()
#6 D:\Web\webman-test\vendor\workerman\workerman\Worker.php(1399): Workerman\Worker::forkWorkersForWindows()
#7 D:\Web\webman-test\vendor\workerman\workerman\Worker.php(560): Workerman\Worker::forkWorkers()
#8 D:\Web\webman-test\vendor\workerman\webman-framework\src\support\App.php(131): Workerman\Worker::runAll()
#9 D:\Web\webman-test\start.php(4): support\App::run()
#10 {main}
  • hsk99 2023-04-07

    更新插件版本到 v2.0.12 吧,配置文件 route.php 手動修改下

  • 深藍 2023-04-07
    case ($contentType = $response->getHeader('Content-Type')) !== null && 'application/json' === strtolower($contentType):
                $body = json_decode($response->rawBody(), true);
                break;
飛哥??

用了后,sql日志都不記錄了,關閉這個插件就有了,這個要怎么做才能保留日志

  • 暫無評論
liudada

怎么能消費快一點呢 上午的請求 下午來看還沒記錄上 這么慢?

  • 暫無評論
年代過于久遠,無法發(fā)表評論

hsk99

225
積分
0
獲贊數
0
粉絲數
2019-06-29 加入
??