kubernetes系列之十:使用prometheus和grafana对kubernetes的部署进行监控

25 篇文章 0 订阅
20 篇文章 3 订阅

一、前言

不同于传统平台的监控,在容器云平台由于POD的易变动性,所以需要更加container native的监控解决方案,Prometheus就是这样一个适合kubernetes平台的容器云监控解决方案。

Prometheus已经成为CNCF的项目,能够和Kubernetes很好的集成。Prometheus和Kubernetes集成有两种方式,一种是使用prometheus-operator,另外一种是使用relabel机制。

在prometheus收集到数据之后,可以使用Grafana定义合适的数据表示方式进行展示。

转载自https://blog.csdn.net/cloudvtech

转载自https://blog.csdn.net/cloudvtech

二、使用preometheus-operator监控kubernetes

Prometheus Operator是一个处于alpha阶段的解决方案,它通过定义新的ServiceMonitor和prometheus(TPR/CRD),将Kubernetes的POD、Service资源同Prometheus服务进行动态连接,在operation级别提供基于Prometheus的Kubernetes平台上应用的监控方案。

这个方案需要部署一个ServiceMonitor资源对象,这个ServiceMonitor资源对象需要通过selector选择一个或者多个服务(当然前提是这些服务的POD已经暴露了满足prometheus接口需求的metrics数据)作为监控对象;还要部署一个prometheus资源对象,这个prometheus资源对象需要通过serviceMonitorSelector选择需要关注的ServiceMonitor资源对象;最后,这个方案还会自动部署一个prometheus server来收集和存储各个POD暴露的监控数据,并且提供一个GUI服务对数据进行进一步计算和展示。


从应用到监控的部署流程如下:

  • 首先在kubernetes setup的时候建立对Prometheus Operator的支持(通过部署Prometheus Operator manifest,会引入prometheus和ServiceMonitor这两个CRD,而且会启动一个带有一定系统处理权限的POD对这些新的CDR进行释义操作)
  • 部署一个application的kubernetes deployment
  • 部署一个application的kubernetes service,这个service使用selector选择各个部署的deployment作为它的endpoints
  • 部署一个kubernetes ServiceMonitor,使用和service一样的selector并且定义收集metrics的端口
  • 部署一个Prometheus CDR并且通过serviceMonitorSelector选择之前建立的ServiceMonitor作为监控目标
  • 部署一个prometheus instance的service来将prometheus服务对外暴露,便于查看UI
  • 在此之后,application的kubernetes deployment里面POD的变化将会自动被prometheus捕获并更新到metric收集

在这个使用Prometheus Operator进行监控的测试中,一开始deployment有4个replica:


之后将replica扩展到10,prometheus会自动捕获这个更新从而自动对新的POD进行监控:


转载自https://blog.csdn.net/cloudvtech

三、使用relabel机制进行监控

relabel机制通过标签机制灵活的选择监控目标比如node、POD、service、endpoints等。

具体的部署流程如下:

  • 部署一个满足prometheus运行权限要求的cluster role和service account
- apiGroups: [""]
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
  • 部署一个ConfigMap,承载prometheus的配置
  • 部署运行prometheus服务的POD
  • 部署暴露prometheus服务的kubernetes service
  • 部署带有prometheus标签的应用


prometheus通过配置文件定义它自己的监控行为,比如在如下配置中,可以对添加来prometheus标签的service的endpoints进行动态监控:

scrape_configs:
- job_name: 'kubernetes-apiservers'

  kubernetes_sd_configs:
  - role: endpoints

  # Default to scraping over https. If required, just disable this or change to
  # `http`.
  scheme: https
  tls_config:
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

  # Keep only the default/kubernetes service endpoints for the https port. This
  # will add targets for each API server which Kubernetes adds an endpoint to
  # the default/kubernetes service.
  relabel_configs:
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: default;kubernetes;https
而在部署application的service时候需要为这个service指定标签:
kind: Service
apiVersion: v1
metadata: 
  annotations:
    prometheus.io/port: "8082"
    prometheus.io/scrape: "true"
  namespace: prometheus
  name: httpd
  labels:
    tier: frontend
spec: 
  selector: 
    app: http 
  ports:
  - name: web
    protocol: TCP
    port: 80
    targetPort: web
  - name: metrics
    port: 8082
    targetPort: metrics
    protocol: TCP

在deployment部署之后,prometheus会自动检测到service的这些POD并进行监控:


并且可以查看简略的运行状态图表:


转载自https://blog.csdn.net/cloudvtech

四、grafana图表展示

grafana可以使用prometheus最为展示的数据源:

 

通过grafana可以定义复杂的监控算法生产易于人眼观察的图表:


也可以定义特定条件的告警:


这些告警可以通过如下方式定义traffic_alert_rule.yml:




转载自https://blog.csdn.net/cloudvtech



  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值