一、Grafana简述

Grafana 是一个开源的度量分析与可视化工具。提供查询、可视化、报警和指标展示等 功能,能灵活创建图表、仪表盘等可视化界面。

主要功能:

  • 可视化: 提供多种可选择的不同类型的图形,能够灵活绘制不同样式,且还提供很多 插件。
  • 动态仪表盘: 提供以模板和变量的方式来创建动态且可重复使用的仪表盘,可以灵活 调整。
  • 浏览指标: 通过瞬时查询和动态变化等方式展示数据,可以根据不同的时间范围拆分 视图。
  • 警报: 可以直观地根据重要的指标定义警报规则。Grafana 将不断评估并向 Slack, 邮件,快消息等系统发送通知。
  • 混合数据源: 在同一图中混合不同的数据源,可以基于每个查询指定不同数据源。

Day07-容器云平台监控一体化-图17

二、部署Grafana到Kubernetes

2.1 数据持久化

[root@master01 7]# vim grafana-storage.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-data-pvc
  namespace: monitor
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "nfs-storage"
  resources:
    requests:
      storage: 10Gi

# 应用
[root@master01 7]# kaf grafana-storage.yaml

# 验证
[root@master01 7]# kg -f grafana-storage.yaml
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
grafana-data-pvc   Bound    pvc-21585b3b-13e7-4f1c-8ce2-80029b2ad11d   10Gi       RWX            nfs-storage    16m

2.2 配置grafana-config

[root@master01 7]# vim grafana-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-config
  namespace: monitor
data:
  grafana.ini: |
    [server]
    root_url = http://grafana.zhang-qing.com
    [smtp]
    enabled = true
    #企业邮箱使用smtp.exmail.qq.com:465,个人邮箱使用smtp.qq.com:465
    host = smtp.qq.com:465
    user = 1904763431@qq.com
    password = xdjdwczivdfpcbhj
    skip_verify = true
    from_address = 1904763431@qq.com
    [alerting]
    enabled = true
    execute_alerts = true

# 应用
[root@master01 7]# kaf grafana-config.yaml

2.3 配置grafana-SVC

[root@master01 7]# vim grafana-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitor
  labels:
    app: grafana
    component: core
spec:
  type: ClusterIP
  ports:
    - port: 3000
  selector:
    app: grafana
    component: core

# 应用
[root@master01 7]# kaf grafana-svc.yaml

2.4 部署grafana-DP

[root@master01 7]# vim grafana-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana-core
  namespace: monitor
  labels:
    app: grafana
    component: core
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
        component: core
    spec:
      containers:
      - name: grafana-core
        image: registry.cn-hangzhou.aliyuncs.com/abroad_images/grafana:9.3.2
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: storage
          subPath: grafana
          mountPath: /var/lib/grafana
        # env:
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 100m
            memory: 500Mi
        env:            #配置环境变量,设置Grafana的默认管理员用户名/密码
          # The following env variables set up basic auth twith the default admin user and admin password.
          - name: GF_AUTH_BASIC_ENABLED
            value: "true"
          - name: GF_AUTH_ANONYMOUS_ENABLED
            value: "false"
          # - name: GF_AUTH_ANONYMOUS_ORG_ROLE
          #   value: Admin
          # does not really work, because of template variables in exported dashboards:
          # - name: GF_DASHBOARDS_JSON_ENABLED
          #   value: "true"
        readinessProbe:
          httpGet:
            path: /login
            port: 3000
          # initialDelaySeconds: 30
          # timeoutSeconds: 1
        volumeMounts:
        - name: data
          subPath: grafana
          mountPath: /var/lib/grafana
        - name: grafana-config
          mountPath: /etc/grafana
          readOnly: true
      securityContext:       #容器安全策略,设置运行容器使用的归属组与用户
        fsGroup: 472
        runAsUser: 472
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: grafana-data-pvc
      - name: grafana-config
        configMap:
          name: grafana-config

# 应用
[root@master01 7]# kaf grafana-deploy.yaml

2.5 部署grafana-ING

[root@master01 7]# vim grafana-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: monitor
  annotations:
    prometheus.io/http_probe: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: grafana.zhang-qing.com
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 3000
            path: /

# 应用
[root@master01 7]# kaf grafana-ingress.yaml

2.6 Grafana安装插件

进入 Grafana Pod 容器内,通过镜像自带的 grafana-cli 工具进行插件的安装,本文以安装饼图插件为例

# 安装饼图插件
[root@master01 7]# kubectl exec -it -n monitor grafana-core-6cf94c798c-f49pq bash
bash-5.1$ grafana-cli plugins install grafana-piechart-panel
bash-5.1$ grafana-cli plugins install camptocamp-prometheus-alertmanager-datasource

插件已经安装成功,不过在默认情况下 Grafana 并不会自动热加载插件,必须将应用重启后才能够重新加载插件。

[root@master01 7]# kubectl rollout restart deploy grafana-core  -n monitor

# 重启后进行验证
[root@master01 7]# kgp -n monitor | grep grafana
grafana-core-54c48855c9-7cjxg              1/1     Running   0               31s

2.7 验证测试Grafana

Linux主机上进行测试

$ curl grafana.zhang-qing.com
<a href="/login">Found</a>.

Windows主机上进行测试,打开浏览器上输入http://grafana.zhang-qing.com/login 账号和密码都为admin

说明:当第一次输入账号和密码,需要提示修改新的密码

image-20250413122431644

三、配置数据源

Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch,CloudWatch的支持。

添加数据源:Configuration --> Data Sources --> Prometheus

image-20250413125203502

image-20250413125259042

HTTP URL:http://prometheus.monitor:9090 --> Save & test

image-20250413125415123

四、企业级监控大盘

官方大盘指引:Dashboards | Grafana Labs

监控指标说明:监控指标说明 | KubeSphere Documents

创建不同维度的大盘:Create --> New dashboard folder --> 集群层面 、主机层面、DEVOPS

image-20250413125614314

image-20250413125635935

image-20250413125939147

4.1 集群层面监控

导入大盘:Create --> Import

image-20250413131252734

image-20250413131333702

image-20250413131405087

说明:上面只演示导入15757,其他都一样的步骤

集群:

4.2 域名层面

域名:9965

4.3 主机层面

主机:16098/8919

Day07-容器云平台监控一体化-图19

Day07-容器云平台监控一体化-图18

Day07-容器云平台监控一体化-图20

Day07-容器云平台监控一体化-图21

Day07-容器云平台监控一体化-图22