前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >grafana&prometheus生产级容器化监控-1:生产级容器化

grafana&prometheus生产级容器化监控-1:生产级容器化

作者头像
Criss@陈磊
发布2019-10-16 13:50:50
7090
发布2019-10-16 13:50:50
举报
文章被收录于专栏:测试技术圈测试技术圈

(1).grafana/prometheus简单回顾

prometheus是时序数据库,相比传统数据库更适合存储监控类数据;是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统;同时也是云原生时代监控的事实标准。

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知,支持多种数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。一般都使用prometheus作为其数据源。

每一个prometheus实例都有一个prometheus.xml配置,里边定义了抓取规则,从满足哪些条件的服务获取metircs数据,默认60秒抓一次;然后在grafana上制作dashboard,在dashboard中定义查询语句将监控数据展示为监控图表。

(2).grafana/prometheus生产级实践

原始图片位于:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/grafana-prometheus%E7%94%9F%E4%BA%A7%E7%BA%A7%E5%AE%9E%E8%B7%B5.jpg

如上图所示:

1.容器化多个prometheus实例

由于当数据量很大(metrics很多)或者grafana选择的时间跨度很大时,prometheus的吞吐性能会很有问题,再加上会有很多人通过grafana查看各业务数据,如果生产环境只部署一个prometheus,肯定是有问题的,prometheus会经常性崩溃。

同时,这样也可以设置不同的数据保存时间,比如对于mq来说,我希望保留更长时间的数据。

2.exporter组件

prometheus-expoerter组件是一个数据收集和聚合的组件,以exporter-rocketmq为例,prometheus通过prometheus.xml中定义的抓取规则定时从exporter-rocketmq拉取监控数据,exporter-rocketmq收到请求后,再从rocketmq集群获取监控数据,分析处理后聚合成metircs的格式返回给prometheus存储。

本文中的rocketmq-exporter没有使用官方的exporter,是根据笔者公司的情况自行开发,后续会另行发文/开源。

3.业务服务

prometheus不仅仅作为基础组件的监控数据存储,同样的,我们可以在业务服务中使用,去监控一些业务指标,比如笔者曾经开发的oss上传基础服务,笔者十分关心文件上传数,上传文件大小/时间,以及相关的p90等指标。帮助笔者发现/确认问题,事实上很有帮助,比如曾经发现有1G大小的文件被上传等异常现象。

成本强相关的服务(不局限于此)非常适合这样处理。

可以理解为监控打点。

下图为oss上传服务的上传文件大小的监控截图:

下图为oss上传服务架构图:

原图参见:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/caf-cdn%E6%96%B9%E6%A1%88.jpg

相关文章参见:

cdn-3:上传文件到oss-bucket生产级别的完整监控

4.grafana

主要说明3部分,grafana-web, provisioning-datasources, provisioning-dashboards

grafana-web:

通过丰富图表展示监控数据,这些图表有dashboard定义。

provisioning-datasources:

位于:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/datasources

这个目录下只有一个文件datasource.yml,定义grafana获取查询数据的数据源,可以定义多个数据源,不同的图表/dashboard可以使用不同的数据源。

datasources:
 - name: prometheus-mq-rocketmq
   type: prometheus
   access: proxy
   orgId: 1
   url: http://prometheus-mq-rocketmq:9090
   isDefault: false
   jsonData:
      tlsAuth: false
      tlsAuthWithCACert: false

provisioning-dashboards:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards

这个目录下有一个provision.yml配置文件,和不同监控组件的dashboard目录。

provision.yml定义了dashboard位置,用于grafana启动时加载。

providers:
 - name: 'storage-mysql'
   orgId: 1
   folder: 'storage-mysql'
   folderUid: ''
   type: file
   options:
     path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql

 - name: 'mq-rocketmq'
   orgId: 1
   folder: 'mq-rocketmq'
   folderUid: 'mq-rocketmq'
   type: file
   options:
     path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/mq-rocketmq

建议使用provisioning-dashboards方式去定义dashboard,这样的dashboard在grafana界面是不允许修改的,更加安全,防止误操作。

(3).grafana/prometheus生产级容器化配置

笔者提供了一个grafana/prometheus生产级的容器化配置,完全按照本文方式实现,位于:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro

1.注意事项

a.本配置使用的是local-pv,生产使用要换成云存储,本配置提供nfs的配置(已注释)。

b.imagePullSecret是注释掉的,生产要打开,因为镜像仓库都是有secret的。

c.注意先建立pv目录和挂载,注意目录的权限,否则prometehus, grafana容器化失败,给775或777。

2.容器化步骤

kubectl apply -f grafana-prometheus-image-repo-secret.yaml(生产环境需要改成自己的秘钥,本地部署不要执行)

kubectl apply -f grafana-prometheus-namespace.yaml

分别进入子目录执行:kubectl apply -f .

容器化完成后的样例:

不过现在dashboard是没有数据显示的,如何将各类基础中间件纳入grafana/prometheus监控,请关注后续文章。

3.关键配置

下述关键配置位于文件:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/grafana/grafana-statefulset.yaml

下边的配置保证grafana启动前先把dashboards和datasources配置下载到本地。

initContainers:
      - name: dashboards-clear
        #存到你公司自己的镜像仓库,不要用docker官方仓库
        image: alpine/git:1.0.7
        command: ['sh', '-c', 'rm -rf inc-k8s-app-config']
        volumeMounts:
        - name: pv-metrics-grafana
          mountPath: /git
      - name: dashboards-sync
        #存到你公司自己的镜像仓库,不要用docker官方仓库
        image: alpine/git:1.0.7
        command: ['sh', '-c', 'git clone ']
        volumeMounts:
        - name: pv-metrics-grafana
          mountPath: /git

下图配置指定了grafana启动时从哪里加载dashboards和datasources,即之前git clone下的目录。

env:  
        #开启percona的dashboards,用于mysql监控dashboard显示,关闭,我们通过provisioning方式实现dashboard导入.
        #- name: GF_INSTALL_PLUGINS
        #  value: "percona-percona-app"
        - name: GF_PATHS_PROVISIONING
          value: "/var/lib/grafana"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 质问 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (1).grafana/prometheus简单回顾
  • (2).grafana/prometheus生产级实践
    • 1.容器化多个prometheus实例
      • 2.exporter组件
        • 3.业务服务
          • 4.grafana
          • (3).grafana/prometheus生产级容器化配置
            • 1.注意事项
              • 2.容器化步骤
                • 3.关键配置
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档