Grafana数据可视化
Grafana是一个开源的数据可视化工具,可以通过Grafana将数据源中的数据以图表和仪表盘的形式展示出来,支持多种数据源,如Prometheus、InfluxDB、Graphite等。
Grafana提供了丰富的可视化选项,可以自定义图表的样式、颜色、标签等属性,还支持将多个数据源的数据在同一个仪表盘中进行联合展示。
除了可视化,Grafana还提供了警报功能,可以通过设置警报规则,及时发现异常情况,并通过邮件、短信等方式通知相关人员。
Grafana的安装和配置相对简单,支持多平台、多操作系统,可以通过Docker、RPM包、APT源等方式进行安装。同时,Grafana还提供了丰富的插件和API,可以通过插件扩展其功能,或者通过API集成到其他系统中。
总之,Grafana是一个功能强大、易用性好的数据可视化工具,广泛应用于各种场景,如监控、运维、数据分析等。
guafana和kibana区别
Grafana和Kibana都是用于数据可视化的工具,但它们主要针对的数据类型和使用场景不同。
Grafana主要用于展示时间序列数据,例如监控数据、日志数据等。它可以连接多种数据源,如Prometheus、InfluxDB、Elasticsearch等,提供多种图表、面板和警报功能,用户可以通过配置实现对数据的可视化和警报。
Kibana主要用于展示非时间序列数据,例如日志、事件等。它主要针对的是Elasticsearch这样的日志和文档型数据库,提供了丰富的数据可视化、搜索和分析功能。用户可以通过Kibana来搜索、分析和展示数据,并且可以自定义视图、仪表盘等。
总之,Grafana主要用于展示时间序列数据,Kibana主要用于展示非时间序列数据。如果需要对多种数据进行可视化展示和分析,可以同时使用Grafana和Kibana。
grafana和prometheus
Grafana和Prometheus是常用的监控系统组合,Grafana用于数据可视化和警报管理,而Prometheus则是用于数据采集和存储的。
Prometheus是一个开源的系统监控和告警工具,可以从多种数据源中采集指标数据,如操作系统、容器、网络设备等,通过PromQL查询语言对数据进行分析和聚合,并将数据存储在本地的时序数据库中。同时,Prometheus提供了警报规则,可以根据数据指标的阈值进行报警。
Grafana可以通过Prometheus的API接口获取Prometheus中的指标数据,并将其可视化展示,用户可以根据自己的需求创建仪表盘、面板、警报等,并且Grafana也提供了丰富的插件和扩展功能,如支持多种数据源、提供多种数据可视化方式等。
综上所述,Grafana和Prometheus是一对非常强大的监控系统组合,可以为用户提供完整的监控和警报解决方案,同时也能够为用户提供强大的数据可视化和查询分析功能。
安装
注意点:
- 使用最新版本的镜像 https://github.com/grafana/grafana
- 通过环境变量设置管理员账户密码
- GF_SECURITY_ADMIN_USER
- GF_SECURITY_ADMIN_PASSWORD
- 通过设置securityContext的方式让grafana进程使用root启动
- 数据挂载到本地
- 配置ingress暴露访问入口
yaml详解
这是一个用于部署Grafana的Kubernetes YAML文件。它包括一个持久化卷声明(PersistentVolumeClaim),一个Deployment,一个Service和一个Ingress。
其中:
- PersistentVolumeClaim用于创建一个持久化卷并绑定到Grafana容器的/var/lib/grafana目录。该持久化卷声明具有200GB的存储容量,并且存储类为nfs。
- Deployment定义了一个名为grafana的Deployment,用于创建Grafana容器。它将Grafana镜像版本设置为7.5.9,并暴露容器的3000端口。此外,还定义了一些环境变量用于设置Grafana管理员用户的用户名和密码。Deployment还定义了一个名为storage的持久化卷,用于将持久化卷声明绑定到容器目录。最后,Deployment设置了就绪和存活探测,以确保Grafana容器健康运行。
- Service用于将Grafana容器暴露在Kubernetes集群内部。它将集群IP类型设置为ClusterIP,并将容器的3000端口暴露出去。
- Ingress定义了一个名为grafana的Ingress规则,并使用NGINX Ingress控制器。它将grafana.yuchaoit.cn的域名映射到Grafana服务,并将Path类型设置为前缀方式。
综上所述,这个Kubernetes YAML文件用于部署Grafana并将其暴露到Kubernetes集群内部以及外部。
$ cat grafana-all.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: grafana
namespace: monitor
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs
resources:
requests:
storage: 200Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitor
spec:
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
volumes:
- name: storage
persistentVolumeClaim:
claimName: grafana
securityContext:
runAsUser: 0
containers:
- name: grafana
image: grafana/grafana:7.5.9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: grafana
env:
- name: GF_SECURITY_ADMIN_USER
value: admin
- name: GF_SECURITY_ADMIN_PASSWORD
value: www.yuchaoit.cn
readinessProbe:
failureThreshold: 10
httpGet:
path: /api/health
port: 3000
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 30
livenessProbe:
failureThreshold: 3
httpGet:
path: /api/health
port: 3000
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 150m
memory: 512Mi
requests:
cpu: 150m
memory: 512Mi
volumeMounts:
- mountPath: /var/lib/grafana
name: storage
---
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitor
spec:
type: ClusterIP
ports:
- port: 3000
selector:
app: grafana
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana
namespace: monitor
spec:
ingressClassName: nginx
rules:
- host: grafana.yuchaoit.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 3000
访问grafana
[root@k8s-master ~/prometheus-all]#kubectl apply -f grafana-all.yml
persistentvolumeclaim/grafana created
deployment.apps/grafana created
service/grafana created
ingress.networking.k8s.io/grafana created
[root@k8s-master ~/prometheus-all]#kubectl -n monitor get po
NAME READY STATUS RESTARTS AGE
grafana-5588cfdb99-vb8jd 1/1 Running 0 95s
kube-state-metrics-7dc6bc9d6-bpscm 1/1 Running 0 5h6m
node-exporter-68n2w 1/1 Running 0 5d22h
node-exporter-6z9sj 1/1 Running 0 5d22h
node-exporter-rkrgh 1/1 Running 0 5d22h
prometheus-6c8768547-v7hqq 1/1 Running 0 6d1h
# pvc检查
[root@k8s-master ~/prometheus-all]#kubectl -n monitor get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
grafana Bound pvc-59d1318b-02f4-41ef-af07-813824935851 200Gi RWO nfs 3m38s
prometheus Bound pvc-3c0f682c-b266-426e-b1ac-e8a9ffe16d01 200Gi RWO nfs 6d1h
admin
www.yuchaoit.cn

导入grafana监控模板
如何丰富Grafana监控面板:
- 导入dashboard
- 安装相应的插件
- 自定义监控面板
dashboard: https://grafana.com/grafana/dashboards
https://grafana.com/grafana/dashboards/?search=kubernetes
推荐用这个
Node Exporter https://grafana.com/grafana/dashboards/11074
添加数据源

[root@k8s-master ~/prometheus-all]#kubectl -n monitor get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.96.83.217 <none> 3000/TCP 8m15s
kube-state-metrics ClusterIP None <none> 8080/TCP,8081/TCP 5h13m
prometheus ClusterIP 10.109.81.166 <none> 9090/TCP 6d1h
[root@k8s-master ~/prometheus-all]#
# http://10.109.81.166:9090

导入模板

选择普罗米修斯

node_exporter指标展示

很明显,k8s-master内存紧张了,扩容内存吧。
查看metrics
grafana是写好的指标采集表达式,从prometheus里拿到的数据且计算。

DevOpsProdigy KubeGraf插件
该项目地址
https://grafana.com/grafana/plugins?utm_source=grafana_plugin_list
DevOpsProdigy KubeGraf插件是一个 Grafana 插件,用于监控 Kubernetes 集群。它可以帮助用户可视化 Kubernetes 集群中的资源使用情况,例如 Pod、Deployment、Service 等,同时还可以监控容器的指标,例如 CPU 和内存使用率、网络和磁盘 I/O 等。该插件支持 Prometheus 作为数据源,因此用户可以使用 Prometheus 监控 Kubernetes 集群,并使用 KubeGraf 插件将数据可视化。
KubeGraf 插件提供了一些预定义的仪表板,例如 Kubernetes 概览、节点详情、Pod 详情、容器详情等。用户也可以自定义仪表板来监控自己的 Kubernetes 集群。此外,KubeGraf 还支持预警功能,可以帮助用户在资源使用率达到一定阈值时发送通知。
总之,DevOpsProdigy KubeGraf 插件是一个功能强大的 Kubernetes 监控工具,可以帮助用户更好地了解 Kubernetes 集群中的资源使用情况,及时发现问题,并进行调整。
安装
除了直接导入Dashboard,我们还可以通过安装插件的方式获得,Configuration -> Plugins可以查看已安装的插件,通过 官方插件列表 我们可以获取更多可用插件。
Kubernetes相关的插件:
DevOpsProdigy KubeGraf 是一个优秀的 Grafana Kubernetes 插件,是 Grafana 官方的 Kubernetes 插件的升级版本,该插件可以用来可视化和分析 Kubernetes 集群的性能,通过各种图形直观的展示了 Kubernetes 集群的主要服务的指标和特征,还可以用于检查应用程序的生命周期和错误日志。
# 进入容器内安装
[root@k8s-master ~/prometheus-all]#kubectl -n monitor exec -it grafana-5588cfdb99-vb8jd -- bash
bash-5.1# grafana-cli plugins install devopsprodigy-kubegraf-app 1.5.2
installing devopsprodigy-kubegraf-app @ 1.5.2
from: https://grafana.com/api/plugins/devopsprodigy-kubegraf-app/versions/1.5.2/download
into: /var/lib/grafana/plugins
✔ Installed devopsprodigy-kubegraf-app successfully
installing grafana-piechart-panel @ 1.6.4
from: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.6.4/download
into: /var/lib/grafana/plugins
✔ Installed grafana-piechart-panel successfully
Installed dependency: grafana-piechart-panel ✔
Restart grafana after installing plugins . <service grafana-server restart>
bash-5.1#
# 重建pod即可生效
[root@k8s-master ~/prometheus-all]#kubectl -n monitor delete pod grafana-5588cfdb99-vb8jd
pod "grafana-5588cfdb99-vb8jd" deleted
配置k8s认证
既然该插件要去获取k8s信息,必然要和api-server做RBAC

设置插件

# 1.获取跟证书
[root@k8s-master ~/prometheus-all]#cat /etc/kubernetes/pki/ca.crt
# 2.获取客户端证书
[root@k8s-master ~/prometheus-all]#cat ~/.kube/config
echo 'client-certificate-data' |base64 -d
# 3.填入客户端私钥
echo 'client-key-data' |base64 -d

保存且测试即可
查看dashboard

如上的5个仪表板,就提供了很方便的k8s指标展示

插件的监控内容,要远比自带插件,丰富的多,也是用的比较多的一个插件。

拿不到deployment数据?插件bug

Dashboard settings
变量设置,也就是pod变量设置有bug

修改变量值,这里是prometheus的查询语句,修改为如下即可

查看预览值,和于超老师这里一样即可

仪表板数据正确了

同理其他几个面板也一样有bug
DaemonSet
/pod=\"(.+?)\"/
Deployment
/pod=\"(.+?)\"/
Pod
/pod=\"(.+?)\"/

一样的修改变量

面板正常

promeQL
PromQL是Prometheus Query Language的缩写,是一种用于查询和分析Prometheus监控数据的查询语言。
PromQL的特点是简洁易懂,基于向量数据模型(即时序数据的多维度向量)进行操作,支持聚合、过滤、计算和展示多种形式的数据。它可以用来创建仪表盘、警报规则和查询历史数据。
PromQL具有类似SQL的语法结构,其中包含函数和操作符,可以使用范围选择器和标签匹配器来过滤数据,从而获取所需的监控指标数据。
使用PromQL,可以根据不同的场景和需求,对监控指标数据进行实时查询和计算,从而帮助用户快速定位和解决系统中出现的问题,提升运维效率。
这部分暂时略过,若你在大厂专门负责监控方向,可以再继续学习此方向。