文章目录
- @[toc]
- exporter 简介
- 常用的 exporter
- node-exporter 实践
- 创建 svc
- 创建 daemonset
- prometheus 配置服务发现
文章目录
- @[toc]
- exporter 简介
- 常用的 exporter
- node-exporter 实践
- 创建 svc
- 创建 daemonset
- prometheus 配置服务发现
exporter 简介
随着 Prometheus 的流行,很多系统都已经自带了用于 Prometheus 监控的接口,例如 etcd、Kubernetes、CoreDNS 等,所以这些系统可以直接被 Prometheus 所监控。
但是,有很多应用目前还没有提供用于 Prometheus 监控的接口(一些出现的比 Prometheus 还要早的应用),针对这这类应用,Prometheus 提出了 Exporter 的解决方案。
Exporter 是需要独立部署的服务
Exporter 是 Prometheus 的指标数据收集组件。它负责从目标 Jobs 收集数据,并把收集到的数据转换为 Prometheus 支持的时序数据格式。和传统的指标数据收集组件不同的是,他只负责收集,并不向 Server 端发送数据,而是等待 Prometheus Server 主动抓取
常用的 exporter
EXPORTERS AND INTEGRATIONS
- Elasticsearch exporter
- MySQL server exporter
- Kafka exporter
- Gluster exporter
- Ceph exporter
- Node/system metrics exporter
- Blackbox exporter
- kube-state-metrics
- cAdvisor
node-exporter 实践
- node-exporter 用于采集类 *NIX 内核的硬件以及系统指标
- windows exporter 用于采集 windows 系统指标
- dcgm-exporter 用于采集 NVIDIA GPU 指标
- 同 Prometheus,这里的 node-exporter 也是在 k8s 内部署的,部署的 node-exporter 版本是 v1.8.0
创建 svc
---
apiVersion: v1
kind: Service
metadata:annotations:labels:app: node-exportername: node-exporter-svcnamespace: monitor
spec:clusterIP: Noneports:- name: httpport: 9100protocol: TCPselector:app: node-exportertype: ClusterIP
创建 daemonset
要采集每个机器的指标,所以采用 daemonset 的方式来部署,保证有新增节点的时候,会自动启动 node-exporter
---
apiVersion: apps/v1
kind: DaemonSet
metadata:annotations:labels:app: node-exportername: node-exporternamespace: monitor
spec:selector:matchLabels:app: node-exportertemplate:metadata:labels:app: node-exporterannotations:prometheus.io/port: "9100"prometheus.io/scrape: "true"prometheus.io/type: "node_exporter"spec:hostNetwork: truehostPID: truehostIPC: truecontainers:- name: node-exporterimage: prom/node-exporter:v1.8.0args:- "--path.rootfs=/rootfs"ports:- containerPort: 9100hostPort: 9100name: httpvolumeMounts:- mountPath: /rootfsname: rootvolumes:- hostPath:path: /name: root
prometheus 配置服务发现
因为之前的 prometheus 配置文件只简单的配置了 prometheus 自身的 target,现在要增加一个关于 kubernetes 的服务发现,这样,如果后面有新增节点,也会被加入到 promethus 内
kubernetes_sd_config
global:scrape_interval: 30sevaluation_interval: 30sscrape_timeout: 10sexternal_labels:prometheus: monitor/k8s
rule_files:
- /etc/prometheus/rules/*.yml
scrape_configs:
- job_name: prometheusmetrics_path: '/metrics'static_configs:- targets: ['prometheus-svc.monitor.svc.cluster.local:9090']- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]action: replaceregex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2target_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_pod_name]action: replacetarget_label: kubernetes_pod_name
使用 reload 来刷新 prometheus 配置,下面的 ip 和端口要换成自己环境的
curl -XPOST http://192.168.11.167:31090/-/reload
再次查看 prometheus 的页面,可以发现 target 里面增加了每个节点的 node-exporter 了