在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

参考: hyperf利用prometheus接入服务监控,使用grafana实现数据的实时监控显示 hyperf文档

本文章记录本人的第一次部署所踩的坑,未深入了解prometheus 和grafana 如有不当的地方请指正,谢谢!

一. 使用docker-compose部署

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
version: '2'
networks:
  monitor:
    driver: bridge

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    hostname: prometheus
    restart: always
    volumes:
		# 将你的prometheus.yml文件放在当前文件同级下,或自定义
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      #- /home/prometheus/node_down.yml:/etc/prometheus/node_down.yml
    ports:
      - "9090:9090"
    networks:
      monitor:
        ipv4_address: 172.18.0.3

  grafana:
    image: grafana/grafana
    container_name: grafana
    hostname: grafana
    restart: always
	volumes:
	# 创建 etc目录,data目录存储grafana的数据
	- ./etc:/etc/grafana
	- ./data:/var/lib/grafana
    ports:
      - "3000:3000"
    networks:
      monitor:
        ipv4_address: 172.18.0.4

  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    hostname: node-exporter
    restart: always
    ports:
      - "9100:9100"
    networks:
      monitor:
        ipv4_address: 172.18.0.2

注意:为了避免每次docker-compose 启动之后 ip会发生变化,我这里配置了固定IP,请根据个人实际情况配置,或参阅docker相关文档

使用命令docker-compose up启动容器

二. 项目配置

因为对 prometheus的不了解,我直接使用hyperf默认配置

  • 引入组件 composer require hyperf/metric

  • 发布默认配置文件 php bin/hyperf.php vendor:publish hyperf/metric

  • config/autoload/dependencies.php中添加对应的Redis存储

1
2
3
return [
    \Prometheus\Storage\Adapter::class => \Hyperf\Metric\Adapter\Prometheus\RedisStorageFactory::class,
];

在上面的第一篇文章中,老哥说使用swoole_table更高效,我还不知道如何使用,有兴趣的老哥可以自己研究一下。

  • 增加中间件 在config/autoload/middlewares.php文件中增加对应的中间件
1
2
3
4
5
return [
   'http' => [
       \Hyperf\Metric\Middleware\MetricMiddleware::class,
   ],
];
  • 添加 metrics路由
1
2
3
4
5
Router::get('/metrics', function(){
    $registry = Hyperf\Utils\ApplicationContext::getContainer()->get(Prometheus\CollectorRegistry::class);
    $renderer = new Prometheus\RenderTextFormat();
    return $renderer->render($registry->getMetricFamilySamples());
});

这样对项目的配置就完成了

三. prometheus的配置

prometheus.yml文件中增加对应的配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
	
  - job_name: 'node'

	 # 注意这里的IP需要填写 node-exporter 容器的ip  
    static_configs:
    - targets: ['172.18.0.2:9100']


  - job_name: 'skeleton'
    # 这里填写的是宿主机的ip
    static_configs:
    - targets: ['10.0.75.1:9502']

配置完成之后,再次 dokcer-compose up

访问 http://localhost:9090 查看 prometheus

[Hyperf]  在Hyperf框架中使用prometheus + grafana 部署基本的监控

如图所示,nodeskeleton 都已启动

四. Grafana 配置

上面都配置完了,开始配置 Grafana 打开 http://localhost:3000 默认密码是: admin/admin

  • 新建datasource 左侧边栏 add datasources 选择Prometheus

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

  • 配置 datasource

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

填写容器的IP:端口

  • 导入hyperf官方的JSON文件

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

导入之后需要将默认的 app_name改成你自己的 如:admin-api 就需要填写admin_api 改成下划线形式

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

  • 查看监控 在Home中你就可以看到了

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

点进去查看

[Hyperf]  在 Hyperf 框架中使用 prometheus + grafana 部署基本的监控

到此结束,小白第一次配置监控,还有很多东西没弄清楚

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计