可视化面板,功能齐全的度量仪表盘和图形编辑器,支持 Graphite、zabbix、InfluxDB、Prometheus、OpenTSDB、Elasticsearch 等作为数据源,比 Prometheus 自带的图表展示功能强大太多,更加灵活,有丰富的插件,功能更加强大。

部署

注意点:

  • 使用最新版本的镜像 https://github.com/grafana/grafana
  • 通过环境变量设置管理员账户密码
    • GF_SECURITY_ADMIN_USER
    • GF_SECURITY_ADMIN_PASSWORD
  • 通过设置securityContext的方式让grafana进程使用root启动
  • 数据挂载到本地
  • 配置ingress暴露访问入口

deployment

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: grafana
  5. namespace: monitor
  6. spec:
  7. selector:
  8. matchLabels:
  9. app: grafana
  10. template:
  11. metadata:
  12. labels:
  13. app: grafana
  14. spec:
  15. volumes:
  16. - name: storage
  17. hostPath:
  18. path: /data/grafana/
  19. nodeSelector:
  20. app: prometheus
  21. securityContext:
  22. runAsUser: 0
  23. containers:
  24. - name: grafana
  25. image: grafana/grafana:7.1.1
  26. imagePullPolicy: IfNotPresent
  27. ports:
  28. - containerPort: 3000
  29. name: grafana
  30. env:
  31. - name: GF_SECURITY_ADMIN_USER
  32. value: admin
  33. - name: GF_SECURITY_ADMIN_PASSWORD
  34. value: admin
  35. readinessProbe:
  36. failureThreshold: 10
  37. httpGet:
  38. path: /api/health
  39. port: 3000
  40. scheme: HTTP
  41. initialDelaySeconds: 60
  42. periodSeconds: 10
  43. successThreshold: 1
  44. timeoutSeconds: 30
  45. livenessProbe:
  46. failureThreshold: 3
  47. httpGet:
  48. path: /api/health
  49. port: 3000
  50. scheme: HTTP
  51. periodSeconds: 10
  52. successThreshold: 1
  53. timeoutSeconds: 1
  54. resources:
  55. limits:
  56. cpu: 150m
  57. memory: 512Mi
  58. requests:
  59. cpu: 150m
  60. memory: 512Mi
  61. volumeMounts:
  62. - mountPath: /var/lib/grafana
  63. name: storage

service

  1. kind: Service
  2. metadata:
  3. name: grafana
  4. namespace: monitor
  5. spec:
  6. type: ClusterIP
  7. ports:
  8. - port: 3000
  9. selector:
  10. app: grafana

Ingress

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: grafana
  5. namespace: monitor
  6. spec:
  7. rules:
  8. - host: grafana.luffy.com
  9. http:
  10. paths:
  11. - path: /
  12. backend:
  13. serviceName: grafana
  14. servicePort: 3000

配置数据源

URL:http://prometheus:9090

如何丰富Grafana监控面板:
导入dashboard
安装相应的插件
自定义监控面板

导入Dashboard的配置

dashboard: https://grafana.com/grafana/dashboards
Node Exporter https://grafana.com/grafana/dashboards/8919
Prometheus: https://grafana.com/grafana/dashboards/8588

DevOpsProdigy KubeGraf插件的使用

除了直接导入Dashboard,我们还可以通过安装插件的方式获得,Configuration -> Plugins可以查看已安装的插件,通过 官方插件列表 我们可以获取更多可用插件。

Kubernetes相关的插件:
grafana-kubernetes-app
devopsprodigy-kubegraf-app

DevOpsProdigy KubeGraf 是一个非常优秀的 Grafana Kubernetes 插件,是 Grafana 官方的 Kubernetes 插件的升级版本,该插件可以用来可视化和分析 Kubernetes 集群的性能,通过各种图形直观的展示了 Kubernetes 集群的主要服务的指标和特征,还可以用于检查应用程序的生命周期和错误日志。

  1. # 进入grafana容器内部执行安装
  2. $ kubectl -n monitor exec -ti grafana-594f447d6c-jmjsw bash
  3. bash-5.0# grafana-cli plugins install devopsprodigy-kubegraf-app 1.4.1
  4. installing devopsprodigy-kubegraf-app @ 1.4.1
  5. from: https://grafana.com/api/plugins/devopsprodigy-kubegraf-app/versions/1.4.1/download
  6. into: /var/lib/grafana/plugins
  7. Installed devopsprodigy-kubegraf-app successfully
  8. Restart grafana after installing plugins . <service grafana-server restart>
  9. bash-5.0# grafana-cli plugins install grafana-piechart-panel
  10. installing grafana-piechart-panel @ 1.5.0
  11. from: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.5.0/download
  12. into: /var/lib/grafana/plugins
  13. Installed grafana-piechart-panel successfully
  14. Restart grafana after installing plugins . <service grafana-server restart>
  15. # 也可以下载离线包进行安装
  16. # 重建pod生效
  17. $ kubectl -n monitor delete po grafana-594f447d6c-jmjsw

登录grafana界面,Configuration -> Plugins 中找到安装的插件,点击插件进入插件详情页面,点击 [Enable]按钮启用插件,点击 Set up your first k8s-cluster 创建一个新的 Kubernetes 集群:

  • Name:luffy-k8s
  • URL:https://kubernetes.default:443
  • Access:使用默认的Server(default)
  • Skip TLS Verify:勾选,跳过证书合法性校验
  • Auth:勾选TLS Client Auth以及With CA Cert,勾选后会下面有三块证书内容需要填写,内容均来自~/.kube/config文件,需要对文件中的内容做一次base64 解码

    • CA Cert:使用config文件中的certificate-authority-data对应的内容
    • Client Cert:使用config文件中的client-certificate-data对应的内容
    • Client Key:使用config文件中的client-key-data对应的内容

      自定义监控面板

      通用的监控需求基本上都可以使用第三方的Dashboard来解决,对于业务应用自己实现的指标的监控面板,则需要我们手动进行创建。
      调试Panel:直接输入Metrics,查询数据。
      如,输入node_load1来查看集群节点最近1分钟的平均负载,直接保存即可生成一个panel
      如何根据字段过滤,实现联动效果?
      比如想实现根据集群节点名称进行过滤,可以通过如下方式:
  • 设置 -> Variables -> Add Variable,添加一个变量node,

    • Name:node
    • Label:选择节点
    • Data Source:Prometheus
    • Query:kube_node_info,可以在页面下方的Preview of values查看到当前变量的可选值
    • Regex:/.node=\”(.+?)\”./
    • Refresh:On Dashboard Load
    • Multi-value:true
    • Include All Options:true

image.png
image.png
image.png
image.png
修改Metrics,$namespace和变量名字保持一致,意思为自动读取当前设置的节点的名字
再添加一个面板,使用如下的表达式:
container_memory_rss{namespace=$namespace,pod=$pod}
image.png