目录

一、概述

1.1 优点

1.2 特点

二、grafana部署

三、grafana接入Promethues数据源

四、grafana展示物理节点指标数据

五、Prometheus监控K8S

5.1 监控方案

5.2 监控流程

5.3 K8S自身监控指标

5.4 kube-state-metrics简介

5.5 安装kube-state-metrics组件监控K8S资源对象


【Prometheus】概念和工作原理介绍_prometheus工作原理-CSDN博客

【Prometheus】k8s集群部署node-exporter_kubectl 安装 promethues node-exporter-CSDN博客

【prometheus】k8s集群部署prometheus server-CSDN博客


一、概述


Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。

1.1 优点


灵活性:Grafana支持各种数据源,如prometheus、elasticsearch、influxdb等并且可以自由地配置大量的插件和面板,以展示不同类型的数据。

易用性:Grafana非常易于使用,因为它提供了一个直观的用户界面,使用户能够轻松地创建、编辑和共享仪表板。

实时监控:Grafana可以实时监测各种指标,包括应用程序性能、网络流量、服务器资源等等。

可视化:Grafana有丰富的数据可视化选项,如曲线图、柱状图、饼图等,使得数据可以以直观的方式呈现出来。

1.2 特点


可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
报警:可视化地为重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
通知:警报更改状态时,它会发出通知。接收电子邮件通知。
动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

k8s方式官方部署文档:

Deploy Grafana on Kubernetes | Grafana documentation

安装Grafana需要的镜像heapster-grafana-amd64:v5.0.4


二、grafana部署


grafana.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: monitoring-grafana
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      task: monitoring
      k8s-app: grafana
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: grafana
    spec:
      containers:
      - name: grafana
        image: k8s.gcr.io/heapster-grafana-amd64:v5.0.4
        ports:
        - containerPort: 3000
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/ssl/certs
          name: ca-certificates
          readOnly: true
        - mountPath: /var
          name: grafana-storage
        env:
        - name: INFLUXDB_HOST
          value: monitoring-influxdb
        - name: GF_SERVER_HTTP_PORT
          value: "3000"
        - name: GF_AUTH_BASIC_ENABLED
          value: "false"
        - name: GF_AUTH_ANONYMOUS_ENABLED
          value: "true"
        - name: GF_AUTH_ANONYMOUS_ORG_ROLE
          value: Admin
        - name: GF_SERVER_ROOT_URL
      volumes:
      - name: ca-certificates
        hostPath:
          path: /etc/ssl/certs
      - name: grafana-storage
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  labels:
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: monitoring-grafana
  name: monitoring-grafana
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 3000
  selector:
    k8s-app: grafana
  type: NodePort

部署 yaml文件

kubectl apply -f grafana.yaml
kubectl get pods -n kube-system

 

WEB页面 http://192.168.2.140:31843/ ,账号密码都是admin。


三、grafana接入Promethues数据源


开始配置grafana的web界面,选择Create your first data source

  • Name: Prometheus
  • Type: Prometheus
  • HTTP 处的URL:http://prometheus.monitor-sa.svc:9090

配置好的整体页面如下:

点击左下角Save & Test,出现如下Data source is working,说明prometheus数据源成功的被grafana接入了。

Prometheus数据源接入


四、grafana展示物理节点指标数据


点击左侧+号下面的Import,出现如下界面

选择本地的node_exporter.json文件(博客资源中下载)

官方模板地址:Node Exporter Full | Grafana Labs

选择之后出现如下,然后再点击Import

如下图我们可以看到采集到的master1指标

node节点


五、Prometheus监控K8S


5.1 监控方案


主流的监控方案是:通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。

总体采集方式如下:

  • 通过cadvisor采集容器、Pod相关的性能指标数据。
  • 通过node-exporter采集单纯主机节点的性能指标数据。
  • 通过kube-state-metrics采集k8s资源对象以及k8s组件的(健康)状态指标数据。
  • 通过blackbox-exporter采集应用的网络性能(http、tcp等)数据

监控指标

具体实现

案例

Pod性能

cadvisor

容器的CPU、内存利用率

Node性能

node-exporter

node节点的CPU、内存利用率

K8S资源对象

kube-state-metrics

pod、deployment、service

5.2 监控流程


容器监控:Prometheus使用cadvisor采集容器监控指标,而cadvisor集成在K8S的kubelet中所以无需部署,通过Prometheus进程存储,使用grafana进行展示。

node节点监控:node端的监控通过node_exporter采集当前主机的资源,通过Prometheus进程存储,最后使用grafana进行展示。

master节点监控:master的监控通过kube-state-metrics插件从K8S获取到apiserver的相关数据并通过网页页面暴露出来,然后通过Prometheus进程存储,最后使用grafana进行展示

5.3 K8S自身监控指标

  • node资源利用率:监控node节点上的cpu、内存、硬盘等硬件资源
  • node数量:监控node数量与资源利用率、业务负载的比例情况,对成本、资源扩展进行评估
  • pod数量:监控当负载到一定程度时,node与pod的数量。评估负载到哪个阶段,大约需要多少服务器,以及每个pod的资源占用率,然后进行整体评估
  • 资源对象状态:在K8S运行过程中,会创建很多pod、控制器、任务等,这些内容都是由K8S中的资源对象进行维护,所以可以对资源对象进行监控,获取资源对象的状态

5.4 kube-state-metrics简介


kube-state-metrics通过监听API Server生成有关资源对象的状态指标,比如Deployment、Node、Pod,需要注意的是kube-state-metrics只是简单的提供一个 metrics数据,并不会存储这些指标数据,所以我们可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?我有多少job在运行中。

5.5 安装kube-state-metrics组件监控K8S资源对象


在k8s的master1节点生成一个kube-state-metrics-rbac.yaml文件,kube-state-metrics-rbac.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-state-metrics
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-state-metrics
rules:
- apiGroups: [""]
  resources: ["nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints"]
  verbs: ["list", "watch"]
- apiGroups: ["extensions"]
  resources: ["daemonsets", "deployments", "replicasets"]
  verbs: ["list", "watch"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["list", "watch"]
- apiGroups: ["batch"]
  resources: ["cronjobs", "jobs"]
  verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]
  resources: ["horizontalpodautoscalers"]
  verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-state-metrics
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-state-metrics
subjects:
- kind: ServiceAccount
  name: kube-state-metrics
  namespace: kube-system

部署

kubectl apply -f kube-state-metrics-rbac.yaml

kube-state-metrics-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-state-metrics
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-state-metrics
  template:
    metadata:
      labels:
        app: kube-state-metrics
    spec:
      serviceAccountName: kube-state-metrics
      containers:
      - name: kube-state-metrics
        image: quay.io/coreos/kube-state-metrics:v1.9.0
        ports:
        - containerPort: 8080
kubectl apply -f kube-state-metrics-svc.yaml

kube-state-metrics-svc.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  name: kube-state-metrics
  namespace: kube-system
  labels:
    app: kube-state-metrics
spec:
  ports:
  - name: kube-state-metrics
    port: 8080
    protocol: TCP
  selector:
    app: kube-state-metrics
# 通过kubectl apply更新yaml
kubectl apply -f kube-state-metrics-svc.yaml

查看service是否创建成功

进入 prometheus查看采集的k8s指标

如下图我们可以看到采集的pod指标

登录 grafra 导入 JSON File-Kubernetes Cluster (Prometheus).json(博客资源中下载第四章)

官网模板地址:

Kubernetes Cluster (Prometheus) | Grafana Labs

导入模板后我们选择Import

k8s集群监控指标在grafana


【Prometheus】概念和工作原理介绍-CSDN博客

【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0-CSDN博客

参考原文链接:Grafana,监控神器!(免费用)-CSDN博客

https://www.jianshu.com/p/0d82c7ccc85a

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐