hyperf+metrics+prometheus+Grafana
- Metrics数据采集器
- prometheus数据存储与查询
- Grafana可视化看板工具
安装流程
1、安装metric
composer require hyperf/metric
2、安装prometheus
composer require promphp/prometheus_client_php
3、生成配置文件:config/autoload/metric.php
php bin/hyperf.php vendor:publish hyperf/metric
4、配置config/autoload/metric.php
php
<?php
declare(strict_types=1);
use Hyperf\Metric\Adapter\Prometheus\Constants;
use Hyperf\Metric\Adapter\Prometheus\MetricFactory;
use function Hyperf\Support\env;
return [
// To disable hyperf/metric temporarily, set default driver to noop.
'default' => env('METRIC_DRIVER', 'prometheus'),
'use_standalone_process' => env('METRIC_USE_STANDALONE_PROCESS', true),// 是否使用 独立监控进程
'enable_default_metric' => env('METRIC_ENABLE_DEFAULT_METRIC', true),//是否统计默认指标。默认指标包括内存占用、系统 CPU 负载以及 Swoole Server 指标和 Swoole Coroutine 指标
'enable_command_metric' => env('METRIC_ENABLE_COMMAND_METRIC', true),
'default_metric_interval' => env('DEFAULT_METRIC_INTERVAL', 5),//默认指标推送周期,单位为秒
// only available when use_standalone_process is true
'buffer_interval' => env('METRIC_BUFFER_INTERVAL', 5),
'buffer_size' => env('METRIC_BUFFER_SIZE', 200),
'metric' => [
'prometheus' => [
'driver' => MetricFactory::class,
'mode' => Constants::SCRAPE_MODE,
'namespace' => env('PROMETHEUS_NAMESPACE', 'skeleton'),
'redis_config' => env('PROMETHEUS_REDIS_CONFIG', 'default'),
'redis_prefix' => env('PROMETHEUS_REDIS_PREFIX', 'prometheus:'),
'redis_gather_key_suffix' => env('PROMETHEUS_REDIS_GATHER_KEY_SUFFIX', ':metric_keys'),
'scrape_host' => env('PROMETHEUS_SCRAPE_HOST', '0.0.0.0'),
'scrape_port' => env('PROMETHEUS_SCRAPE_PORT', '9502'),
'scrape_path' => env('PROMETHEUS_SCRAPE_PATH', '/metrics'),
'push_host' => env('PROMETHEUS_PUSH_HOST', '0.0.0.0'),
'push_port' => env('PROMETHEUS_PUSH_PORT', '9090'),
'push_interval' => env('PROMETHEUS_PUSH_INTERVAL', 5),
],
],
];
5、添加中间件config/autoload/middlewares.php
php
<?php
declare(strict_types=1);
return [
'http' => [
Hyperf\Metric\Middleware\MetricMiddleware::class,//指标采集与上报组件
],
];
6、安装prometheus(日志采集)和grafana(面板)
prometheus安装前的目录包含data文件夹和空白的prometheus.yml文件
php
#相关docker-compose配置
grafana:
# 建议固定版本,不要用 latest
image: grafana/grafana:13.0.1
container_name: grafana
restart: always
ports:
- "3000:3000"
volumes:
# 数据持久化,防止删容器丢数据
- ./grafana/data:/var/lib/grafana
environment:
# 1. 设置管理员账号(可选,默认 admin)
GF_SECURITY_ADMIN_USER: admin
# 2. 设置管理员密码(必填!)
GF_SECURITY_ADMIN_PASSWORD: admin_password
# 时区(建议设为上海)
TZ: Asia/Shanghai
networks:
- lnmp-network
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.enable-lifecycle' # 允许通过API热重载配置
- '--storage.tsdb.retention.time=15d' # 数据保留15天
networks:
- lnmp-network
7、配置prometheus
prometheus.yml
php
# prometheus.yml
global:
scrape_interval: 15s # 全局采集间隔
evaluation_interval: 15s # 规则评估间隔
# 采集配置
scrape_configs:
# Hyperf 采集任务
- job_name: 'skeleton' # 和metric配置的namespace一致
static_configs:
- targets: ['php83:9502'] # 用 Hyperf 容器名,确保和你的容器名一致
metrics_path: '/metrics' # Hyperf 指标路径
# Prometheus 自身监控(可选)
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
8、配置grafana
- Connections->Data sources 点击Add new data source按钮
- 选择prometheus
- Name保持默认配置,Connection:http://prometheus:9090 (http://docker容器名称:9090)
- 点击保存完成prometheus配置
- 右上角点击Import dashboard 导入grafana.json文件
- Name使用默认就行,DS_PROMETHEUS选择前面添加的prometheus
- app_name保持和metric配置的namespace一致
- 保存完成配置