目录
一、概述
1.1 优点
1.2 特点
二、grafana部署
三、grafana接入Promethues数据源
四、grafana可视化展示物理节点指标数据
五、grafana可视化展示k8s组件指标数据
5.1 kube-state-metrics简介
5.2 安装kube-state-metrics组件
一、概述
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文件(博客资源中下载)
选择之后出现如下,然后再点击Import
如下图我们可以看到采集到的master1指标
node节点
五、grafana可视化展示k8s组件指标数据
5.1 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.2 安装kube-state-metrics组件
在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(博客资源中下载第四章)
导入模板后我们选择Import
k8s集群监控指标在grafana
【Prometheus】概念和工作原理介绍-CSDN博客
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0-CSDN博客
参考原文链接:Grafana,监控神器!(免费用)-CSDN博客
https://www.jianshu.com/p/0d82c7ccc85a