K3S环境下接入Prometheus,grafana,等监控套件

K3S环境下接入Prometheus,grafana,等监控套件

背景

因为常规的监控都是用K8S做的,而K3S上的监控方案少之又少,如果直接用rancher上的prometheus监控,会消耗至少2G的内存,于是我们就自己做了K3S和pg数据库的监控,并且通过我们自己做的监控,可以减少一些不必要的性能开销。主要监控容器资源消耗,宿主机资源消耗,pg数据库资源消耗

这个是资源使用情况,大约会用掉600M内存和100MCPU

user@user:/$ kubectl top pod -n kube-ops
NAME CPU(cores) MEMORY(bytes)
grafana-0 1m 47Mi
kube-state-metrics-594fb7bc84-5mg6g 3m 10Mi
node-exportor-prometheus-node-exporter-sznls 31m 8Mi
node-exportor-prometheus-node-exporter-tx7rm 13m 7Mi
prometheus-0 46m 565Mi
prometheus-postgres-exporter-6c858f47d4-dj9hj 13m 6Mi

prometheus监控组件参考helm chart

https://github.com/prometheus-community/helm-charts/tree/main/charts
我魔改的github连接
https://github.com/lizhenwei/k3s-prometheus


Prometheus的安装

1.创建一个命名空间kube-ops,把监控用的东西都放在这个命名里面。
2.使用我魔改的chart进行安装,默认版本是v2.26.0,默认启用上图提到的

cadvisor,kube_state_metrics,node_exportor,postgres_exporter

 

kubectl create ns kube-ops
helm install -n kube-ops prometheus lizhenwei-prometheus

如果要关闭其中的某个监控项,安装时参考添加变量 –set node_exportor.enable=false,
prometheus的数据会用默认的storageClass生成PVC,如果没有默认的,参考手动设置nfs存储 –set persistence.storageClass=nfs-client
安装成功后,因为我是nodeport暴露出来的,所以可以通过浏览器去检查一下配置,例如这里我们暴露出来是32331端口可以访问,例如:

$ kubectl get svc -n kube-ops
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 10.43.178.128 <none> 9090:32331/TCP 2d4h

访问http://master机器IP:32331/targets,可以看到prometheus自己已经是成功起来了,我们也可以去http://master机器IP:32331/config页面看看配置项是否都正确
要启用或停用某些监控功能,可以修改lizhenwei-prometheus/valuse.yaml里的配置,修改成true或false


kube-state-metrics的安装

kube-state-metrics是用来收集k8s集群的CPU,内存等信息的收集器,这里我用的是v1.9.7版本。
使用我github上的helm进行安装:

helm install -n kube-ops prometheus lizhenwei-kube-state-metrics

要想验证部署kube-state-metrics之后,是否能成功使用,我们可以看prometheus的target页面是不是显示kube-state-metrics(X/X up) x为机器节点数量。
然后我们去graph页面看看,http://master机器IP:32331/graph。可以参考官网给的promql文档,输入几个语句试试

PromQL参考链接

https://github.com/kubernetes/kube-state-metrics/tree/master/docs

例如输入kube_configmap_info,点击execute会返回一些结果,如下图


K3S自带的CADVISOR

K3S自带kubelet ,而cadvisor已经集成在kubelet里了,prometheus可以通过配置找到本地安装的cadvisor,例如下列代码:

- job_name: 'cadvisor'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_node_name]
    regex: (.+)
    target_label: __metrics_path__
    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

接入prometheus的时候,可以根据以下链接,查看PromQL语句

PromQL参考链接

https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md


node-exportor的安装

这个使用官方网站给的一个公共库就可以了

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install node-exportor prometheus-community/prometheus-node-exporter

grafana参考链接https://grafana.com/grafana/dashboards/1860


postgres-exportor

下载代码https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-postgres-exporter 到机器上
修改valuse.yaml里的queries里的参数,在最后面加上

pg_stat_activity:
      query: |
        SELECT
          datname,
          SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change))::bigint)::float AS process_idle_seconds_sum,
          COUNT(*) AS process_idle_seconds_count
        FROM pg_stat_activity
        WHERE state = 'idle'
        GROUP BY datname
      metrics:
        - datname:
            usage: "LABEL"
            description: "datname"
        - process_idle_seconds:
            usage: "COUNTER"
            description: "Idle time of server processes"
        - process_idle_seconds_sum:
            usage: "GUAGE"
            description: "sum of Idle time of server processes"

在valuse.yaml文件的config.datasource部分添加我们的postgres超管用户信息。

helm安装语句

helm install -n kube-ops prometheus-postgres-exporter prometheus-postgres-exporter

Grafana导入dashboard

可以参考这位大神的github链接https://github.com/starsliao/Prometheus


页面截图

 


苏ICP备18047533号-2