TransferStatistics v2 使用webman开发的一个应用监控系统,用于查看应用调用记录、请求量、调用耗时、调用分析等。
系统使用
HTTP
接收上报数据;使用Redis
进行数据汇总统计;使用MySql
存储统计数据和上报信息
PHP版本不低于7.2,并安装 Redis 拓展
创建项目
composer create-project hsk99/transfer-statistics
1、下载 或 git clone https://github.com/hsk99/transfer-statistics
2、执行命令 composer install
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 相关信息
执行命令 php start.php start
浏览器访问 http://ip地址:8788
默认账号:admin
默认密码:admin888
相关信息可在 系统管理--系统设置
中进行设置
webman 使用 webman-statistic 插件
其他框架使用,TP6中间件示例
<?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; // 状态码
$success = $code < 400; // 是否成功
// 详细信息,自定义设置
$details = [
'time' => date('Y-m-d H:i:s.', (int)$startTime) . substr((string)$startTime, 11), // 请求时间(包含毫秒时间)
'run_time' => $costTime, // 运行时长
// .....
];
// 执行上报
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、优化 数据缓存,进程关闭时存储其缓存数据
8、优化 页面展示
v2.1.1 - 2022-08-31
1、去除 redis-queue
2、重构 上报数据处理方式
3、优化 统计数据同步MySql逻辑
4、重构 调用记录存储MySql、Elasticsearch
v1 版本介绍:https://hsk99.com.cn/blog/4
大赞!
我去,你这个贼帅啊!!!
666
太棒了
感谢大佬分享
但不知道能否监控到SQL耗时
上报客户端已更新,SQL监控(ThinkORM 示例)文章已更新
6666,很赞啊
666666 威武
帅 帅
问一下
如果一直监控着
redis里面的数据,是不是会一直增长下去?
作者做的不错,其实还可以用tideways收集到每个函数的耗时,以及每条sql的耗时,绘制火焰图,一眼看出哪里比较慢
tideways 你给搞一个
看了一下,很棒。就是layuiadmin不是压缩版,可能涉及版权问题
windows下支持吗
还在用在webman1.0版本,没想到社区现在都这么热闹了. 新版界面看起来也清爽多了.
666
很赞 学习了
win client 服务端可以运行 客户端发送过去 服务端收不到 linux还没试试
我写了一篇使用实例 大家可以参考看看
TransferStatistics使用实例:应用和SQL监控系统workerman
https://my.oschina.net/owenzhang24/blog/5522317
为什么$response = $next($request);放在上面,就监听不了mysql,而是要放在监听下面
@wskgmy520 啥?
非常棒!
如果可以将请求和请求中的SQL绑定就好了
那里可以在请求的Statistic类内$details-》response_body内填写你的sql即可啊
有具体方法吗?
能否说一下 加上自定义进程UDP进行传输有什么好处呢,跟直接执行redis有什么区别呢。
方便其他应用程序进行上报数据吧
微服务,分布式,transfer-statistics是一个独立服务;其他应用只需要一个StatisticClient就可以把采集数据上报到这个服务中。直接执行Redis不就融合到某个应用一起了
受教
只要加上中间件,就报错。不知道为什么?请问如何排查?
Workerman version:4.0.31 PHP version:8.0.8
Webman-framework v1.3.4
你看看我的写法:https://my.oschina.net/owenzhang24/blog/5522317
原因:PHP8报错了,导致后面的程序无法按预期的运行。
StatisticClient类的tick方法,第一个参数给了默认值,函数的参数带有默认值时,如果不再参数最后,PHP8会提示deprecated。
将上面的代码改一下
注意:其他几个方法也要修改。
代码还是要规范啊!!!!
@walkor 老大,这个php8的报错webman好像没捕获到啊
帅
帅,能否整合 一个windows版
测试了php7.2.24也能运行正常
这个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
这里面有个登录 帐号和密码是多少呀
默认账号:admin 默认密码:admin888 文章已更新
在请教下,这个是独立部署吗?还是放在TP框架里运行。 假如我想独立部署的话。怎么监控独立的TP框架应用?
这个在windows本地环境下是不是不会生效呀。
这个会不会影响程序运行
用这个怎么监听TP6 框架的MYSQL 日志呀
好 嗨呦 ~~~
怎么才能设置redis 的过期时间呢 这样会把redis干满
默认过期时间为第二天 12:50 ;修改过期时间 文件地址:app/queue/redis/statistic/Statistic.php
谢谢看到了
有封装好的上报的 类吗 我看1.0版本有 2.0版本我没看到
感觉不如1.0版本好用 这个版本上报数据是用的http 会导致很慢 之前的udp的 很快
v2版本,安装好以后,中间有生效,但查看后台,没有内容显示
StatisticClient类在什么地方啊
按照文档安装后,浏览器执行localhost:8788
报404,怎么解决?或者从哪查问题?
执行 composer require workerman/webman-framework 1.3.21 降级webman-framework 版本,或重新安装 已发布 v2.0.4 限制了 webman-framework 版本
降级webman-framework 版本未解决问题,但重新安装v2.0.4成功了
帅气
php 8.1.9 运行报错
应用监控里面,调用ip和调用入口那里(因为一进去就卡住了不太确定,应该是这里),不知道出于什么考虑没有分页 数据量一多了页面就崩了
新版本 v2.1.2 已添加
大佬太棒了
期待发布应用插件 这样就不用再创个项目单独跑啦🧐
+1
php8.1 跑不起来 😄
请问下这个插件怎么监听所有应用的请求,现在好像只监听了主应用的,plugin下的其他应用的请求都没有
在应用插件 中间件配置文件里面加上
\Hsk99\WebmanStatistic\Middleware::class
好像只能每个插件单独都配置下才行,这样插件一多配置上会比较麻烦,有办法可以支持一次配置所有插件都生效么
应用插件是独立的 最好是单独配置
好的,明白了,谢谢
centos7.9 php 8.1.10报错
更新插件版本到 v2.0.12 吧,配置文件 route.php 手动修改下
用了后,sql日志都不记录了,关闭这个插件就有了,这个要怎么做才能保留日志
怎么能消费快一点呢 上午的请求 下午来看还没记录上 这么慢?