prometheus监控第二篇之grafana

prometheus监控第二篇

  1. 使用prometheus监控kube-state-metrics

  上篇博文我们已经成功安装了prometheus。并且使用prometheus成功监控了redis应用.同时使用prometheus监控了kubernetes-service-endpoints、kubernetes-nodes、kubernetes-kubelet、kubernetes-cadvisor、kubernetes-apiserveres等。现在开始使用prometheus监控kube-state-metrics
  以前我们配置了自动发现 Service(Pod也是一样的)的监控,但是这些监控数据都是应用内部的监控,需要应用本身提供一个/metrics接口,或者对应的 exporter 来暴露对应的指标数据,但是在 Kubernetes 集群上 Pod、DaemonSet、Deployment、Job、CronJob 等各种资源对象的状态也需要监控,这也反映了使用这些资源部署的应用的状态。但通过查看前面从集群中拉取的指标(这些指标主要来自 apiserver 和 kubelet 中集成的 cAdvisor),并没有具体的各种资源对象的状态指标。对于 Prometheus 来说,当然是需要引入新的 exporter 来暴露这些指标,Kubernetes 提供了一个kube-state-metrics就是我们需要的。
  kube-state-metrics 已经给出了在 Kubernetes 部署的 manifest 定义文件,我们直接将代码 Clone 到集群中(能用 kubectl 工具操作就行).部署完成kube-state-metrics之后,就可以在prometheus的kubernetes-service-endpoints里面找到。

git clone https://github.com/kubernetes/kube-state-metrics.git
cd kube-state-metrics/kubernetes
kubectl create -f ./
#由于部署kube-state-metrics需要一个边角容器  k8s.gcr.io/addon-resizer:1.8.3 但是这个镜像在国内是下载不了的,解决办法是:
docker pull anjia0532/google-containers.addon-resizer:1.8.3
docker tag anjia0532/google-containers.addon-resizer:1.8.3 k8s.gcr.io/addon-resizer:1.8.3
国内下载gcr.io镜像的参考文档:http://www.cnblogs.com/xiaoqi/p/gcr-io-and-k8s-gcr-io.html 

  2. 使用grafana展示prometheus监控数据

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

# vim grafana.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: grafana
  namespace: kube-ops
  labels:
    app: grafana
spec:
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:5.3.4
        imagePullPolicy: IfNotPresent
        ports:
        - name: grafana
          containerPort: 3000
        env:
        - name: GF_SECURITY_ADMIN_USER          
          value: admin        
        - name: GF_SECURITY_ADMIN_PASSWORD          
          value: admin321
        readinessProbe:
          failureThreshold: 10
          httpGet:
            path: /api/health            
            port: 3000
            scheme: HTTP          
          initialDelaySeconds: 60
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 30
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /api/health            
            port: 3000
            scheme: HTTP          
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources:
          limits:
            cpu: 100m            
            memory: 256Mi          
          requests:
            cpu: 100m            
            memory: 256Mi
        volumeMounts:
        - name: storage
          mountPath: /var/lib/grafana
          subPath: grafana
      securityContext:
        fsGroup: 472
        runAsUser: 472
      volumes:
      - name: storage        
        persistentVolumeClaim:
          claimName: grafana

# vim grafana-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: grafana
spec:
  capacity:
    storage: 1Gi
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 10.83.32.146    
    path: /data/grafana
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana  
  namespace: kube-ops
spec:
  accessModes:
  - ReadWriteOnce  
  resources:
    requests:
      storage: 1Gi

# vim grafana-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: grafana  
  namespace: kube-ops 
  labels:
    app: grafana
spec:
  type: NodePort  
  ports:
  - port: 3000
  selector:
    app: grafana

  现在开始登陆grafana,使用的用户名和密码是部署文件中的变量,登陆的IP地址和端口需要查看svc和pod的位置。从中可以看出pod的是在kubenode1这台机器上面运行的,NodePort端口是31748

[root@kubemaster grafana2]# kubectl get svc -n kube-ops 
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
grafana                   NodePort    10.106.147.115   <none>        3000:31748/TCP                57m
myapp                     ClusterIP   10.98.239.156    <none>        80/TCP                        5d6h
prometheus                NodePort    10.98.6.97       <none>        9090:31867/TCP                66m
redis                     ClusterIP   10.100.225.179   <none>        6379/TCP,9121/TCP             7d1h
tomcat                    ClusterIP   10.107.238.16    <none>        8080/TCP,8009/TCP             5d3h
traefik-ingress-service   NodePort    10.111.9.88      <none>        80:30582/TCP,8080:30048/TCP   5d6h
[root@kubemaster grafana2]# kubectl get pods -n kube-ops -o wide
NAME                                          READY   STATUS    RESTARTS   AGE    IP             NODE         NOMINATED NODE   READINESS GATES
grafana-57f7d594d9-8rgbf                      1/1     Running   1          57m    10.244.1.45    kubenode1    <none>           <none>
myapp-deploy-6b56d98b6b-65jc9                 1/1     Running   0          5d6h   10.244.0.18    kubemaster   <none>           <none>
myapp-deploy-6b56d98b6b-r92p8                 1/1     Running   0          5d6h   10.244.2.45    kubenode2    <none>           <none>
myapp-deploy-6b56d98b6b-rrb5b                 1/1     Running   0          5d6h   10.244.1.21    kubenode1    <none>           <none>
node-exporter-cwqqv                           1/1     Running   0          77m    10.83.32.146   kubemaster   <none>           <none>
node-exporter-gl49b                           1/1     Running   0          77m    10.83.32.138   kubenode1    <none>           <none>
node-exporter-qcw54                           1/1     Running   0          77m    10.83.32.133   kubenode2    <none>           <none>
prometheus-848d44c7bc-bcz96                   1/1     Running   0          71m    10.244.1.43    kubenode1    <none>           <none>
redis-58c6c94968-qcq6p                        2/2     Running   2          7d1h   10.244.0.11    kubemaster   <none>           <none>
tomcat-deploy-5fd9ffbdc7-292hl                1/1     Running   0          5d3h   10.244.2.46    kubenode2    <none>           <none>
tomcat-deploy-5fd9ffbdc7-6pwxs                1/1     Running   0          5d3h   10.244.0.19    kubemaster   <none>           <none>
tomcat-deploy-5fd9ffbdc7-cdnj8                1/1     Running   0          5d3h   10.244.1.22    kubenode1    <none>           <none>
traefik-ingress-controller-7899bfbd87-5nrwx   1/1     Running   0          5d1h   10.244.0.20    kubemaster   <none>           <none>
traefik-ingress-controller-7899bfbd87-wsl64   1/1     Running   0          5d1h   10.244.1.23    kubenode1    <none>           <none>
[root@kubemaster grafana2]#
- name: GF_SECURITY_ADMIN_USER          
  value: admin        
- name: GF_SECURITY_ADMIN_PASSWORD          
  value: admin321

  登陆granfa默认的用户名是admin,默认的密码是admin321 登陆grafana之后的第一个步骤就是设置数据源
  我们这个地方配置的数据源是 Prometheus,所以选择这个 Type 即可,给改数据源添加一个 name:gytest,最主要的是下面HTTP区域是配置数据源的访问模式。 访问模式是用来控制如何处理对数据源的请求的:

  • 服务器(Server)访问模式(默认):所有请求都将从浏览器发送到 Grafana 后端的服务器,后者又将请求转发到数据源,通过这种方式可以避免一些跨域问题,其实就是在 Grafana 后端做了一次转发,需要从Grafana 后端服务器访问该 URL。

  • 浏览器(Browser)访问模式:所有请求都将从浏览器直接发送到数据源,但是有可能会有一些跨域的限制,使用此访问模式,需要从浏览器直接访问该 URL。

prometheus监控第二篇之grafana

  我们可以看到 dashboard 页面上出现了很多漂亮的图表,但是看上去数据不正常,这是因为这个 dashboard 里面需要的数据指标名称和我们 Prometheus 里面采集到的数据指标不一致造成的,比如,第一个Cluster memory usage(集群内存使用情况),我们可以点击标题 -> 这就是我们之前在 Prometheus 里面查询的promQL语句,我们可以将上面的查询语句复制到 Prometheus 的 Graph 页面进行查询,其实可以预想到是没有对应的数据的,因为我们用node_exporter采集到的数据指标不是node_memory_MemTotal关键字,而是node_memory_MemTotal_bytes,将上面的promQL语句做相应的更改:
  这个语句的意思就是(整个集群的内存-(整个集群剩余的内存以及Buffer和Cached))/整个集群的内存,简单来说就是总的集群内存使用百分比。将上面 grafana 的promQL语句替换掉,就可以看到图表正常了:同样的,我们可以更改后面的 CPU 和 FileSystem 的使用率:
  导入一个Dashboard
prometheus监控第二篇之grafana
prometheus监控第二篇之grafana
prometheus监控第二篇之grafana

grafana插件安装

  grafana 就有一个专门针对 Kubernetes 集群监控的插件:grafana-kubernetes-app要安装这个插件,需要到 grafana 的 Pod 里面去执行安装命令:安装完成后需要重启 grafana 才会生效,我们这里直接删除 Pod,重建即可,然后回到 grafana 页面中,切换到 plugins 页面可以发现下面多了一个 Kubernetes 的插件,点击进来启用即可,然后点击Next up旁边的链接配置集群

[root@kubemaster ~]# kubectl exec -it -n kube-ops grafana-57f7d594d9-8rgbf -- /bin/bash
grafana@grafana-57f7d594d9-8rgbf:/usr/share/grafana$ grafana-cli plugins install grafana-kubernetes-app
installing grafana-kubernetes-app @ 1.0.1
from url: https://grafana.com/api/plugins/grafana-kubernetes-app/versions/1.0.1/download
into: /var/lib/grafana/plugins

✔ Installed grafana-kubernetes-app successfully 

Restart grafana after installing plugins . <service grafana-server restart>

grafana@grafana-57f7d594d9-8rgbf:/usr/share/grafana$ 

推荐关注我的个人微信公众号 “云时代IT运维”,周期性更新最新的应用运维类技术文档。关注虚拟化和容器技术、CI/CD、自动化运维等最新前沿运维技术和趋势;

prometheus监控第二篇之grafana

转载于:https://blog.51cto.com/zgui2000/2362004

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值