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

二、部署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
说明:当第一次输入账号和密码,需要提示修改新的密码

三、配置数据源¶
Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch,CloudWatch的支持。
添加数据源:Configuration --> Data Sources --> Prometheus


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

四、企业级监控大盘¶
官方大盘指引:Dashboards | Grafana Labs
监控指标说明:监控指标说明 | KubeSphere Documents
创建不同维度的大盘:Create --> New dashboard folder --> 集群层面 、主机层面、DEVOPS



4.1 集群层面监控¶
导入大盘:Create --> Import



说明:上面只演示导入15757,其他都一样的步骤
集群:
- Kubernetes / Views / Global :15757
- node_cpu_core_throttles_total ignores second thread of hyperthreading systems · Issue #1472 · prometheus/node_exporter (github.com)
- Kubernetes / Views / Nodes :15759/22153
- Kubernetes / Views / Namespaces :15758
- Kubernetes / Views / Pods :15760
- Kubernetes Deployment Statefulset Daemonset metrics :8588
4.2 域名层面¶
域名:9965
4.3 主机层面¶
主机:16098/8919




