prometheus监控kubernetes集群应用(traefik)

Prometheus的数据指标是通过一个公开的 HTTP(S) 数据接口获取到的,我们不需要单独安装监控的 agent,只需要暴露一个 metrics 接口,Prometheus 就会定期去拉取数据

对于一些普通的 HTTP 服务,我们完全可以直接重用这个服务,添加一个/metrics接口暴露给 Prometheus

现在很多服务从一开始就内置了一个/metrics接口,比如 Kubernetes 的各个组件、istio 服务网格都直接提供了数据指标接口。

有一些服务即使没有原生集成该接口,也完全可以使用一些 exporter 来获取到指标数据,比如 mysqld_exporter、node_exporter,这些 exporter 就有点类似于传统监控服务中的 agent,作为服务存在,用来收集目标服务的指标数据然后直接暴露给 Prometheus。

prometheus监控traefik:
Traefik 本身内置了一个/metrics的接口,但是需要我们在参数中配置开启:
在traefik.toml 新增

[metrics]
  [metrics.prometheus]
    entryPoint = "traefik"
    buckets = [0.1, 0.3, 1.2, 5.0]

然后更新 ConfigMap 和 Pod 资源对象即可,Traefik Pod 运行后,我们可以看到我们的服务 IP:

更新configmap:(kubectl replace)

kubectl create configmap traefik-conf --from-file=traefik.toml  -o yaml --dry-run |kubectl replace -f -

注意:如果还是出不来,直接删掉之前的configmap 和pod !!

[root@k8s-master traefik]# kubectl get svc -A|grep traefik
kube-system   traefik-ingress-service   NodePort    10.1.19.60     <none>        80:32724/TCP,8080:30731/TCP   6m44s

然后我们可以使用curl检查是否开启了 Prometheus 指标数据接口,或者通过 NodePort 访问也可以:

[root@k8s-master traefik]# curl 10.1.19.60:8080/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.6692e-05
go_gc_duration_seconds{quantile="0.25"} 5.8474e-05
go_gc_duration_seconds{quantile="0.5"} 7.9383e-05
go_gc_duration_seconds{quantile="0.75"} 0.000160204
go_gc_duration_seconds{quantile="1"} 0.001010786
go_gc_duration_seconds_sum 0.00266626
go_gc_duration_seconds_count 11

从这里可以看到 Traefik 的监控数据接口已经开启成功了,然后我们就可以将这个/metrics接口配置到prometheus.yml中去了,直接加到默认的prometheus这个 job 下面:(prome-cm.yaml)

[root@k8s-master src]# vim prometheus-cm.yaml 

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-ops
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
      scrape_timeout: 15s
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
      - targets: ['localhost:9090']
    - job_name: "traefik"
      static_configs:
      - targets: ['traefik-ingress-service.kube-system.svc.cluster.local:8080']

由于我们这里 Traefik 对应的 servicename 是traefik-ingress-service,并且在 kube-system 这个 namespace 下面,所以我们这里的targets的路径配置则需要使用FQDN的形式:traefik-ingress-service.kube-system.svc.cluster.local,当然如果你的 Traefik 和 Prometheus 都部署在同一个命名空间的话,则直接填 servicename:serviceport即可。然后我们重新更新这个 ConfigMap 资源对象:

$ kubectl delete -f prome-cm.yaml
configmap "prometheus-config" deleted
$ kubectl create -f prome-cm.yaml
configmap "prometheus-config" created

现在 Prometheus 的配置文件内容已经更改了,隔一会儿被挂载到 Pod 中的 prometheus.yml 文件也会更新,由于我们之前的 Prometheus 启动参数中添加了–web.enable-lifecycle参数,所以现在我们只需要执行一个 reload 命令即可让配置生效:

[root@k8s-master src]# kubectl get svc -n kube-ops
NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
prometheus   NodePort   10.1.192.190   <none>        9090:30672/TCP   208d
[root@k8s-master src]# curl -X POST "http://10.1.192.190:9090/-/reload"

由于 ConfigMap 通过 Volume 的形式挂载到 Pod 中去的热更新需要一定的间隔时间才会生效,所以需要稍微等一小会儿。

reload 这个 url 是一个 POST 请求,所以这里我们通过 service 的 CLUSTER-IP:PORT 就可以访问到这个重载的接口,这个时候我们再去看 Prometheus 的 Dashboard 中查看采集的目标数据:
prometheus监控kubernetes集群应用(traefik)_第1张图片

你可能感兴趣的:(prometheus)