乐趣区

关于云计算:在-Kubernetes-中实现微服务应用监控

张坚,科大讯飞开发工程师,云原生爱好者。

本篇文章咱们基于 Prometheus 和 Grafana 实现微服务利用监控。

KubeSphere 平台自身提供了监控性能,包含节点状态、集群资源使用率、Etcd、API Server 等监控,不过短少了利用级别的监控。

引入依赖包

在利用中引入监控所须要的 jar 包,蕴含 Prometheus 和 Actuator

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-actuator</artifactId>  
</dependency>  

<dependency>
    <groupId>io.micrometer</groupId>  
    <artifactId>micrometer-registry-prometheus</artifactId>  
</dependency>

引入这 2 个包当前就通过 Prometheus 抓取到利用的监控信息。

批改利用配置,裸露监控端口

management:
  endpoints:  
    web:  
      exposure:  
        include: "*"  
      base-path: /
  metrics:  
    tags:  
      application: ${spring.application.name}
  • management.server.port:启用独立的端口来提供监控,未配置的状况下共用利用端口;
  • management.metrics.tags.xxx:在统计信息中增加自定义的标签;
  • management.endpoints.web.exposure.include:用于蕴含咱们要公开的端点列表 , 咱们这里设置为 * 代表所有。
  • management.endpoints.web.base-path:用于设置 Promethues 的监控门路,默认是通过 /actuator/prometheus 拜访,这样配置当前只须要通过 /prometheus 拜访

配置实现后重启服务,通过浏览器拜访 localhost:8080/prometheus 即可抓取到 Prometheus 的监控数据,成果如下:

批改 Service 配置

kind: Service
apiVersion: v1
metadata:
  name: spring-cloud-provider-service
  namespace: cloud-demo
  labels:
    app: spring-cloud-provider-service
    micrometer-prometheus-discovery: 'true'
spec:
  ports:
    - name: metrics
      protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    app: spring-cloud-provider

批改后端服务端的 Service

  • 增加了 micrometer-prometheus-discovery: 'true' 这个标签,不便前面 ServiceMonitor 主动抓取
  • 批改 Service 端口映射的名称未 metrics

创立 ServiceMonitor

装置 KubeSphere 平台时曾经装置好了 promethus-operator, ServiceMonitor 是 prometheus-operator 后创立的一种自定义资源,Prometheus 能够通过 ServiceMonitor 自动识别带有某些 label 的 service,并从这些 Service 获取数据。

当初须要让 Promethus 能够抓取到咱们裸露的利用监控,所以须要创立一个如下的 ServiceMonitor。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: micrometer-demo
  namespace: cloud-demo
spec:
  endpoints:
    - interval: 30s
      path: /prometheus
      port: metrics
  namespaceSelector:
      matchNames:
      - cloud-demo
    # any: true
  selector:
    matchLabels:
      micrometer-prometheus-discovery: 'true'

这段 YAML 文件的意思是抓取 namespace 为 cloud-demo,并设置了 micrometer-prometheus-discovery: 'true' 的 labels 的所有 Service,抓取的端口为 metrics,抓取门路为 /prometheus

具体阐明一下各字段的意义:

  • metadata 下的 namenamespace 将指定 Service Monitor 所需的一些要害元信息。
  • specendpoints 为服务端点,代表 Prometheus 所需的采集 Metrics 的地址。endpoints 为一个数组,同时能够创立多个 endpoints。每个 endpoints 蕴含三个字段,每个字段的含意如下:

    • interval:指定 Prometheus 对以后 endpoints 采集的周期。单位为秒,在本次示例中设定为 30s
    • path:指定 Prometheus 的采集门路。设置为 /prometheus,这个跟利用中裸露的监听端口保持一致。
    • port:指定采集数据须要通过的端口,设置为 /metrics 设置的端口为 步骤三 创立 Service 时端口所设置的 name
  • specnamespaceSelector 为须要发现的 Service 的范畴。namespaceSelector 蕴含两个互斥字段,字段的含意如下:

    • any:有且仅有一个值 true,当该字段被设置时,将监听所有合乎 Selector 过滤条件的 Service 的变动。
    • matchNames:数组值,指定须要监听的 namespace 的范畴。例如,只想监听 defaultcloud-demo 两个命名空间中的 Service,那么 matchNames 设置如下:
    namespaceSelector:
      matchNames:
      - default
      - cloud-demo
  • specselector 用于抉择 Service。
    在本次示例所应用的 Service 有 micrometer-prometheus-discovery: 'true' Label,所以 selector 设置如下:

    selector:
      matchLabels:
        micrometer-prometheus-discovery: 'true'

能够通过 kubectl apply -f micrometer-demo.yml 将其部署到集群中。

执行胜利后能够在集群的 CRD 上面搜寻 ServiceMonitor 并关上能够找到咱们部署的 ServiceMonitor 配置。如图所示:

创立自定义监控

拜访 集群 -> 监控告警 -> 自定义监控进入,如图所示:

咱们点击创立 能够看到 KubeSphere 曾经集成了局部监控面板,这里咱们抉择 Grafana。

在下一步后零碎会让咱们上传 JSON 模版,咱们能够通过 Grafana 官网下载一些通用的模版配置,这里咱们应用的是 Spring Boot 2.1 Statistics)。在右侧能够下载 JSON 文件。

导入 JSON 后咱们就能够看到相干监控指标了。

应用这种形式有个最大问题就是多个利用无奈切换,像咱们之前部署了 3 个利用在一张图中显示就很乱,所以须要通过内部 Grafana 展现监控数据。

应用内部 Grafana 集成

为了不便,咱们间接应用 KubeSphere 提供的利用商店性能装置内部 Grafana。

  1. 增加利用仓库

进入企业空间 -> 利用治理 -> 利用仓库,点击增加,退出 bitnami 利用仓库。

  1. 装置 Grafana
  • 咱们顺次关上企业空间 - 我的项目 - 点击要装置到的具体我的项目 - 点击利用 - 点击右侧的创立按钮;
  • 弹出对话框中点击从利用模版,从利用仓库列表中抉择咱们刚刚增加的 bitnami 的仓库,搜寻 Grafana 点击后装置即可。

装置实现后咱们在服务里给 grafana 的服务开启 NodePort 内部拜访,比方我这里的的拜访地址为:http://172.30.10.73:28328/

  1. 设置 Grafana 数据源
  • 咱们应用管理员账号 admin 登录进 Grafana,默认明码能够在我的项目的窃密字典中的 cloud-grafana-admin 中找到;
  • 登录后咱们点击左侧的小齿轮 -datasource 在关上页面中抉择 Add data source 而后抉择 Prometheus 在 URL 中填入咱们下面说到的 Prometheus 的 URL 地址。如图所示:

Prometheus 能够通过如下形式找到 kubectl get svc -n kubesphere-monitoring-system

  • 填写后拖到最上面,点击 save&test。
  1. 导入 Dashbord
  • 咱们点击页面左侧➕-import;
  • 输出咱们从 grafana 官网 取得的对应的模版的 id 点击 load(我这里应用的是 Spring Boot 2.1 Statistics | Grafana Labs);
  • 在下一步中抉择 Prometheus 为咱们配置的数据源 点击 import 即可。

之后咱们就能够看到配置的利用监控了。

多个利用之间能够通过左上角进行切换,合乎预期。

附录

  • grafana 官网
  • Spring Boot 2.1 Statistics
  • ServiceMonitor

    本文由博客一文多发平台 OpenWrite 公布!

退出移动版