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-grafana
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
task: monitoring
k8s-app: grafana
template:
metadata:
labels:
task: monitoring
k8s-app: grafana
spec:
containers:
- name: grafana
image: k8s.gcr.io/heapster-grafana-amd64:v5.0.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
protocol: TCP
volumeMounts:
- mountPath: /tec/ssl/certs
name: ca-certificates
readOnly: true
- mountPath: /var
name: grafana-storage
env:
- name: INFLUXDB_HOST
value: monitoring-influxdb
- name: GF_SERVER_HTTP_PORT
value: "3000"
- name: GF_AUTH_BASIC_ENABLED
value: "false"
- name: GF_AUTH_ANONYMOUS_ENABLED
value: "true"
- name: GF_AUTH_ANONYMOUS_ORG_ROLE
value: Admin
- name: GF_SERVER_ROOT_URL
value: /
volumes:
- name: ca-certificates
hostPath:
path: /etc/ssl/certs
- name: grafana-storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
kubernetes.io/cluster-service: 'true'
kubernetes.io/name: monitoring-grafana
name: monitoring-grafana
namespace: kube-system
spec:
ports:
- port: 80
targetPort: 3000
selector:
k8s-app: grafana
type: 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 Found
Content-Type: text/html; charset=utf-8
Location: /graph
HTTP/1.1 200 OK
Date: Thu, 04 Jul 2024 12:34:49 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Transfer-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