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

image-20230504163525116

导入grafana监控模板

如何丰富Grafana监控面板:

  • 导入dashboard
  • 安装相应的插件
  • 自定义监控面板

dashboard: https://grafana.com/grafana/dashboards

https://grafana.com/grafana/dashboards/?search=kubernetes

推荐用这个
Node Exporter  https://grafana.com/grafana/dashboards/11074

添加数据源

image-20230504164114086

[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

image-20230504164319489

导入模板

image-20230504164357951

选择普罗米修斯

image-20230504164515397

node_exporter指标展示

image-20230504164647180

很明显,k8s-master内存紧张了,扩容内存吧。

查看metrics

grafana是写好的指标采集表达式,从prometheus里拿到的数据且计算。

image-20230504165037978

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

image-20230504165836663

设置插件

image-20230504170450711

# 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

image-20230504170601266

保存且测试即可

查看dashboard

image-20230504171047686

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

image-20230504171435516

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

image-20230504171651882

拿不到deployment数据?插件bug

image-20230504171842537

Dashboard settings

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

image-20230504172035854

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

image-20230504172108149

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

image-20230504172234575

仪表板数据正确了

image-20230504172454181

同理其他几个面板也一样有bug

  • DaemonSet

    /pod=\"(.+?)\"/

  • Deployment

    /pod=\"(.+?)\"/

  • Pod

    /pod=\"(.+?)\"/

image-20230504172555101

一样的修改变量

image-20230504172801418

面板正常

image-20230504172908459

promeQL

PromQL是Prometheus Query Language的缩写,是一种用于查询和分析Prometheus监控数据的查询语言。

PromQL的特点是简洁易懂,基于向量数据模型(即时序数据的多维度向量)进行操作,支持聚合、过滤、计算和展示多种形式的数据。它可以用来创建仪表盘、警报规则和查询历史数据。

PromQL具有类似SQL的语法结构,其中包含函数和操作符,可以使用范围选择器和标签匹配器来过滤数据,从而获取所需的监控指标数据。

使用PromQL,可以根据不同的场景和需求,对监控指标数据进行实时查询和计算,从而帮助用户快速定位和解决系统中出现的问题,提升运维效率。

这部分暂时略过,若你在大厂专门负责监控方向,可以再继续学习此方向。

Copyright © www.yuchaoit.cn 2025 all right reserved,powered by Gitbook作者:于超 2024-03-31 19:41:50

results matching ""

    No results matching ""