热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

适用于开源&商业版的Greenplum监控解决方案

Promethe


Greenplum是全球首个开源MPP数据库,内核基于PostgreSQL。目前迭代迅速,内核已经由PostgreSQL 8.2升级到了9.x。随着这款数据库在国际国内的大规模推广,企业级用户越来越多的将Greenplum选用为大数据分析平台。作为一款企业级数据库,监控是必不可少的一环。商业版本的Greenplum提供商业组件GPCC,用来对Greenplum进行监控。但是GPCC是非开源组件,很多开源用户都迫切需要一款开源的类GPCC产品来解决监控的问题。



目前提到监控,最火的当属Prometheus和Grafana的组合了,Prometheus负责监控指标采集及存储,Grafana负责展示,各有所长。很多企业整体IT架构中,也选用该方案作为整体的监控,所以今天给大家分享一下基于Prometheus和Grafana的解决方案。


1.简介


1.1 Prometheus简介


Prometheus 是由 SoundCloud 开源监控告警解决方案。它有几个重要的概念:

1)Prometheus时序数据库:存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。
2)PromQL (Prometheus Query Language) :是 Prometheus 自己开发的数据查询 DSL 语言。
3)Exporter:负责数据汇报的程序,不同的Exporter负责不同的业务。其统一命名格式:xx_exporter


另外从软件部署层面上,仅需部署一个Prometheus Server和对应的Exporter即可完成所需的基本监控功能。


1.2 Grafana简介


Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。


Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。


 官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。


每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。下面我们来一起感受一下Grafana。



2.Greenplum监控的实现


采用本文的方案来实现Greenplum监控特别简单,大体逻辑如下:


  • 安装Prometheus;

  • 安装Grafana;

  • 用Go语言简单开发一个Greenplum Exporter(用来采集Greenplum指标);并启动采集程序;

  • 在Prometheus中配置Greenplum Exporter,将采集的指标收集到Prometheus时序数据库中存储;

  • 在Grafana中配置数据源为上面的Prometheus,并绘制可视化仪表板。


2.1 Greenplum Exporter的实现


具体项目地址可以fork我的链接:https://github.com/ChrisYuan/greenplum_exporter


在greenplum_expoter里主要扩展了实现了客户连接信息、账号连接信息、Segment存储信息、集群节点同步状态、数据库锁监控等相关指标,具体指标如下:


具体指标请参考github上的readme文件。(https://github.com/ChrisYuan/greenplum_exporter/blob/master/README.md)


2.2 Grafana仪表板的实现

根据以上监测指标,即可使用Grafana配置图像了,具体内容请见:
https://github.com/ChrisYuan/greenplum_exporter/blob/master/grafana/greenplum_dashboard.json

3.Greenplum监控的安装部署


整个安装部署过程基于第2部分开始的逻辑,并且采用第2部分已经编译好的Exporter。我这里采用家里的群晖NAS进行监控安装操作演示,具体步骤如下:

3.1 Prometheus安装

首先从Prometheus官网上下载对应操作系统的Prometheus软件包:https://prometheus.io/download/


下载完成后上传到服务器然后解压缩:


    admin@ChrisJenny:~$ tar -xvf prometheus-2.21.0.linux-amd64.tar
    admin@ChrisJenny:~/Software$ cd prometheus/
    admin@ChrisJenny:~/Software/prometheus$ ls
    console_libraries consoles data LICENSE NOTICE prometheus prometheus.yml promtool


    此时有两种方式启动Prometheus:一是通过直接执行prometheus命令,二是配置为系统systemd等自启动服务。我这里采用简单的直接执行命令的方式,如果您有系统自启动服务配置需求,请参考官方手册的操作方式。


      admin@ChrisJenny:~/Software/prometheus$ ./prometheus
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:310 msg="No time or size retention was set so using the default time retention" duration=15d
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:346 msg="Starting Prometheus" version="(version=2.21.0, branch=HEAD, revision=e83ef207b6c2398919b69cd87d2693cfc2fb4127)"
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:347 build_cOntext="(go=go1.15.2, user=root@a4d9bea8479e, date=20200911-11:35:02)"
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:348 host_details="(Linux 4.4.59+ #25426 SMP PREEMPT Wed Jul 8 03:21:29 CST 2020 x86_64 ChrisJenny (none))"
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:349 fd_limits="(soft=1024, hard=4096)"
      level=info ts=2020-12-09T14:32:19.550Z caller=main.go:350 vm_limits="(soft=unlimited, hard=unlimited)"
      level=info ts=2020-12-09T14:32:19.554Z caller=main.go:701 msg="Starting TSDB ..."
      level=info ts=2020-12-09T14:32:19.560Z caller=head.go:644 compOnent=tsdb msg="Replaying on-disk memory mappable chunks if any"
      level=info ts=2020-12-09T14:32:19.560Z caller=head.go:658 compOnent=tsdb msg="On-disk memory mappable chunks replay completed" duration=4.93µs
      level=info ts=2020-12-09T14:32:19.560Z caller=head.go:664 compOnent=tsdb msg="Replaying WAL, this may take a while"
      level=info ts=2020-12-09T14:32:19.560Z caller=web.go:523 compOnent=web msg="Start listening for connections" address=0.0.0.0:9090
      level=info ts=2020-12-09T14:32:19.560Z caller=head.go:716 compOnent=tsdb msg="WAL segment loaded" segment=0 maxSegment=1
      level=info ts=2020-12-09T14:32:19.562Z caller=head.go:716 compOnent=tsdb msg="WAL segment loaded" segment=1 maxSegment=1
      level=info ts=2020-12-09T14:32:19.563Z caller=head.go:719 compOnent=tsdb msg="WAL replay completed" checkpoint_replay_duration=53.566µs wal_replay_duration=2.510703ms total_replay_duration=2.609138ms
      level=info ts=2020-12-09T14:32:19.566Z caller=main.go:721 fs_type=9123683e
      level=info ts=2020-12-09T14:32:19.566Z caller=main.go:724 msg="TSDB started"
      level=info ts=2020-12-09T14:32:19.566Z caller=main.go:850 msg="Loading configuration file" filename=prometheus.yml
      level=info ts=2020-12-09T14:32:19.569Z caller=main.go:881 msg="Completed loading of configuration file" filename=prometheus.yml totalDuration=2.807902ms remote_storage=3.439µs web_handler=1.097µs query_engine=1.581µs scrape=1.190738ms scrape_sd=85.464µs notify=60.146µs notify_sd=511.617µs rules=4.706µs
      level=info ts=2020-12-09T14:32:19.569Z caller=main.go:673 msg="Server is ready to receive web requests."


      Prometheus启动后,可以通过IP:9090端口查看是否正常启动并提供服务,如果访问不通,需要关注一下防火墙是否已经开放端口或者关闭。访问通的情况下如下:



      3.2 Grafana安装


      首先从Grafana官网上下载对应操作系统的Grafana软件包:https://grafana.com/grafana/download



      下载完成后上传到服务器然后解压缩:


        admin@ChrisJenny:~/Software/grafana$ tar -xvf grafana-7.1.5.linux-amd64.tar
        admin@ChrisJenny:~/Software$ mv grafana-7.1.5 grafana
        admin@ChrisJenny:~/Software$ cd grafana/
        admin@ChrisJenny:~/Software/grafana$ ls
        bin conf LICENSE NOTICE.md plugins-bundled public README.md scripts VERSION


        此时跟上面的Prometheus一样,Grafana也有两种方式启动:一是通过直接执行bin/grafana-server命令,二是配置为系统systemd等自启动服务。我这里采用简单的直接执行命令的方式,如果您有系统自启动服务配置需求,请参考官方手册的操作方式。


          admin@ChrisJenny:~/Software/prometheus$ ./grafana-server
          ......
          INFO[12-09|22:47:54] Executing migration logger=migrator id="Add OAuth access token to user_auth"
          INFO[12-09|22:47:54] Executing migration logger=migrator id="Add OAuth refresh token to user_auth"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="Add OAuth token type to user_auth"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="Add OAuth expiry to user_auth"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="Add index to user_id column in user_auth"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="create server_lock table"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="add index server_lock.operation_uid"
          INFO[12-09|22:47:55] Executing migration logger=migrator id="create user auth token table"
          INFO[12-09|22:47:56] Executing migration logger=migrator id="add unique index user_auth_token.auth_token"
          INFO[12-09|22:47:56] Executing migration logger=migrator id="add unique index user_auth_token.prev_auth_token"
          INFO[12-09|22:47:56] Executing migration logger=migrator id="create cache_data table"
          INFO[12-09|22:47:56] Executing migration logger=migrator id="add unique index cache_data.cache_key"
          INFO[12-09|22:47:57] Created default admin logger=sqlstore user=admin
          INFO[12-09|22:47:57] Starting plugin search logger=plugins
          INFO[12-09|22:47:57] Registering plugin logger=plugins name="Direct Input"
          INFO[12-09|22:47:57] External plugins directory created logger=plugins directory=/var/services/homes/admin/Software/grafana/data/plugins
          INFO[12-09|22:47:57] HTTP Server Listen logger=http.server address=[::]:3000 protocol=http subUrl= socket=


          Grafana启动后,可以通过IP:3000端口查看是否正常启动并提供服务,如果访问不通,需要关注一下防火墙是否已经开放端口或者关闭。访问通的情况下如下:


          登录到Grafana界面后,首先输入默认用户名和密码,这里默认均是admin,然后下一步修改一个新的密码。重新登录后如下图,表示配置成功:



          3.3 配置Greenplum Exporter启动并采集Greenplum指标数据

          从https://github.com/ChrisYuan/greenplum_exporter下载源码编译或直接下载release

            [parallels@centos7 bin]$ export GPDB_DATA_SOURCE_URL=postgres://gposs6:gposs6@127.0.0.1:5432/postgres?sslmode=disable
            [parallels@centos7 bin]$ ./greenplum_exporter --web.listen-address="0.0.0.0:5433" --web.telemetry-path="/metrics" --log.level=error --greenplumVersion=gposs6


            启动后,访问ip:5433查看指标采集是否成功,如下信息代表采集成功:



            3.4 在Prometheus中配置Greenplum Exporter


            打开prometheus.yml文件(在prometheus文件夹下)在尾部增加如下内容:


              - job_name: 'greenplum'
              static_configs:
              - targets: ['110.211.55.6:5433']



              重启Prometheus服务:


                admin@ChrisJenny:~/Software/prometheus$ ps -ef | grep prometheus
                admin 3773 2451 0 06:47 pts/13 00:00:00 grep --color=auto prometheus
                admin 13155 1 0 Dec09 ? 00:01:25 ./prometheus
                admin@ChrisJenny:~/Software/prometheus$ kill -9 13155
                admin@ChrisJenny:~/Software/prometheus$ nohup ./prometheus &


                查看prometheus web端是否能正常获取监控指标:



                3.5 在Grafana中配置Prometheus数据源,并绘制/导入可视化仪表板


                登录到Grafana:http://192.168.0.200:3000

                选择Prometheus为数据源:



                配置Prometheus的IP和端口:



                导入项目中提供的json即可:https://github.com/ChrisYuan/greenplum_exporter/blob/master/grafana/greenplum_dashboard.json



                4. 写在最后


                本文给大家展开介绍了一种基于Prometheus及Grafana的解决方案,该方案具有以下优势:

                • 软件安装简捷、无太多繁琐步骤,基本都是一件启动和一键配置;

                • 符合目前主流的监控方式,可以与大部分企业已有的Prometheus监控进行集成;

                • 针对Greenplum各个版本的监控做了统一适配的Exporter,不需要每个版本采用单独的监控组件;

                • 免费开源,可以继续进行二次开发;


                如果大家对我带来的解决方案有任何问题,可以在添助手(gp_assistant)加入Greenplum官方社区微信群或Askgp(cn.greenplum.org/askgp)留言交流,也欢迎大家把自己关心的指标提交更新到greenplum_exporter的github中,一起来完善这款插件。



                作者介绍

                苑泽福(阿福),Greenplum中文社区成员,山东辉鸿泛在电子科技有限公司技术总监。


                有十多年的从业经验,曾供职于鼎兴达、瀚高,拥有丰富的数据库开发运维经验,近年来一直专注于Greenplum数据库,主导并完成了多个基于Greenplum的数据平台落地。目前专注于物联网产品研发,处于创业阶段。




                近期活动



                点击文末“阅读原文”,获取Greenplum中文资源。



                来一波 “在看”、“分享”和 “赞” 吧!




                推荐阅读
                • 触发器的稳态数量分析及其应用价值
                  本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
                • SSAS入门指南:基础知识与核心概念解析
                  ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
                • 美团安全响应中心推出全新配送业务测试活动,带来双重福利,邀您共同参与! ... [详细]
                • 解决ADODB连接Access时出现80004005错误的方法
                  本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
                • 七大策略降低云上MySQL成本
                  在全球经济放缓和通胀压力下,降低云环境中MySQL数据库的运行成本成为企业关注的重点。本文提供了一系列实用技巧,旨在帮助企业有效控制成本,同时保持高效运作。 ... [详细]
                • H5技术实现经典游戏《贪吃蛇》
                  本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
                • 二维码的实现与应用
                  本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
                • 解决JavaScript中法语字符排序问题
                  在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
                • 对象存储与块存储、文件存储等对比
                  看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
                • 英特尔推出第三代至强可扩展处理器及傲腾持久内存,AI性能显著提升
                  英特尔在数据创新峰会上发布了第三代至强可扩展处理器和第二代傲腾持久内存,全面增强AI能力和系统性能。 ... [详细]
                • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
                • Python 数据可视化实战指南
                  本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
                • 从0到1搭建大数据平台
                  从0到1搭建大数据平台 ... [详细]
                • grafana,9,1,1,发布,系统,指标, ... [详细]
                • k8s(十一)helm安装premetheus
                  1prometheus基础知识1.1prometheus简介Prometheus是一套开源的系统监控报警框架。和Kubernetes类似,它也发源于Google的Borg体系,其原 ... [详细]
                author-avatar
                PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有