From ad081bf43d685c5a24ad2e8dca3a9f0b6683d037 Mon Sep 17 00:00:00 2001 From: makotocc0107 <1424018999@qq.com> Date: Wed, 28 Aug 2024 15:13:49 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=A2=9E=E6=B7=BB]=E6=B7=BB=E5=8A=A0=E4=BA=86?= =?UTF-8?q?Prometheus=E6=9C=8D=E5=8A=A1=E3=80=81=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84widget=E5=B1=95=E7=A4=BA=EF=BC=88=E5=BE=85=E7=BE=8E?= =?UTF-8?q?=E5=8C=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deployment.xml | 15 + .idea/php.xml | 190 ++++++++ .idea/workspace.xml | 429 ++++++++++++++++++ .../Filament/Widgets/PrometheusMetrics.php | 29 ++ .../Providers/Filament/AdminPanelProvider.php | 2 + .../app/Services/PrometheusService.php | 62 +++ .../widgets/prometheus-metrics.blade.php | 34 ++ 7 files changed, 761 insertions(+) create mode 100644 .idea/deployment.xml create mode 100644 .idea/php.xml create mode 100644 .idea/workspace.xml create mode 100644 management-panel/app/Filament/Widgets/PrometheusMetrics.php create mode 100644 management-panel/app/Services/PrometheusService.php create mode 100644 management-panel/resources/views/filament/widgets/prometheus-metrics.blade.php diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..d0145dd --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..7989d62 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..26588af --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + $PROJECT_DIR$/composer.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "associatedIndex": 4 +} + + + + { + "keyToString": { + "RunOnceActivity.ShowReadmeOnStart": "true", + "git-widget-placeholder": "master", + "last_opened_file_path": "E:/data-collection-terminal", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1724720814509 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/management-panel/app/Filament/Widgets/PrometheusMetrics.php b/management-panel/app/Filament/Widgets/PrometheusMetrics.php new file mode 100644 index 0000000..8979bd8 --- /dev/null +++ b/management-panel/app/Filament/Widgets/PrometheusMetrics.php @@ -0,0 +1,29 @@ +query('(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100'); + $memoryUsageRange = $prometheus->queryRange( + '(1 - (avg_over_time(node_memory_MemAvailable_bytes[1h]) / avg_over_time(node_memory_MemTotal_bytes[1h]))) * 100', + now()->subHour()->timestamp, + now()->timestamp, + 60 + ); + + return [ + 'currentMemoryUsage' => $currentMemoryUsage, + 'memoryUsageRange' => $memoryUsageRange, + ]; + } +} diff --git a/management-panel/app/Providers/Filament/AdminPanelProvider.php b/management-panel/app/Providers/Filament/AdminPanelProvider.php index 40feffa..e3ba6f0 100644 --- a/management-panel/app/Providers/Filament/AdminPanelProvider.php +++ b/management-panel/app/Providers/Filament/AdminPanelProvider.php @@ -2,6 +2,7 @@ namespace App\Providers\Filament; +use App\Filament\Widgets\PrometheusMetrics; use App\Filament\Widgets\UpdateConfigWidget; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; @@ -42,6 +43,7 @@ class AdminPanelProvider extends PanelProvider Widgets\AccountWidget::class, // Widgets\FilamentInfoWidget::class, UpdateConfigWidget::class, + PrometheusMetrics::class, ]) ->middleware([ EncryptCookies::class, diff --git a/management-panel/app/Services/PrometheusService.php b/management-panel/app/Services/PrometheusService.php new file mode 100644 index 0000000..12ecfdb --- /dev/null +++ b/management-panel/app/Services/PrometheusService.php @@ -0,0 +1,62 @@ +client = new Client(['base_uri' => $this->baseUri]); + } + + /** + * 执行 Prometheus 实时查询 + * + * @param string $query PromQL 查询语句 + * @return array 返回查询结果 + */ + public function query($query) + { + $response = $this->client->get('query', [ + 'query' => ['query' => $query], + ]); + return json_decode($response->getBody()->getContents(), true); + } + + /** + * 执行 Prometheus 区间查询 + * + * @param string $query PromQL 查询语句 + * @param int $start 开始时间(时间戳,单位秒) + * @param int $end 结束时间(时间戳,单位秒) + * @param int $step 时间间隔(单位秒) + * @return array 返回查询结果 + */ + public function queryRange($query, $start, $end, $step) + { + $response = $this->client->get('query_range', [ + 'query' => [ + 'query' => $query, + 'start' => $start, + 'end' => $end, + 'step' => $step, + ], + ]); + return json_decode($response->getBody()->getContents(), true); + } + + /** + * 获取 Prometheus 监控的所有目标 + * + * @return array 返回目标信息 + */ + public function getTargets() + { + $response = $this->client->get('targets'); + return json_decode($response->getBody()->getContents(), true); + } +} diff --git a/management-panel/resources/views/filament/widgets/prometheus-metrics.blade.php b/management-panel/resources/views/filament/widgets/prometheus-metrics.blade.php new file mode 100644 index 0000000..dda79fe --- /dev/null +++ b/management-panel/resources/views/filament/widgets/prometheus-metrics.blade.php @@ -0,0 +1,34 @@ + + + + +
+

当前内存使用率

+ @if (isset($currentMemoryUsage['data']['result'][0]['value'][1])) +
{{ number_format($currentMemoryUsage['data']['result'][0]['value'][1], 2) }}%
+ @else +

无法获取内存使用率数据

+ @endif + +

过去一小时内存使用情况

+ @if (isset($memoryUsageRange['data']['result']) && count($memoryUsageRange['data']['result']) > 0) +
    + @foreach ($memoryUsageRange['data']['result'] as $result) +
  • + {{ $result['metric']['instance'] }}: +
      + @foreach ($result['values'] as $value) +
    • {{ number_format($value[1], 2) }}%
    • + @endforeach +
    +
  • + @endforeach +
+ @else +

无法获取内存使用情况数据

+ @endif +
+ + +
+