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

本文是grafana/prometheus生产级容器化实践系列文章的第一篇。mysql

 

目录:git

(1).grafana/prometheus简单回顾github

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

1.容器化多个prometheus实例sql

2.exporter组件docker

3.业务服务数据库

4.grafanajson

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

1.注意事项微信

2.容器化步骤

3.关键配置

(4).相关文章

 

(1).grafana/prometheus简单回顾

 

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

 

Grafana是一个跨平台的开源的度量分析和可视化工具,能够经过将采集的数据查询而后可视化的展现,并及时通知,支持多种数据源:GraphiteInfluxDBOpenTSDBPrometheusElasticsearchCloudWatchKairosDB。通常都使用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,这样的dashboardgrafana界面是不容许修改的,更加安全,防止误操做。

 

(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启动时从哪里加载dashboardsdatasources,即以前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"



 

(4).相关文章

 

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


2.基于阿里云自建kubernetes集群与微服务的生产实践系列-1:总体架构-1

 


本文分享自微信公众号 - 千里行走(a_thousands_of_miles)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索