目录

文章目录

  • 目录
  • 实验环境
  • 实验软件
  • 前置条件
  • 1、什么是Grafna
  • 2、安装
    • 1.查看grafna镜像介绍
    • 2.将grafna容器部署到k8s
    • 3.添加数据源
  • 3、导入 Dashboard
  • 4、自定义图表
  • 注意
  • 关于我
  • 最后
  • 最后

实验环境

k8s:v1.22.2(1 master,2 node)
containerd: v1.5.5
prometneus: docker.io/prom/prometheus:v2.34.0
grafana/grafana:8.4.6

实验软件

链接:https://pan.baidu.com/s/1Gdvi4Xu1yQqVG6jeuprrRg?pwd=9cgh
提取码:9cgh
2020.5.4-grafana-code

前置条件

  • 具有k8s环境;
  • 已经把prometheus应用部署到k8s环境里,且prometheus数据源可以提供k8s集群啦一些数据了。(关于如何采集数据,请看我的其他系列文章)

https://blog.csdn.net/weixin_39246554/article/details/124545640?spm=1001.2014.3001.5501

1、什么是Grafna

前面我们使用 Prometheus 采集了 Kubernetes 集群中的一些监控数据指标,我们也尝试使用 promQL 语句查询出了一些数据,并且在 Prometheus 的 Dashboard 中进行了展示,但是明显可以感觉到 Prometheus 的图表功能相对较弱。所以一般情况下我们会用一个第三方的工具来展示这些数据,今天我们要和大家使用到的就是 Grafana。

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

2、安装

1.查看grafna镜像介绍

同样的我们将 grafana 安装到 Kubernetes 集群中,第一步去查看 grafana 的 docker 镜像的介绍,我们可以在 dockerhub 上去搜索,也可以在官网去查看相关资料,镜像地址如下:https://hub.docker.com/r/grafana/grafana/,我们可以看到介绍中运行 grafana 容器的命令非常简单:

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana

⚠️ 但是还有一个需要注意的是 Changelog 中v5.1.0版本的更新介绍:

Major restructuring of the container
Usage of chown removed
File permissions incompatibility with previous versions
user id changed from 104 to 472
group id changed from 107 to 472
Runs as the grafana user by default (instead of root)
All default volumes removed

特别需要注意第3条,userid 和 groupid 都有所变化,所以我们在运行的容器的时候需要注意这个变化。

2.将grafna容器部署到k8s

  • 现在我们将这个容器转化成 Kubernetes 中的 Pod:

本次测试目录如下:

[root@master1 ~]#mkdir grafana
[root@master1 ~]#cd grafana/
  • 提前在node1上配置grafana数据目录(后续Grafana数据持久化需要用!)
[root@master1 grafana]#ssh node1
Last login: Sat Apr 30 12:56:43 2022 from master1
[root@node1 ~]#mkdir -p /data/k8s/grafana
  • 创建grafana-deployment.yaml

[root@master1 grafana]#vim grafana-deployment.yaml

# grafana-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: grafananamespace: monitor
spec:selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:volumes:- name: storagepersistentVolumeClaim:claimName: grafana-pvcsecurityContext: #注意:这里以root身份运行!runAsUser: 0containers:- name: grafanaimage: grafana/grafana:8.4.6imagePullPolicy: IfNotPresentports:- containerPort: 3000name: grafanaenv:- name: GF_SECURITY_ADMIN_USERvalue: admin- name: GF_SECURITY_ADMIN_PASSWORD #这里最好用secret引用过来!value: admin321readinessProbe:failureThreshold: 10httpGet:path: /api/healthport: 3000scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 30livenessProbe:failureThreshold: 3httpGet:path: /api/healthport: 3000scheme: HTTPperiodSeconds: 10successThreshold: 1timeoutSeconds: 1resources:limits:cpu: 150mmemory: 512Mirequests:cpu: 150mmemory: 512MivolumeMounts:- mountPath: /var/lib/grafana #grafana的数据目录:数据库及插件等!name: storage
---
apiVersion: v1
kind: Service
metadata:name: grafananamespace: monitor
spec:type: NodePortports:- port: 3000selector:app: grafana
  • 创建grafana-pvc.yaml:

[root@master1 grafana]#vim grafana-pvc.yaml

#grafana-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: grafana-locallabels:app: grafana
spec:accessModes:- ReadWriteOncecapacity:storage: 2GistorageClassName: local-storagelocal:path: /data/k8s/grafana #一定要先在宿主机node1上提前创建这个目录!!!nodeAffinity: #pv也是可以配置节点亲和性的哦!!!required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1 #这里是自己的node1节点persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: grafana-pvcnamespace: monitor
spec:selector:matchLabels:app: grafanaaccessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: local-storage

我们使用了最新的镜像 grafana/grafana:8.4.6,然后添加了健康检查、资源声明。

另外两个比较重要的环境变量GF_SECURITY_ADMIN_USERGF_SECURITY_ADMIN_PASSWORD,用来配置 grafana 的管理员用户和密码的。由于 grafana 将 dashboard、插件这些数据保存在 /var/lib/grafana 这个目录下面的,所以我们这里如果需要做数据持久化的话,就需要针对这个目录进行 volume 挂载声明。

由于上面我们刚刚提到的 Changelog 中 grafana 的 userid 和 groupid 有所变化,所以我们这里增加一个 securityContext 的声明来进行声明使用 root 用户运行。

最后,我们需要对外暴露 grafana 这个服务,所以我们需要一个对应的 Service 对象,当然用 NodePort 或者再建立一个 ingress 对象都是可行的。

  • 现在我们直接创建上面的这些资源对象:
(1)先创建grafana-pvc.yaml
[root@master1 grafana]#kubectl apply -f grafana-pvc.yaml
persistentvolume/grafana-local created
persistentvolumeclaim/grafana-pvc created
[root@master1 grafana]#kubectl get pv grafana-local
NAME            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS    REASON   AGE
grafana-local   2Gi        RWO            Retain           Bound    monitor/grafana-pvc   local-storage            16s
[root@master1 grafana]#kubectl get pvc -nmonitor grafana-pvc
NAME          STATUS   VOLUME          CAPACITY   ACCESS MODES   STORAGECLASS    AGE
grafana-pvc   Bound    grafana-local   2Gi        RWO            local-storage   40s(2)再创建grafana-deployment.yaml
[root@master1 grafana]#kubectl apply -f grafana-deployment.yaml
deployment.apps/grafana created
service/grafana created
#创建完成后,我们可以查看 grafana 对应的 Pod 是否正常:
[root@master1 grafana]#kubectl get po -l app=grafana -nmonitor -owide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
grafana-86d545fc5-42jhd   1/1     Running   0          99s   10.244.1.90   node1   <none>           <none>

看到上面的日志信息就证明我们的 grafana 的 Pod 已经正常启动起来了。

这个时候我们可以查看 Service 对象:

[root@master1 grafana]#kubectl get svc -nmonitor
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
grafana      NodePort    10.100.237.2    <none>        3000:30338/TCP      3m22s
prometheus   NodePort    10.101.131.61   <none>        9090:32700/TCP      4d9h
redis        ClusterIP   10.103.59.18    <none>        6379/TCP,9121/TCP   24h
  • 验证

现在我们就可以在浏览器中使用 http://<任意节点IP:30338> 来访问 grafana 这个服务了:

由于上面我们配置了管理员的,所以第一次打开的时候会跳转到登录界面,然后就可以用上面我们配置的两个环境变量的值来进行登录了,登录完成后就可以进入到下面 Grafana 的首页。

3.添加数据源

然后点击Add data source进入添加数据源界面。我们这个地方配置的数据源是 Prometheus,我们这里 Prometheus 和 Grafana 都处于 monitor这同一个 namespace 下面,所以我们这里的数据源地址:http://prometheus:9090(因为在同一个 namespace 下面所以直接用 Service 名也可以),然后其他的配置信息就根据实际情况了,比如 Auth 认证,我们这里没有,所以跳过即可,点击最下方的 Save & Test 提示成功证明我们的数据源配置正确:

⚠️ 注意:Browser这种方式将被废弃!(如果是Browser的话,URL就需要添加:http://nodeIp:nortPOrt形式了)

Server:服务端,Browser:客户端;

点击Save&test:

查看:

3、导入 Dashboard

为了能够快速对系统进行监控,我们可以直接复用别人的 Grafana Dashboard。在 Grafana 的官方网站上就有很多非常优秀的第三方 Dashboard,我们完全可以直接导入进来即可。比如我们想要对所有的集群节点进行监控,也就是 node-exporter 采集的数据进行展示,这里我们就可以导入 https://grafana.com/grafana/dashboards/8919 这个 Dashboard。

  • 在侧边栏点击 “+”,选择 Import,在 Grafana Dashboard 的文本框中输入 8919 即可导入:

  • 进入导入 Dashboard 的页面,可以编辑名称,选择 Prometheus 的数据源:

保存后即可进入导入的 Dashboard 页面。

  • 由于该 Dashboard 更新比较及时,所以基本上导入进来就可以直接使用了,我们也可以对页面进行一些调整,如果有的图表没有出现对应的图形,则可以编辑根据查询语句去 DEBUG。

k8s之Grafana数据可视化相关推荐

  1. Grafana数据可视化

    公司的主营业务是给企业客户提供短信群发服务,内部有一个强大的运营监控平台.每日短信业务量巨大,监控平台需要使用时序数据库来对发送的海量短信分地理区域.运营商.接收状态等类别进行统计和监控.以前一直在用 ...

  2. 数据可视化组件Grafana详细解读--MacOSX上的安装

    数据可视化演示: PS:您可以在目标服务器上运行数据可视化组件,监控数据服务器,Web服务器,网络文件服务器等等服务器的各种运行状态,DevOps的必不可少的组件. Mac OS X(通过homebr ...

  3. 数据可视化组件Grafana详细解读--RedHat/Fedora/CentOS/Oracle上的安装

    数据可视化演示: PS:您可以在目标服务器上运行数据可视化组件,监控数据服务器,Web服务器,网络文件服务器等等服务器的各种运行状态,DevOps的必不可少的组件. 在基于RPM的Linux的上安装版 ...

  4. 数据可视化组件Grafana详细解读--Debian/Ubuntu上的安装

    数据可视化演示: PS:您可以在目标服务器上运行数据可视化组件,监控数据服务器,Web服务器,网络文件服务器等等服务器的各种运行状态,DevOps的必不可少的组件. 在Debian / Ubuntu上 ...

  5. jmeter利用influxdb和grafana实现数据可视化

    我为什么要使用influxdb和grafana? 在使用分布式的jmeter进行测试时候,我想把实时的性能测试数据展示出来 通过jmeter的监听器,把数据发送给influxdb,然后通过grafan ...

  6. 如何使用Grafana轻松实现OVL数据可视化

    前言 本文以MySQL数据库为例介绍如何通过Grafana来实现OVL数据的可视化,其中有两种方法,一种是通过OVL的REST API来实现数据可视化,另一种是通过访问存储到数据库的数据来实现可视化. ...

  7. k8s prometheus/grafana 监控系统建设

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 prometheus架构 其中 1.pushgateway是用来接收业务推送的数据形成metrics接口. 2.exporter是用来监控组件(三方中 ...

  8. 3.Prometheus + Grafana实现可视化、告警

    3.Prometheus + Grafana实现可视化.告警 3.1.什么是Grafana 3.2.快速入门 3.3.Grafana的下载 3.4.启动grafana 3.5.配置数据源 3.6.配置 ...

  9. prometheus变量_Prometheus 数据可视化

    释放双眼,带上耳机,听听看~! 1. 实验介绍 Prometheus 支持多种数据可视化方式,除了内置的表达式浏览器和控制台模板两种方式,还可使用开源的时序数据可视化工具 Grafana 来展示监控数 ...

最新文章

  1. c primer plus(第五版)读书笔计 第四章(1)
  2. SAP历史库存MB5B的详解
  3. oracle 数字不用,oracle – Plsql将数字(货币)拼写为意大利货币而不用硬编码的翻译编号...
  4. JVM【带着问题去学习 01】什么是JVM+内存结构+堆内存+堆内存参数(逃逸分析)
  5. P1020 [NOIP1999 普及组] 导弹拦截 Dilworth定理 + dp
  6. 计算机科学与因果关系,计算机科学与技术
  7. 图像分割总体介绍——深度AI科普团队
  8. 人工智能这么火,可你真的会用 TensorFlow?
  9. linux内核添加模块,linux中添加内核模块
  10. WLAN加密技术详解
  11. Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
  12. 《Android框架揭秘》——导读
  13. JAVA设计模式-组合模式
  14. NET Reflector 8 使用
  15. MAC软件推荐(Java方向)
  16. mysql 表聚合_Mysql分表之后的聚合统计
  17. 昆仑通态人机界面与单片机通信实战教程一:工程界面的设计
  18. C#之父Anders Hejlsberg演讲解读:编程语言大趋势
  19. 科技引领未来,银联开放平台诚邀你的加入
  20. 微信小程序python解析获取用户手机号_微信小程序获取用户手机号

热门文章

  1. oracle-账户解锁
  2. 零基础学习CSS(2)——通用选择器、元素选择器、类选择器、id选择器
  3. stm32f103开发CAN通讯,相互通讯数据错误
  4. 试用2片74151和必要的门电路实现4变量逻辑函数F(A,B,C,D)=∑m(2,3,4,5,6,9,10,12)(二〇二〇年山东大学数字电路906综合题第2题)(全网第一手资料)
  5. node+vue前后端分离实现登录时使用图片验证码
  6. android:ellipsize=end 不起作用,android:ellipsize=end 失效或者 相关的Bug
  7. Mediapipe手势识别
  8. 提示您与该网站的连接不是私密连接怎么办?
  9. 西方人很难理解,为什么中国普通人对华为抱有那么大的好感?
  10. sql中的几种删除操作