[关闭]
@zhangyy 2020-11-13T17:43:25.000000Z 字数 4715 阅读 217

基于Promethues与Grafana的Greenplum分布式数据库监控的实现

greenplum系列


一:前言

  1. Greenplum是面向数据仓库应用的分布式关系型MPP数据库,基于PostgreSQL开发,跟PostgreSQL的兼容性非常好,大部分PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上。GPCCGreenplum数据库官方商业版的数据库监控软件,对于只能用得起开源的用户来说,只能考虑其他的监控方案了。本文里介绍一种基于PromethuesGrafanaGreenplum分布式数据库监控的实现方案。

二、Promethues与Grafana简介

2.1、Prometheus简介

  1. Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB),使用Go语言开发。Prometheus目前在开源社区相当活跃。Prometheus性能也足够支撑上万台规模的集群。其架构图如下:

image_1emlbdvmr1cjrrkksovlhcbkkc.png-582.3kB

  1. Prometheus Server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)供用户使用。
  2. Exporter 负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。
  3. 可视化组件,监控数据的可视化展现对于监控方案至关重要。以前 Prometheus 自己开发了一套工具,不过后来废弃了,因为开源社区出现了更为优秀的产品 Grafana
  4. Grafana 能够与 Prometheus 无缝集成,提供完美的数据展示能力。
  5. Alertmanager,用户可以定义基于监控数据的告警规则,规则会触发告警。一旦 Alermanager 收到告警,会通过预定义的方式发出告警通知。支持的方式包括 EmailPagerDutyWebhook 等.

2.2、Grafana简介

  1. Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:
  2. 1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  3. 2、数据源:GraphiteInfluxDBOpenTSDBPrometheusElasticsearchCloudWatchKairosDB等;
  4. 3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过SlackPagerDuty等获得通知;
  5. 4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  6. 5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  7. 6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

三、Greenplum监控的实现

3.1 greenplum的监控

  1. Greenplum的监控可类似于PostgreSQL来实现,但又存在差异,不同点在于:
  2. 要实现一个GreenplumExporter指标采集器;
  3. 使用Grafana绘制一个可视化状态图;
  4. 基于Prometheus配置报警规则(本文此部分略);

3.2 greeplum 的grafana的采集

  1. 这里类比PostgreSQL数据库的Exporter实现方法,实现了一个GreenplumExporter,项目地址为:
  2. https://github.com/tangyibo/greenplum_exporter
  3. greenplum_expoter里主要扩展了实现了客户连接信息、账号连接信息、Segment存储信息、集群节点同步状态、数据库锁监控等相关指标,具体指标如下:

image_1emlpqm4e9918uvrg91htsm8d55.png-168.8kB

四:prometheus 的安装:

  1. Prometheus本身也是一个导出器(exporter),提供了关于内存使用、垃圾收集以及自身性能
  2. 与健康状态等各种主机级指标。
  3. prometheus官网下载址:
  4. https://prometheus.io/download/
  5. wget https://github.com/prometheus/prometheus/releases/download/v2.21.0/prometheus-2.21.0.linux-amd64.tar.gz
  6. # tar xf prometheus-2.21.0.linux-amd64.tar.gz
  7. # mv prometheus-2.21.0.linux-amd64 /usr/local/prometheus
  8. # chmod +x /usr/local/prometheus/prom*
  9. # cp -rp /usr/local/prometheus/promtool /usr/bin/

  1. cd /usr/local/prometheus/
  2. vim prometheus.yml
  3. -----
  4. # my global config
  5. global:
  6. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  7. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  8. # scrape_timeout is set to the global default (10s).
  9. # Alertmanager configuration
  10. alerting:
  11. alertmanagers:
  12. - static_configs:
  13. - targets:
  14. # - alertmanager:9093
  15. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  16. rule_files:
  17. # - "first_rules.yml"
  18. # - "second_rules.yml"
  19. # A scrape configuration containing exactly one endpoint to scrape:
  20. # Here it's Prometheus itself.
  21. scrape_configs:
  22. # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  23. - job_name: 'prometheus'
  24. # metrics_path defaults to '/metrics'
  25. # scheme defaults to 'http'.
  26. static_configs:
  27. - targets: ['localhost:9090']
  28. - job_name: 'greenplum'
  29. static_configs:
  30. - targets: ['192.168.100.11:9297']
  31. labels:
  32. app: master01
  33. nodename: node01.flyfish.cn
  34. role: master
  35. - targets: ['192.168.100.12:9297']
  36. labels:
  37. app: node02
  38. nodename: node02.flyfish.cn
  39. role: standby
  40. - targets: ['192.168.100.13:9297']
  41. labels:
  42. app: node03
  43. nodename: node03.flyfish.cn
  44. role: node
  45. - targets: ['192.168.100.14:9297']
  46. labels:
  47. app: node04
  48. nodename: node04.flyfish.cn
  49. role: node
  50. - targets: ['192.168.100.15:9297']
  51. labels:
  52. app: node05
  53. nodename: node05.flyfish.cn
  54. role: node
  55. -----

  1. 启动:
  2. cd /usr/local/prometheus/
  3. ./prometheus --config.file=prometheus.yml &

image_1emlg051t16789al1e841q3akn09.png-572.8kB

五:安装Greenplum-Expoter

  1. 1、下载安装包
  2. wget https://github.com.cnpmjs.org/tangyibo/greenplum_exporter/releases/download/1.0/greenplum_exporter-1.0-1.x86_64.rpm
  3. rpm -ivh greenplum_exporter-1.0-1.x86_64.rpm

  1. 2、配置数据库连接
  2. 修改vim /etc/systemd/system/greenplum_exporter.service文件中配置的greenplum数据库服务器的地址和gpadmin账号的密码。
  3. ----
  4. [Unit]
  5. Description=greenplum exporter
  6. After=network.target
  7. [Service]
  8. Type=simple
  9. User=prometheus
  10. Environment=GPDB_DATA_SOURCE_URL=postgres://gpadmin:gpadmin@192.168.100.11:5432/postgres?sslmode=disable
  11. ExecStart=/usr/local/greenplum_exporter/bin/greenplum_exporter --log.level=error
  12. Restart=on-failure
  13. [Install]
  14. WantedBy=multi-user.target
  15. ----

image_1emlk781mdkatrghsf1uid1t9im.png-101.4kB


  1. 启动Expoter程序
  2. ----
  3. systemctl daemon-reload
  4. systemctl start greenplum_exporter
  5. systemctl status greenplum_exporter
  6. ----

image_1emlmg8cq1ko161u19n11anu6oc13.png-131.2kB


  1. 重启:promethues
  2. ps -ef |grep promethus
  3. kill -9 3121
  4. ./prometheus --config.file=prometheus.yml

image_1emlmnqts56kghl1tk0gt4b291t.png-237.3kB

image_1emlmjlh8gta14ee3911kia1oel1g.png-350.3kB


六: 安装 grafana

  1. 1、下载:
  2. wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
  3. rpm -ivh grafana-7.1.5-1.x86_64.rpm
  4. systemctl start grafana-server

image_1emlmrnn81m22kqhbid2g21pco2a.png-110.8kB


  1. 5、访问
  2. 访问地址:http://192.168.100.16:3000
  3. 用户名:admin
  4. 密码:admin

image_1emln3gi81maqk6r1mv5toikhr2n.png-505.5kB

image_1emln8v7r1q08pv11bnit4f19g034.png-277.4kB

image_1emln9o0f1h4j1n321ukt844170o3h.png-270.2kB


  1. 使用Grafana绘制一个可视化状态图
  2. 根据以上监测指标,即可使用Grafana配置图像了,具体内容请见:
  3. 将下面中的数据
  4. https://github.com/tangyibo/greenplum_exporter/blob/master/grafana/greenplum_dashboard.json
  5. 中配置的内容粘贴到上图红色框框内,点击load按钮加载。

image_1emlnn2dt1k1b19u913gh1nrm1dhn3u.png-171.3kB

image_1emlnoo7fa7s1e0g1i4j1mhq7k84b.png-482.8kB

image_1emlo03531bhvrdpcer1clna674o.png-462.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注