-
Notifications
You must be signed in to change notification settings - Fork 0
Prometheus Agent 调研文档以及部署
Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具
Prometheus Agent Mode 是 Prometheus v2.32.0-beta.0 开始启用的新特性,Agent 模式允许 Prometheus 作为采集 Agent 采集指标记录,启用该模式会关闭查询、告警、本地存储等功能,与此同时我们还需要为 Agent 配置 Remote Write 接收其采集的输出,Prometheus 本身就可以提供此功能,也可以接入第三方的实现了该接口的服务(比如Thanos)
Agent Mode 是2021年11月发布的新特性,目前官网还没有具体的文档,仅有一篇官方博客可以参考
如果要在独立的 Prometheus 上配置 Agent 模式其实很简单,只需要定义一下 yaml 并apply即可,需要注意的是要提供 remote-write 的 url
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
labels:
app.kubernetes.io/name: prometheus
prometheus: agent
name: agent
namespace: openshift-monitoring
spec:
image: quay.io/prometheus/prometheus:v2.32.0-beta.0
containers:
- name: prometheus
args:
- '--config.file=/etc/prometheus/config_out/prometheus.env.yaml'
- '--storage.agent.path=/prometheus'
- '--enable-feature=agent'
- '--web.enable-lifecycle'
- url: http://prometheus-receiver:9090/api/v1/write
remoteTimeout: "5s"
replicas: 1
但是很遗憾,目前目前没法通过 prometheus-operator 来部署 Prometheus Agent ,原因是官方 prometheus-operator 尚未支持该特性,虽然贡献者称后续会开发(请见 issue)
尽管目前有一些比较 hack 的方法勉强使用(官方不推荐)但是又由于 helm 在加载配置的一些原因(请见 issue),没法将这个比较 hack 的方法应用到使用 helm 部署 Prometheus ,所以目前除非修改 prometheus-operator 源码重新编译,没有别的解决方法使用 Prometheus Agent,只能等prometheus-operator 更新,在github社区还是有挺多针对 Agent Mode 的 issue,官方也宣称会更新该特性
hack方法需要拉取 Kube-Prometheus 的代码并定制化后重新编译,不太适合线上部署,具体的文档如下:
在等待 prometheus-operator 更新的时候也还是有后备的过渡方案,其实 Agent Mode 的本质是关闭本地磁盘存储,关闭查询、告警等其他功能,只将采集到的东西发往配置好的 remote write endpoint,而普通模式的 Prometheus 也是支持的,所以我们可以在配置里手动把 alertmanager
、pushgateway
等其他部件关闭,并设定本地磁盘存储策略,缩短其保留时间(也就是过期时间),近似的让他成为一个“agent”
prometheus:
prometheusSpec:
# 配置remote write
remoteWrite:
# 注意这里要加上 http:// 否则会报错
- url: http://10.96.143.139:9090/prom-write
serviceMonitorSelectorNilUsesHelmValues: false
# 本地存储保留时间
retention: 30m
# 本地保留最大大小
retentionSize: 4GB
这么做的话,会保留规则计算的模块,但如果我们不配置告警规则的话,这方面的占用应该不会很高
完整的配置见附录,关于 Prometheus 官方的字段名称映射可以查看此文档
# 创建命名空间
kubectl create namespace agent
# helm一键发布(注意要带上命名空间)
helm install -f agent.yaml -n agent prometheus-opearter-stack ./
# 卸载发布也要带上命名空间
helm uninstall prometheus-opearter-stack -n agent
# 更新发布(如果变更了配置时)
helm upgrade prometheus-opearter-stack ./ -f agent.yaml -n agent
可以通过以下命令来查看日志以定位部署失败的原因:
kubectl logs -f prometheus-prometheus-opearter-stack-prometheus-0 -c prometheus -n agent --previous
agent.yaml
pushgateway:
enabled: false
grafana:
enabled: false
defaultRules:
create: false
alertmanager:
enabled: false
prometheusOperator:
kubeletService:
enabled: false
prometheus:
prometheusSpec:
remoteWrite:
- url: http://10.96.143.139:9090/prom-write
# 当前不支持,会报错,后续官方支持了以后会用到
# enableFeatures: ["agent"]
# AdditionalArgs:
# - name: '--storage.agent.path'
# value: /prometheus
# - name: '--enable-feature'
# value: agent
# - name: '--web.enable-lifecycle'
# value:
# - name: '--config.file'
# value: /etc/prometheus/config_out/prometheus.env.yaml
# - name: '--storage.tsdb.retention.time'
# value:
# - name: '--storage.tsdb.path'
# value:
# - name: '--storage.tsdb.wal-compression'
# value:
serviceMonitorSelectorNilUsesHelmValues: false
# 本地存储保留时间
retention: 30m
# 本地保留最大大小
retentionSize: 4GB
prometheus-node-exporter:
# enabled: false
kube-state-metrics:
# enabled: false
# image:
# repository: sea.hub:5000/kube-state-metrics/kube-state-metrics
# prometheus:
# monitor:
# enabled: false
kubelet:
## Enable scraping /metrics/cadvisor from kubelet's service
##
enabled: false
cAdvisor: false
kubeApiServer:
enabled: false
coreDns:
enabled: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
kubeProxy:
enabled: false
kubeScheduler:
enabled: false