本文是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是一个跨平台的开源的度量分析和可视化工具,能够经过将采集的数据查询而后可视化的展现,并及时通知,支持多种数据源: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: prometheus-mq-rocketmq : prometheus : proxy : 1 : http://prometheus-mq-rocketmq:9090 : false : : 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: 'storage-mysql' : 1 : 'storage-mysql' : '' : file : : path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql
'mq-rocketmq' : 1 : 'mq-rocketmq' : 'mq-rocketmq' : file : : 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: - 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源创计划”,欢迎正在阅读的你也加入,一块儿分享。