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。

??我们可以看到 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


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、自动化运维等最新前沿运维技术和趋势;

原文地址:https://blog.51cto.com/zgui2000/2362004

时间: 2024-10-13 01:38:04

prometheus监控第二篇之grafana的相关文章

prometheus监控第二篇之告警alertmanager

kubernetes之prometheus监控第二篇-alertmanager监控告警:   在前期的博文中,我已经简单的介绍过了prometheus的安装,以及通过grafana来实施监控.这篇博文,我们更深入的介绍一下prometheus的监控.本篇博文主要分为以下几个知识点: 1. 使用prometheus监控ceph存储: 2. 学习简单的PromQL语言,在grafana里面根据业务自定义dashboard; 3. alertmanager自定义告警的配置:讲述邮件告警和企业微信告警:

Grafana+prometheus监控体系实践

一.前言 1.1.grafana介绍 Grafana是一个开源指标分析和可视化套件,常用于可视化基础设施的性能数据和应用程序分析的时间序列数据.也可以应用于其他领域,包括工业传感器,家庭自动化,天气和过程控制.但请注意,我们使用Grafana最关心的是如何把数据进行聚合后进行展示.Grafana支持多种不同的时序数据库数据源,Grafana对每种数据源提供不同的查询方法,而且能很好的支持每种数据源的特性.它支持下面几种数据源:Graphite.Elasticsearch.CloudWatch.I

Prometheus监控系列最佳实践

Prometheus是继kubernetes第二个从CNCF中毕业的项目,个人也是非常的喜欢这款通过数据指标发现和预测告警的开源监控平台,官方的话就不多说了,根据官网的介绍有以下功能,但是有些简短的概括了你也不一定知道,所以加了一些个人的白话官方截图 Prometheus之白话文一段 实现高纬度的数据模型 时间序列数据通过 metric 名和键值对来区分,这里你可以区分多(隔离)环境的监控指标. 所有的 metrics 都可以设置任意的多维标签,可以自定义添加多个,比如这个服务的监控属于哪个团队

使用Prometheus监控SpringBoot应用

通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用.(本文以SpringBoot 2.1.9.RELEASE 作为监控目标) 编码 添加依赖 使用Prometheus监控SpringBoot应用只需要在pom文件添加如下两个依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId

学习KnockOut第二篇之Counter

欲看此篇,必先----------------------------------------------------------------------------------看上篇. 先说好了,只是学习笔记. 第一步.先写一个简单的text绑定吧.先写VM,再写激活代码,最后写V,那样V才会有智能提示.此处不多讲,上文中有写到过. 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml">

kubernetes之CI/CD工具jenkins第二篇,helm的使用

1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用: 1. 概述: ?? 在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用.主要是jenkins slave pod自动创建和销毁,当有jenkins job任务执行的时候,就会自动创建一个jenkins slave pod.在本篇博文中,我们将介绍jenkins生成slave pod的另外一种方法,就是在pipeline脚本里面定义slave pod的镜像等,同时将Dockerfile.Je

SpringBoot使用prometheus监控

1.关于PrometheusPrometheus是一个根据应用的metrics来进行监控的开源工具.相信很多工程都在使用它来进行监控,有关详细介绍可以查看官网:https://prometheus.io/docs/introduction/overview/.2.有关GrafanaGrafana是一个开源监控利器,如图所示. 从图中就可以看出来,使用Grafana监控很高大上,提供了很多可视化的图标.官网地址:https://grafana.com/3.SpringBoot使用Prometheu

基于k8s集群部署prometheus监控etcd

目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 本文中涉及到的环境中.prometheus监控和grafana基本环境已部署好.etcd内置了metrics接口供收集数据,在etcd集群任意一台节点上可通过ip:2379/metrics检查是否能正常收集数据. curl -L http://localhost:237

Prometheus 监控K8S Node监控

Prometheus 监控K8S Node监控 Prometheus社区提供的NodeExporter项目可以对主机的关键度量指标进行监控,通过Kubernetes的DeamonSet可以在各个主机节点上部署有且仅有一个NodeExporter实例,实现对主机性能指标数据的监控,但由于容器隔离原因,使用容器NodeExporter并不能正确获取到宿主机磁盘信息,故此本课程将NodeExporter部署到宿主机. node_exporter:用于*NIX系统监控,使用Go语言编写的收集器 使用文档