1.为什么要接入服务监控
先上图看看效果:
微服务治理的一个核心需求便是服务可观察性,从图上可以很直观的看到我们想要监控的服务器的各项自定义指标.而且支持自定义扩展图表,十分的方便,满足后期更多的需求.
2.如何接入
先使用docker-compose 安装prometheus和grafana服务,docker-compose.yml 如下:
version: '3'
networks:
monitor:
driver: bridge
services:
prometheus:
image: prom/prometheus
container_name: prometheus
hostname: prometheus
restart: always
volumes:
- /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
#- /home/prometheus/node_down.yml:/etc/prometheus/node_down.yml
ports:
- "9090:9090"
networks:
- monitor
grafana:
image: grafana/grafana
container_name: grafana
hostname: grafana
restart: always
ports:
- "3000:3000"
networks:
- monitor
node-exporter:
image: prom/node-exporter
container_name: node-exporter
hostname: node-exporter
restart: always
ports:
- "9100:9100"
networks:
- monitor
hyperf的配置如官方所描述:
安装
通过 Composer 安装组件
composer require hyperf/metric
配置 Prometheus
使用 Prometheus 时,在配置文件中的 /config/autoload/metric.php ,增加 Prometheus 的具体配置。
use Hyperf\Metric\Adapter\Prometheus\Constants;
return [
'default' => env('TELEMETRY_DRIVER', 'prometheus'),
'use_standalone_process' => env('TELEMETRY_USE_STANDALONE_PROCESS', true),
'enable_default_metric' => env('TELEMETRY_ENABLE_DEFAULT_TELEMETRY', true),
'default_metric_interval' => env('DEFAULT_METRIC_INTERVAL', 5),
'metric' => [
'prometheus' => [
'driver' => Hyperf\Metric\Adapter\Prometheus\MetricFactory::class,
'mode' => Constants::SCRAPE_MODE,
'namespace' => env('APP_NAME', 'skeleton'),
'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', '9091'),
'push_interval' => env('PROMETHEUS_PUSH_INTERVAL', 5),
],
],
];
3.运行使用
运行docker-compose.yml的服务 docker-compose up,启动hyperf,
访问http://ip:3000/ 访问grafana的图像界面如下:
账号密码填入admin进入,
进入主界面,得先添加数据库才能保存对应数据,点击数据库,添加数据库,添加prometheus,填写对应地址后保存
进入后点击如图所示,添加对应的指标
metric指标输入hyperf的默认名称skeleteon,会提示hyperf默认提交的数据字段,选中你需要的,图表会马上显示当前数据指标,根据相关提示保存就能实现监控数据指标了。
4.高级进阶
hyperf默认的metric组件的监听器linster监控的数据可能并不能满足我们全方位的需要,可以对其进行改造,输出更多样化的统计指标(具体请阅读源码自行理解,这里不展开说.)。如果需要
收集http的运行参数,比如访问ip或者耗时等,得在中间件进行扩展,
先在配置文件中的 /config/autoload/middleware.php中添加
return [
'http' => [
\Hyperf\Metric\Middleware\MetricMiddleware::class,
],
];
动手在MetricMiddleware的process方法扩展你自己想要的数据指标代码吧!
注意
由于中间件会影响程序执行速度,通过测试,直接在中间件将数据写入prometheus严重影响执行效率。故可以通过写入到swoole_table的高性能内存,再从定时器写入prometheus,并发性能测试结果反映,这办法对性能影响极低,并且满足日常监控的需求!
性能测试
以下是测试数据对比:
结果显而易见,使用高性能内存+异步处理才能更高效的去监控整个系统。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。