Grafana是一个跨平台的开源的度量分析和可视化工具。支持多种数据源,比如OpenTSDB,Prometheus,ElasticResearch,Cloudwatch等。
Grafana安装
通过yaml配置grafana的pod和service,grafana工作在kube-system的命名空间。
[root@master prometheus]# cat grafana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: monitoring-grafananamespace: kube-system
spec:replicas: 1selector:matchLabels:task: monitoringk8s-app: grafanatemplate:metadata:labels:task: monitoringk8s-app: grafanaspec:containers:- name: grafanaimage: k8s.gcr.io/heapster-grafana-amd64:v5.0.4imagePullPolicy: IfNotPresentports:- containerPort: 3000protocol: TCPvolumeMounts:- mountPath: /tec/ssl/certsname: ca-certificatesreadOnly: true- mountPath: /varname: grafana-storageenv:- name: INFLUXDB_HOSTvalue: monitoring-influxdb- name: GF_SERVER_HTTP_PORTvalue: "3000"- name: GF_AUTH_BASIC_ENABLEDvalue: "false"- name: GF_AUTH_ANONYMOUS_ENABLEDvalue: "true"- name: GF_AUTH_ANONYMOUS_ORG_ROLEvalue: Admin- name: GF_SERVER_ROOT_URLvalue: /volumes:- name: ca-certificateshostPath:path: /etc/ssl/certs- name: grafana-storageemptyDir: {}---
apiVersion: v1
kind: Service
metadata:labels:kubernetes.io/cluster-service: 'true'kubernetes.io/name: monitoring-grafananame: monitoring-grafana namespace: kube-system
spec:ports: - port: 80targetPort: 3000selector:k8s-app: grafanatype: NodePort
因为这个service是NodePort类型,查看集群分配给它的端口为多少
[root@master ~]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 19d
monitoring-grafana NodePort 10.110.10.133 <none> 80:31519/TCP 40m
可以在grafana的pod里面进行dns的测试,确认可以连接到Prometheus服务。
[root@master prometheus]# kubectl exec -it monitoring-grafana-5bb6bb7867-9j2xb -n kube-system -- /bin/sh
/ # nslookup kubernetes.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1/ # nslookup prometheus.monitor-sa.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: prometheus.monitor-sa.svc.cluster.local
Address: 10.101.118.2/ # wget -S --spider http://prometheus.monitor-sa.svc.cluster.local:9090
Connecting to prometheus.monitor-sa.svc.cluster.local:9090 (10.101.118.2:9090)HTTP/1.1 302 FoundContent-Type: text/html; charset=utf-8Location: /graphHTTP/1.1 200 OKDate: Thu, 04 Jul 2024 12:34:49 GMTContent-Type: text/html; charset=utf-8Connection: closeTransfer-Encoding: chunked
因为Grafana容器是基于一个精简的Linux系统(如BusyBox),并且没有预装apk
或其他常见的包管理工具。 所以使用wget来访问。--spider
:让wget
工作在“蜘蛛模式”(spider mode)。在这种模式下,wget
会像搜索引擎的爬虫一样行动,它会检查URL链接是否可达,但不下载页面内容。这对于检查网页链接是否有效或服务器是否响应而不希望下载实际内容非常有用。
Grafana界面
访问物理机ip+端口的网址:然后点击新建数据源,填入Prometheus的url。因为Prometheus和grafana都以pod的方式运行在集群中,所以直接写Kubernetes服务的DNS名称就可以识别到。DNS的名称格式为:服务名(Prometheus)+ 命名空间(monitor-sa)+svc+cluster.local(可以省略),而服务在集群内暴露的端口是9090,所以注明就可以。
配置好以后点击下面的test,发现成功配置数据源。
导入json模板
点击import进行json文件的导入,如果要查看node的情况,就导入一个node_exporter.json的文件。该文件我绑定在资源中。
导入json后选择数据源为Prometheus。导入成功后效果如下:
同理也可以导入显示容器数据的json文件,效果如下。具体的模板选择和下载在网站:Grafana dashboards | Grafana Labs